@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.
- package/dist/index.min.js +14 -72
- package/dist/src/aes/cipher-mode.d.ts +2 -0
- package/dist/src/aes/cipher-mode.d.ts.map +1 -0
- package/dist/src/aes/cipher-mode.js +13 -0
- package/dist/src/aes/cipher-mode.js.map +1 -0
- package/dist/src/aes/ciphers-browser.d.ts +7 -0
- package/dist/src/aes/ciphers-browser.d.ts.map +1 -0
- package/dist/src/aes/ciphers-browser.js +26 -0
- package/dist/src/aes/ciphers-browser.js.map +1 -0
- package/dist/src/aes/ciphers.d.ts +5 -0
- package/dist/src/aes/ciphers.d.ts.map +1 -0
- package/dist/src/aes/ciphers.js +4 -0
- package/dist/src/aes/ciphers.js.map +1 -0
- package/dist/src/aes/index.d.ts +50 -0
- package/dist/src/aes/index.d.ts.map +1 -0
- package/dist/src/aes/index.js +61 -0
- package/dist/src/aes/index.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/keys/ed25519-browser.d.ts +1 -1
- package/dist/src/keys/ed25519-browser.d.ts.map +1 -1
- package/dist/src/keys/index.d.ts +2 -4
- package/dist/src/keys/index.d.ts.map +1 -1
- package/dist/src/keys/index.js +12 -7
- package/dist/src/keys/index.js.map +1 -1
- package/dist/src/keys/jwk2pem.d.ts +8 -0
- package/dist/src/keys/jwk2pem.d.ts.map +1 -0
- package/dist/src/keys/jwk2pem.js +14 -0
- package/dist/src/keys/jwk2pem.js.map +1 -0
- package/dist/src/keys/rsa-browser.d.ts +2 -0
- package/dist/src/keys/rsa-browser.d.ts.map +1 -1
- package/dist/src/keys/rsa-browser.js +25 -0
- package/dist/src/keys/rsa-browser.js.map +1 -1
- package/dist/src/keys/rsa-class.d.ts +5 -6
- package/dist/src/keys/rsa-class.d.ts.map +1 -1
- package/dist/src/keys/rsa-class.js +25 -11
- package/dist/src/keys/rsa-class.js.map +1 -1
- package/dist/src/keys/rsa-utils.d.ts +2 -15
- package/dist/src/keys/rsa-utils.d.ts.map +1 -1
- package/dist/src/keys/rsa-utils.js +39 -304
- package/dist/src/keys/rsa-utils.js.map +1 -1
- package/dist/src/keys/rsa.d.ts +2 -0
- package/dist/src/keys/rsa.d.ts.map +1 -1
- package/dist/src/keys/rsa.js +22 -2
- package/dist/src/keys/rsa.js.map +1 -1
- package/dist/src/pbkdf2.d.ts +1 -1
- package/dist/src/pbkdf2.d.ts.map +1 -1
- package/dist/src/pbkdf2.js +10 -14
- package/dist/src/pbkdf2.js.map +1 -1
- package/dist/src/util.d.ts +7 -0
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +25 -0
- package/dist/src/util.js.map +1 -1
- package/dist/src/webcrypto.d.ts +1 -3
- package/dist/src/webcrypto.d.ts.map +1 -1
- package/dist/src/webcrypto.js +11 -4
- package/dist/src/webcrypto.js.map +1 -1
- package/package.json +15 -8
- package/src/aes/cipher-mode.ts +15 -0
- package/src/aes/ciphers-browser.ts +31 -0
- package/src/aes/ciphers.ts +4 -0
- package/src/aes/index.ts +70 -0
- package/src/index.ts +2 -0
- package/src/keys/ed25519-browser.ts +1 -1
- package/src/keys/index.ts +12 -10
- package/src/keys/jwk2pem.ts +21 -0
- package/src/keys/rsa-browser.ts +29 -0
- package/src/keys/rsa-class.ts +28 -11
- package/src/keys/rsa-utils.ts +39 -373
- package/src/keys/rsa.ts +23 -2
- package/src/pbkdf2.ts +15 -17
- package/src/util.ts +29 -0
- package/src/webcrypto.ts +18 -5
- package/dist/src/webcrypto-browser.d.ts +0 -5
- package/dist/src/webcrypto-browser.d.ts.map +0 -1
- package/dist/src/webcrypto-browser.js +0 -17
- package/dist/src/webcrypto-browser.js.map +0 -1
- package/src/webcrypto-browser.ts +0 -24
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/src/index.d.ts
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 };
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -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 };
|
package/dist/src/index.js.map
CHANGED
|
@@ -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 +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,
|
|
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"}
|
package/dist/src/keys/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/src/keys/index.js
CHANGED
|
@@ -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
|
-
|
|
127
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,wBAAwB,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,WAAW,CAAA;AACpC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,
|
|
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":"
|
|
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
|
|
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
|
|
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":"
|
|
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
|
|
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
|
|
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
|
-
|
|
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) >
|
|
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) >
|
|
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) >
|
|
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 >
|
|
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);
|