@libp2p/crypto 0.0.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +314 -0
- 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 +8 -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 +6 -0
- package/dist/src/aes/index.d.ts.map +1 -0
- package/dist/src/aes/index.js +17 -0
- package/dist/src/aes/index.js.map +1 -0
- package/dist/src/ciphers/aes-gcm.browser.d.ts +3 -0
- package/dist/src/ciphers/aes-gcm.browser.d.ts.map +1 -0
- package/dist/src/ciphers/aes-gcm.browser.js +61 -0
- package/dist/src/ciphers/aes-gcm.browser.js.map +1 -0
- package/dist/src/ciphers/aes-gcm.d.ts +3 -0
- package/dist/src/ciphers/aes-gcm.d.ts.map +1 -0
- package/dist/src/ciphers/aes-gcm.js +83 -0
- package/dist/src/ciphers/aes-gcm.js.map +1 -0
- package/dist/src/ciphers/interface.d.ts +14 -0
- package/dist/src/ciphers/interface.d.ts.map +1 -0
- package/dist/src/ciphers/interface.js +2 -0
- package/dist/src/ciphers/interface.js.map +1 -0
- package/dist/src/hmac/index-browser.d.ts +5 -0
- package/dist/src/hmac/index-browser.d.ts.map +1 -0
- package/dist/src/hmac/index-browser.js +25 -0
- package/dist/src/hmac/index-browser.js.map +1 -0
- package/dist/src/hmac/index.d.ts +5 -0
- package/dist/src/hmac/index.d.ts.map +1 -0
- package/dist/src/hmac/index.js +14 -0
- package/dist/src/hmac/index.js.map +1 -0
- package/dist/src/hmac/lengths.d.ts +7 -0
- package/dist/src/hmac/lengths.d.ts.map +1 -0
- package/dist/src/hmac/lengths.js +6 -0
- package/dist/src/hmac/lengths.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/keys/ecdh-browser.d.ts +3 -0
- package/dist/src/keys/ecdh-browser.d.ts.map +1 -0
- package/dist/src/keys/ecdh-browser.js +97 -0
- package/dist/src/keys/ecdh-browser.js.map +1 -0
- package/dist/src/keys/ecdh.d.ts +3 -0
- package/dist/src/keys/ecdh.d.ts.map +1 -0
- package/dist/src/keys/ecdh.js +26 -0
- package/dist/src/keys/ecdh.js.map +1 -0
- package/dist/src/keys/ed25519-class.d.ts +39 -0
- package/dist/src/keys/ed25519-class.d.ts.map +1 -0
- package/dist/src/keys/ed25519-class.js +119 -0
- package/dist/src/keys/ed25519-class.js.map +1 -0
- package/dist/src/keys/ed25519.d.ts +18 -0
- package/dist/src/keys/ed25519.d.ts.map +1 -0
- package/dist/src/keys/ed25519.js +52 -0
- package/dist/src/keys/ed25519.js.map +1 -0
- package/dist/src/keys/ephemeral-keys.d.ts +9 -0
- package/dist/src/keys/ephemeral-keys.d.ts.map +1 -0
- package/dist/src/keys/ephemeral-keys.js +9 -0
- package/dist/src/keys/ephemeral-keys.js.map +1 -0
- package/dist/src/keys/exporter.d.ts +7 -0
- package/dist/src/keys/exporter.d.ts.map +1 -0
- package/dist/src/keys/exporter.js +13 -0
- package/dist/src/keys/exporter.js.map +1 -0
- package/dist/src/keys/importer.d.ts +7 -0
- package/dist/src/keys/importer.d.ts.map +1 -0
- package/dist/src/keys/importer.js +13 -0
- package/dist/src/keys/importer.js.map +1 -0
- package/dist/src/keys/index.d.ts +33 -0
- package/dist/src/keys/index.d.ts.map +1 -0
- package/dist/src/keys/index.js +111 -0
- package/dist/src/keys/index.js.map +1 -0
- package/dist/src/keys/interface.d.ts +17 -0
- package/dist/src/keys/interface.d.ts.map +1 -0
- package/dist/src/keys/interface.js +2 -0
- package/dist/src/keys/interface.js.map +1 -0
- package/dist/src/keys/jwk2pem.d.ts +4 -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/key-stretcher.d.ts +17 -0
- package/dist/src/keys/key-stretcher.d.ts.map +1 -0
- package/dist/src/keys/key-stretcher.js +65 -0
- package/dist/src/keys/key-stretcher.js.map +1 -0
- package/dist/src/keys/keys.d.ts +225 -0
- package/dist/src/keys/keys.d.ts.map +1 -0
- package/dist/src/keys/keys.js +345 -0
- package/dist/src/keys/keys.js.map +1 -0
- package/dist/src/keys/rsa-browser.d.ts +17 -0
- package/dist/src/keys/rsa-browser.d.ts.map +1 -0
- package/dist/src/keys/rsa-browser.js +99 -0
- package/dist/src/keys/rsa-browser.js.map +1 -0
- package/dist/src/keys/rsa-class.d.ts +42 -0
- package/dist/src/keys/rsa-class.d.ts.map +1 -0
- package/dist/src/keys/rsa-class.js +126 -0
- package/dist/src/keys/rsa-class.js.map +1 -0
- package/dist/src/keys/rsa-utils.d.ts +7 -0
- package/dist/src/keys/rsa-utils.d.ts.map +1 -0
- package/dist/src/keys/rsa-utils.js +65 -0
- package/dist/src/keys/rsa-utils.js.map +1 -0
- package/dist/src/keys/rsa.d.ts +13 -0
- package/dist/src/keys/rsa.d.ts.map +1 -0
- package/dist/src/keys/rsa.js +58 -0
- package/dist/src/keys/rsa.js.map +1 -0
- package/dist/src/keys/secp256k1-class.d.ts +36 -0
- package/dist/src/keys/secp256k1-class.d.ts.map +1 -0
- package/dist/src/keys/secp256k1-class.js +95 -0
- package/dist/src/keys/secp256k1-class.js.map +1 -0
- package/dist/src/keys/secp256k1.d.ts +17 -0
- package/dist/src/keys/secp256k1.d.ts.map +1 -0
- package/dist/src/keys/secp256k1.js +65 -0
- package/dist/src/keys/secp256k1.js.map +1 -0
- package/dist/src/pbkdf2.d.ts +5 -0
- package/dist/src/pbkdf2.d.ts.map +1 -0
- package/dist/src/pbkdf2.js +30 -0
- package/dist/src/pbkdf2.js.map +1 -0
- package/dist/src/random-bytes.d.ts +2 -0
- package/dist/src/random-bytes.d.ts.map +1 -0
- package/dist/src/random-bytes.js +9 -0
- package/dist/src/random-bytes.js.map +1 -0
- package/dist/src/util.d.ts +9 -0
- package/dist/src/util.d.ts.map +1 -0
- package/dist/src/util.js +37 -0
- package/dist/src/util.js.map +1 -0
- package/dist/src/webcrypto.d.ts +5 -0
- package/dist/src/webcrypto.d.ts.map +1 -0
- package/dist/src/webcrypto.js +17 -0
- package/dist/src/webcrypto.js.map +1 -0
- package/package.json +123 -4
- package/src/aes/cipher-mode.ts +15 -0
- package/src/aes/ciphers-browser.ts +28 -0
- package/src/aes/ciphers.ts +4 -0
- package/src/aes/index.ts +25 -0
- package/src/ciphers/aes-gcm.browser.ts +74 -0
- package/src/ciphers/aes-gcm.ts +102 -0
- package/src/ciphers/interface.ts +15 -0
- package/src/hmac/index-browser.ts +35 -0
- package/src/hmac/index.ts +15 -0
- package/src/hmac/lengths.ts +6 -0
- package/src/index.ts +11 -0
- package/src/keys/ecdh-browser.ts +138 -0
- package/src/keys/ecdh.ts +33 -0
- package/src/keys/ed25519-class.ts +145 -0
- package/src/keys/ed25519.ts +63 -0
- package/src/keys/ephemeral-keys.ts +9 -0
- package/src/keys/exporter.ts +13 -0
- package/src/keys/importer.ts +13 -0
- package/src/keys/index.ts +126 -0
- package/src/keys/interface.ts +20 -0
- package/src/keys/jwk2pem.ts +16 -0
- package/src/keys/key-stretcher.ts +77 -0
- package/src/keys/keys.d.ts +146 -0
- package/src/keys/keys.js +366 -0
- package/src/keys/keys.proto +15 -0
- package/src/keys/rsa-browser.ts +156 -0
- package/src/keys/rsa-class.ts +155 -0
- package/src/keys/rsa-utils.ts +74 -0
- package/src/keys/rsa.ts +69 -0
- package/src/keys/secp256k1-class.ts +118 -0
- package/src/keys/secp256k1.ts +69 -0
- package/src/pbkdf2.ts +39 -0
- package/src/random-bytes.ts +9 -0
- package/src/util.ts +42 -0
- package/src/webcrypto.ts +24 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/ciphers/interface.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IACjF,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CAClF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/ciphers/interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../../src/hmac/index-browser.ts"],"names":[],"mappings":"AAcA,wBAAsB,MAAM,CAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM,EAAE,UAAU;iBAehE,UAAU;;GAKjC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import webcrypto from '../webcrypto.js';
|
|
2
|
+
import lengths from './lengths.js';
|
|
3
|
+
const hashTypes = {
|
|
4
|
+
SHA1: 'SHA-1',
|
|
5
|
+
SHA256: 'SHA-256',
|
|
6
|
+
SHA512: 'SHA-512'
|
|
7
|
+
};
|
|
8
|
+
const sign = async (key, data) => {
|
|
9
|
+
const buf = await webcrypto.get().subtle.sign({ name: 'HMAC' }, key, data);
|
|
10
|
+
return new Uint8Array(buf, 0, buf.byteLength);
|
|
11
|
+
};
|
|
12
|
+
export async function create(hashType, secret) {
|
|
13
|
+
const hash = hashTypes[hashType];
|
|
14
|
+
const key = await webcrypto.get().subtle.importKey('raw', secret, {
|
|
15
|
+
name: 'HMAC',
|
|
16
|
+
hash: { name: hash }
|
|
17
|
+
}, false, ['sign']);
|
|
18
|
+
return {
|
|
19
|
+
async digest(data) {
|
|
20
|
+
return await sign(key, data);
|
|
21
|
+
},
|
|
22
|
+
length: lengths[hashType]
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.js","sourceRoot":"","sources":["../../../src/hmac/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CAClB,CAAA;AAED,MAAM,IAAI,GAAG,KAAK,EAAE,GAAc,EAAE,IAAgB,EAAE,EAAE;IACtD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1E,OAAO,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAE,QAAsC,EAAE,MAAkB;IACtF,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAEhC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAChD,KAAK,EACL,MAAM,EACN;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;KACrB,EACD,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAA;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAE,IAAgB;YAC5B,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC9B,CAAC;QACD,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;KAC1B,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hmac/index.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,CAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM,EAAE,UAAU;iBAE5D,UAAU;;GASjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import lengths from './lengths.js';
|
|
3
|
+
export async function create(hash, secret) {
|
|
4
|
+
const res = {
|
|
5
|
+
async digest(data) {
|
|
6
|
+
const hmac = crypto.createHmac(hash.toLowerCase(), secret);
|
|
7
|
+
hmac.update(data);
|
|
8
|
+
return hmac.digest();
|
|
9
|
+
},
|
|
10
|
+
length: lengths[hash]
|
|
11
|
+
};
|
|
12
|
+
return res;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hmac/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAE,IAAkC,EAAE,MAAkB;IAClF,MAAM,GAAG,GAAG;QACV,KAAK,CAAC,MAAM,CAAE,IAAgB;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAA;YAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACjB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC;QACD,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;KACtB,CAAA;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lengths.d.ts","sourceRoot":"","sources":["../../../src/hmac/lengths.ts"],"names":[],"mappings":";;;;;AACA,wBAIC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lengths.js","sourceRoot":"","sources":["../../../src/hmac/lengths.ts"],"names":[],"mappings":"AACA,eAAe;IACb,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;CACX,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as hmac from './hmac/index.js';
|
|
2
|
+
import * as aes from './aes/index.js';
|
|
3
|
+
import * as keys from './keys/index.js';
|
|
4
|
+
import randomBytes from './random-bytes.js';
|
|
5
|
+
import pbkdf2 from './pbkdf2.js';
|
|
6
|
+
export { aes };
|
|
7
|
+
export { hmac };
|
|
8
|
+
export { keys };
|
|
9
|
+
export { randomBytes };
|
|
10
|
+
export { pbkdf2 };
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as hmac from './hmac/index.js';
|
|
2
|
+
import * as aes from './aes/index.js';
|
|
3
|
+
import * as keys from './keys/index.js';
|
|
4
|
+
import randomBytes from './random-bytes.js';
|
|
5
|
+
import pbkdf2 from './pbkdf2.js';
|
|
6
|
+
export { aes };
|
|
7
|
+
export { hmac };
|
|
8
|
+
export { keys };
|
|
9
|
+
export { randomBytes };
|
|
10
|
+
export { pbkdf2 };
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecdh-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/ecdh-browser.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,gBAAgB,CAAA;AAW1D,wBAAsB,uBAAuB,CAAE,KAAK,EAAE,MAAM,oBAmE3D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import errcode from 'err-code';
|
|
2
|
+
import webcrypto from '../webcrypto.js';
|
|
3
|
+
import { base64urlToBuffer } from '../util.js';
|
|
4
|
+
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
5
|
+
import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
|
|
6
|
+
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
7
|
+
const bits = {
|
|
8
|
+
'P-256': 256,
|
|
9
|
+
'P-384': 384,
|
|
10
|
+
'P-521': 521
|
|
11
|
+
};
|
|
12
|
+
const curveTypes = Object.keys(bits);
|
|
13
|
+
const names = curveTypes.join(' / ');
|
|
14
|
+
export async function generateEphmeralKeyPair(curve) {
|
|
15
|
+
if (curve !== 'P-256' && curve !== 'P-384' && curve !== 'P-521') {
|
|
16
|
+
throw errcode(new Error(`Unknown curve: ${curve}. Must be ${names}`), 'ERR_INVALID_CURVE');
|
|
17
|
+
}
|
|
18
|
+
const pair = await webcrypto.get().subtle.generateKey({
|
|
19
|
+
name: 'ECDH',
|
|
20
|
+
namedCurve: curve
|
|
21
|
+
}, true, ['deriveBits']);
|
|
22
|
+
// forcePrivate is used for testing only
|
|
23
|
+
const genSharedKey = async (theirPub, forcePrivate) => {
|
|
24
|
+
let privateKey;
|
|
25
|
+
if (forcePrivate != null) {
|
|
26
|
+
privateKey = await webcrypto.get().subtle.importKey('jwk', unmarshalPrivateKey(curve, forcePrivate), {
|
|
27
|
+
name: 'ECDH',
|
|
28
|
+
namedCurve: curve
|
|
29
|
+
}, false, ['deriveBits']);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
privateKey = pair.privateKey;
|
|
33
|
+
}
|
|
34
|
+
const key = await webcrypto.get().subtle.importKey('jwk', unmarshalPublicKey(curve, theirPub), {
|
|
35
|
+
name: 'ECDH',
|
|
36
|
+
namedCurve: curve
|
|
37
|
+
}, false, []);
|
|
38
|
+
const buffer = await webcrypto.get().subtle.deriveBits({
|
|
39
|
+
name: 'ECDH',
|
|
40
|
+
// @ts-expect-error namedCurve is missing from the types
|
|
41
|
+
namedCurve: curve,
|
|
42
|
+
public: key
|
|
43
|
+
}, privateKey, bits[curve]);
|
|
44
|
+
return new Uint8Array(buffer, 0, buffer.byteLength);
|
|
45
|
+
};
|
|
46
|
+
// @ts-expect-error jwk is missing from the types
|
|
47
|
+
const publicKey = await webcrypto.get().subtle.exportKey('jwk', pair.publicKey);
|
|
48
|
+
const ecdhKey = {
|
|
49
|
+
key: marshalPublicKey(publicKey),
|
|
50
|
+
genSharedKey
|
|
51
|
+
};
|
|
52
|
+
return ecdhKey;
|
|
53
|
+
}
|
|
54
|
+
const curveLengths = {
|
|
55
|
+
'P-256': 32,
|
|
56
|
+
'P-384': 48,
|
|
57
|
+
'P-521': 66
|
|
58
|
+
};
|
|
59
|
+
// Marshal converts a jwk encoded ECDH public key into the
|
|
60
|
+
// form specified in section 4.3.6 of ANSI X9.62. (This is the format
|
|
61
|
+
// go-ipfs uses)
|
|
62
|
+
function marshalPublicKey(jwk) {
|
|
63
|
+
if (jwk.crv == null || jwk.x == null || jwk.y == null) {
|
|
64
|
+
throw errcode(new Error('JWK was missing components'), 'ERR_INVALID_PARAMETERS');
|
|
65
|
+
}
|
|
66
|
+
if (jwk.crv !== 'P-256' && jwk.crv !== 'P-384' && jwk.crv !== 'P-521') {
|
|
67
|
+
throw errcode(new Error(`Unknown curve: ${jwk.crv}. Must be ${names}`), 'ERR_INVALID_CURVE');
|
|
68
|
+
}
|
|
69
|
+
const byteLen = curveLengths[jwk.crv];
|
|
70
|
+
return uint8ArrayConcat([
|
|
71
|
+
Uint8Array.from([4]),
|
|
72
|
+
base64urlToBuffer(jwk.x, byteLen),
|
|
73
|
+
base64urlToBuffer(jwk.y, byteLen)
|
|
74
|
+
], 1 + byteLen * 2);
|
|
75
|
+
}
|
|
76
|
+
// Unmarshal converts a point, serialized by Marshal, into an jwk encoded key
|
|
77
|
+
function unmarshalPublicKey(curve, key) {
|
|
78
|
+
if (curve !== 'P-256' && curve !== 'P-384' && curve !== 'P-521') {
|
|
79
|
+
throw errcode(new Error(`Unknown curve: ${curve}. Must be ${names}`), 'ERR_INVALID_CURVE');
|
|
80
|
+
}
|
|
81
|
+
const byteLen = curveLengths[curve];
|
|
82
|
+
if (!uint8ArrayEquals(key.slice(0, 1), Uint8Array.from([4]))) {
|
|
83
|
+
throw errcode(new Error('Cannot unmarshal public key - invalid key format'), 'ERR_INVALID_KEY_FORMAT');
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
kty: 'EC',
|
|
87
|
+
crv: curve,
|
|
88
|
+
x: uint8ArrayToString(key.slice(1, byteLen + 1), 'base64url'),
|
|
89
|
+
y: uint8ArrayToString(key.slice(1 + byteLen), 'base64url'),
|
|
90
|
+
ext: true
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const unmarshalPrivateKey = (curve, key) => ({
|
|
94
|
+
...unmarshalPublicKey(curve, key.public),
|
|
95
|
+
d: uint8ArrayToString(key.private, 'base64url')
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=ecdh-browser.js.map
|
|
@@ -0,0 +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,iDAAiD;IACjD,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,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5D,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,EAAE,wBAAwB,CAAC,CAAA;KACvG;IAED,OAAO;QACL,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,KAAK;QACV,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;QAC7D,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,WAAW,CAAC;QAC1D,GAAG,EAAE,IAAI;KACV,CAAA;AACH,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,GAAgB,EAAE,EAAE,CAAC,CAAC;IAChE,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;IACxC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;CAChD,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecdh.d.ts","sourceRoot":"","sources":["../../../src/keys/ecdh.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,gBAAgB,CAAA;AAW1D,wBAAsB,uBAAuB,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB9E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import errcode from 'err-code';
|
|
3
|
+
const curves = {
|
|
4
|
+
'P-256': 'prime256v1',
|
|
5
|
+
'P-384': 'secp384r1',
|
|
6
|
+
'P-521': 'secp521r1'
|
|
7
|
+
};
|
|
8
|
+
const curveTypes = Object.keys(curves);
|
|
9
|
+
const names = curveTypes.join(' / ');
|
|
10
|
+
export async function generateEphmeralKeyPair(curve) {
|
|
11
|
+
if (curve !== 'P-256' && curve !== 'P-384' && curve !== 'P-521') {
|
|
12
|
+
throw errcode(new Error(`Unknown curve: ${curve}. Must be ${names}`), 'ERR_INVALID_CURVE');
|
|
13
|
+
}
|
|
14
|
+
const ecdh = crypto.createECDH(curves[curve]);
|
|
15
|
+
ecdh.generateKeys();
|
|
16
|
+
return {
|
|
17
|
+
key: ecdh.getPublicKey(),
|
|
18
|
+
async genSharedKey(theirPub, forcePrivate) {
|
|
19
|
+
if (forcePrivate != null) {
|
|
20
|
+
ecdh.setPrivateKey(forcePrivate.private);
|
|
21
|
+
}
|
|
22
|
+
return ecdh.computeSecret(theirPub);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ecdh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecdh.js","sourceRoot":"","sources":["../../../src/keys/ecdh.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,OAAO,MAAM,UAAU,CAAA;AAG9B,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;CACrB,CAAA;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACtC,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,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7C,IAAI,CAAC,YAAY,EAAE,CAAA;IAEnB,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,YAAY,EAAgB;QAEtC,KAAK,CAAC,YAAY,CAAE,QAAoB,EAAE,YAA0B;YAClE,IAAI,YAAY,IAAI,IAAI,EAAE;gBACxB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;aACzC;YAED,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACrC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare class Ed25519PublicKey {
|
|
2
|
+
private readonly _key;
|
|
3
|
+
constructor(key: Uint8Array);
|
|
4
|
+
verify(data: Uint8Array, sig: Uint8Array): Promise<boolean>;
|
|
5
|
+
marshal(): Uint8Array;
|
|
6
|
+
get bytes(): Uint8Array;
|
|
7
|
+
equals(key: Ed25519PublicKey): boolean;
|
|
8
|
+
hash(): Promise<Uint8Array>;
|
|
9
|
+
}
|
|
10
|
+
export declare class Ed25519PrivateKey {
|
|
11
|
+
private readonly _key;
|
|
12
|
+
private readonly _publicKey;
|
|
13
|
+
constructor(key: Uint8Array, publicKey: Uint8Array);
|
|
14
|
+
sign(message: Uint8Array): Promise<Uint8Array>;
|
|
15
|
+
get public(): Ed25519PublicKey;
|
|
16
|
+
marshal(): Uint8Array;
|
|
17
|
+
get bytes(): Uint8Array;
|
|
18
|
+
equals(key: Ed25519PrivateKey): boolean;
|
|
19
|
+
hash(): Promise<Uint8Array>;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the ID of the key.
|
|
22
|
+
*
|
|
23
|
+
* The key id is the base58 encoding of the identity multihash containing its public key.
|
|
24
|
+
* The public key is a protobuf encoding containing a type and the DER encoding
|
|
25
|
+
* of the PKCS SubjectPublicKeyInfo.
|
|
26
|
+
*
|
|
27
|
+
* @returns {Promise<string>}
|
|
28
|
+
*/
|
|
29
|
+
id(): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Exports the key into a password protected `format`
|
|
32
|
+
*/
|
|
33
|
+
export(password: string, format?: string): Promise<import("multiformats/bases/base").Multibase<"m">>;
|
|
34
|
+
}
|
|
35
|
+
export declare function unmarshalEd25519PrivateKey(bytes: Uint8Array): Ed25519PrivateKey;
|
|
36
|
+
export declare function unmarshalEd25519PublicKey(bytes: Uint8Array): Ed25519PublicKey;
|
|
37
|
+
export declare function generateKeyPair(): Promise<Ed25519PrivateKey>;
|
|
38
|
+
export declare function generateKeyPairFromSeed(seed: Uint8Array): Promise<Ed25519PrivateKey>;
|
|
39
|
+
//# sourceMappingURL=ed25519-class.d.ts.map
|
|
@@ -0,0 +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,gBAAgB;IAIvB,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,iBAAiB;IAIxB,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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import errcode from 'err-code';
|
|
2
|
+
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
3
|
+
import { sha256 } from 'multiformats/hashes/sha2';
|
|
4
|
+
import { base58btc } from 'multiformats/bases/base58';
|
|
5
|
+
import { identity } from 'multiformats/hashes/identity';
|
|
6
|
+
import * as crypto from './ed25519.js';
|
|
7
|
+
import * as pbm from './keys.js';
|
|
8
|
+
import { exporter } from './exporter.js';
|
|
9
|
+
export class Ed25519PublicKey {
|
|
10
|
+
constructor(key) {
|
|
11
|
+
this._key = ensureKey(key, crypto.publicKeyLength);
|
|
12
|
+
}
|
|
13
|
+
async verify(data, sig) {
|
|
14
|
+
return await crypto.hashAndVerify(this._key, sig, data);
|
|
15
|
+
}
|
|
16
|
+
marshal() {
|
|
17
|
+
return this._key;
|
|
18
|
+
}
|
|
19
|
+
get bytes() {
|
|
20
|
+
return pbm.PublicKey.encode({
|
|
21
|
+
Type: pbm.KeyType.Ed25519,
|
|
22
|
+
Data: this.marshal()
|
|
23
|
+
}).finish();
|
|
24
|
+
}
|
|
25
|
+
equals(key) {
|
|
26
|
+
return uint8ArrayEquals(this.bytes, key.bytes);
|
|
27
|
+
}
|
|
28
|
+
async hash() {
|
|
29
|
+
const { bytes } = await sha256.digest(this.bytes);
|
|
30
|
+
return bytes;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class Ed25519PrivateKey {
|
|
34
|
+
// key - 64 byte Uint8Array containing private key
|
|
35
|
+
// publicKey - 32 byte Uint8Array containing public key
|
|
36
|
+
constructor(key, publicKey) {
|
|
37
|
+
this._key = ensureKey(key, crypto.privateKeyLength);
|
|
38
|
+
this._publicKey = ensureKey(publicKey, crypto.publicKeyLength);
|
|
39
|
+
}
|
|
40
|
+
async sign(message) {
|
|
41
|
+
return await crypto.hashAndSign(this._key, message);
|
|
42
|
+
}
|
|
43
|
+
get public() {
|
|
44
|
+
return new Ed25519PublicKey(this._publicKey);
|
|
45
|
+
}
|
|
46
|
+
marshal() {
|
|
47
|
+
return this._key;
|
|
48
|
+
}
|
|
49
|
+
get bytes() {
|
|
50
|
+
return pbm.PrivateKey.encode({
|
|
51
|
+
Type: pbm.KeyType.Ed25519,
|
|
52
|
+
Data: this.marshal()
|
|
53
|
+
}).finish();
|
|
54
|
+
}
|
|
55
|
+
equals(key) {
|
|
56
|
+
return uint8ArrayEquals(this.bytes, key.bytes);
|
|
57
|
+
}
|
|
58
|
+
async hash() {
|
|
59
|
+
const { bytes } = await sha256.digest(this.bytes);
|
|
60
|
+
return bytes;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Gets the ID of the key.
|
|
64
|
+
*
|
|
65
|
+
* The key id is the base58 encoding of the identity multihash containing its public key.
|
|
66
|
+
* The public key is a protobuf encoding containing a type and the DER encoding
|
|
67
|
+
* of the PKCS SubjectPublicKeyInfo.
|
|
68
|
+
*
|
|
69
|
+
* @returns {Promise<string>}
|
|
70
|
+
*/
|
|
71
|
+
async id() {
|
|
72
|
+
const encoding = await identity.digest(this.public.bytes);
|
|
73
|
+
return base58btc.encode(encoding.bytes).substring(1);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Exports the key into a password protected `format`
|
|
77
|
+
*/
|
|
78
|
+
async export(password, format = 'libp2p-key') {
|
|
79
|
+
if (format === 'libp2p-key') {
|
|
80
|
+
return await exporter(this.bytes, password);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
throw errcode(new Error(`export format '${format}' is not supported`), 'ERR_INVALID_EXPORT_FORMAT');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function unmarshalEd25519PrivateKey(bytes) {
|
|
88
|
+
// Try the old, redundant public key version
|
|
89
|
+
if (bytes.length > crypto.privateKeyLength) {
|
|
90
|
+
bytes = ensureKey(bytes, crypto.privateKeyLength + crypto.publicKeyLength);
|
|
91
|
+
const privateKeyBytes = bytes.slice(0, crypto.privateKeyLength);
|
|
92
|
+
const publicKeyBytes = bytes.slice(crypto.privateKeyLength, bytes.length);
|
|
93
|
+
return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes);
|
|
94
|
+
}
|
|
95
|
+
bytes = ensureKey(bytes, crypto.privateKeyLength);
|
|
96
|
+
const privateKeyBytes = bytes.slice(0, crypto.privateKeyLength);
|
|
97
|
+
const publicKeyBytes = bytes.slice(crypto.publicKeyLength);
|
|
98
|
+
return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes);
|
|
99
|
+
}
|
|
100
|
+
export function unmarshalEd25519PublicKey(bytes) {
|
|
101
|
+
bytes = ensureKey(bytes, crypto.publicKeyLength);
|
|
102
|
+
return new Ed25519PublicKey(bytes);
|
|
103
|
+
}
|
|
104
|
+
export async function generateKeyPair() {
|
|
105
|
+
const { privateKey, publicKey } = await crypto.generateKey();
|
|
106
|
+
return new Ed25519PrivateKey(privateKey, publicKey);
|
|
107
|
+
}
|
|
108
|
+
export async function generateKeyPairFromSeed(seed) {
|
|
109
|
+
const { privateKey, publicKey } = await crypto.generateKeyFromSeed(seed);
|
|
110
|
+
return new Ed25519PrivateKey(privateKey, publicKey);
|
|
111
|
+
}
|
|
112
|
+
function ensureKey(key, length) {
|
|
113
|
+
key = Uint8Array.from(key ?? []);
|
|
114
|
+
if (key.length !== length) {
|
|
115
|
+
throw errcode(new Error(`Key must be a Uint8Array of length ${length}, got ${key.length}`), 'ERR_INVALID_KEY_TYPE');
|
|
116
|
+
}
|
|
117
|
+
return key;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=ed25519-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519-class.js","sourceRoot":"","sources":["../../../src/keys/ed25519-class.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.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519.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.slice(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.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../../src/keys/ed25519.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,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAE3D,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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { generateEphmeralKeyPair } from './ecdh.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates an ephemeral public key and returns a function that will compute
|
|
4
|
+
* the shared secret key.
|
|
5
|
+
*
|
|
6
|
+
* Focuses only on ECDH now, but can be made more general in the future.
|
|
7
|
+
*/
|
|
8
|
+
export default generateEphmeralKeyPair;
|
|
9
|
+
//# sourceMappingURL=ephemeral-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ephemeral-keys.d.ts","sourceRoot":"","sources":["../../../src/keys/ephemeral-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAEnD;;;;;GAKG;AACH,eAAe,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { generateEphmeralKeyPair } from './ecdh.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates an ephemeral public key and returns a function that will compute
|
|
4
|
+
* the shared secret key.
|
|
5
|
+
*
|
|
6
|
+
* Focuses only on ECDH now, but can be made more general in the future.
|
|
7
|
+
*/
|
|
8
|
+
export default generateEphmeralKeyPair;
|
|
9
|
+
//# sourceMappingURL=ephemeral-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ephemeral-keys.js","sourceRoot":"","sources":["../../../src/keys/ephemeral-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAEnD;;;;;GAKG;AACH,eAAe,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exports the given PrivateKey as a base64 encoded string.
|
|
3
|
+
* The PrivateKey is encrypted via a password derived PBKDF2 key
|
|
4
|
+
* leveraging the aes-gcm cipher algorithm.
|
|
5
|
+
*/
|
|
6
|
+
export declare function exporter(privateKey: Uint8Array, password: string): Promise<import("multiformats/bases/base").Multibase<"m">>;
|
|
7
|
+
//# sourceMappingURL=exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/keys/exporter.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAsB,QAAQ,CAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,6DAIvE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { base64 } from 'multiformats/bases/base64';
|
|
2
|
+
import * as ciphers from '../ciphers/aes-gcm.js';
|
|
3
|
+
/**
|
|
4
|
+
* Exports the given PrivateKey as a base64 encoded string.
|
|
5
|
+
* The PrivateKey is encrypted via a password derived PBKDF2 key
|
|
6
|
+
* leveraging the aes-gcm cipher algorithm.
|
|
7
|
+
*/
|
|
8
|
+
export async function exporter(privateKey, password) {
|
|
9
|
+
const cipher = ciphers.create();
|
|
10
|
+
const encryptedKey = await cipher.encrypt(privateKey, password);
|
|
11
|
+
return base64.encode(encryptedKey);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../src/keys/exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAEhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAE,UAAsB,EAAE,QAAgB;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAC/B,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attempts to decrypt a base64 encoded PrivateKey string
|
|
3
|
+
* with the given password. The privateKey must have been exported
|
|
4
|
+
* using the same password and underlying cipher (aes-gcm)
|
|
5
|
+
*/
|
|
6
|
+
export declare function importer(privateKey: string, password: string): Promise<Uint8Array>;
|
|
7
|
+
//# sourceMappingURL=importer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../src/keys/importer.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAsB,QAAQ,CAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,uBAInE"}
|