@libp2p/crypto 3.0.4-856ccd708 → 3.0.4-ddaa59a60

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 (80) hide show
  1. package/dist/index.min.js +14 -72
  2. package/dist/src/aes/cipher-mode.d.ts +2 -0
  3. package/dist/src/aes/cipher-mode.d.ts.map +1 -0
  4. package/dist/src/aes/cipher-mode.js +13 -0
  5. package/dist/src/aes/cipher-mode.js.map +1 -0
  6. package/dist/src/aes/ciphers-browser.d.ts +7 -0
  7. package/dist/src/aes/ciphers-browser.d.ts.map +1 -0
  8. package/dist/src/aes/ciphers-browser.js +26 -0
  9. package/dist/src/aes/ciphers-browser.js.map +1 -0
  10. package/dist/src/aes/ciphers.d.ts +5 -0
  11. package/dist/src/aes/ciphers.d.ts.map +1 -0
  12. package/dist/src/aes/ciphers.js +4 -0
  13. package/dist/src/aes/ciphers.js.map +1 -0
  14. package/dist/src/aes/index.d.ts +50 -0
  15. package/dist/src/aes/index.d.ts.map +1 -0
  16. package/dist/src/aes/index.js +61 -0
  17. package/dist/src/aes/index.js.map +1 -0
  18. package/dist/src/index.d.ts +2 -0
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +2 -0
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/keys/ed25519-browser.d.ts +1 -1
  23. package/dist/src/keys/ed25519-browser.d.ts.map +1 -1
  24. package/dist/src/keys/index.d.ts +2 -4
  25. package/dist/src/keys/index.d.ts.map +1 -1
  26. package/dist/src/keys/index.js +12 -7
  27. package/dist/src/keys/index.js.map +1 -1
  28. package/dist/src/keys/jwk2pem.d.ts +8 -0
  29. package/dist/src/keys/jwk2pem.d.ts.map +1 -0
  30. package/dist/src/keys/jwk2pem.js +14 -0
  31. package/dist/src/keys/jwk2pem.js.map +1 -0
  32. package/dist/src/keys/rsa-browser.d.ts +2 -0
  33. package/dist/src/keys/rsa-browser.d.ts.map +1 -1
  34. package/dist/src/keys/rsa-browser.js +25 -0
  35. package/dist/src/keys/rsa-browser.js.map +1 -1
  36. package/dist/src/keys/rsa-class.d.ts +5 -6
  37. package/dist/src/keys/rsa-class.d.ts.map +1 -1
  38. package/dist/src/keys/rsa-class.js +25 -11
  39. package/dist/src/keys/rsa-class.js.map +1 -1
  40. package/dist/src/keys/rsa-utils.d.ts +2 -15
  41. package/dist/src/keys/rsa-utils.d.ts.map +1 -1
  42. package/dist/src/keys/rsa-utils.js +39 -304
  43. package/dist/src/keys/rsa-utils.js.map +1 -1
  44. package/dist/src/keys/rsa.d.ts +2 -0
  45. package/dist/src/keys/rsa.d.ts.map +1 -1
  46. package/dist/src/keys/rsa.js +22 -2
  47. package/dist/src/keys/rsa.js.map +1 -1
  48. package/dist/src/pbkdf2.d.ts +1 -1
  49. package/dist/src/pbkdf2.d.ts.map +1 -1
  50. package/dist/src/pbkdf2.js +10 -14
  51. package/dist/src/pbkdf2.js.map +1 -1
  52. package/dist/src/util.d.ts +7 -0
  53. package/dist/src/util.d.ts.map +1 -1
  54. package/dist/src/util.js +25 -0
  55. package/dist/src/util.js.map +1 -1
  56. package/dist/src/webcrypto.d.ts +1 -3
  57. package/dist/src/webcrypto.d.ts.map +1 -1
  58. package/dist/src/webcrypto.js +11 -4
  59. package/dist/src/webcrypto.js.map +1 -1
  60. package/package.json +15 -8
  61. package/src/aes/cipher-mode.ts +15 -0
  62. package/src/aes/ciphers-browser.ts +31 -0
  63. package/src/aes/ciphers.ts +4 -0
  64. package/src/aes/index.ts +70 -0
  65. package/src/index.ts +2 -0
  66. package/src/keys/ed25519-browser.ts +1 -1
  67. package/src/keys/index.ts +12 -10
  68. package/src/keys/jwk2pem.ts +21 -0
  69. package/src/keys/rsa-browser.ts +29 -0
  70. package/src/keys/rsa-class.ts +28 -11
  71. package/src/keys/rsa-utils.ts +39 -373
  72. package/src/keys/rsa.ts +23 -2
  73. package/src/pbkdf2.ts +15 -17
  74. package/src/util.ts +29 -0
  75. package/src/webcrypto.ts +18 -5
  76. package/dist/src/webcrypto-browser.d.ts +0 -5
  77. package/dist/src/webcrypto-browser.d.ts.map +0 -1
  78. package/dist/src/webcrypto-browser.js +0 -17
  79. package/dist/src/webcrypto-browser.js.map +0 -1
  80. package/src/webcrypto-browser.ts +0 -24
@@ -0,0 +1,2 @@
1
+ export declare function cipherMode(key: Uint8Array): string;
2
+ //# sourceMappingURL=cipher-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cipher-mode.d.ts","sourceRoot":"","sources":["../../../src/aes/cipher-mode.ts"],"names":[],"mappings":"AAOA,wBAAgB,UAAU,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAOnD"}
@@ -0,0 +1,13 @@
1
+ import { CodeError } from '@libp2p/interface';
2
+ const CIPHER_MODES = {
3
+ 16: 'aes-128-ctr',
4
+ 32: 'aes-256-ctr'
5
+ };
6
+ export function cipherMode(key) {
7
+ if (key.length === 16 || key.length === 32) {
8
+ return CIPHER_MODES[key.length];
9
+ }
10
+ const modes = Object.entries(CIPHER_MODES).map(([k, v]) => `${k} (${v})`).join(' / ');
11
+ throw new CodeError(`Invalid key length ${key.length} bytes. Must be ${modes}`, 'ERR_INVALID_KEY_LENGTH');
12
+ }
13
+ //# sourceMappingURL=cipher-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cipher-mode.js","sourceRoot":"","sources":["../../../src/aes/cipher-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;CAClB,CAAA;AAED,MAAM,UAAU,UAAU,CAAE,GAAe;IACzC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrF,MAAM,IAAI,SAAS,CAAC,sBAAsB,GAAG,CAAC,MAAM,mBAAmB,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAA;AAC3G,CAAC"}
@@ -0,0 +1,7 @@
1
+ import 'node-forge/lib/aes.js';
2
+ export interface Cipher {
3
+ update(data: Uint8Array): Uint8Array;
4
+ }
5
+ export declare function createCipheriv(mode: any, key: Uint8Array, iv: Uint8Array): Cipher;
6
+ export declare function createDecipheriv(mode: any, key: Uint8Array, iv: Uint8Array): Cipher;
7
+ //# sourceMappingURL=ciphers-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciphers-browser.d.ts","sourceRoot":"","sources":["../../../src/aes/ciphers-browser.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAA;AAM9B,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;CACrC;AAED,wBAAgB,cAAc,CAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,CASlF;AAED,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,CASpF"}
@@ -0,0 +1,26 @@
1
+ import 'node-forge/lib/aes.js';
2
+ // @ts-expect-error types are missing
3
+ import forge from 'node-forge/lib/forge.js';
4
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
5
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
6
+ export function createCipheriv(mode, key, iv) {
7
+ const cipher2 = forge.cipher.createCipher('AES-CTR', uint8ArrayToString(key, 'ascii'));
8
+ cipher2.start({ iv: uint8ArrayToString(iv, 'ascii') });
9
+ return {
10
+ update: (data) => {
11
+ cipher2.update(forge.util.createBuffer(uint8ArrayToString(data, 'ascii')));
12
+ return uint8ArrayFromString(cipher2.output.getBytes(), 'ascii');
13
+ }
14
+ };
15
+ }
16
+ export function createDecipheriv(mode, key, iv) {
17
+ const cipher2 = forge.cipher.createDecipher('AES-CTR', uint8ArrayToString(key, 'ascii'));
18
+ cipher2.start({ iv: uint8ArrayToString(iv, 'ascii') });
19
+ return {
20
+ update: (data) => {
21
+ cipher2.update(forge.util.createBuffer(uint8ArrayToString(data, 'ascii')));
22
+ return uint8ArrayFromString(cipher2.output.getBytes(), 'ascii');
23
+ }
24
+ };
25
+ }
26
+ //# sourceMappingURL=ciphers-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciphers-browser.js","sourceRoot":"","sources":["../../../src/aes/ciphers-browser.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAA;AAC9B,qCAAqC;AACrC,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAC3C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAMtE,MAAM,UAAU,cAAc,CAAE,IAAS,EAAE,GAAe,EAAE,EAAc;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACtF,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACtD,OAAO;QACL,MAAM,EAAE,CAAC,IAAgB,EAAE,EAAE;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;YAC1E,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAE,IAAS,EAAE,GAAe,EAAE,EAAc;IAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACxF,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACtD,OAAO;QACL,MAAM,EAAE,CAAC,IAAgB,EAAE,EAAE;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;YAC1E,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="node" />
2
+ import crypto from 'crypto';
3
+ export declare const createCipheriv: typeof crypto.createCipheriv;
4
+ export declare const createDecipheriv: typeof crypto.createDecipheriv;
5
+ //# sourceMappingURL=ciphers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciphers.d.ts","sourceRoot":"","sources":["../../../src/aes/ciphers.ts"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,eAAO,MAAM,cAAc,8BAAwB,CAAA;AACnD,eAAO,MAAM,gBAAgB,gCAA0B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import crypto from 'crypto';
2
+ export const createCipheriv = crypto.createCipheriv;
3
+ export const createDecipheriv = crypto.createDecipheriv;
4
+ //# sourceMappingURL=ciphers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciphers.js","sourceRoot":"","sources":["../../../src/aes/ciphers.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * Exposes an interface to AES encryption (formerly Rijndael), as defined in U.S. Federal Information Processing Standards Publication 197.
5
+ *
6
+ * This uses `CTR` mode.
7
+ *
8
+ * /**
9
+ * @example
10
+ *
11
+ * ```js
12
+ * import { create } from '@libp2p/crypto/aes'
13
+ *
14
+ * // Setting up Key and IV
15
+ *
16
+ * // A 16 bytes array, 128 Bits, AES-128 is chosen
17
+ * const key128 = Uint8Array.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
18
+ *
19
+ * // A 16 bytes array, 128 Bits,
20
+ * const IV = Uint8Array.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
21
+ *
22
+ * const decryptedMessage = 'Hello, world!'
23
+ *
24
+ * // Encrypting
25
+ * const cipher = await crypto.aes.create(key128, IV)
26
+ * const encryptedBuffer = await encrypt(Uint8Array.from(decryptedMessage))
27
+ * console.log(encryptedBuffer)
28
+ * // prints: <Uint8Array 42 f1 67 d9 2e 42 d0 32 9e b1 f8 3c>
29
+ *
30
+ * // Decrypting
31
+ * const decipher = await crypto.aes.create(key128, IV)
32
+ * const decryptedBuffer = await decrypt(encryptedBuffer)
33
+ *
34
+ * console.log(decryptedBuffer)
35
+ * // prints: <Uint8Array 42 f1 67 d9 2e 42 d0 32 9e b1 f8 3c>
36
+ *
37
+ * console.log(decryptedBuffer.toString('utf-8'))
38
+ * // prints: Hello, world!
39
+ * ```
40
+ */
41
+ export interface AESCipher {
42
+ encrypt(data: Uint8Array): Promise<Uint8Array>;
43
+ decrypt(data: Uint8Array): Promise<Uint8Array>;
44
+ }
45
+ /**
46
+ * @param key - The key, if length `16` then `AES 128` is used. For length `32`, `AES 256` is used
47
+ * @param iv - Must have length `16`
48
+ */
49
+ export declare function create(key: Uint8Array, iv: Uint8Array): AESCipher;
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/aes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC9C,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC/C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,SAAS,CAgBlE"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * Exposes an interface to AES encryption (formerly Rijndael), as defined in U.S. Federal Information Processing Standards Publication 197.
5
+ *
6
+ * This uses `CTR` mode.
7
+ *
8
+ * /**
9
+ * @example
10
+ *
11
+ * ```js
12
+ * import { create } from '@libp2p/crypto/aes'
13
+ *
14
+ * // Setting up Key and IV
15
+ *
16
+ * // A 16 bytes array, 128 Bits, AES-128 is chosen
17
+ * const key128 = Uint8Array.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
18
+ *
19
+ * // A 16 bytes array, 128 Bits,
20
+ * const IV = Uint8Array.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
21
+ *
22
+ * const decryptedMessage = 'Hello, world!'
23
+ *
24
+ * // Encrypting
25
+ * const cipher = await crypto.aes.create(key128, IV)
26
+ * const encryptedBuffer = await encrypt(Uint8Array.from(decryptedMessage))
27
+ * console.log(encryptedBuffer)
28
+ * // prints: <Uint8Array 42 f1 67 d9 2e 42 d0 32 9e b1 f8 3c>
29
+ *
30
+ * // Decrypting
31
+ * const decipher = await crypto.aes.create(key128, IV)
32
+ * const decryptedBuffer = await decrypt(encryptedBuffer)
33
+ *
34
+ * console.log(decryptedBuffer)
35
+ * // prints: <Uint8Array 42 f1 67 d9 2e 42 d0 32 9e b1 f8 3c>
36
+ *
37
+ * console.log(decryptedBuffer.toString('utf-8'))
38
+ * // prints: Hello, world!
39
+ * ```
40
+ */
41
+ import { cipherMode } from './cipher-mode.js';
42
+ import * as ciphers from './ciphers.js';
43
+ /**
44
+ * @param key - The key, if length `16` then `AES 128` is used. For length `32`, `AES 256` is used
45
+ * @param iv - Must have length `16`
46
+ */
47
+ export function create(key, iv) {
48
+ const mode = cipherMode(key);
49
+ const cipher = ciphers.createCipheriv(mode, key, iv);
50
+ const decipher = ciphers.createDecipheriv(mode, key, iv);
51
+ const res = {
52
+ async encrypt(data) {
53
+ return cipher.update(data);
54
+ },
55
+ async decrypt(data) {
56
+ return decipher.update(data);
57
+ }
58
+ };
59
+ return res;
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/aes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAOvC;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAE,GAAe,EAAE,EAAc;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IAExD,MAAM,GAAG,GAAc;QACrB,KAAK,CAAC,OAAO,CAAE,IAAI;YACjB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAED,KAAK,CAAC,OAAO,CAAE,IAAI;YACjB,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC;KACF,CAAA;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -7,10 +7,12 @@
7
7
  *
8
8
  * To enable the Web Crypto API and allow `@libp2p/crypto` to work fully, please serve your page over HTTPS.
9
9
  */
10
+ import * as aes from './aes/index.js';
10
11
  import * as hmac from './hmac/index.js';
11
12
  import * as keys from './keys/index.js';
12
13
  import pbkdf2 from './pbkdf2.js';
13
14
  import randomBytes from './random-bytes.js';
15
+ export { aes };
14
16
  export { hmac };
15
17
  export { keys };
16
18
  export { randomBytes };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAE3C,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,CAAA;AACd,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,CAAA"}
package/dist/src/index.js CHANGED
@@ -7,10 +7,12 @@
7
7
  *
8
8
  * To enable the Web Crypto API and allow `@libp2p/crypto` to work fully, please serve your page over HTTPS.
9
9
  */
10
+ import * as aes from './aes/index.js';
10
11
  import * as hmac from './hmac/index.js';
11
12
  import * as keys from './keys/index.js';
12
13
  import pbkdf2 from './pbkdf2.js';
13
14
  import randomBytes from './random-bytes.js';
15
+ export { aes };
14
16
  export { hmac };
15
17
  export { keys };
16
18
  export { randomBytes };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAE3C,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,CAAA;AACd,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { Uint8ArrayKeyPair } from './interface.js';
1
+ import type { Uint8ArrayKeyPair } from './interface';
2
2
  import type { Uint8ArrayList } from 'uint8arraylist';
3
3
  declare const PUBLIC_KEY_BYTE_LENGTH = 32;
4
4
  declare const PRIVATE_KEY_BYTE_LENGTH = 64;
@@ -1 +1 @@
1
- {"version":3,"file":"ed25519-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAGlC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,WAAW,IAAK,iBAAiB,CAYhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAE,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAiBxE;AAED,wBAAgB,WAAW,CAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAIjG;AAED,wBAAgB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAEhH"}
1
+ {"version":3,"file":"ed25519-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAGlC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,WAAW,IAAK,iBAAiB,CAYhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAE,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAiBxE;AAED,wBAAgB,WAAW,CAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAIjG;AAED,wBAAgB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAEhH"}
@@ -9,6 +9,8 @@
9
9
  *
10
10
  * For encryption / decryption support, RSA keys should be used.
11
11
  */
12
+ import 'node-forge/lib/asn1.js';
13
+ import 'node-forge/lib/pbe.js';
12
14
  import * as Ed25519 from './ed25519-class.js';
13
15
  import generateEphemeralKeyPair from './ephemeral-keys.js';
14
16
  import { keyStretcher } from './key-stretcher.js';
@@ -20,10 +22,6 @@ export { keyStretcher };
20
22
  export { generateEphemeralKeyPair };
21
23
  export { keysPBM };
22
24
  export type KeyTypes = 'RSA' | 'Ed25519' | 'secp256k1';
23
- export { RsaPrivateKey, RsaPublicKey, MAX_RSA_KEY_SIZE } from './rsa-class.js';
24
- export { Ed25519PrivateKey, Ed25519PublicKey } from './ed25519-class.js';
25
- export { Secp256k1PrivateKey, Secp256k1PublicKey } from './secp256k1-class.js';
26
- export type { JWKKeyPair } from './interface.js';
27
25
  export declare const supportedKeys: {
28
26
  rsa: typeof RSA;
29
27
  ed25519: typeof Ed25519;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,wBAAwB,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,WAAW,CAAA;AACpC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,OAAO,EAAE,wBAAwB,EAAE,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AAEtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,eAAO,MAAM,aAAa;;;;CAIzB,CAAA;AAiBD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzF;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAMnH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,SAAS,CAc9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAE,GAAG,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAIvF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAc/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAIxF;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAa5F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,wBAAwB,CAAA;AAC/B,OAAO,uBAAuB,CAAA;AAK9B,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,wBAAwB,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,WAAW,CAAA;AACpC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,OAAO,EAAE,wBAAwB,EAAE,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AAEtD,eAAO,MAAM,aAAa;;;;CAIzB,CAAA;AAiBD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzF;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAMnH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,SAAS,CAc9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAE,GAAG,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAIvF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAc/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAIxF;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgB5F"}
@@ -9,21 +9,22 @@
9
9
  *
10
10
  * For encryption / decryption support, RSA keys should be used.
11
11
  */
12
+ import 'node-forge/lib/asn1.js';
13
+ import 'node-forge/lib/pbe.js';
12
14
  import { CodeError } from '@libp2p/interface';
15
+ // @ts-expect-error types are missing
16
+ import forge from 'node-forge/lib/forge.js';
17
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
13
18
  import * as Ed25519 from './ed25519-class.js';
14
19
  import generateEphemeralKeyPair from './ephemeral-keys.js';
15
20
  import { importer } from './importer.js';
16
21
  import { keyStretcher } from './key-stretcher.js';
17
22
  import * as keysPBM from './keys.js';
18
23
  import * as RSA from './rsa-class.js';
19
- import { importFromPem } from './rsa-utils.js';
20
24
  import * as Secp256k1 from './secp256k1-class.js';
21
25
  export { keyStretcher };
22
26
  export { generateEphemeralKeyPair };
23
27
  export { keysPBM };
24
- export { RsaPrivateKey, RsaPublicKey, MAX_RSA_KEY_SIZE } from './rsa-class.js';
25
- export { Ed25519PrivateKey, Ed25519PublicKey } from './ed25519-class.js';
26
- export { Secp256k1PrivateKey, Secp256k1PublicKey } from './secp256k1-class.js';
27
28
  export const supportedKeys = {
28
29
  rsa: RSA,
29
30
  ed25519: Ed25519,
@@ -123,9 +124,13 @@ export async function importKey(encryptedKey, password) {
123
124
  catch (_) {
124
125
  // Ignore and try the old pem decrypt
125
126
  }
126
- if (!encryptedKey.includes('BEGIN')) {
127
- throw new CodeError('Encrypted key was not a libp2p-key or a PEM file', 'ERR_INVALID_IMPORT_FORMAT');
127
+ // Only rsa supports pem right now
128
+ const key = forge.pki.decryptRsaPrivateKey(encryptedKey, password);
129
+ if (key === null) {
130
+ throw new CodeError('Cannot read the key, most likely the password is wrong or not a RSA key', 'ERR_CANNOT_DECRYPT_PEM');
128
131
  }
129
- return importFromPem(encryptedKey, password);
132
+ let der = forge.asn1.toDer(forge.pki.privateKeyToAsn1(key));
133
+ der = uint8ArrayFromString(der.getBytes(), 'ascii');
134
+ return supportedKeys.rsa.unmarshalRsaPrivateKey(der);
130
135
  }
131
136
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import 'node-forge/lib/rsa.js';
2
+ export interface JWK {
3
+ encrypt(msg: string): string;
4
+ decrypt(msg: string): string;
5
+ }
6
+ export declare function jwk2priv(key: JsonWebKey): JWK;
7
+ export declare function jwk2pub(key: JsonWebKey): JWK;
8
+ //# sourceMappingURL=jwk2pem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwk2pem.d.ts","sourceRoot":"","sources":["../../../src/keys/jwk2pem.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAA;AAK9B,MAAM,WAAW,GAAG;IAClB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B;AAMD,wBAAgB,QAAQ,CAAE,GAAG,EAAE,UAAU,GAAG,GAAG,CAE9C;AAED,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,GAAG,GAAG,CAE7C"}
@@ -0,0 +1,14 @@
1
+ import 'node-forge/lib/rsa.js';
2
+ // @ts-expect-error types are missing
3
+ import forge from 'node-forge/lib/forge.js';
4
+ import { base64urlToBigInteger } from '../util.js';
5
+ function convert(key, types) {
6
+ return types.map(t => base64urlToBigInteger(key[t]));
7
+ }
8
+ export function jwk2priv(key) {
9
+ return forge.pki.setRsaPrivateKey(...convert(key, ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi']));
10
+ }
11
+ export function jwk2pub(key) {
12
+ return forge.pki.setRsaPublicKey(...convert(key, ['n', 'e']));
13
+ }
14
+ //# sourceMappingURL=jwk2pem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwk2pem.js","sourceRoot":"","sources":["../../../src/keys/jwk2pem.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAA;AAC9B,qCAAqC;AACrC,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAOlD,SAAS,OAAO,CAAE,GAAQ,EAAE,KAAe;IACzC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAE,GAAe;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,OAAO,CAAE,GAAe;IACtC,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC"}
@@ -8,5 +8,7 @@ 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, msg: Uint8Array | Uint8ArrayList): Uint8Array;
12
+ export declare function decrypt(key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Uint8Array;
11
13
  export declare function keySize(jwk: JsonWebKey): number;
12
14
  //# sourceMappingURL=rsa-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsa-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa-browser.ts"],"names":[],"mappings":"AAEA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAE5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,wBAAsB,WAAW,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBpE;AAGD,wBAAsB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CA0B/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,CAmBzG;AAED,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBzH;AA8BD,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAQhD"}
1
+ {"version":3,"file":"rsa-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa-browser.ts"],"names":[],"mappings":"AAGA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAG5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,wBAAsB,WAAW,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBpE;AAGD,wBAAsB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CA0B/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,CAmBzG;AAED,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBzH;AAiDD,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAEtF;AAED,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAEtF;AAED,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAQhD"}
@@ -1,7 +1,9 @@
1
1
  import { CodeError } from '@libp2p/interface';
2
2
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
3
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
3
4
  import randomBytes from '../random-bytes.js';
4
5
  import webcrypto from '../webcrypto.js';
6
+ import { jwk2pub, jwk2priv } from './jwk2pem.js';
5
7
  import * as utils from './rsa-utils.js';
6
8
  export { utils };
7
9
  export async function generateKey(bits) {
@@ -71,6 +73,29 @@ async function derivePublicFromPrivate(jwKey) {
71
73
  hash: { name: 'SHA-256' }
72
74
  }, true, ['verify']);
73
75
  }
76
+ /*
77
+
78
+ RSA encryption/decryption for the browser with webcrypto workaround
79
+ "bloody dark magic. webcrypto's why."
80
+
81
+ Explanation:
82
+ - Convert JWK to nodeForge
83
+ - Convert msg Uint8Array to nodeForge buffer: ByteBuffer is a "binary-string backed buffer", so let's make our Uint8Array a binary string
84
+ - Convert resulting nodeForge buffer to Uint8Array: it returns a binary string, turn that into a Uint8Array
85
+
86
+ */
87
+ function convertKey(key, pub, msg, handle) {
88
+ const fkey = pub ? jwk2pub(key) : jwk2priv(key);
89
+ const fmsg = uint8ArrayToString(msg instanceof Uint8Array ? msg : msg.subarray(), 'ascii');
90
+ const fomsg = handle(fmsg, fkey);
91
+ return uint8ArrayFromString(fomsg, 'ascii');
92
+ }
93
+ export function encrypt(key, msg) {
94
+ return convertKey(key, true, msg, (msg, key) => key.encrypt(msg));
95
+ }
96
+ export function decrypt(key, msg) {
97
+ return convertKey(key, false, msg, (msg, key) => key.decrypt(msg));
98
+ }
74
99
  export function keySize(jwk) {
75
100
  if (jwk.kty !== 'RSA') {
76
101
  throw new CodeError('invalid key type', 'ERR_INVALID_KEY_TYPE');
@@ -1 +1 @@
1
- {"version":3,"file":"rsa-browser.js","sourceRoot":"","sources":["../../../src/keys/rsa-browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rsa-browser.js","sourceRoot":"","sources":["../../../src/keys/rsa-browser.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
+ import 'node-forge/lib/sha512.js';
1
2
  import type { Multibase } from 'multiformats';
2
3
  import type { Uint8ArrayList } from 'uint8arraylist';
3
- export declare const MAX_RSA_KEY_SIZE = 8192;
4
+ export declare const MAX_KEY_SIZE = 8192;
4
5
  export declare class RsaPublicKey {
5
6
  private readonly _key;
6
7
  constructor(key: JsonWebKey);
7
8
  verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean | Promise<boolean>;
8
9
  marshal(): Uint8Array;
9
10
  get bytes(): Uint8Array;
11
+ encrypt(bytes: Uint8Array | Uint8ArrayList): Uint8Array;
10
12
  equals(key: any): boolean | boolean;
11
13
  hash(): Uint8Array | Promise<Uint8Array>;
12
14
  }
@@ -17,6 +19,7 @@ export declare class RsaPrivateKey {
17
19
  genSecret(): Uint8Array;
18
20
  sign(message: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
19
21
  get public(): RsaPublicKey;
22
+ decrypt(bytes: Uint8Array | Uint8ArrayList): Uint8Array;
20
23
  marshal(): Uint8Array;
21
24
  get bytes(): Uint8Array;
22
25
  equals(key: any): boolean;
@@ -30,11 +33,7 @@ export declare class RsaPrivateKey {
30
33
  */
31
34
  id(): Promise<string>;
32
35
  /**
33
- * Exports the key as libp2p-key - a aes-gcm encrypted value with the key
34
- * derived from the password.
35
- *
36
- * To export it as a password protected PEM file, please use the `exportPEM`
37
- * function from `@libp2p/rsa`.
36
+ * Exports the key into a password protected PEM format
38
37
  */
39
38
  export(password: string, format?: string): Promise<Multibase<'m'>>;
40
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rsa-class.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa-class.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAEpC,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAEpB,GAAG,EAAE,UAAU;IAI5B,MAAM,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvF,OAAO,IAAK,UAAU;IAItB,IAAI,KAAK,IAAK,UAAU,CAKvB;IAED,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,OAAO;IAIpC,IAAI,IAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAS1C;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE1B,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IAKnD,SAAS,IAAK,UAAU;IAIxB,IAAI,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAI7E,IAAI,MAAM,IAAK,YAAY,CAM1B;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;;;;;;OAMG;IACG,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CAS5E;AAED,wBAAsB,sBAAsB,CAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAUvF;AAED,wBAAgB,qBAAqB,CAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAQtE;AAED,wBAAsB,OAAO,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAQtE;AAED,wBAAsB,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAQ3E"}
1
+ {"version":3,"file":"rsa-class.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa-class.ts"],"names":[],"mappings":"AAKA,OAAO,0BAA0B,CAAA;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,eAAO,MAAM,YAAY,OAAO,CAAA;AAEhC,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAEpB,GAAG,EAAE,UAAU;IAI5B,MAAM,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvF,OAAO,IAAK,UAAU;IAItB,IAAI,KAAK,IAAK,UAAU,CAKvB;IAED,OAAO,CAAE,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU;IAIxD,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,OAAO;IAIpC,IAAI,IAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAS1C;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE1B,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IAKnD,SAAS,IAAK,UAAU;IAIxB,IAAI,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAI7E,IAAI,MAAM,IAAK,YAAY,CAM1B;IAED,OAAO,CAAE,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU;IAIxD,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,SAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CAmB5E;AAED,wBAAsB,sBAAsB,CAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAUvF;AAED,wBAAgB,qBAAqB,CAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAQtE;AAED,wBAAsB,OAAO,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAQtE;AAED,wBAAsB,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAQ3E"}
@@ -1,12 +1,15 @@
1
1
  import { CodeError } from '@libp2p/interface';
2
2
  import { sha256 } from 'multiformats/hashes/sha2';
3
+ // @ts-expect-error types are missing
4
+ import forge from 'node-forge/lib/forge.js';
3
5
  import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
6
+ import 'node-forge/lib/sha512.js';
4
7
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
5
8
  import { isPromise } from '../util.js';
6
9
  import { exporter } from './exporter.js';
7
10
  import * as pbm from './keys.js';
8
11
  import * as crypto from './rsa.js';
9
- export const MAX_RSA_KEY_SIZE = 8192;
12
+ export const MAX_KEY_SIZE = 8192;
10
13
  export class RsaPublicKey {
11
14
  _key;
12
15
  constructor(key) {
@@ -24,6 +27,9 @@ export class RsaPublicKey {
24
27
  Data: this.marshal()
25
28
  }).subarray();
26
29
  }
30
+ encrypt(bytes) {
31
+ return crypto.encrypt(this._key, bytes);
32
+ }
27
33
  equals(key) {
28
34
  return uint8ArrayEquals(this.bytes, key.bytes);
29
35
  }
@@ -54,6 +60,9 @@ export class RsaPrivateKey {
54
60
  }
55
61
  return new RsaPublicKey(this._publicKey);
56
62
  }
63
+ decrypt(bytes) {
64
+ return crypto.decrypt(this._key, bytes);
65
+ }
57
66
  marshal() {
58
67
  return crypto.utils.jwkToPkcs1(this._key);
59
68
  }
@@ -85,15 +94,20 @@ export class RsaPrivateKey {
85
94
  return uint8ArrayToString(hash, 'base58btc');
86
95
  }
87
96
  /**
88
- * Exports the key as libp2p-key - a aes-gcm encrypted value with the key
89
- * derived from the password.
90
- *
91
- * To export it as a password protected PEM file, please use the `exportPEM`
92
- * function from `@libp2p/rsa`.
97
+ * Exports the key into a password protected PEM format
93
98
  */
94
99
  async export(password, format = 'pkcs-8') {
95
100
  if (format === 'pkcs-8') {
96
- return crypto.utils.exportToPem(this, password);
101
+ const buffer = new forge.util.ByteBuffer(this.marshal());
102
+ const asn1 = forge.asn1.fromDer(buffer);
103
+ const privateKey = forge.pki.privateKeyFromAsn1(asn1);
104
+ const options = {
105
+ algorithm: 'aes256',
106
+ count: 10000,
107
+ saltSize: 128 / 8,
108
+ prfAlgorithm: 'sha512'
109
+ };
110
+ return forge.pki.encryptRsaPrivateKey(privateKey, password, options);
97
111
  }
98
112
  else if (format === 'libp2p-key') {
99
113
  return exporter(this.bytes, password);
@@ -105,7 +119,7 @@ export class RsaPrivateKey {
105
119
  }
106
120
  export async function unmarshalRsaPrivateKey(bytes) {
107
121
  const jwk = crypto.utils.pkcs1ToJwk(bytes);
108
- if (crypto.keySize(jwk) > MAX_RSA_KEY_SIZE) {
122
+ if (crypto.keySize(jwk) > MAX_KEY_SIZE) {
109
123
  throw new CodeError('key size is too large', 'ERR_KEY_SIZE_TOO_LARGE');
110
124
  }
111
125
  const keys = await crypto.unmarshalPrivateKey(jwk);
@@ -113,20 +127,20 @@ export async function unmarshalRsaPrivateKey(bytes) {
113
127
  }
114
128
  export function unmarshalRsaPublicKey(bytes) {
115
129
  const jwk = crypto.utils.pkixToJwk(bytes);
116
- if (crypto.keySize(jwk) > MAX_RSA_KEY_SIZE) {
130
+ if (crypto.keySize(jwk) > MAX_KEY_SIZE) {
117
131
  throw new CodeError('key size is too large', 'ERR_KEY_SIZE_TOO_LARGE');
118
132
  }
119
133
  return new RsaPublicKey(jwk);
120
134
  }
121
135
  export async function fromJwk(jwk) {
122
- if (crypto.keySize(jwk) > MAX_RSA_KEY_SIZE) {
136
+ if (crypto.keySize(jwk) > MAX_KEY_SIZE) {
123
137
  throw new CodeError('key size is too large', 'ERR_KEY_SIZE_TOO_LARGE');
124
138
  }
125
139
  const keys = await crypto.unmarshalPrivateKey(jwk);
126
140
  return new RsaPrivateKey(keys.privateKey, keys.publicKey);
127
141
  }
128
142
  export async function generateKeyPair(bits) {
129
- if (bits > MAX_RSA_KEY_SIZE) {
143
+ if (bits > MAX_KEY_SIZE) {
130
144
  throw new CodeError('key size is too large', 'ERR_KEY_SIZE_TOO_LARGE');
131
145
  }
132
146
  const keys = await crypto.generateKey(bits);