@libp2p/crypto 3.0.4-ee7ffe9b9 → 4.0.0

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.
Files changed (81) hide show
  1. package/dist/index.min.js +72 -14
  2. package/dist/src/index.d.ts +0 -2
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +0 -2
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/keys/ed25519-browser.d.ts +1 -1
  7. package/dist/src/keys/ed25519-browser.d.ts.map +1 -1
  8. package/dist/src/keys/index.d.ts +4 -2
  9. package/dist/src/keys/index.d.ts.map +1 -1
  10. package/dist/src/keys/index.js +7 -12
  11. package/dist/src/keys/index.js.map +1 -1
  12. package/dist/src/keys/rsa-browser.d.ts +0 -2
  13. package/dist/src/keys/rsa-browser.d.ts.map +1 -1
  14. package/dist/src/keys/rsa-browser.js +0 -25
  15. package/dist/src/keys/rsa-browser.js.map +1 -1
  16. package/dist/src/keys/rsa-class.d.ts +6 -5
  17. package/dist/src/keys/rsa-class.d.ts.map +1 -1
  18. package/dist/src/keys/rsa-class.js +11 -25
  19. package/dist/src/keys/rsa-class.js.map +1 -1
  20. package/dist/src/keys/rsa-utils.d.ts +15 -2
  21. package/dist/src/keys/rsa-utils.d.ts.map +1 -1
  22. package/dist/src/keys/rsa-utils.js +304 -39
  23. package/dist/src/keys/rsa-utils.js.map +1 -1
  24. package/dist/src/keys/rsa.d.ts +0 -2
  25. package/dist/src/keys/rsa.d.ts.map +1 -1
  26. package/dist/src/keys/rsa.js +2 -22
  27. package/dist/src/keys/rsa.js.map +1 -1
  28. package/dist/src/pbkdf2.d.ts +1 -1
  29. package/dist/src/pbkdf2.d.ts.map +1 -1
  30. package/dist/src/pbkdf2.js +14 -10
  31. package/dist/src/pbkdf2.js.map +1 -1
  32. package/dist/src/util.d.ts +0 -7
  33. package/dist/src/util.d.ts.map +1 -1
  34. package/dist/src/util.js +0 -25
  35. package/dist/src/util.js.map +1 -1
  36. package/dist/src/webcrypto-browser.d.ts +5 -0
  37. package/dist/src/webcrypto-browser.d.ts.map +1 -0
  38. package/dist/src/webcrypto-browser.js +17 -0
  39. package/dist/src/webcrypto-browser.js.map +1 -0
  40. package/dist/src/webcrypto.d.ts +3 -1
  41. package/dist/src/webcrypto.d.ts.map +1 -1
  42. package/dist/src/webcrypto.js +4 -11
  43. package/dist/src/webcrypto.js.map +1 -1
  44. package/dist/typedoc-urls.json +42 -0
  45. package/package.json +8 -15
  46. package/src/index.ts +0 -2
  47. package/src/keys/ed25519-browser.ts +1 -1
  48. package/src/keys/index.ts +10 -12
  49. package/src/keys/rsa-browser.ts +0 -29
  50. package/src/keys/rsa-class.ts +11 -28
  51. package/src/keys/rsa-utils.ts +373 -39
  52. package/src/keys/rsa.ts +2 -23
  53. package/src/pbkdf2.ts +17 -15
  54. package/src/util.ts +0 -29
  55. package/src/webcrypto-browser.ts +24 -0
  56. package/src/webcrypto.ts +5 -18
  57. package/dist/src/aes/cipher-mode.d.ts +0 -2
  58. package/dist/src/aes/cipher-mode.d.ts.map +0 -1
  59. package/dist/src/aes/cipher-mode.js +0 -13
  60. package/dist/src/aes/cipher-mode.js.map +0 -1
  61. package/dist/src/aes/ciphers-browser.d.ts +0 -7
  62. package/dist/src/aes/ciphers-browser.d.ts.map +0 -1
  63. package/dist/src/aes/ciphers-browser.js +0 -26
  64. package/dist/src/aes/ciphers-browser.js.map +0 -1
  65. package/dist/src/aes/ciphers.d.ts +0 -5
  66. package/dist/src/aes/ciphers.d.ts.map +0 -1
  67. package/dist/src/aes/ciphers.js +0 -4
  68. package/dist/src/aes/ciphers.js.map +0 -1
  69. package/dist/src/aes/index.d.ts +0 -50
  70. package/dist/src/aes/index.d.ts.map +0 -1
  71. package/dist/src/aes/index.js +0 -61
  72. package/dist/src/aes/index.js.map +0 -1
  73. package/dist/src/keys/jwk2pem.d.ts +0 -8
  74. package/dist/src/keys/jwk2pem.d.ts.map +0 -1
  75. package/dist/src/keys/jwk2pem.js +0 -14
  76. package/dist/src/keys/jwk2pem.js.map +0 -1
  77. package/src/aes/cipher-mode.ts +0 -15
  78. package/src/aes/ciphers-browser.ts +0 -31
  79. package/src/aes/ciphers.ts +0 -4
  80. package/src/aes/index.ts +0 -70
  81. package/src/keys/jwk2pem.ts +0 -21
@@ -1,65 +1,330 @@
1
- import 'node-forge/lib/asn1.js';
2
- import 'node-forge/lib/rsa.js';
3
1
  import { CodeError } from '@libp2p/interface';
4
- // @ts-expect-error types are missing
5
- import forge from 'node-forge/lib/forge.js';
2
+ import { pbkdf2Async } from '@noble/hashes/pbkdf2';
3
+ import { sha512 } from '@noble/hashes/sha512';
4
+ import * as asn1js from 'asn1js';
6
5
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
7
6
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
8
- import { bigIntegerToUintBase64url, base64urlToBigInteger } from './../util.js';
9
- // Convert a PKCS#1 in ASN1 DER format to a JWK key
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
+ */
10
13
  export function pkcs1ToJwk(bytes) {
11
- const asn1 = forge.asn1.fromDer(uint8ArrayToString(bytes, 'ascii'));
12
- const privateKey = forge.pki.privateKeyFromAsn1(asn1);
13
- // https://tools.ietf.org/html/rfc7518#section-6.3.1
14
- return {
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'),
15
27
  kty: 'RSA',
16
- n: bigIntegerToUintBase64url(privateKey.n),
17
- e: bigIntegerToUintBase64url(privateKey.e),
18
- d: bigIntegerToUintBase64url(privateKey.d),
19
- p: bigIntegerToUintBase64url(privateKey.p),
20
- q: bigIntegerToUintBase64url(privateKey.q),
21
- dp: bigIntegerToUintBase64url(privateKey.dP),
22
- dq: bigIntegerToUintBase64url(privateKey.dQ),
23
- qi: bigIntegerToUintBase64url(privateKey.qInv),
24
28
  alg: 'RS256'
25
29
  };
30
+ return key;
26
31
  }
27
- // Convert a JWK key into PKCS#1 in ASN1 DER format
32
+ /**
33
+ * Convert a JWK key into PKCS#1 in ASN1 DER format
34
+ */
28
35
  export function jwkToPkcs1(jwk) {
29
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) {
30
37
  throw new CodeError('JWK was missing components', 'ERR_INVALID_PARAMETERS');
31
38
  }
32
- const asn1 = forge.pki.privateKeyToAsn1({
33
- n: base64urlToBigInteger(jwk.n),
34
- e: base64urlToBigInteger(jwk.e),
35
- d: base64urlToBigInteger(jwk.d),
36
- p: base64urlToBigInteger(jwk.p),
37
- q: base64urlToBigInteger(jwk.q),
38
- dP: base64urlToBigInteger(jwk.dp),
39
- dQ: base64urlToBigInteger(jwk.dq),
40
- qInv: base64urlToBigInteger(jwk.qi)
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
+ ]
41
51
  });
42
- return uint8ArrayFromString(forge.asn1.toDer(asn1).getBytes(), 'ascii');
52
+ const der = root.toBER();
53
+ return new Uint8Array(der, 0, der.byteLength);
43
54
  }
44
- // Convert a PKCIX in ASN1 DER format to a JWK key
55
+ /**
56
+ * Convert a PKCIX in ASN1 DER format to a JWK key
57
+ */
45
58
  export function pkixToJwk(bytes) {
46
- const asn1 = forge.asn1.fromDer(uint8ArrayToString(bytes, 'ascii'));
47
- const publicKey = forge.pki.publicKeyFromAsn1(asn1);
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;
48
63
  return {
49
64
  kty: 'RSA',
50
- n: bigIntegerToUintBase64url(publicKey.n),
51
- e: bigIntegerToUintBase64url(publicKey.e)
65
+ n: uint8ArrayToString(bnToBuf(values[0].toBigInt()), 'base64url'),
66
+ e: uint8ArrayToString(bnToBuf(values[1].toBigInt()), 'base64url')
52
67
  };
53
68
  }
54
- // Convert a JWK key to PKCIX in ASN1 DER format
69
+ /**
70
+ * Convert a JWK key to PKCIX in ASN1 DER format
71
+ */
55
72
  export function jwkToPkix(jwk) {
56
73
  if (jwk.n == null || jwk.e == null) {
57
74
  throw new CodeError('JWK was missing components', 'ERR_INVALID_PARAMETERS');
58
75
  }
59
- const asn1 = forge.pki.publicKeyToAsn1({
60
- n: base64urlToBigInteger(jwk.n),
61
- e: base64urlToBigInteger(jwk.e)
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
+ ]
62
154
  });
63
- return uint8ArrayFromString(forge.asn1.toDer(asn1).getBytes(), 'ascii');
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);
64
329
  }
65
330
  //# sourceMappingURL=rsa-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsa-utils.js","sourceRoot":"","sources":["../../../src/keys/rsa-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rsa-utils.js","sourceRoot":"","sources":["../../../src/keys/rsa-utils.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,5 @@ export declare function unmarshalPrivateKey(key: JsonWebKey): Promise<JWKKeyPair
8
8
  export { randomBytes as getRandomValues };
9
9
  export declare function hashAndSign(key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array>;
10
10
  export declare function hashAndVerify(key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean>;
11
- export declare function encrypt(key: JsonWebKey, bytes: Uint8Array | Uint8ArrayList): Uint8Array;
12
- export declare function decrypt(key: JsonWebKey, bytes: Uint8Array | Uint8ArrayList): Uint8Array;
13
11
  export declare function keySize(jwk: JsonWebKey): number;
14
12
  //# sourceMappingURL=rsa.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa.ts"],"names":[],"mappings":"AAGA,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;AAID,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAQxF;AAED,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAQxF;AAED,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAQhD"}
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"}
@@ -1,6 +1,7 @@
1
1
  import crypto from 'crypto';
2
2
  import { promisify } from 'util';
3
3
  import { CodeError } from '@libp2p/interface';
4
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
4
5
  import randomBytes from '../random-bytes.js';
5
6
  import * as utils from './rsa-utils.js';
6
7
  const keypair = promisify(crypto.generateKeyPair);
@@ -60,27 +61,6 @@ export async function hashAndVerify(key, sig, msg) {
60
61
  // @ts-expect-error node types are missing jwk as a format
61
62
  return hash.verify({ format: 'jwk', key }, sig);
62
63
  }
63
- const padding = crypto.constants.RSA_PKCS1_PADDING;
64
- export function encrypt(key, bytes) {
65
- if (bytes instanceof Uint8Array) {
66
- // @ts-expect-error node types are missing jwk as a format
67
- return crypto.publicEncrypt({ format: 'jwk', key, padding }, bytes);
68
- }
69
- else {
70
- // @ts-expect-error node types are missing jwk as a format
71
- return crypto.publicEncrypt({ format: 'jwk', key, padding }, bytes.subarray());
72
- }
73
- }
74
- export function decrypt(key, bytes) {
75
- if (bytes instanceof Uint8Array) {
76
- // @ts-expect-error node types are missing jwk as a format
77
- return crypto.privateDecrypt({ format: 'jwk', key, padding }, bytes);
78
- }
79
- else {
80
- // @ts-expect-error node types are missing jwk as a format
81
- return crypto.privateDecrypt({ format: 'jwk', key, padding }, bytes.subarray());
82
- }
83
- }
84
64
  export function keySize(jwk) {
85
65
  if (jwk.kty !== 'RSA') {
86
66
  throw new CodeError('invalid key type', 'ERR_INVALID_KEY_TYPE');
@@ -88,7 +68,7 @@ export function keySize(jwk) {
88
68
  else if (jwk.n == null) {
89
69
  throw new CodeError('invalid key modulus', 'ERR_INVALID_KEY_MODULUS');
90
70
  }
91
- const modulus = Buffer.from(jwk.n, 'base64');
71
+ const modulus = uint8ArrayFromString(jwk.n, 'base64url');
92
72
  return modulus.length * 8;
93
73
  }
94
74
  //# sourceMappingURL=rsa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../../src/keys/rsa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../../src/keys/rsa.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Computes the Password-Based Key Derivation Function 2.
3
3
  */
4
- export default function pbkdf2(password: string, salt: string, iterations: number, keySize: number, hash: string): string;
4
+ export default function pbkdf2(password: string, salt: string | Uint8Array, iterations: number, keySize: number, hash: string): string;
5
5
  //# sourceMappingURL=pbkdf2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pbkdf2.d.ts","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBzH"}
1
+ {"version":3,"file":"pbkdf2.d.ts","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBtI"}
@@ -1,19 +1,20 @@
1
1
  import { CodeError } from '@libp2p/interface';
2
- // @ts-expect-error types are missing
3
- import forgePbkdf2 from 'node-forge/lib/pbkdf2.js';
4
- // @ts-expect-error types are missing
5
- import forgeUtil from 'node-forge/lib/util.js';
2
+ import { pbkdf2 as pbkdf2Sync } from '@noble/hashes/pbkdf2';
3
+ import { sha1 } from '@noble/hashes/sha1';
4
+ import { sha256 } from '@noble/hashes/sha256';
5
+ import { sha512 } from '@noble/hashes/sha512';
6
+ import { base64 } from 'multiformats/bases/base64';
6
7
  /**
7
- * Maps an IPFS hash name to its node-forge equivalent.
8
+ * Maps an IPFS hash name to its @noble/hashes equivalent.
8
9
  *
9
10
  * See https://github.com/multiformats/multihash/blob/master/hashtable.csv
10
11
  *
11
12
  * @private
12
13
  */
13
14
  const hashName = {
14
- sha1: 'sha1',
15
- 'sha2-256': 'sha256',
16
- 'sha2-512': 'sha512'
15
+ sha1,
16
+ 'sha2-256': sha256,
17
+ 'sha2-512': sha512
17
18
  };
18
19
  /**
19
20
  * Computes the Password-Based Key Derivation Function 2.
@@ -24,7 +25,10 @@ export default function pbkdf2(password, salt, iterations, keySize, hash) {
24
25
  throw new CodeError(`Hash '${hash}' is unknown or not supported. Must be ${types}`, 'ERR_UNSUPPORTED_HASH_TYPE');
25
26
  }
26
27
  const hasher = hashName[hash];
27
- const dek = forgePbkdf2(password, salt, iterations, keySize, hasher);
28
- return forgeUtil.encode64(dek, null);
28
+ const dek = pbkdf2Sync(hasher, password, salt, {
29
+ c: iterations,
30
+ dkLen: keySize
31
+ });
32
+ return base64.encode(dek).substring(1);
29
33
  }
30
34
  //# sourceMappingURL=pbkdf2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,qCAAqC;AACrC,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAClD,qCAAqC;AACrC,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,QAAQ;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAgB,EAAE,IAAY,EAAE,UAAkB,EAAE,OAAe,EAAE,IAAY;IAC/G,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,IAAI,SAAS,CAAC,SAAS,IAAI,0CAA0C,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAA;IAClH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,WAAW,CACrB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,CACP,CAAA;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG;IACf,IAAI;IACJ,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,MAAM;CACnB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAgB,EAAE,IAAyB,EAAE,UAAkB,EAAE,OAAe,EAAE,IAAY;IAC5H,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,IAAI,SAAS,CAAC,SAAS,IAAI,0CAA0C,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAA;IAClH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,UAAU,CACpB,MAAM,EACN,QAAQ,EACR,IAAI,EAAE;QACJ,CAAC,EAAE,UAAU;QACb,KAAK,EAAE,OAAO;KACf,CACF,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AACxC,CAAC"}
@@ -1,10 +1,3 @@
1
- import 'node-forge/lib/util.js';
2
- import 'node-forge/lib/jsbn.js';
3
- import forge from 'node-forge/lib/forge.js';
4
- export declare function bigIntegerToUintBase64url(num: {
5
- abs(): any;
6
- }, len?: number): string;
7
- export declare function base64urlToBigInteger(str: string): typeof forge.jsbn.BigInteger;
8
1
  export declare function base64urlToBuffer(str: string, len?: number): Uint8Array;
9
2
  export declare function isPromise<T = unknown>(thing: any): thing is Promise<T>;
10
3
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAE/B,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAK3C,wBAAgB,yBAAyB,CAAE,GAAG,EAAE;IAAE,GAAG,IAAI,GAAG,CAAA;CAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBpF;AAGD,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAGhF;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CASxE;AAED,wBAAgB,SAAS,CAAE,CAAC,GAAG,OAAO,EAAG,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAQxE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CASxE;AAED,wBAAgB,SAAS,CAAE,CAAC,GAAG,OAAO,EAAG,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAQxE"}
package/dist/src/util.js CHANGED
@@ -1,30 +1,5 @@
1
- import 'node-forge/lib/util.js';
2
- import 'node-forge/lib/jsbn.js';
3
- // @ts-expect-error types are missing
4
- import forge from 'node-forge/lib/forge.js';
5
1
  import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
6
2
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
7
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
8
- export function bigIntegerToUintBase64url(num, len) {
9
- // Call `.abs()` to convert to unsigned
10
- let buf = Uint8Array.from(num.abs().toByteArray()); // toByteArray converts to big endian
11
- // toByteArray() gives us back a signed array, which will include a leading 0
12
- // byte if the most significant bit of the number is 1:
13
- // https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-integer
14
- // Our number will always be positive so we should remove the leading padding.
15
- buf = buf[0] === 0 ? buf.subarray(1) : buf;
16
- if (len != null) {
17
- if (buf.length > len)
18
- throw new Error('byte array longer than desired length');
19
- buf = uint8ArrayConcat([new Uint8Array(len - buf.length), buf]);
20
- }
21
- return uint8ArrayToString(buf, 'base64url');
22
- }
23
- // Convert a base64url encoded string to a BigInteger
24
- export function base64urlToBigInteger(str) {
25
- const buf = base64urlToBuffer(str);
26
- return new forge.jsbn.BigInteger(uint8ArrayToString(buf, 'base16'), 16);
27
- }
28
3
  export function base64urlToBuffer(str, len) {
29
4
  let buf = uint8ArrayFromString(str, 'base64urlpad');
30
5
  if (len != null) {
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAC/B,qCAAqC;AACrC,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAC3C,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,MAAM,UAAU,yBAAyB,CAAE,GAAmB,EAAE,GAAY;IAC1E,uCAAuC;IACvC,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC,qCAAqC;IAExF,6EAA6E;IAC7E,uDAAuD;IACvD,6EAA6E;IAC7E,8EAA8E;IAC9E,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAE1C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC9E,GAAG,GAAG,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;AAC7C,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,qBAAqB,CAAE,GAAW;IAChD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAClC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAW,EAAE,GAAY;IAC1D,IAAI,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAEnD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC9E,GAAG,GAAG,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,SAAS,CAAgB,KAAU;IACjD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU;QACrC,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QACjC,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,CAAA;AACvC,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE5E,MAAM,UAAU,iBAAiB,CAAE,GAAW,EAAE,GAAY;IAC1D,IAAI,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAEnD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC9E,GAAG,GAAG,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,SAAS,CAAgB,KAAU;IACjD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU;QACrC,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QACjC,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,CAAA;AACvC,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ get(win?: typeof globalThis): Crypto;
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=webcrypto-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto-browser.d.ts","sourceRoot":"","sources":["../../src/webcrypto-browser.ts"],"names":[],"mappings":";;;AAIA,wBAmBC"}
@@ -0,0 +1,17 @@
1
+ /* eslint-env browser */
2
+ // Check native crypto exists and is enabled (In insecure context `self.crypto`
3
+ // exists but `self.crypto.subtle` does not).
4
+ export default {
5
+ get(win = globalThis) {
6
+ const nativeCrypto = win.crypto;
7
+ if (nativeCrypto == null || nativeCrypto.subtle == null) {
8
+ throw Object.assign(new Error('Missing Web Crypto API. ' +
9
+ 'The most likely cause of this error is that this page is being accessed ' +
10
+ 'from an insecure context (i.e. not HTTPS). For more information and ' +
11
+ 'possible resolutions see ' +
12
+ 'https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api'), { code: 'ERR_MISSING_WEB_CRYPTO' });
13
+ }
14
+ return nativeCrypto;
15
+ }
16
+ };
17
+ //# sourceMappingURL=webcrypto-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto-browser.js","sourceRoot":"","sources":["../../src/webcrypto-browser.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,+EAA+E;AAC/E,6CAA6C;AAC7C,eAAe;IACb,GAAG,CAAE,GAAG,GAAG,UAAU;QACnB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAA;QAE/B,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YACxD,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,0BAA0B;gBAC1B,0EAA0E;gBAC1E,sEAAsE;gBACtE,2BAA2B;gBAC3B,wFAAwF,CACzF,EACD,EAAE,IAAI,EAAE,wBAAwB,EAAE,CACnC,CAAA;QACH,CAAC;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;CACF,CAAA"}