@libp2p/crypto 1.0.7 → 1.0.9
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/src/ciphers/aes-gcm.browser.js +3 -3
- package/dist/src/ciphers/aes-gcm.browser.js.map +1 -1
- package/dist/src/ciphers/aes-gcm.js +5 -5
- package/dist/src/ciphers/aes-gcm.js.map +1 -1
- package/dist/src/keys/ecdh-browser.js +3 -3
- package/dist/src/keys/ecdh-browser.js.map +1 -1
- package/dist/src/keys/ed25519-browser.d.ts +18 -0
- package/dist/src/keys/ed25519-browser.d.ts.map +1 -0
- package/dist/src/keys/ed25519-browser.js +52 -0
- package/dist/src/keys/ed25519-browser.js.map +1 -0
- package/dist/src/keys/ed25519-class.d.ts +2 -1
- package/dist/src/keys/ed25519-class.d.ts.map +1 -1
- package/dist/src/keys/ed25519-class.js +4 -4
- package/dist/src/keys/ed25519-class.js.map +1 -1
- package/dist/src/keys/ed25519.d.ts +4 -3
- package/dist/src/keys/ed25519.d.ts.map +1 -1
- package/dist/src/keys/ed25519.js +73 -18
- package/dist/src/keys/ed25519.js.map +1 -1
- package/dist/src/keys/index.d.ts +1 -1
- package/dist/src/keys/index.d.ts.map +1 -1
- package/dist/src/keys/key-stretcher.js +5 -5
- package/dist/src/keys/key-stretcher.js.map +1 -1
- package/dist/src/util.js +1 -1
- package/dist/src/util.js.map +1 -1
- package/package.json +3 -2
- package/src/ciphers/aes-gcm.browser.ts +3 -3
- package/src/ciphers/aes-gcm.ts +5 -5
- package/src/keys/ecdh-browser.ts +3 -3
- package/src/keys/ed25519-browser.ts +63 -0
- package/src/keys/ed25519-class.ts +4 -4
- package/src/keys/ed25519.ts +77 -19
- package/src/keys/key-stretcher.ts +5 -5
- package/src/util.ts +1 -1
|
@@ -37,9 +37,9 @@ export function create(opts) {
|
|
|
37
37
|
* the encryption cipher.
|
|
38
38
|
*/
|
|
39
39
|
async function decrypt(data, password) {
|
|
40
|
-
const salt = data.
|
|
41
|
-
const nonce = data.
|
|
42
|
-
const ciphertext = data.
|
|
40
|
+
const salt = data.subarray(0, saltLength);
|
|
41
|
+
const nonce = data.subarray(saltLength, saltLength + nonceLength);
|
|
42
|
+
const ciphertext = data.subarray(saltLength + nonceLength);
|
|
43
43
|
const aesGcm = { name: algorithm, iv: nonce };
|
|
44
44
|
if (typeof password === 'string') {
|
|
45
45
|
password = fromString(password);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aes-gcm.browser.js","sourceRoot":"","sources":["../../../src/ciphers/aes-gcm.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,SAAS,MAAM,iBAAiB,CAAA;AAGvC,yFAAyF;AAEzF,MAAM,UAAU,MAAM,CAAE,IAAoB;IAC1C,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,SAAS,CAAA;IAC9C,IAAI,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;IACrC,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,SAAS,CAAA;IACxC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,EAAE,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,KAAK,CAAA;IAE5C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAA;IAC9B,SAAS,IAAI,CAAC,CAAA,CAAC,4CAA4C;IAE3D;;;OAGG;IACH,KAAK,UAAU,OAAO,CAAE,IAAgB,EAAE,QAA6B;QACrE,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAA;QACjE,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;QAE7C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;SAChC;QAED,6BAA6B;QAC7B,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;QACjF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;QACrH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;QAEhI,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;QACvE,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED;;;;;OAKG;IACH,KAAK,UAAU,OAAO,CAAE,IAAgB,EAAE,QAA6B;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"aes-gcm.browser.js","sourceRoot":"","sources":["../../../src/ciphers/aes-gcm.browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,9 +43,9 @@ export function create(opts) {
|
|
|
43
43
|
*/
|
|
44
44
|
async function decryptWithKey(ciphertextAndNonce, key) {
|
|
45
45
|
// Create Uint8Arrays of nonce, ciphertext and tag.
|
|
46
|
-
const nonce = ciphertextAndNonce.
|
|
47
|
-
const ciphertext = ciphertextAndNonce.
|
|
48
|
-
const tag = ciphertextAndNonce.
|
|
46
|
+
const nonce = ciphertextAndNonce.subarray(0, nonceLength);
|
|
47
|
+
const ciphertext = ciphertextAndNonce.subarray(nonceLength, ciphertextAndNonce.length - algorithmTagLength);
|
|
48
|
+
const tag = ciphertextAndNonce.subarray(ciphertext.length + nonceLength);
|
|
49
49
|
// Create the cipher instance.
|
|
50
50
|
const cipher = crypto.createDecipheriv(algorithm, key, nonce);
|
|
51
51
|
// Decrypt and return result.
|
|
@@ -64,8 +64,8 @@ export function create(opts) {
|
|
|
64
64
|
*/
|
|
65
65
|
async function decrypt(data, password) {
|
|
66
66
|
// Create Uint8Arrays of salt and ciphertextAndNonce.
|
|
67
|
-
const salt = data.
|
|
68
|
-
const ciphertextAndNonce = data.
|
|
67
|
+
const salt = data.subarray(0, saltLength);
|
|
68
|
+
const ciphertextAndNonce = data.subarray(saltLength);
|
|
69
69
|
if (typeof password === 'string') {
|
|
70
70
|
password = uint8ArrayFromString(password);
|
|
71
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aes-gcm.js","sourceRoot":"","sources":["../../../src/ciphers/aes-gcm.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAG5E,yFAAyF;AAEzF,MAAM,UAAU,MAAM,CAAE,IAAoB;IAC1C,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa,CAAA;IAClD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,QAAQ,CAAA;IACvC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,EAAE,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,KAAK,CAAA;IAC5C,MAAM,kBAAkB,GAAG,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAA;IAEzD,KAAK,UAAU,cAAc,CAAE,IAAgB,EAAE,GAAe;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAE7C,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAE3D,6BAA6B;QAC7B,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAE1E,gDAAgD;QAChD,OAAO,gBAAgB,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;IAED;;;OAGG;IACH,KAAK,UAAU,OAAO,CAAE,IAAgB,EAAE,QAA6B;QACrE,0CAA0C;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;QAE3C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;SAC1C;QAED,6BAA6B;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAE5E,4BAA4B;QAC5B,OAAO,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IACnF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,UAAU,cAAc,CAAE,kBAA8B,EAAE,GAAe;QAC5E,mDAAmD;QACnD,MAAM,KAAK,GAAG,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"aes-gcm.js","sourceRoot":"","sources":["../../../src/ciphers/aes-gcm.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAG5E,yFAAyF;AAEzF,MAAM,UAAU,MAAM,CAAE,IAAoB;IAC1C,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa,CAAA;IAClD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,QAAQ,CAAA;IACvC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,EAAE,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,KAAK,CAAA;IAC5C,MAAM,kBAAkB,GAAG,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAA;IAEzD,KAAK,UAAU,cAAc,CAAE,IAAgB,EAAE,GAAe;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAE7C,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAE3D,6BAA6B;QAC7B,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAE1E,gDAAgD;QAChD,OAAO,gBAAgB,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;IAED;;;OAGG;IACH,KAAK,UAAU,OAAO,CAAE,IAAgB,EAAE,QAA6B;QACrE,0CAA0C;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;QAE3C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;SAC1C;QAED,6BAA6B;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAE5E,4BAA4B;QAC5B,OAAO,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IACnF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,UAAU,cAAc,CAAE,kBAA8B,EAAE,GAAe;QAC5E,mDAAmD;QACnD,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;QACzD,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC,MAAM,GAAG,kBAAkB,CAAC,CAAA;QAC3G,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,CAAA;QAExE,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAE7D,6BAA6B;QAC7B,gDAAgD;QAChD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACtB,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACtE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,UAAU,OAAO,CAAE,IAAgB,EAAE,QAA6B;QACrE,qDAAqD;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAEpD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;SAC1C;QAED,+BAA+B;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAE5E,6BAA6B;QAC7B,OAAO,MAAM,cAAc,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,MAAM,GAAc;QACxB,OAAO;QACP,OAAO;KACR,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -78,14 +78,14 @@ function unmarshalPublicKey(curve, key) {
|
|
|
78
78
|
throw errcode(new Error(`Unknown curve: ${curve}. Must be ${names}`), 'ERR_INVALID_CURVE');
|
|
79
79
|
}
|
|
80
80
|
const byteLen = curveLengths[curve];
|
|
81
|
-
if (!uint8ArrayEquals(key.
|
|
81
|
+
if (!uint8ArrayEquals(key.subarray(0, 1), Uint8Array.from([4]))) {
|
|
82
82
|
throw errcode(new Error('Cannot unmarshal public key - invalid key format'), 'ERR_INVALID_KEY_FORMAT');
|
|
83
83
|
}
|
|
84
84
|
return {
|
|
85
85
|
kty: 'EC',
|
|
86
86
|
crv: curve,
|
|
87
|
-
x: uint8ArrayToString(key.
|
|
88
|
-
y: uint8ArrayToString(key.
|
|
87
|
+
x: uint8ArrayToString(key.subarray(1, byteLen + 1), 'base64url'),
|
|
88
|
+
y: uint8ArrayToString(key.subarray(1 + byteLen), 'base64url'),
|
|
89
89
|
ext: true
|
|
90
90
|
};
|
|
91
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdh-browser.js","sourceRoot":"","sources":["../../../src/keys/ecdh-browser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAG/D,MAAM,IAAI,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACb,CAAA;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAEpC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAE,KAAa;IAC1D,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE;QAC/D,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,kBAAkB,KAAK,aAAa,KAAK,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAA;KAC3F;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CACnD;QACE,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,KAAK;KAClB,EACD,IAAI,EACJ,CAAC,YAAY,CAAC,CACf,CAAA;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,KAAK,EAAE,QAAoB,EAAE,YAA0B,EAAE,EAAE;QAC9E,IAAI,UAAU,CAAA;QAEd,IAAI,YAAY,IAAI,IAAI,EAAE;YACxB,UAAU,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CACjD,KAAK,EACL,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,EACxC;gBACE,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,KAAK;aAClB,EACD,KAAK,EACL,CAAC,YAAY,CAAC,CACf,CAAA;SACF;aAAM;YACL,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;SAC7B;QAED,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAChD,KAAK,EACL,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,EACnC;YACE,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,KAAK;SAClB,EACD,KAAK,EACL,EAAE,CACH,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CACpD;YACE,IAAI,EAAE,MAAM;YACZ,wDAAwD;YACxD,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,GAAG;SACZ,EACD,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,CACZ,CAAA;QAED,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IACrD,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAE/E,MAAM,OAAO,GAAY;QACvB,GAAG,EAAE,gBAAgB,CAAC,SAAS,CAAC;QAChC,YAAY;KACb,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;CACZ,CAAA;AAED,0DAA0D;AAC1D,qEAAqE;AACrE,gBAAgB;AAChB,SAAS,gBAAgB,CAAE,GAAe;IACxC,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;QACrD,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE,wBAAwB,CAAC,CAAA;KACjF;IAED,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,EAAE;QACrE,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,GAAG,aAAa,KAAK,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAA;KAC7F;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAErC,OAAO,gBAAgB,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;QACjC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;KAClC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAA;AACrB,CAAC;AAED,6EAA6E;AAC7E,SAAS,kBAAkB,CAAE,KAAa,EAAE,GAAe;IACzD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE;QAC/D,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,kBAAkB,KAAK,aAAa,KAAK,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAA;KAC3F;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAEnC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"ecdh-browser.js","sourceRoot":"","sources":["../../../src/keys/ecdh-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const PUBLIC_KEY_BYTE_LENGTH = 32;
|
|
2
|
+
declare const PRIVATE_KEY_BYTE_LENGTH = 64;
|
|
3
|
+
export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength };
|
|
4
|
+
export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
|
|
5
|
+
export declare function generateKey(): Promise<{
|
|
6
|
+
privateKey: Uint8Array;
|
|
7
|
+
publicKey: Uint8Array;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Generate keypair from a 32 byte uint8array
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateKeyFromSeed(seed: Uint8Array): Promise<{
|
|
13
|
+
privateKey: Uint8Array;
|
|
14
|
+
publicKey: Uint8Array;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function hashAndSign(privateKey: Uint8Array, msg: Uint8Array): Promise<Uint8Array>;
|
|
17
|
+
export declare function hashAndVerify(publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array): Promise<boolean>;
|
|
18
|
+
//# sourceMappingURL=ed25519-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AAEA,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,wBAAsB,WAAW;;;GAYhC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAE,IAAI,EAAE,UAAU;;;GAiB1D;AAED,wBAAsB,WAAW,CAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,uBAIzE;AAED,wBAAsB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,oBAE3F"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as ed from '@noble/ed25519';
|
|
2
|
+
const PUBLIC_KEY_BYTE_LENGTH = 32;
|
|
3
|
+
const PRIVATE_KEY_BYTE_LENGTH = 64; // private key is actually 32 bytes but for historical reasons we concat private and public keys
|
|
4
|
+
const KEYS_BYTE_LENGTH = 32;
|
|
5
|
+
export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength };
|
|
6
|
+
export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
|
|
7
|
+
export async function generateKey() {
|
|
8
|
+
// the actual private key (32 bytes)
|
|
9
|
+
const privateKeyRaw = ed.utils.randomPrivateKey();
|
|
10
|
+
const publicKey = await ed.getPublicKey(privateKeyRaw);
|
|
11
|
+
// concatenated the public key to the private key
|
|
12
|
+
const privateKey = concatKeys(privateKeyRaw, publicKey);
|
|
13
|
+
return {
|
|
14
|
+
privateKey,
|
|
15
|
+
publicKey
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate keypair from a 32 byte uint8array
|
|
20
|
+
*/
|
|
21
|
+
export async function generateKeyFromSeed(seed) {
|
|
22
|
+
if (seed.length !== KEYS_BYTE_LENGTH) {
|
|
23
|
+
throw new TypeError('"seed" must be 32 bytes in length.');
|
|
24
|
+
}
|
|
25
|
+
else if (!(seed instanceof Uint8Array)) {
|
|
26
|
+
throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');
|
|
27
|
+
}
|
|
28
|
+
// based on node forges algorithm, the seed is used directly as private key
|
|
29
|
+
const privateKeyRaw = seed;
|
|
30
|
+
const publicKey = await ed.getPublicKey(privateKeyRaw);
|
|
31
|
+
const privateKey = concatKeys(privateKeyRaw, publicKey);
|
|
32
|
+
return {
|
|
33
|
+
privateKey,
|
|
34
|
+
publicKey
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function hashAndSign(privateKey, msg) {
|
|
38
|
+
const privateKeyRaw = privateKey.subarray(0, KEYS_BYTE_LENGTH);
|
|
39
|
+
return await ed.sign(msg, privateKeyRaw);
|
|
40
|
+
}
|
|
41
|
+
export async function hashAndVerify(publicKey, sig, msg) {
|
|
42
|
+
return await ed.verify(sig, msg, publicKey);
|
|
43
|
+
}
|
|
44
|
+
function concatKeys(privateKeyRaw, publicKey) {
|
|
45
|
+
const privateKey = new Uint8Array(PRIVATE_KEY_BYTE_LENGTH);
|
|
46
|
+
for (let i = 0; i < KEYS_BYTE_LENGTH; i++) {
|
|
47
|
+
privateKey[i] = privateKeyRaw[i];
|
|
48
|
+
privateKey[KEYS_BYTE_LENGTH + i] = publicKey[i];
|
|
49
|
+
}
|
|
50
|
+
return privateKey;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=ed25519-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519-browser.js","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEpC,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACjC,MAAM,uBAAuB,GAAG,EAAE,CAAA,CAAC,gGAAgG;AACnI,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,oCAAoC;IACpC,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;IACjD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEtD,iDAAiD;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IAEvD,OAAO;QACL,UAAU;QACV,SAAS;KACV,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAE,IAAgB;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,EAAE;QACpC,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAA;KAC1D;SAAM,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,EAAE;QACxC,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;KACvE;IAED,2EAA2E;IAC3E,MAAM,aAAa,GAAG,IAAI,CAAA;IAC1B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEtD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IAEvD,OAAO;QACL,UAAU;QACV,SAAS;KACV,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,UAAsB,EAAE,GAAe;IACxE,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAE9D,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,SAAqB,EAAE,GAAe,EAAE,GAAe;IAC1F,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,UAAU,CAAE,aAAyB,EAAE,SAAqB;IACnE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAA;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;QACzC,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAChC,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;KAChD;IACD,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
export declare class Ed25519PublicKey {
|
|
2
3
|
private readonly _key;
|
|
3
4
|
constructor(key: Uint8Array);
|
|
@@ -11,7 +12,7 @@ export declare class Ed25519PrivateKey {
|
|
|
11
12
|
private readonly _key;
|
|
12
13
|
private readonly _publicKey;
|
|
13
14
|
constructor(key: Uint8Array, publicKey: Uint8Array);
|
|
14
|
-
sign(message: Uint8Array): Promise<
|
|
15
|
+
sign(message: Uint8Array): Promise<Buffer>;
|
|
15
16
|
get public(): Ed25519PublicKey;
|
|
16
17
|
marshal(): Uint8Array;
|
|
17
18
|
get bytes(): Uint8Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519-class.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519-class.ts"],"names":[],"mappings":"AASA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAEpB,GAAG,EAAE,UAAU;IAItB,MAAM,CAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU;IAI/C,OAAO;IAIP,IAAI,KAAK,eAKR;IAED,MAAM,CAAE,GAAG,EAAE,GAAG;IAIV,IAAI;CAKX;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAI1B,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IAK7C,IAAI,CAAE,OAAO,EAAE,UAAU;IAI/B,IAAI,MAAM,qBAET;IAED,OAAO;IAIP,IAAI,KAAK,eAKR;IAED,MAAM,CAAE,GAAG,EAAE,GAAG;IAIV,IAAI;IAMV;;;;;;;;OAQG;IACG,EAAE;IAKR;;OAEG;IACG,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAe;CAOtD;AAED,wBAAgB,0BAA0B,CAAE,KAAK,EAAE,UAAU,qBAa5D;AAED,wBAAgB,yBAAyB,CAAE,KAAK,EAAE,UAAU,oBAG3D;AAED,wBAAsB,eAAe,+BAGpC;AAED,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,UAAU,8BAG9D"}
|
|
1
|
+
{"version":3,"file":"ed25519-class.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519-class.ts"],"names":[],"mappings":";AASA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAEpB,GAAG,EAAE,UAAU;IAItB,MAAM,CAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU;IAI/C,OAAO;IAIP,IAAI,KAAK,eAKR;IAED,MAAM,CAAE,GAAG,EAAE,GAAG;IAIV,IAAI;CAKX;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAI1B,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IAK7C,IAAI,CAAE,OAAO,EAAE,UAAU;IAI/B,IAAI,MAAM,qBAET;IAED,OAAO;IAIP,IAAI,KAAK,eAKR;IAED,MAAM,CAAE,GAAG,EAAE,GAAG;IAIV,IAAI;IAMV;;;;;;;;OAQG;IACG,EAAE;IAKR;;OAEG;IACG,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAe;CAOtD;AAED,wBAAgB,0BAA0B,CAAE,KAAK,EAAE,UAAU,qBAa5D;AAED,wBAAgB,yBAAyB,CAAE,KAAK,EAAE,UAAU,oBAG3D;AAED,wBAAsB,eAAe,+BAGpC;AAED,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,UAAU,8BAG9D"}
|
|
@@ -88,13 +88,13 @@ export function unmarshalEd25519PrivateKey(bytes) {
|
|
|
88
88
|
// Try the old, redundant public key version
|
|
89
89
|
if (bytes.length > crypto.privateKeyLength) {
|
|
90
90
|
bytes = ensureKey(bytes, crypto.privateKeyLength + crypto.publicKeyLength);
|
|
91
|
-
const privateKeyBytes = bytes.
|
|
92
|
-
const publicKeyBytes = bytes.
|
|
91
|
+
const privateKeyBytes = bytes.subarray(0, crypto.privateKeyLength);
|
|
92
|
+
const publicKeyBytes = bytes.subarray(crypto.privateKeyLength, bytes.length);
|
|
93
93
|
return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes);
|
|
94
94
|
}
|
|
95
95
|
bytes = ensureKey(bytes, crypto.privateKeyLength);
|
|
96
|
-
const privateKeyBytes = bytes.
|
|
97
|
-
const publicKeyBytes = bytes.
|
|
96
|
+
const privateKeyBytes = bytes.subarray(0, crypto.privateKeyLength);
|
|
97
|
+
const publicKeyBytes = bytes.subarray(crypto.publicKeyLength);
|
|
98
98
|
return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes);
|
|
99
99
|
}
|
|
100
100
|
export function unmarshalEd25519PublicKey(bytes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519-class.js","sourceRoot":"","sources":["../../../src/keys/ed25519-class.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ed25519-class.js","sourceRoot":"","sources":["../../../src/keys/ed25519-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
declare const PUBLIC_KEY_BYTE_LENGTH = 32;
|
|
2
3
|
declare const PRIVATE_KEY_BYTE_LENGTH = 64;
|
|
3
4
|
export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength };
|
|
@@ -11,8 +12,8 @@ export declare function generateKey(): Promise<{
|
|
|
11
12
|
*/
|
|
12
13
|
export declare function generateKeyFromSeed(seed: Uint8Array): Promise<{
|
|
13
14
|
privateKey: Uint8Array;
|
|
14
|
-
publicKey:
|
|
15
|
+
publicKey: Buffer;
|
|
15
16
|
}>;
|
|
16
|
-
export declare function hashAndSign(
|
|
17
|
-
export declare function hashAndVerify(
|
|
17
|
+
export declare function hashAndSign(key: Uint8Array, msg: Uint8Array): Promise<Buffer>;
|
|
18
|
+
export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array): Promise<boolean>;
|
|
18
19
|
//# sourceMappingURL=ed25519.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519.ts"],"names":[],"mappings":";AAOA,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAIlC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAQtD,wBAAsB,WAAW;;;GAehC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAE,IAAI,EAAE,UAAU;;;GAc1D;AAED,wBAAsB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,mBA6BlE;AAED,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,oBAuBrF"}
|
package/dist/src/keys/ed25519.js
CHANGED
|
@@ -1,18 +1,31 @@
|
|
|
1
|
-
import
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { toString as uint8arrayToString } from 'uint8arrays/to-string';
|
|
4
|
+
import { fromString as uint8arrayFromString } from 'uint8arrays/from-string';
|
|
5
|
+
const keypair = promisify(crypto.generateKeyPair);
|
|
2
6
|
const PUBLIC_KEY_BYTE_LENGTH = 32;
|
|
3
7
|
const PRIVATE_KEY_BYTE_LENGTH = 64; // private key is actually 32 bytes but for historical reasons we concat private and public keys
|
|
4
8
|
const KEYS_BYTE_LENGTH = 32;
|
|
9
|
+
const SIGNATURE_BYTE_LENGTH = 64;
|
|
5
10
|
export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength };
|
|
6
11
|
export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
|
|
12
|
+
function derivePublicKey(privateKey) {
|
|
13
|
+
const hash = crypto.createHash('sha512');
|
|
14
|
+
hash.update(privateKey);
|
|
15
|
+
return hash.digest().subarray(32);
|
|
16
|
+
}
|
|
7
17
|
export async function generateKey() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
18
|
+
const key = await keypair('ed25519', {
|
|
19
|
+
publicKeyEncoding: { type: 'spki', format: 'jwk' },
|
|
20
|
+
privateKeyEncoding: { type: 'pkcs8', format: 'jwk' }
|
|
21
|
+
});
|
|
22
|
+
// @ts-expect-error node types are missing jwk as a format
|
|
23
|
+
const privateKeyRaw = uint8arrayFromString(key.privateKey.d, 'base64url');
|
|
24
|
+
// @ts-expect-error node types are missing jwk as a format
|
|
25
|
+
const publicKeyRaw = uint8arrayFromString(key.privateKey.x, 'base64url');
|
|
13
26
|
return {
|
|
14
|
-
privateKey,
|
|
15
|
-
publicKey
|
|
27
|
+
privateKey: concatKeys(privateKeyRaw, publicKeyRaw),
|
|
28
|
+
publicKey: publicKeyRaw
|
|
16
29
|
};
|
|
17
30
|
}
|
|
18
31
|
/**
|
|
@@ -26,20 +39,62 @@ export async function generateKeyFromSeed(seed) {
|
|
|
26
39
|
throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');
|
|
27
40
|
}
|
|
28
41
|
// based on node forges algorithm, the seed is used directly as private key
|
|
29
|
-
const
|
|
30
|
-
const publicKey = await ed.getPublicKey(privateKeyRaw);
|
|
31
|
-
const privateKey = concatKeys(privateKeyRaw, publicKey);
|
|
42
|
+
const publicKeyRaw = derivePublicKey(seed);
|
|
32
43
|
return {
|
|
33
|
-
privateKey,
|
|
34
|
-
publicKey
|
|
44
|
+
privateKey: concatKeys(seed, publicKeyRaw),
|
|
45
|
+
publicKey: publicKeyRaw
|
|
35
46
|
};
|
|
36
47
|
}
|
|
37
|
-
export async function hashAndSign(
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
export async function hashAndSign(key, msg) {
|
|
49
|
+
if (!(key instanceof Uint8Array)) {
|
|
50
|
+
throw new TypeError('"key" must be a node.js Buffer, or Uint8Array.');
|
|
51
|
+
}
|
|
52
|
+
let privateKey;
|
|
53
|
+
let publicKey;
|
|
54
|
+
if (key.byteLength === PRIVATE_KEY_BYTE_LENGTH) {
|
|
55
|
+
privateKey = key.subarray(0, 32);
|
|
56
|
+
publicKey = key.subarray(32);
|
|
57
|
+
}
|
|
58
|
+
else if (key.byteLength === KEYS_BYTE_LENGTH) {
|
|
59
|
+
privateKey = key.subarray(0, 32);
|
|
60
|
+
publicKey = derivePublicKey(privateKey);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
throw new TypeError('"key" must be 64 or 32 bytes in length.');
|
|
64
|
+
}
|
|
65
|
+
const obj = crypto.createPrivateKey({
|
|
66
|
+
format: 'jwk',
|
|
67
|
+
key: {
|
|
68
|
+
crv: 'Ed25519',
|
|
69
|
+
d: uint8arrayToString(privateKey, 'base64url'),
|
|
70
|
+
x: uint8arrayToString(publicKey, 'base64url'),
|
|
71
|
+
kty: 'OKP'
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return crypto.sign(null, msg, obj);
|
|
40
75
|
}
|
|
41
|
-
export async function hashAndVerify(
|
|
42
|
-
|
|
76
|
+
export async function hashAndVerify(key, sig, msg) {
|
|
77
|
+
if (key.byteLength !== PUBLIC_KEY_BYTE_LENGTH) {
|
|
78
|
+
throw new TypeError('"key" must be 32 bytes in length.');
|
|
79
|
+
}
|
|
80
|
+
else if (!(key instanceof Uint8Array)) {
|
|
81
|
+
throw new TypeError('"key" must be a node.js Buffer, or Uint8Array.');
|
|
82
|
+
}
|
|
83
|
+
if (sig.byteLength !== SIGNATURE_BYTE_LENGTH) {
|
|
84
|
+
throw new TypeError('"sig" must be 64 bytes in length.');
|
|
85
|
+
}
|
|
86
|
+
else if (!(sig instanceof Uint8Array)) {
|
|
87
|
+
throw new TypeError('"sig" must be a node.js Buffer, or Uint8Array.');
|
|
88
|
+
}
|
|
89
|
+
const obj = crypto.createPublicKey({
|
|
90
|
+
format: 'jwk',
|
|
91
|
+
key: {
|
|
92
|
+
crv: 'Ed25519',
|
|
93
|
+
x: uint8arrayToString(key, 'base64url'),
|
|
94
|
+
kty: 'OKP'
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return crypto.verify(null, msg, obj, sig);
|
|
43
98
|
}
|
|
44
99
|
function concatKeys(privateKeyRaw, publicKey) {
|
|
45
100
|
const privateKey = new Uint8Array(PRIVATE_KEY_BYTE_LENGTH);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../../src/keys/ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../../src/keys/ed25519.ts"],"names":[],"mappings":"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"}
|
package/dist/src/keys/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { PrivateKey, PublicKey } from '@libp2p/interface-keys';
|
|
|
10
10
|
export { keyStretcher };
|
|
11
11
|
export { generateEphemeralKeyPair };
|
|
12
12
|
export { keysPBM };
|
|
13
|
-
export
|
|
13
|
+
export type KeyTypes = 'RSA' | 'Ed25519' | 'secp256k1';
|
|
14
14
|
export declare const supportedKeys: {
|
|
15
15
|
rsa: typeof RSA;
|
|
16
16
|
ed25519: typeof Ed25519;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAA;AACpC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,uBAAuB,CAAA;AAK9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,wBAAwB,MAAM,qBAAqB,CAAA;AAE1D,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEnE,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,OAAO,EAAE,wBAAwB,EAAE,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAA;AACpC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,uBAAuB,CAAA;AAK9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,wBAAwB,MAAM,qBAAqB,CAAA;AAE1D,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEnE,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;AAkBD,wBAAsB,eAAe,CAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzF;AAID,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAMnH;AAID,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,SAAS,CAc9D;AAGD,wBAAgB,gBAAgB,CAAE,GAAG,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAIvF;AAID,wBAAsB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAc/E;AAGD,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"}
|
|
@@ -50,12 +50,12 @@ export async function keyStretcher(cipherType, hash, secret) {
|
|
|
50
50
|
}
|
|
51
51
|
const half = resultLength / 2;
|
|
52
52
|
const resultBuffer = uint8ArrayConcat(result);
|
|
53
|
-
const r1 = resultBuffer.
|
|
54
|
-
const r2 = resultBuffer.
|
|
53
|
+
const r1 = resultBuffer.subarray(0, half);
|
|
54
|
+
const r2 = resultBuffer.subarray(half, resultLength);
|
|
55
55
|
const createKey = (res) => ({
|
|
56
|
-
iv: res.
|
|
57
|
-
cipherKey: res.
|
|
58
|
-
macKey: res.
|
|
56
|
+
iv: res.subarray(0, ivSize),
|
|
57
|
+
cipherKey: res.subarray(ivSize, ivSize + cipherKeySize),
|
|
58
|
+
macKey: res.subarray(ivSize + cipherKeySize)
|
|
59
59
|
});
|
|
60
60
|
return {
|
|
61
61
|
k1: createKey(r1),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-stretcher.js","sourceRoot":"","sources":["../../../src/keys/key-stretcher.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAA;AAExC,MAAM,SAAS,GAAG;IAChB,SAAS,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,EAAE;KACZ;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,UAA8C,EAAE,IAAkC,EAAE,MAAkB;IACxI,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IAEpC,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClD,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,wBAAwB,UAAU,cAAc,OAAO,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAA;KAC/G;IAED,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC,CAAA;KACvE;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,MAAM,WAAW,GAAG,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC,CAAA;IAE/D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAE5B,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,IAAI,CAAC,GAAG,CAAC,CAAA;IAET,OAAO,CAAC,GAAG,YAAY,EAAE;QACvB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACrD,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAA;QAEnB,IAAI,CAAC,GAAG,IAAI,GAAG,YAAY,EAAE;YAC3B,IAAI,GAAG,YAAY,GAAG,CAAC,CAAA;SACxB;QAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACd,CAAC,IAAI,IAAI,CAAA;QACT,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;KACtB;IAED,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC,CAAA;IAC7B,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"key-stretcher.js","sourceRoot":"","sources":["../../../src/keys/key-stretcher.ts"],"names":[],"mappings":"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"}
|
package/dist/src/util.js
CHANGED
|
@@ -12,7 +12,7 @@ export function bigIntegerToUintBase64url(num, len) {
|
|
|
12
12
|
// byte if the most significant bit of the number is 1:
|
|
13
13
|
// https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-integer
|
|
14
14
|
// Our number will always be positive so we should remove the leading padding.
|
|
15
|
-
buf = buf[0] === 0 ? buf.
|
|
15
|
+
buf = buf[0] === 0 ? buf.subarray(1) : buf;
|
|
16
16
|
if (len != null) {
|
|
17
17
|
if (buf.length > len)
|
|
18
18
|
throw new Error('byte array longer than desired length');
|
package/dist/src/util.js.map
CHANGED
|
@@ -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,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,MAAM,UAAU,yBAAyB,CAAE,GAAsB,EAAE,GAAY;IAC7E,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,
|
|
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,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,MAAM,UAAU,yBAAyB,CAAE,GAAsB,EAAE,GAAY;IAC7E,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;QACf,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;KAChE;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;QACf,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;KAChE;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/crypto",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "Crypto primitives for libp2p",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-crypto#readme",
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
"aegir": "^37.0.12",
|
|
193
193
|
"benchmark": "^2.1.4",
|
|
194
194
|
"protons": "^6.0.0",
|
|
195
|
-
"sinon": "^
|
|
195
|
+
"sinon": "^15.0.0",
|
|
196
196
|
"util": "^0.12.3",
|
|
197
197
|
"wherearewe": "^2.0.1"
|
|
198
198
|
},
|
|
@@ -201,6 +201,7 @@
|
|
|
201
201
|
"./dist/src/ciphers/aes-gcm.js": "./dist/src/ciphers/aes-gcm.browser.js",
|
|
202
202
|
"./dist/src/hmac/index.js": "./dist/src/hmac/index-browser.js",
|
|
203
203
|
"./dist/src/keys/ecdh.js": "./dist/src/keys/ecdh-browser.js",
|
|
204
|
+
"./dist/src/keys/ed25519.js": "./dist/src/keys/ed25519-browser.js",
|
|
204
205
|
"./dist/src/keys/rsa.js": "./dist/src/keys/rsa-browser.js"
|
|
205
206
|
}
|
|
206
207
|
}
|
|
@@ -46,9 +46,9 @@ export function create (opts?: CreateOptions) {
|
|
|
46
46
|
* the encryption cipher.
|
|
47
47
|
*/
|
|
48
48
|
async function decrypt (data: Uint8Array, password: string | Uint8Array) {
|
|
49
|
-
const salt = data.
|
|
50
|
-
const nonce = data.
|
|
51
|
-
const ciphertext = data.
|
|
49
|
+
const salt = data.subarray(0, saltLength)
|
|
50
|
+
const nonce = data.subarray(saltLength, saltLength + nonceLength)
|
|
51
|
+
const ciphertext = data.subarray(saltLength + nonceLength)
|
|
52
52
|
const aesGcm = { name: algorithm, iv: nonce }
|
|
53
53
|
|
|
54
54
|
if (typeof password === 'string') {
|
package/src/ciphers/aes-gcm.ts
CHANGED
|
@@ -55,9 +55,9 @@ export function create (opts?: CreateOptions) {
|
|
|
55
55
|
*/
|
|
56
56
|
async function decryptWithKey (ciphertextAndNonce: Uint8Array, key: Uint8Array) { // eslint-disable-line require-await
|
|
57
57
|
// Create Uint8Arrays of nonce, ciphertext and tag.
|
|
58
|
-
const nonce = ciphertextAndNonce.
|
|
59
|
-
const ciphertext = ciphertextAndNonce.
|
|
60
|
-
const tag = ciphertextAndNonce.
|
|
58
|
+
const nonce = ciphertextAndNonce.subarray(0, nonceLength)
|
|
59
|
+
const ciphertext = ciphertextAndNonce.subarray(nonceLength, ciphertextAndNonce.length - algorithmTagLength)
|
|
60
|
+
const tag = ciphertextAndNonce.subarray(ciphertext.length + nonceLength)
|
|
61
61
|
|
|
62
62
|
// Create the cipher instance.
|
|
63
63
|
const cipher = crypto.createDecipheriv(algorithm, key, nonce)
|
|
@@ -79,8 +79,8 @@ export function create (opts?: CreateOptions) {
|
|
|
79
79
|
*/
|
|
80
80
|
async function decrypt (data: Uint8Array, password: string | Uint8Array) { // eslint-disable-line require-await
|
|
81
81
|
// Create Uint8Arrays of salt and ciphertextAndNonce.
|
|
82
|
-
const salt = data.
|
|
83
|
-
const ciphertextAndNonce = data.
|
|
82
|
+
const salt = data.subarray(0, saltLength)
|
|
83
|
+
const ciphertextAndNonce = data.subarray(saltLength)
|
|
84
84
|
|
|
85
85
|
if (typeof password === 'string') {
|
|
86
86
|
password = uint8ArrayFromString(password)
|
package/src/keys/ecdh-browser.ts
CHANGED
|
@@ -118,15 +118,15 @@ function unmarshalPublicKey (curve: string, key: Uint8Array) {
|
|
|
118
118
|
|
|
119
119
|
const byteLen = curveLengths[curve]
|
|
120
120
|
|
|
121
|
-
if (!uint8ArrayEquals(key.
|
|
121
|
+
if (!uint8ArrayEquals(key.subarray(0, 1), Uint8Array.from([4]))) {
|
|
122
122
|
throw errcode(new Error('Cannot unmarshal public key - invalid key format'), 'ERR_INVALID_KEY_FORMAT')
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
return {
|
|
126
126
|
kty: 'EC',
|
|
127
127
|
crv: curve,
|
|
128
|
-
x: uint8ArrayToString(key.
|
|
129
|
-
y: uint8ArrayToString(key.
|
|
128
|
+
x: uint8ArrayToString(key.subarray(1, byteLen + 1), 'base64url'),
|
|
129
|
+
y: uint8ArrayToString(key.subarray(1 + byteLen), 'base64url'),
|
|
130
130
|
ext: true
|
|
131
131
|
}
|
|
132
132
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as ed from '@noble/ed25519'
|
|
2
|
+
|
|
3
|
+
const PUBLIC_KEY_BYTE_LENGTH = 32
|
|
4
|
+
const PRIVATE_KEY_BYTE_LENGTH = 64 // private key is actually 32 bytes but for historical reasons we concat private and public keys
|
|
5
|
+
const KEYS_BYTE_LENGTH = 32
|
|
6
|
+
|
|
7
|
+
export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength }
|
|
8
|
+
export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
|
|
9
|
+
|
|
10
|
+
export async function generateKey () {
|
|
11
|
+
// the actual private key (32 bytes)
|
|
12
|
+
const privateKeyRaw = ed.utils.randomPrivateKey()
|
|
13
|
+
const publicKey = await ed.getPublicKey(privateKeyRaw)
|
|
14
|
+
|
|
15
|
+
// concatenated the public key to the private key
|
|
16
|
+
const privateKey = concatKeys(privateKeyRaw, publicKey)
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
privateKey,
|
|
20
|
+
publicKey
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Generate keypair from a 32 byte uint8array
|
|
26
|
+
*/
|
|
27
|
+
export async function generateKeyFromSeed (seed: Uint8Array) {
|
|
28
|
+
if (seed.length !== KEYS_BYTE_LENGTH) {
|
|
29
|
+
throw new TypeError('"seed" must be 32 bytes in length.')
|
|
30
|
+
} else if (!(seed instanceof Uint8Array)) {
|
|
31
|
+
throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// based on node forges algorithm, the seed is used directly as private key
|
|
35
|
+
const privateKeyRaw = seed
|
|
36
|
+
const publicKey = await ed.getPublicKey(privateKeyRaw)
|
|
37
|
+
|
|
38
|
+
const privateKey = concatKeys(privateKeyRaw, publicKey)
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
privateKey,
|
|
42
|
+
publicKey
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function hashAndSign (privateKey: Uint8Array, msg: Uint8Array) {
|
|
47
|
+
const privateKeyRaw = privateKey.subarray(0, KEYS_BYTE_LENGTH)
|
|
48
|
+
|
|
49
|
+
return await ed.sign(msg, privateKeyRaw)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export async function hashAndVerify (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array) {
|
|
53
|
+
return await ed.verify(sig, msg, publicKey)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function concatKeys (privateKeyRaw: Uint8Array, publicKey: Uint8Array) {
|
|
57
|
+
const privateKey = new Uint8Array(PRIVATE_KEY_BYTE_LENGTH)
|
|
58
|
+
for (let i = 0; i < KEYS_BYTE_LENGTH; i++) {
|
|
59
|
+
privateKey[i] = privateKeyRaw[i]
|
|
60
|
+
privateKey[KEYS_BYTE_LENGTH + i] = publicKey[i]
|
|
61
|
+
}
|
|
62
|
+
return privateKey
|
|
63
|
+
}
|
|
@@ -110,14 +110,14 @@ export function unmarshalEd25519PrivateKey (bytes: Uint8Array) {
|
|
|
110
110
|
// Try the old, redundant public key version
|
|
111
111
|
if (bytes.length > crypto.privateKeyLength) {
|
|
112
112
|
bytes = ensureKey(bytes, crypto.privateKeyLength + crypto.publicKeyLength)
|
|
113
|
-
const privateKeyBytes = bytes.
|
|
114
|
-
const publicKeyBytes = bytes.
|
|
113
|
+
const privateKeyBytes = bytes.subarray(0, crypto.privateKeyLength)
|
|
114
|
+
const publicKeyBytes = bytes.subarray(crypto.privateKeyLength, bytes.length)
|
|
115
115
|
return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes)
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
bytes = ensureKey(bytes, crypto.privateKeyLength)
|
|
119
|
-
const privateKeyBytes = bytes.
|
|
120
|
-
const publicKeyBytes = bytes.
|
|
119
|
+
const privateKeyBytes = bytes.subarray(0, crypto.privateKeyLength)
|
|
120
|
+
const publicKeyBytes = bytes.subarray(crypto.publicKeyLength)
|
|
121
121
|
return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes)
|
|
122
122
|
}
|
|
123
123
|
|
package/src/keys/ed25519.ts
CHANGED
|
@@ -1,23 +1,38 @@
|
|
|
1
|
-
import
|
|
1
|
+
import crypto from 'crypto'
|
|
2
|
+
import { promisify } from 'util'
|
|
3
|
+
import { toString as uint8arrayToString } from 'uint8arrays/to-string'
|
|
4
|
+
import { fromString as uint8arrayFromString } from 'uint8arrays/from-string'
|
|
5
|
+
|
|
6
|
+
const keypair = promisify(crypto.generateKeyPair)
|
|
2
7
|
|
|
3
8
|
const PUBLIC_KEY_BYTE_LENGTH = 32
|
|
4
9
|
const PRIVATE_KEY_BYTE_LENGTH = 64 // private key is actually 32 bytes but for historical reasons we concat private and public keys
|
|
5
10
|
const KEYS_BYTE_LENGTH = 32
|
|
11
|
+
const SIGNATURE_BYTE_LENGTH = 64
|
|
6
12
|
|
|
7
13
|
export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength }
|
|
8
14
|
export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
|
|
9
15
|
|
|
16
|
+
function derivePublicKey (privateKey: Uint8Array) {
|
|
17
|
+
const hash = crypto.createHash('sha512')
|
|
18
|
+
hash.update(privateKey)
|
|
19
|
+
return hash.digest().subarray(32)
|
|
20
|
+
}
|
|
21
|
+
|
|
10
22
|
export async function generateKey () {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
const key = await keypair('ed25519', {
|
|
24
|
+
publicKeyEncoding: { type: 'spki', format: 'jwk' },
|
|
25
|
+
privateKeyEncoding: { type: 'pkcs8', format: 'jwk' }
|
|
26
|
+
})
|
|
14
27
|
|
|
15
|
-
//
|
|
16
|
-
const
|
|
28
|
+
// @ts-expect-error node types are missing jwk as a format
|
|
29
|
+
const privateKeyRaw = uint8arrayFromString(key.privateKey.d, 'base64url')
|
|
30
|
+
// @ts-expect-error node types are missing jwk as a format
|
|
31
|
+
const publicKeyRaw = uint8arrayFromString(key.privateKey.x, 'base64url')
|
|
17
32
|
|
|
18
33
|
return {
|
|
19
|
-
privateKey,
|
|
20
|
-
publicKey
|
|
34
|
+
privateKey: concatKeys(privateKeyRaw, publicKeyRaw),
|
|
35
|
+
publicKey: publicKeyRaw
|
|
21
36
|
}
|
|
22
37
|
}
|
|
23
38
|
|
|
@@ -32,25 +47,68 @@ export async function generateKeyFromSeed (seed: Uint8Array) {
|
|
|
32
47
|
}
|
|
33
48
|
|
|
34
49
|
// based on node forges algorithm, the seed is used directly as private key
|
|
35
|
-
const
|
|
36
|
-
const publicKey = await ed.getPublicKey(privateKeyRaw)
|
|
37
|
-
|
|
38
|
-
const privateKey = concatKeys(privateKeyRaw, publicKey)
|
|
50
|
+
const publicKeyRaw = derivePublicKey(seed)
|
|
39
51
|
|
|
40
52
|
return {
|
|
41
|
-
privateKey,
|
|
42
|
-
publicKey
|
|
53
|
+
privateKey: concatKeys(seed, publicKeyRaw),
|
|
54
|
+
publicKey: publicKeyRaw
|
|
43
55
|
}
|
|
44
56
|
}
|
|
45
57
|
|
|
46
|
-
export async function hashAndSign (
|
|
47
|
-
|
|
58
|
+
export async function hashAndSign (key: Uint8Array, msg: Uint8Array) {
|
|
59
|
+
if (!(key instanceof Uint8Array)) {
|
|
60
|
+
throw new TypeError('"key" must be a node.js Buffer, or Uint8Array.')
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
let privateKey: Uint8Array
|
|
64
|
+
let publicKey: Uint8Array
|
|
65
|
+
|
|
66
|
+
if (key.byteLength === PRIVATE_KEY_BYTE_LENGTH) {
|
|
67
|
+
privateKey = key.subarray(0, 32)
|
|
68
|
+
publicKey = key.subarray(32)
|
|
69
|
+
} else if (key.byteLength === KEYS_BYTE_LENGTH) {
|
|
70
|
+
privateKey = key.subarray(0, 32)
|
|
71
|
+
publicKey = derivePublicKey(privateKey)
|
|
72
|
+
} else {
|
|
73
|
+
throw new TypeError('"key" must be 64 or 32 bytes in length.')
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const obj = crypto.createPrivateKey({
|
|
77
|
+
format: 'jwk',
|
|
78
|
+
key: {
|
|
79
|
+
crv: 'Ed25519',
|
|
80
|
+
d: uint8arrayToString(privateKey, 'base64url'),
|
|
81
|
+
x: uint8arrayToString(publicKey, 'base64url'),
|
|
82
|
+
kty: 'OKP'
|
|
83
|
+
}
|
|
84
|
+
})
|
|
48
85
|
|
|
49
|
-
return
|
|
86
|
+
return crypto.sign(null, msg, obj)
|
|
50
87
|
}
|
|
51
88
|
|
|
52
|
-
export async function hashAndVerify (
|
|
53
|
-
|
|
89
|
+
export async function hashAndVerify (key: Uint8Array, sig: Uint8Array, msg: Uint8Array) {
|
|
90
|
+
if (key.byteLength !== PUBLIC_KEY_BYTE_LENGTH) {
|
|
91
|
+
throw new TypeError('"key" must be 32 bytes in length.')
|
|
92
|
+
} else if (!(key instanceof Uint8Array)) {
|
|
93
|
+
throw new TypeError('"key" must be a node.js Buffer, or Uint8Array.')
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (sig.byteLength !== SIGNATURE_BYTE_LENGTH) {
|
|
97
|
+
throw new TypeError('"sig" must be 64 bytes in length.')
|
|
98
|
+
} else if (!(sig instanceof Uint8Array)) {
|
|
99
|
+
throw new TypeError('"sig" must be a node.js Buffer, or Uint8Array.')
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const obj = crypto.createPublicKey({
|
|
103
|
+
format: 'jwk',
|
|
104
|
+
key: {
|
|
105
|
+
crv: 'Ed25519',
|
|
106
|
+
x: uint8arrayToString(key, 'base64url'),
|
|
107
|
+
kty: 'OKP'
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
return crypto.verify(null, msg, obj, sig)
|
|
54
112
|
}
|
|
55
113
|
|
|
56
114
|
function concatKeys (privateKeyRaw: Uint8Array, publicKey: Uint8Array) {
|
|
@@ -61,13 +61,13 @@ export async function keyStretcher (cipherType: 'AES-128' | 'AES-256' | 'Blowfis
|
|
|
61
61
|
|
|
62
62
|
const half = resultLength / 2
|
|
63
63
|
const resultBuffer = uint8ArrayConcat(result)
|
|
64
|
-
const r1 = resultBuffer.
|
|
65
|
-
const r2 = resultBuffer.
|
|
64
|
+
const r1 = resultBuffer.subarray(0, half)
|
|
65
|
+
const r2 = resultBuffer.subarray(half, resultLength)
|
|
66
66
|
|
|
67
67
|
const createKey = (res: Uint8Array) => ({
|
|
68
|
-
iv: res.
|
|
69
|
-
cipherKey: res.
|
|
70
|
-
macKey: res.
|
|
68
|
+
iv: res.subarray(0, ivSize),
|
|
69
|
+
cipherKey: res.subarray(ivSize, ivSize + cipherKeySize),
|
|
70
|
+
macKey: res.subarray(ivSize + cipherKeySize)
|
|
71
71
|
})
|
|
72
72
|
|
|
73
73
|
return {
|
package/src/util.ts
CHANGED
|
@@ -14,7 +14,7 @@ export function bigIntegerToUintBase64url (num: { abs: () => any}, len?: number)
|
|
|
14
14
|
// byte if the most significant bit of the number is 1:
|
|
15
15
|
// https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-integer
|
|
16
16
|
// Our number will always be positive so we should remove the leading padding.
|
|
17
|
-
buf = buf[0] === 0 ? buf.
|
|
17
|
+
buf = buf[0] === 0 ? buf.subarray(1) : buf
|
|
18
18
|
|
|
19
19
|
if (len != null) {
|
|
20
20
|
if (buf.length > len) throw new Error('byte array longer than desired length')
|