@libp2p/crypto 4.1.9 → 5.0.0-18dd3cb26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +4 -5
- package/dist/src/ciphers/aes-gcm.browser.js +1 -1
- package/dist/src/ciphers/aes-gcm.browser.js.map +1 -1
- package/dist/src/ciphers/index.d.ts +2 -0
- package/dist/src/ciphers/index.d.ts.map +1 -0
- package/dist/src/ciphers/index.js +2 -0
- package/dist/src/ciphers/index.js.map +1 -0
- package/dist/src/errors.d.ts +19 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +28 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/hmac/{index-browser.d.ts → index.browser.d.ts} +1 -1
- package/dist/src/hmac/{index-browser.d.ts.map → index.browser.d.ts.map} +1 -1
- package/dist/src/hmac/{index-browser.js → index.browser.js} +2 -2
- package/dist/src/hmac/{index-browser.js.map → index.browser.js.map} +1 -1
- package/dist/src/keys/ecdh/index.browser.d.ts +4 -0
- package/dist/src/keys/ecdh/index.browser.d.ts.map +1 -0
- package/dist/src/keys/{ecdh-browser.js → ecdh/index.browser.js} +13 -11
- package/dist/src/keys/ecdh/index.browser.js.map +1 -0
- package/dist/src/keys/{ecdh.d.ts → ecdh/index.d.ts} +4 -3
- package/dist/src/keys/ecdh/index.d.ts.map +1 -0
- package/dist/src/keys/{ecdh.js → ecdh/index.js} +4 -4
- package/dist/src/keys/ecdh/index.js.map +1 -0
- package/dist/src/keys/ed25519/ed25519.d.ts +23 -0
- package/dist/src/keys/ed25519/ed25519.d.ts.map +1 -0
- package/dist/src/keys/ed25519/ed25519.js +54 -0
- package/dist/src/keys/ed25519/ed25519.js.map +1 -0
- package/dist/src/keys/{ed25519-browser.d.ts → ed25519/index.browser.d.ts} +2 -2
- package/dist/src/keys/ed25519/index.browser.d.ts.map +1 -0
- package/dist/src/keys/{ed25519-browser.js → ed25519/index.browser.js} +1 -1
- package/dist/src/keys/ed25519/index.browser.js.map +1 -0
- package/dist/src/keys/{ed25519.d.ts → ed25519/index.d.ts} +2 -2
- package/dist/src/keys/ed25519/index.d.ts.map +1 -0
- package/dist/src/keys/{ed25519.js → ed25519/index.js} +1 -1
- package/dist/src/keys/ed25519/index.js.map +1 -0
- package/dist/src/keys/ed25519/utils.d.ts +7 -0
- package/dist/src/keys/ed25519/utils.d.ts.map +1 -0
- package/dist/src/keys/ed25519/utils.js +36 -0
- package/dist/src/keys/ed25519/utils.js.map +1 -0
- package/dist/src/keys/ephemeral-keys.d.ts +2 -2
- package/dist/src/keys/ephemeral-keys.d.ts.map +1 -1
- package/dist/src/keys/ephemeral-keys.js +2 -2
- package/dist/src/keys/ephemeral-keys.js.map +1 -1
- package/dist/src/keys/index.d.ts +33 -36
- package/dist/src/keys/index.d.ts.map +1 -1
- package/dist/src/keys/index.js +93 -83
- package/dist/src/keys/index.js.map +1 -1
- package/dist/src/keys/key-stretcher.d.ts.map +1 -1
- package/dist/src/keys/key-stretcher.js +9 -7
- package/dist/src/keys/key-stretcher.js.map +1 -1
- package/dist/src/keys/keys.d.ts +4 -4
- package/dist/src/keys/keys.d.ts.map +1 -1
- package/dist/src/keys/keys.js +21 -15
- package/dist/src/keys/keys.js.map +1 -1
- package/dist/src/keys/rsa/index.browser.d.ts +11 -0
- package/dist/src/keys/rsa/index.browser.d.ts.map +1 -0
- package/dist/src/keys/{rsa-browser.js → rsa/index.browser.js} +10 -39
- package/dist/src/keys/rsa/index.browser.js.map +1 -0
- package/dist/src/keys/rsa/index.d.ts +11 -0
- package/dist/src/keys/rsa/index.d.ts.map +1 -0
- package/dist/src/keys/{rsa.js → rsa/index.js} +8 -22
- package/dist/src/keys/rsa/index.js.map +1 -0
- package/dist/src/keys/rsa/rsa.d.ts +28 -0
- package/dist/src/keys/rsa/rsa.d.ts.map +1 -0
- package/dist/src/keys/rsa/rsa.js +65 -0
- package/dist/src/keys/rsa/rsa.js.map +1 -0
- package/dist/src/keys/rsa/utils.d.ts +34 -0
- package/dist/src/keys/rsa/utils.d.ts.map +1 -0
- package/dist/src/keys/rsa/utils.js +193 -0
- package/dist/src/keys/rsa/utils.js.map +1 -0
- package/dist/src/keys/secp256k1/index.browser.d.ts +10 -0
- package/dist/src/keys/secp256k1/index.browser.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/index.browser.js +41 -0
- package/dist/src/keys/secp256k1/index.browser.js.map +1 -0
- package/dist/src/keys/secp256k1/index.d.ts +10 -0
- package/dist/src/keys/secp256k1/index.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/index.js +47 -0
- package/dist/src/keys/secp256k1/index.js.map +1 -0
- package/dist/src/keys/secp256k1/secp256k1.d.ts +24 -0
- package/dist/src/keys/secp256k1/secp256k1.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/secp256k1.js +53 -0
- package/dist/src/keys/secp256k1/secp256k1.js.map +1 -0
- package/dist/src/keys/secp256k1/utils.d.ts +13 -0
- package/dist/src/keys/secp256k1/utils.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/utils.js +53 -0
- package/dist/src/keys/secp256k1/utils.js.map +1 -0
- package/dist/src/pbkdf2.js +2 -2
- package/dist/src/pbkdf2.js.map +1 -1
- package/dist/src/random-bytes.js +2 -2
- package/dist/src/random-bytes.js.map +1 -1
- package/dist/src/webcrypto/index.d.ts +3 -0
- package/dist/src/webcrypto/index.d.ts.map +1 -0
- package/dist/src/webcrypto/index.js +3 -0
- package/dist/src/webcrypto/index.js.map +1 -0
- package/dist/src/{webcrypto-browser.d.ts → webcrypto/webcrypto.browser.d.ts} +1 -1
- package/dist/src/webcrypto/webcrypto.browser.d.ts.map +1 -0
- package/dist/src/{webcrypto-browser.js → webcrypto/webcrypto.browser.js} +4 -3
- package/dist/src/webcrypto/webcrypto.browser.js.map +1 -0
- package/dist/src/webcrypto/webcrypto.d.ts.map +1 -0
- package/dist/src/webcrypto/webcrypto.js.map +1 -0
- package/package.json +16 -8
- package/src/ciphers/aes-gcm.browser.ts +1 -1
- package/src/ciphers/index.ts +1 -0
- package/src/errors.ts +29 -0
- package/src/hmac/{index-browser.ts → index.browser.ts} +1 -1
- package/src/keys/{ecdh-browser.ts → ecdh/index.browser.ts} +16 -13
- package/src/keys/{ecdh.ts → ecdh/index.ts} +6 -4
- package/src/keys/ed25519/ed25519.ts +68 -0
- package/src/keys/{ed25519-browser.ts → ed25519/index.browser.ts} +1 -1
- package/src/keys/{ed25519.ts → ed25519/index.ts} +1 -1
- package/src/keys/ed25519/utils.ts +42 -0
- package/src/keys/ephemeral-keys.ts +2 -2
- package/src/keys/index.ts +110 -92
- package/src/keys/key-stretcher.ts +15 -8
- package/src/keys/keys.proto +1 -1
- package/src/keys/keys.ts +21 -16
- package/src/keys/{rsa-browser.ts → rsa/index.browser.ts} +10 -56
- package/src/keys/{rsa.ts → rsa/index.ts} +8 -23
- package/src/keys/rsa/rsa.ts +83 -0
- package/src/keys/rsa/utils.ts +235 -0
- package/src/keys/secp256k1/index.browser.ts +45 -0
- package/src/keys/secp256k1/index.ts +51 -0
- package/src/keys/secp256k1/secp256k1.ts +68 -0
- package/src/keys/secp256k1/utils.ts +63 -0
- package/src/pbkdf2.ts +2 -2
- package/src/random-bytes.ts +2 -2
- package/src/webcrypto/index.ts +3 -0
- package/src/webcrypto/webcrypto.browser.ts +23 -0
- package/dist/src/keys/ecdh-browser.d.ts +0 -3
- package/dist/src/keys/ecdh-browser.d.ts.map +0 -1
- package/dist/src/keys/ecdh-browser.js.map +0 -1
- package/dist/src/keys/ecdh.d.ts.map +0 -1
- package/dist/src/keys/ecdh.js.map +0 -1
- package/dist/src/keys/ed25519-browser.d.ts.map +0 -1
- package/dist/src/keys/ed25519-browser.js.map +0 -1
- package/dist/src/keys/ed25519-class.d.ts +0 -42
- package/dist/src/keys/ed25519-class.d.ts.map +0 -1
- package/dist/src/keys/ed25519-class.js +0 -133
- package/dist/src/keys/ed25519-class.js.map +0 -1
- package/dist/src/keys/ed25519.d.ts.map +0 -1
- package/dist/src/keys/ed25519.js.map +0 -1
- package/dist/src/keys/exporter.d.ts +0 -8
- package/dist/src/keys/exporter.d.ts.map +0 -1
- package/dist/src/keys/exporter.js +0 -13
- package/dist/src/keys/exporter.js.map +0 -1
- package/dist/src/keys/importer.d.ts +0 -7
- package/dist/src/keys/importer.d.ts.map +0 -1
- package/dist/src/keys/importer.js +0 -13
- package/dist/src/keys/importer.js.map +0 -1
- package/dist/src/keys/rsa-browser.d.ts +0 -12
- package/dist/src/keys/rsa-browser.d.ts.map +0 -1
- package/dist/src/keys/rsa-browser.js.map +0 -1
- package/dist/src/keys/rsa-class.d.ts +0 -46
- package/dist/src/keys/rsa-class.d.ts.map +0 -1
- package/dist/src/keys/rsa-class.js +0 -135
- package/dist/src/keys/rsa-class.js.map +0 -1
- package/dist/src/keys/rsa-utils.d.ts +0 -20
- package/dist/src/keys/rsa-utils.d.ts.map +0 -1
- package/dist/src/keys/rsa-utils.js +0 -330
- package/dist/src/keys/rsa-utils.js.map +0 -1
- package/dist/src/keys/rsa.d.ts +0 -12
- package/dist/src/keys/rsa.d.ts.map +0 -1
- package/dist/src/keys/rsa.js.map +0 -1
- package/dist/src/keys/secp256k1-browser.d.ts +0 -18
- package/dist/src/keys/secp256k1-browser.d.ts.map +0 -1
- package/dist/src/keys/secp256k1-browser.js +0 -78
- package/dist/src/keys/secp256k1-browser.js.map +0 -1
- package/dist/src/keys/secp256k1-class.d.ts +0 -39
- package/dist/src/keys/secp256k1-class.d.ts.map +0 -1
- package/dist/src/keys/secp256k1-class.js +0 -109
- package/dist/src/keys/secp256k1-class.js.map +0 -1
- package/dist/src/keys/secp256k1.d.ts +0 -18
- package/dist/src/keys/secp256k1.d.ts.map +0 -1
- package/dist/src/keys/secp256k1.js +0 -84
- package/dist/src/keys/secp256k1.js.map +0 -1
- package/dist/src/webcrypto-browser.d.ts.map +0 -1
- package/dist/src/webcrypto-browser.js.map +0 -1
- package/dist/src/webcrypto.d.ts.map +0 -1
- package/dist/src/webcrypto.js.map +0 -1
- package/dist/typedoc-urls.json +0 -40
- package/src/keys/ed25519-class.ts +0 -160
- package/src/keys/exporter.ts +0 -14
- package/src/keys/importer.ts +0 -13
- package/src/keys/rsa-class.ts +0 -172
- package/src/keys/rsa-utils.ts +0 -408
- package/src/keys/secp256k1-browser.ts +0 -87
- package/src/keys/secp256k1-class.ts +0 -133
- package/src/keys/secp256k1.ts +0 -93
- package/src/webcrypto-browser.ts +0 -24
- /package/dist/src/{webcrypto.d.ts → webcrypto/webcrypto.d.ts} +0 -0
- /package/dist/src/{webcrypto.js → webcrypto/webcrypto.js} +0 -0
- /package/src/{webcrypto.ts → webcrypto/webcrypto.ts} +0 -0
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface';
|
|
2
|
-
import { pbkdf2Async } from '@noble/hashes/pbkdf2';
|
|
3
|
-
import { sha512 } from '@noble/hashes/sha512';
|
|
4
|
-
import * as asn1js from 'asn1js';
|
|
5
|
-
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
6
|
-
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
7
|
-
import randomBytes from '../random-bytes.js';
|
|
8
|
-
import webcrypto from '../webcrypto.js';
|
|
9
|
-
import { unmarshalRsaPrivateKey } from './rsa-class.js';
|
|
10
|
-
/**
|
|
11
|
-
* Convert a PKCS#1 in ASN1 DER format to a JWK key
|
|
12
|
-
*/
|
|
13
|
-
export function pkcs1ToJwk(bytes) {
|
|
14
|
-
const { result } = asn1js.fromBER(bytes);
|
|
15
|
-
// @ts-expect-error this looks fragile but DER is a canonical format so we are
|
|
16
|
-
// safe to have deeply property chains like this
|
|
17
|
-
const values = result.valueBlock.value;
|
|
18
|
-
const key = {
|
|
19
|
-
n: uint8ArrayToString(bnToBuf(values[1].toBigInt()), 'base64url'),
|
|
20
|
-
e: uint8ArrayToString(bnToBuf(values[2].toBigInt()), 'base64url'),
|
|
21
|
-
d: uint8ArrayToString(bnToBuf(values[3].toBigInt()), 'base64url'),
|
|
22
|
-
p: uint8ArrayToString(bnToBuf(values[4].toBigInt()), 'base64url'),
|
|
23
|
-
q: uint8ArrayToString(bnToBuf(values[5].toBigInt()), 'base64url'),
|
|
24
|
-
dp: uint8ArrayToString(bnToBuf(values[6].toBigInt()), 'base64url'),
|
|
25
|
-
dq: uint8ArrayToString(bnToBuf(values[7].toBigInt()), 'base64url'),
|
|
26
|
-
qi: uint8ArrayToString(bnToBuf(values[8].toBigInt()), 'base64url'),
|
|
27
|
-
kty: 'RSA',
|
|
28
|
-
alg: 'RS256'
|
|
29
|
-
};
|
|
30
|
-
return key;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Convert a JWK key into PKCS#1 in ASN1 DER format
|
|
34
|
-
*/
|
|
35
|
-
export function jwkToPkcs1(jwk) {
|
|
36
|
-
if (jwk.n == null || jwk.e == null || jwk.d == null || jwk.p == null || jwk.q == null || jwk.dp == null || jwk.dq == null || jwk.qi == null) {
|
|
37
|
-
throw new CodeError('JWK was missing components', 'ERR_INVALID_PARAMETERS');
|
|
38
|
-
}
|
|
39
|
-
const root = new asn1js.Sequence({
|
|
40
|
-
value: [
|
|
41
|
-
new asn1js.Integer({ value: 0 }),
|
|
42
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
|
|
43
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url'))),
|
|
44
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.d, 'base64url'))),
|
|
45
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.p, 'base64url'))),
|
|
46
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.q, 'base64url'))),
|
|
47
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dp, 'base64url'))),
|
|
48
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dq, 'base64url'))),
|
|
49
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.qi, 'base64url')))
|
|
50
|
-
]
|
|
51
|
-
});
|
|
52
|
-
const der = root.toBER();
|
|
53
|
-
return new Uint8Array(der, 0, der.byteLength);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Convert a PKCIX in ASN1 DER format to a JWK key
|
|
57
|
-
*/
|
|
58
|
-
export function pkixToJwk(bytes) {
|
|
59
|
-
const { result } = asn1js.fromBER(bytes);
|
|
60
|
-
// @ts-expect-error this looks fragile but DER is a canonical format so we are
|
|
61
|
-
// safe to have deeply property chains like this
|
|
62
|
-
const values = result.valueBlock.value[1].valueBlock.value[0].valueBlock.value;
|
|
63
|
-
return {
|
|
64
|
-
kty: 'RSA',
|
|
65
|
-
n: uint8ArrayToString(bnToBuf(values[0].toBigInt()), 'base64url'),
|
|
66
|
-
e: uint8ArrayToString(bnToBuf(values[1].toBigInt()), 'base64url')
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Convert a JWK key to PKCIX in ASN1 DER format
|
|
71
|
-
*/
|
|
72
|
-
export function jwkToPkix(jwk) {
|
|
73
|
-
if (jwk.n == null || jwk.e == null) {
|
|
74
|
-
throw new CodeError('JWK was missing components', 'ERR_INVALID_PARAMETERS');
|
|
75
|
-
}
|
|
76
|
-
const root = new asn1js.Sequence({
|
|
77
|
-
value: [
|
|
78
|
-
new asn1js.Sequence({
|
|
79
|
-
value: [
|
|
80
|
-
// rsaEncryption
|
|
81
|
-
new asn1js.ObjectIdentifier({
|
|
82
|
-
value: '1.2.840.113549.1.1.1'
|
|
83
|
-
}),
|
|
84
|
-
new asn1js.Null()
|
|
85
|
-
]
|
|
86
|
-
}),
|
|
87
|
-
// this appears to be a bug in asn1js.js - this should really be a Sequence
|
|
88
|
-
// and not a BitString but it generates the same bytes as node-forge so 🤷♂️
|
|
89
|
-
new asn1js.BitString({
|
|
90
|
-
valueHex: new asn1js.Sequence({
|
|
91
|
-
value: [
|
|
92
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
|
|
93
|
-
asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url')))
|
|
94
|
-
]
|
|
95
|
-
}).toBER()
|
|
96
|
-
})
|
|
97
|
-
]
|
|
98
|
-
});
|
|
99
|
-
const der = root.toBER();
|
|
100
|
-
return new Uint8Array(der, 0, der.byteLength);
|
|
101
|
-
}
|
|
102
|
-
function bnToBuf(bn) {
|
|
103
|
-
let hex = bn.toString(16);
|
|
104
|
-
if (hex.length % 2 > 0) {
|
|
105
|
-
hex = `0${hex}`;
|
|
106
|
-
}
|
|
107
|
-
const len = hex.length / 2;
|
|
108
|
-
const u8 = new Uint8Array(len);
|
|
109
|
-
let i = 0;
|
|
110
|
-
let j = 0;
|
|
111
|
-
while (i < len) {
|
|
112
|
-
u8[i] = parseInt(hex.slice(j, j + 2), 16);
|
|
113
|
-
i += 1;
|
|
114
|
-
j += 2;
|
|
115
|
-
}
|
|
116
|
-
return u8;
|
|
117
|
-
}
|
|
118
|
-
function bufToBn(u8) {
|
|
119
|
-
const hex = [];
|
|
120
|
-
u8.forEach(function (i) {
|
|
121
|
-
let h = i.toString(16);
|
|
122
|
-
if (h.length % 2 > 0) {
|
|
123
|
-
h = `0${h}`;
|
|
124
|
-
}
|
|
125
|
-
hex.push(h);
|
|
126
|
-
});
|
|
127
|
-
return BigInt('0x' + hex.join(''));
|
|
128
|
-
}
|
|
129
|
-
const SALT_LENGTH = 16;
|
|
130
|
-
const KEY_SIZE = 32;
|
|
131
|
-
const ITERATIONS = 10000;
|
|
132
|
-
export async function exportToPem(privateKey, password) {
|
|
133
|
-
const crypto = webcrypto.get();
|
|
134
|
-
// PrivateKeyInfo
|
|
135
|
-
const keyWrapper = new asn1js.Sequence({
|
|
136
|
-
value: [
|
|
137
|
-
// version (0)
|
|
138
|
-
new asn1js.Integer({ value: 0 }),
|
|
139
|
-
// privateKeyAlgorithm
|
|
140
|
-
new asn1js.Sequence({
|
|
141
|
-
value: [
|
|
142
|
-
// rsaEncryption OID
|
|
143
|
-
new asn1js.ObjectIdentifier({
|
|
144
|
-
value: '1.2.840.113549.1.1.1'
|
|
145
|
-
}),
|
|
146
|
-
new asn1js.Null()
|
|
147
|
-
]
|
|
148
|
-
}),
|
|
149
|
-
// PrivateKey
|
|
150
|
-
new asn1js.OctetString({
|
|
151
|
-
valueHex: privateKey.marshal()
|
|
152
|
-
})
|
|
153
|
-
]
|
|
154
|
-
});
|
|
155
|
-
const keyBuf = keyWrapper.toBER();
|
|
156
|
-
const keyArr = new Uint8Array(keyBuf, 0, keyBuf.byteLength);
|
|
157
|
-
const salt = randomBytes(SALT_LENGTH);
|
|
158
|
-
const encryptionKey = await pbkdf2Async(sha512, password, salt, {
|
|
159
|
-
c: ITERATIONS,
|
|
160
|
-
dkLen: KEY_SIZE
|
|
161
|
-
});
|
|
162
|
-
const iv = randomBytes(16);
|
|
163
|
-
const cryptoKey = await crypto.subtle.importKey('raw', encryptionKey, 'AES-CBC', false, ['encrypt']);
|
|
164
|
-
const encrypted = await crypto.subtle.encrypt({
|
|
165
|
-
name: 'AES-CBC',
|
|
166
|
-
iv
|
|
167
|
-
}, cryptoKey, keyArr);
|
|
168
|
-
const pbkdf2Params = new asn1js.Sequence({
|
|
169
|
-
value: [
|
|
170
|
-
// salt
|
|
171
|
-
new asn1js.OctetString({ valueHex: salt }),
|
|
172
|
-
// iteration count
|
|
173
|
-
new asn1js.Integer({ value: ITERATIONS }),
|
|
174
|
-
// key length
|
|
175
|
-
new asn1js.Integer({ value: KEY_SIZE }),
|
|
176
|
-
// AlgorithmIdentifier
|
|
177
|
-
new asn1js.Sequence({
|
|
178
|
-
value: [
|
|
179
|
-
// hmacWithSHA512
|
|
180
|
-
new asn1js.ObjectIdentifier({ value: '1.2.840.113549.2.11' }),
|
|
181
|
-
new asn1js.Null()
|
|
182
|
-
]
|
|
183
|
-
})
|
|
184
|
-
]
|
|
185
|
-
});
|
|
186
|
-
const encryptionAlgorithm = new asn1js.Sequence({
|
|
187
|
-
value: [
|
|
188
|
-
// pkcs5PBES2
|
|
189
|
-
new asn1js.ObjectIdentifier({
|
|
190
|
-
value: '1.2.840.113549.1.5.13'
|
|
191
|
-
}),
|
|
192
|
-
new asn1js.Sequence({
|
|
193
|
-
value: [
|
|
194
|
-
// keyDerivationFunc
|
|
195
|
-
new asn1js.Sequence({
|
|
196
|
-
value: [
|
|
197
|
-
// pkcs5PBKDF2
|
|
198
|
-
new asn1js.ObjectIdentifier({
|
|
199
|
-
value: '1.2.840.113549.1.5.12'
|
|
200
|
-
}),
|
|
201
|
-
// PBKDF2-params
|
|
202
|
-
pbkdf2Params
|
|
203
|
-
]
|
|
204
|
-
}),
|
|
205
|
-
// encryptionScheme
|
|
206
|
-
new asn1js.Sequence({
|
|
207
|
-
value: [
|
|
208
|
-
// aes256-CBC
|
|
209
|
-
new asn1js.ObjectIdentifier({
|
|
210
|
-
value: '2.16.840.1.101.3.4.1.42'
|
|
211
|
-
}),
|
|
212
|
-
// iv
|
|
213
|
-
new asn1js.OctetString({
|
|
214
|
-
valueHex: iv
|
|
215
|
-
})
|
|
216
|
-
]
|
|
217
|
-
})
|
|
218
|
-
]
|
|
219
|
-
})
|
|
220
|
-
]
|
|
221
|
-
});
|
|
222
|
-
const finalWrapper = new asn1js.Sequence({
|
|
223
|
-
value: [
|
|
224
|
-
encryptionAlgorithm,
|
|
225
|
-
new asn1js.OctetString({ valueHex: encrypted })
|
|
226
|
-
]
|
|
227
|
-
});
|
|
228
|
-
const finalWrapperBuf = finalWrapper.toBER();
|
|
229
|
-
const finalWrapperArr = new Uint8Array(finalWrapperBuf, 0, finalWrapperBuf.byteLength);
|
|
230
|
-
return [
|
|
231
|
-
'-----BEGIN ENCRYPTED PRIVATE KEY-----',
|
|
232
|
-
...uint8ArrayToString(finalWrapperArr, 'base64pad').split(/(.{64})/).filter(Boolean),
|
|
233
|
-
'-----END ENCRYPTED PRIVATE KEY-----'
|
|
234
|
-
].join('\n');
|
|
235
|
-
}
|
|
236
|
-
export async function importFromPem(pem, password) {
|
|
237
|
-
const crypto = webcrypto.get();
|
|
238
|
-
let plaintext;
|
|
239
|
-
if (pem.includes('-----BEGIN ENCRYPTED PRIVATE KEY-----')) {
|
|
240
|
-
const key = uint8ArrayFromString(pem
|
|
241
|
-
.replace('-----BEGIN ENCRYPTED PRIVATE KEY-----', '')
|
|
242
|
-
.replace('-----END ENCRYPTED PRIVATE KEY-----', '')
|
|
243
|
-
.replace(/\n/g, '')
|
|
244
|
-
.trim(), 'base64pad');
|
|
245
|
-
const { result } = asn1js.fromBER(key);
|
|
246
|
-
const { iv, salt, iterations, keySize, cipherText } = findEncryptedPEMData(result);
|
|
247
|
-
const encryptionKey = await pbkdf2Async(sha512, password, salt, {
|
|
248
|
-
c: iterations,
|
|
249
|
-
dkLen: keySize
|
|
250
|
-
});
|
|
251
|
-
const cryptoKey = await crypto.subtle.importKey('raw', encryptionKey, 'AES-CBC', false, ['decrypt']);
|
|
252
|
-
const decrypted = toUint8Array(await crypto.subtle.decrypt({
|
|
253
|
-
name: 'AES-CBC',
|
|
254
|
-
iv
|
|
255
|
-
}, cryptoKey, cipherText));
|
|
256
|
-
const { result: decryptedResult } = asn1js.fromBER(decrypted);
|
|
257
|
-
plaintext = findPEMData(decryptedResult);
|
|
258
|
-
}
|
|
259
|
-
else if (pem.includes('-----BEGIN PRIVATE KEY-----')) {
|
|
260
|
-
const key = uint8ArrayFromString(pem
|
|
261
|
-
.replace('-----BEGIN PRIVATE KEY-----', '')
|
|
262
|
-
.replace('-----END PRIVATE KEY-----', '')
|
|
263
|
-
.replace(/\n/g, '')
|
|
264
|
-
.trim(), 'base64pad');
|
|
265
|
-
const { result } = asn1js.fromBER(key);
|
|
266
|
-
plaintext = findPEMData(result);
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
throw new CodeError('Could not parse private key from PEM data', 'ERR_INVALID_PARAMETERS');
|
|
270
|
-
}
|
|
271
|
-
return unmarshalRsaPrivateKey(plaintext);
|
|
272
|
-
}
|
|
273
|
-
function findEncryptedPEMData(root) {
|
|
274
|
-
const encryptionAlgorithm = root.valueBlock.value[0];
|
|
275
|
-
const scheme = encryptionAlgorithm.valueBlock.value[0].toString();
|
|
276
|
-
if (scheme !== 'OBJECT IDENTIFIER : 1.2.840.113549.1.5.13') {
|
|
277
|
-
throw new CodeError('Only pkcs5PBES2 encrypted private keys are supported', 'ERR_INVALID_PARAMS');
|
|
278
|
-
}
|
|
279
|
-
const keyDerivationFunc = encryptionAlgorithm.valueBlock.value[1].valueBlock.value[0];
|
|
280
|
-
const keyDerivationFuncName = keyDerivationFunc.valueBlock.value[0].toString();
|
|
281
|
-
if (keyDerivationFuncName !== 'OBJECT IDENTIFIER : 1.2.840.113549.1.5.12') {
|
|
282
|
-
throw new CodeError('Only pkcs5PBKDF2 key derivation functions are supported', 'ERR_INVALID_PARAMS');
|
|
283
|
-
}
|
|
284
|
-
const pbkdf2Params = keyDerivationFunc.valueBlock.value[1];
|
|
285
|
-
const salt = toUint8Array(pbkdf2Params.valueBlock.value[0].getValue());
|
|
286
|
-
let iterations = ITERATIONS;
|
|
287
|
-
let keySize = KEY_SIZE;
|
|
288
|
-
if (pbkdf2Params.valueBlock.value.length === 3) {
|
|
289
|
-
iterations = Number(pbkdf2Params.valueBlock.value[1].toBigInt());
|
|
290
|
-
keySize = Number((pbkdf2Params.valueBlock.value[2]).toBigInt());
|
|
291
|
-
}
|
|
292
|
-
else if (pbkdf2Params.valueBlock.value.length === 2) {
|
|
293
|
-
throw new CodeError('Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key', 'ERR_INVALID_PARAMS');
|
|
294
|
-
}
|
|
295
|
-
const encryptionScheme = encryptionAlgorithm.valueBlock.value[1].valueBlock.value[1];
|
|
296
|
-
const encryptionSchemeName = encryptionScheme.valueBlock.value[0].toString();
|
|
297
|
-
if (encryptionSchemeName === 'OBJECT IDENTIFIER : 1.2.840.113549.3.7') {
|
|
298
|
-
// des-EDE3-CBC
|
|
299
|
-
}
|
|
300
|
-
else if (encryptionSchemeName === 'OBJECT IDENTIFIER : 1.3.14.3.2.7') {
|
|
301
|
-
// des-CBC
|
|
302
|
-
}
|
|
303
|
-
else if (encryptionSchemeName === 'OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2') {
|
|
304
|
-
// aes128-CBC
|
|
305
|
-
}
|
|
306
|
-
else if (encryptionSchemeName === 'OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22') {
|
|
307
|
-
// aes192-CBC
|
|
308
|
-
}
|
|
309
|
-
else if (encryptionSchemeName === 'OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42') {
|
|
310
|
-
// aes256-CBC
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
throw new CodeError('Only AES-CBC encryption schemes are supported', 'ERR_INVALID_PARAMS');
|
|
314
|
-
}
|
|
315
|
-
const iv = toUint8Array(encryptionScheme.valueBlock.value[1].getValue());
|
|
316
|
-
return {
|
|
317
|
-
cipherText: toUint8Array(root.valueBlock.value[1].getValue()),
|
|
318
|
-
salt,
|
|
319
|
-
iterations,
|
|
320
|
-
keySize,
|
|
321
|
-
iv
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
function findPEMData(seq) {
|
|
325
|
-
return toUint8Array(seq.valueBlock.value[2].getValue());
|
|
326
|
-
}
|
|
327
|
-
function toUint8Array(buf) {
|
|
328
|
-
return new Uint8Array(buf, 0, buf.byteLength);
|
|
329
|
-
}
|
|
330
|
-
//# sourceMappingURL=rsa-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rsa-utils.js","sourceRoot":"","sources":["../../../src/keys/rsa-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAsB,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE3E;;GAEG;AACH,MAAM,UAAU,UAAU,CAAE,KAAiB;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAExC,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,MAAM,GAAqB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAA;IAExD,MAAM,GAAG,GAAG;QACV,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QACjE,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QACjE,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QACjE,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QACjE,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QACjE,EAAE,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QAClE,EAAE,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QAClE,EAAE,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QAClE,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,OAAO;KACb,CAAA;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAE,GAAe;IACzC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5I,MAAM,IAAI,SAAS,CAAC,4BAA4B,EAAE,wBAAwB,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QAC/B,KAAK,EAAE;YACL,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;SAC9E;KACF,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;IAExB,OAAO,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAE,KAAiB;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAExC,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,MAAM,GAAqB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAA;IAEhG,OAAO;QACL,GAAG,EAAE,KAAK;QACV,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;QACjE,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC;KAClE,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAE,GAAe;IACxC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,SAAS,CAAC,4BAA4B,EAAE,wBAAwB,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QAC/B,KAAK,EAAE;YACL,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAClB,KAAK,EAAE;oBACL,gBAAgB;oBAChB,IAAI,MAAM,CAAC,gBAAgB,CAAC;wBAC1B,KAAK,EAAE,sBAAsB;qBAC9B,CAAC;oBACF,IAAI,MAAM,CAAC,IAAI,EAAE;iBAClB;aACF,CAAC;YACF,2EAA2E;YAC3E,6EAA6E;YAC7E,IAAI,MAAM,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC;oBAC5B,KAAK,EAAE;wBACL,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;wBAC5E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;qBAC7E;iBACF,CAAC,CAAC,KAAK,EAAE;aACX,CAAC;SACH;KACF,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;IAExB,OAAO,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,OAAO,CAAE,EAAU;IAC1B,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEzB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;IAC1B,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IAE9B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,CAAC,GAAG,CAAC,CAAA;IAET,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACf,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACzC,CAAC,IAAI,CAAC,CAAA;QACN,CAAC,IAAI,CAAC,CAAA;IACR,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,OAAO,CAAE,EAAc;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAA;IAExB,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAEtB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;QACb,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,WAAW,GAAG,EAAE,CAAA;AACtB,MAAM,QAAQ,GAAG,EAAE,CAAA;AACnB,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,UAAyB,EAAE,QAAgB;IAC5E,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAA;IAE9B,iBAAiB;IACjB,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QACrC,KAAK,EAAE;YACL,cAAc;YACd,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAEhC,sBAAsB;YACtB,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAClB,KAAK,EAAE;oBACP,oBAAoB;oBAClB,IAAI,MAAM,CAAC,gBAAgB,CAAC;wBAC1B,KAAK,EAAE,sBAAsB;qBAC9B,CAAC;oBACF,IAAI,MAAM,CAAC,IAAI,EAAE;iBAClB;aACF,CAAC;YAEF,aAAa;YACb,IAAI,MAAM,CAAC,WAAW,CAAC;gBACrB,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE;aAC/B,CAAC;SACH;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAA;IACjC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IAErC,MAAM,aAAa,GAAG,MAAM,WAAW,CACrC,MAAM,EACN,QAAQ,EACR,IAAI,EAAE;QACJ,CAAC,EAAE,UAAU;QACb,KAAK,EAAE,QAAQ;KAChB,CACF,CAAA;IAED,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;IAC1B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IACpG,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC5C,IAAI,EAAE,SAAS;QACf,EAAE;KACH,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAErB,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE;YACL,OAAO;YACP,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAE1C,kBAAkB;YAClB,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;YAEzC,aAAa;YACb,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAEvC,sBAAsB;YACtB,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAClB,KAAK,EAAE;oBACL,iBAAiB;oBACjB,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;oBAC7D,IAAI,MAAM,CAAC,IAAI,EAAE;iBAClB;aACF,CAAC;SACH;KACF,CAAC,CAAA;IAEF,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QAC9C,KAAK,EAAE;YACL,aAAa;YACb,IAAI,MAAM,CAAC,gBAAgB,CAAC;gBAC1B,KAAK,EAAE,uBAAuB;aAC/B,CAAC;YACF,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAClB,KAAK,EAAE;oBACL,oBAAoB;oBACpB,IAAI,MAAM,CAAC,QAAQ,CAAC;wBAClB,KAAK,EAAE;4BACL,cAAc;4BACd,IAAI,MAAM,CAAC,gBAAgB,CAAC;gCAC1B,KAAK,EAAE,uBAAuB;6BAC/B,CAAC;4BACF,gBAAgB;4BAChB,YAAY;yBACb;qBACF,CAAC;oBAEF,mBAAmB;oBACnB,IAAI,MAAM,CAAC,QAAQ,CAAC;wBAClB,KAAK,EAAE;4BACL,aAAa;4BACb,IAAI,MAAM,CAAC,gBAAgB,CAAC;gCAC1B,KAAK,EAAE,yBAAyB;6BACjC,CAAC;4BACF,KAAK;4BACL,IAAI,MAAM,CAAC,WAAW,CAAC;gCACrB,QAAQ,EAAE,EAAE;6BACb,CAAC;yBACH;qBACF,CAAC;iBACH;aACF,CAAC;SACH;KACF,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE;YACL,mBAAmB;YACnB,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;SAChD;KACF,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,CAAA;IAC5C,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAA;IAEtF,OAAO;QACL,uCAAuC;QACvC,GAAG,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACpF,qCAAqC;KACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,GAAW,EAAE,QAAgB;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAA;IAC9B,IAAI,SAAqB,CAAA;IAEzB,IAAI,GAAG,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,oBAAoB,CAC9B,GAAG;aACA,OAAO,CAAC,uCAAuC,EAAE,EAAE,CAAC;aACpD,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC;aAClD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;aAClB,IAAI,EAAE,EACT,WAAW,CACZ,CAAA;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAEtC,MAAM,EACJ,EAAE,EACF,IAAI,EACJ,UAAU,EACV,OAAO,EACP,UAAU,EACX,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAEhC,MAAM,aAAa,GAAG,MAAM,WAAW,CACrC,MAAM,EACN,QAAQ,EACR,IAAI,EAAE;YACJ,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,OAAO;SACf,CACF,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;QACpG,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACzD,IAAI,EAAE,SAAS;YACf,EAAE;SACH,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;QAE1B,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC7D,SAAS,GAAG,WAAW,CAAC,eAAe,CAAC,CAAA;IAC1C,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,oBAAoB,CAC9B,GAAG;aACA,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;aAC1C,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;aACxC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;aAClB,IAAI,EAAE,EACT,WAAW,CACZ,CAAA;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAEtC,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,SAAS,CAAC,2CAA2C,EAAE,wBAAwB,CAAC,CAAA;IAC5F,CAAC;IAED,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAE,IAAS;IACtC,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAEjE,IAAI,MAAM,KAAK,2CAA2C,EAAE,CAAC;QAC3D,MAAM,IAAI,SAAS,CAAC,sDAAsD,EAAE,oBAAoB,CAAC,CAAA;IACnG,CAAC;IAED,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACrF,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAE9E,IAAI,qBAAqB,KAAK,2CAA2C,EAAE,CAAC;QAC1E,MAAM,IAAI,SAAS,CAAC,yDAAyD,EAAE,oBAAoB,CAAC,CAAA;IACtG,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE1D,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEtE,IAAI,UAAU,GAAG,UAAU,CAAA;IAC3B,IAAI,OAAO,GAAG,QAAQ,CAAA;IAEtB,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,UAAU,GAAG,MAAM,CAAE,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAoB,CAAC,QAAQ,EAAE,CAAC,CAAA;QACpF,OAAO,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjE,CAAC;SAAM,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,uGAAuG,EAAE,oBAAoB,CAAC,CAAA;IACpJ,CAAC;IAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpF,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAE5E,IAAI,oBAAoB,KAAK,wCAAwC,EAAE,CAAC;QACtE,eAAe;IACjB,CAAC;SAAM,IAAI,oBAAoB,KAAK,kCAAkC,EAAE,CAAC;QACvE,UAAU;IACZ,CAAC;SAAM,IAAI,oBAAoB,KAAK,4CAA4C,EAAE,CAAC;QACjF,aAAa;IACf,CAAC;SAAM,IAAI,oBAAoB,KAAK,6CAA6C,EAAE,CAAC;QAClF,aAAa;IACf,CAAC;SAAM,IAAI,oBAAoB,KAAK,6CAA6C,EAAE,CAAC;QAClF,aAAa;IACf,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,SAAS,CAAC,+CAA+C,EAAE,oBAAoB,CAAC,CAAA;IAC5F,CAAC;IAED,MAAM,EAAE,GAAG,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAExE,OAAO;QACL,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7D,IAAI;QACJ,UAAU;QACV,OAAO;QACP,EAAE;KACH,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAE,GAAQ;IAC5B,OAAO,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,YAAY,CAAE,GAAgB;IACrC,OAAO,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AAC/C,CAAC"}
|
package/dist/src/keys/rsa.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import randomBytes from '../random-bytes.js';
|
|
2
|
-
import * as utils from './rsa-utils.js';
|
|
3
|
-
import type { JWKKeyPair } from './interface.js';
|
|
4
|
-
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
5
|
-
export { utils };
|
|
6
|
-
export declare function generateKey(bits: number): Promise<JWKKeyPair>;
|
|
7
|
-
export declare function unmarshalPrivateKey(key: JsonWebKey): Promise<JWKKeyPair>;
|
|
8
|
-
export { randomBytes as getRandomValues };
|
|
9
|
-
export declare function hashAndSign(key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array>;
|
|
10
|
-
export declare function hashAndVerify(key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean>;
|
|
11
|
-
export declare function keySize(jwk: JsonWebKey): number;
|
|
12
|
-
//# sourceMappingURL=rsa.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa.ts"],"names":[],"mappings":"AAIA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAIpD,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,wBAAsB,WAAW,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAcpE;AAGD,wBAAsB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAY/E;AAED,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,CAAA;AAEzC,wBAAsB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAazG;AAED,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAazH;AAED,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAQhD"}
|
package/dist/src/keys/rsa.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../../src/keys/rsa.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
2
|
-
declare const PRIVATE_KEY_BYTE_LENGTH = 32;
|
|
3
|
-
export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
|
|
4
|
-
export declare function generateKey(): Uint8Array;
|
|
5
|
-
/**
|
|
6
|
-
* Hash and sign message with private key
|
|
7
|
-
*/
|
|
8
|
-
export declare function hashAndSign(key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
|
|
9
|
-
/**
|
|
10
|
-
* Hash message and verify signature with public key
|
|
11
|
-
*/
|
|
12
|
-
export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean | Promise<boolean>;
|
|
13
|
-
export declare function compressPublicKey(key: Uint8Array): Uint8Array;
|
|
14
|
-
export declare function decompressPublicKey(key: Uint8Array): Uint8Array;
|
|
15
|
-
export declare function validatePrivateKey(key: Uint8Array): void;
|
|
16
|
-
export declare function validatePublicKey(key: Uint8Array): void;
|
|
17
|
-
export declare function computePublicKey(privateKey: Uint8Array): Uint8Array;
|
|
18
|
-
//# sourceMappingURL=secp256k1-browser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secp256k1-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/secp256k1-browser.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,WAAW,IAAK,UAAU,CAEzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAehH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAe7H;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAG9D;AAED,wBAAgB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAGhE;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAMzD;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAMxD;AAED,wBAAgB,gBAAgB,CAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAMpE"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface';
|
|
2
|
-
import { secp256k1 as secp } from '@noble/curves/secp256k1';
|
|
3
|
-
import { sha256 } from 'multiformats/hashes/sha2';
|
|
4
|
-
import { isPromise } from '../util.js';
|
|
5
|
-
const PRIVATE_KEY_BYTE_LENGTH = 32;
|
|
6
|
-
export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
|
|
7
|
-
export function generateKey() {
|
|
8
|
-
return secp.utils.randomPrivateKey();
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Hash and sign message with private key
|
|
12
|
-
*/
|
|
13
|
-
export function hashAndSign(key, msg) {
|
|
14
|
-
const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray());
|
|
15
|
-
if (isPromise(p)) {
|
|
16
|
-
return p.then(({ digest }) => secp.sign(digest, key).toDERRawBytes())
|
|
17
|
-
.catch(err => {
|
|
18
|
-
throw new CodeError(String(err), 'ERR_INVALID_INPUT');
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
try {
|
|
22
|
-
return secp.sign(p.digest, key).toDERRawBytes();
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
throw new CodeError(String(err), 'ERR_INVALID_INPUT');
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Hash message and verify signature with public key
|
|
30
|
-
*/
|
|
31
|
-
export function hashAndVerify(key, sig, msg) {
|
|
32
|
-
const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray());
|
|
33
|
-
if (isPromise(p)) {
|
|
34
|
-
return p.then(({ digest }) => secp.verify(sig, digest, key))
|
|
35
|
-
.catch(err => {
|
|
36
|
-
throw new CodeError(String(err), 'ERR_INVALID_INPUT');
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
return secp.verify(sig, p.digest, key);
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
throw new CodeError(String(err), 'ERR_INVALID_INPUT');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export function compressPublicKey(key) {
|
|
47
|
-
const point = secp.ProjectivePoint.fromHex(key).toRawBytes(true);
|
|
48
|
-
return point;
|
|
49
|
-
}
|
|
50
|
-
export function decompressPublicKey(key) {
|
|
51
|
-
const point = secp.ProjectivePoint.fromHex(key).toRawBytes(false);
|
|
52
|
-
return point;
|
|
53
|
-
}
|
|
54
|
-
export function validatePrivateKey(key) {
|
|
55
|
-
try {
|
|
56
|
-
secp.getPublicKey(key, true);
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
throw new CodeError(String(err), 'ERR_INVALID_PRIVATE_KEY');
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
export function validatePublicKey(key) {
|
|
63
|
-
try {
|
|
64
|
-
secp.ProjectivePoint.fromHex(key);
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
throw new CodeError(String(err), 'ERR_INVALID_PUBLIC_KEY');
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
export function computePublicKey(privateKey) {
|
|
71
|
-
try {
|
|
72
|
-
return secp.getPublicKey(privateKey, true);
|
|
73
|
-
}
|
|
74
|
-
catch (err) {
|
|
75
|
-
throw new CodeError(String(err), 'ERR_INVALID_PRIVATE_KEY');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=secp256k1-browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secp256k1-browser.js","sourceRoot":"","sources":["../../../src/keys/secp256k1-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { PublicKey, PrivateKey } from '@libp2p/interface';
|
|
2
|
-
import type { Multibase } from 'multiformats';
|
|
3
|
-
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
4
|
-
export declare class Secp256k1PublicKey implements PublicKey<'secp256k1'> {
|
|
5
|
-
private readonly _key;
|
|
6
|
-
constructor(key: Uint8Array);
|
|
7
|
-
verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean;
|
|
8
|
-
marshal(): Uint8Array;
|
|
9
|
-
get bytes(): Uint8Array;
|
|
10
|
-
equals(key: any): boolean;
|
|
11
|
-
hash(): Promise<Uint8Array>;
|
|
12
|
-
}
|
|
13
|
-
export declare class Secp256k1PrivateKey implements PrivateKey<'secp256k1'> {
|
|
14
|
-
private readonly _key;
|
|
15
|
-
private readonly _publicKey;
|
|
16
|
-
constructor(key: Uint8Array, publicKey?: Uint8Array);
|
|
17
|
-
sign(message: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
|
|
18
|
-
get public(): Secp256k1PublicKey;
|
|
19
|
-
marshal(): Uint8Array;
|
|
20
|
-
get bytes(): Uint8Array;
|
|
21
|
-
equals(key: any): boolean;
|
|
22
|
-
hash(): Uint8Array | Promise<Uint8Array>;
|
|
23
|
-
/**
|
|
24
|
-
* Gets the ID of the key.
|
|
25
|
-
*
|
|
26
|
-
* The key id is the base58 encoding of the SHA-256 multihash of its public key.
|
|
27
|
-
* The public key is a protobuf encoding containing a type and the DER encoding
|
|
28
|
-
* of the PKCS SubjectPublicKeyInfo.
|
|
29
|
-
*/
|
|
30
|
-
id(): Promise<string>;
|
|
31
|
-
/**
|
|
32
|
-
* Exports the key into a password protected `format`
|
|
33
|
-
*/
|
|
34
|
-
export(password: string, format?: string): Promise<Multibase<'m'>>;
|
|
35
|
-
}
|
|
36
|
-
export declare function unmarshalSecp256k1PrivateKey(bytes: Uint8Array): Secp256k1PrivateKey;
|
|
37
|
-
export declare function unmarshalSecp256k1PublicKey(bytes: Uint8Array): Secp256k1PublicKey;
|
|
38
|
-
export declare function generateKeyPair(): Promise<Secp256k1PrivateKey>;
|
|
39
|
-
//# sourceMappingURL=secp256k1-class.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secp256k1-class.d.ts","sourceRoot":"","sources":["../../../src/keys/secp256k1-class.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,kBAAmB,YAAW,SAAS,CAAC,WAAW,CAAC;IAC/D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAEpB,GAAG,EAAE,UAAU;IAK5B,MAAM,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO;IAIpE,OAAO,IAAK,UAAU;IAItB,IAAI,KAAK,IAAK,UAAU,CAKvB;IAED,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAIpB,IAAI,IAAK,OAAO,CAAC,UAAU,CAAC;CAYnC;AAED,qBAAa,mBAAoB,YAAW,UAAU,CAAC,WAAW,CAAC;IACjE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE1B,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU;IAOpD,IAAI,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAI7E,IAAI,MAAM,IAAK,kBAAkB,CAEhC;IAED,OAAO,IAAK,UAAU;IAItB,IAAI,KAAK,IAAK,UAAU,CAKvB;IAED,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAI1B,IAAI,IAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAUzC;;;;;;OAMG;IACG,EAAE,IAAK,OAAO,CAAC,MAAM,CAAC;IAK5B;;OAEG;IACG,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAe,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CAOhF;AAED,wBAAgB,4BAA4B,CAAE,KAAK,EAAE,UAAU,GAAG,mBAAmB,CAEpF;AAED,wBAAgB,2BAA2B,CAAE,KAAK,EAAE,UAAU,GAAG,kBAAkB,CAElF;AAED,wBAAsB,eAAe,IAAK,OAAO,CAAC,mBAAmB,CAAC,CAGrE"}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface';
|
|
2
|
-
import { sha256 } from 'multiformats/hashes/sha2';
|
|
3
|
-
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
4
|
-
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
5
|
-
import { isPromise } from '../util.js';
|
|
6
|
-
import { exporter } from './exporter.js';
|
|
7
|
-
import * as keysProtobuf from './keys.js';
|
|
8
|
-
import * as crypto from './secp256k1.js';
|
|
9
|
-
export class Secp256k1PublicKey {
|
|
10
|
-
_key;
|
|
11
|
-
constructor(key) {
|
|
12
|
-
crypto.validatePublicKey(key);
|
|
13
|
-
this._key = key;
|
|
14
|
-
}
|
|
15
|
-
verify(data, sig) {
|
|
16
|
-
return crypto.hashAndVerify(this._key, sig, data);
|
|
17
|
-
}
|
|
18
|
-
marshal() {
|
|
19
|
-
return crypto.compressPublicKey(this._key);
|
|
20
|
-
}
|
|
21
|
-
get bytes() {
|
|
22
|
-
return keysProtobuf.PublicKey.encode({
|
|
23
|
-
Type: keysProtobuf.KeyType.Secp256k1,
|
|
24
|
-
Data: this.marshal()
|
|
25
|
-
}).subarray();
|
|
26
|
-
}
|
|
27
|
-
equals(key) {
|
|
28
|
-
return uint8ArrayEquals(this.bytes, key.bytes);
|
|
29
|
-
}
|
|
30
|
-
async hash() {
|
|
31
|
-
const p = sha256.digest(this.bytes);
|
|
32
|
-
let bytes;
|
|
33
|
-
if (isPromise(p)) {
|
|
34
|
-
({ bytes } = await p);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
bytes = p.bytes;
|
|
38
|
-
}
|
|
39
|
-
return bytes;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export class Secp256k1PrivateKey {
|
|
43
|
-
_key;
|
|
44
|
-
_publicKey;
|
|
45
|
-
constructor(key, publicKey) {
|
|
46
|
-
this._key = key;
|
|
47
|
-
this._publicKey = publicKey ?? crypto.computePublicKey(key);
|
|
48
|
-
crypto.validatePrivateKey(this._key);
|
|
49
|
-
crypto.validatePublicKey(this._publicKey);
|
|
50
|
-
}
|
|
51
|
-
sign(message) {
|
|
52
|
-
return crypto.hashAndSign(this._key, message);
|
|
53
|
-
}
|
|
54
|
-
get public() {
|
|
55
|
-
return new Secp256k1PublicKey(this._publicKey);
|
|
56
|
-
}
|
|
57
|
-
marshal() {
|
|
58
|
-
return this._key;
|
|
59
|
-
}
|
|
60
|
-
get bytes() {
|
|
61
|
-
return keysProtobuf.PrivateKey.encode({
|
|
62
|
-
Type: keysProtobuf.KeyType.Secp256k1,
|
|
63
|
-
Data: this.marshal()
|
|
64
|
-
}).subarray();
|
|
65
|
-
}
|
|
66
|
-
equals(key) {
|
|
67
|
-
return uint8ArrayEquals(this.bytes, key.bytes);
|
|
68
|
-
}
|
|
69
|
-
hash() {
|
|
70
|
-
const p = sha256.digest(this.bytes);
|
|
71
|
-
if (isPromise(p)) {
|
|
72
|
-
return p.then(({ bytes }) => bytes);
|
|
73
|
-
}
|
|
74
|
-
return p.bytes;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Gets the ID of the key.
|
|
78
|
-
*
|
|
79
|
-
* The key id is the base58 encoding of the SHA-256 multihash of its public key.
|
|
80
|
-
* The public key is a protobuf encoding containing a type and the DER encoding
|
|
81
|
-
* of the PKCS SubjectPublicKeyInfo.
|
|
82
|
-
*/
|
|
83
|
-
async id() {
|
|
84
|
-
const hash = await this.public.hash();
|
|
85
|
-
return uint8ArrayToString(hash, 'base58btc');
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Exports the key into a password protected `format`
|
|
89
|
-
*/
|
|
90
|
-
async export(password, format = 'libp2p-key') {
|
|
91
|
-
if (format === 'libp2p-key') {
|
|
92
|
-
return exporter(this.bytes, password);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
throw new CodeError(`export format '${format}' is not supported`, 'ERR_INVALID_EXPORT_FORMAT');
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export function unmarshalSecp256k1PrivateKey(bytes) {
|
|
100
|
-
return new Secp256k1PrivateKey(bytes);
|
|
101
|
-
}
|
|
102
|
-
export function unmarshalSecp256k1PublicKey(bytes) {
|
|
103
|
-
return new Secp256k1PublicKey(bytes);
|
|
104
|
-
}
|
|
105
|
-
export async function generateKeyPair() {
|
|
106
|
-
const privateKeyBytes = crypto.generateKey();
|
|
107
|
-
return new Secp256k1PrivateKey(privateKeyBytes);
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=secp256k1-class.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secp256k1-class.js","sourceRoot":"","sources":["../../../src/keys/secp256k1-class.ts"],"names":[],"mappings":"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"}
|