@libp2p/crypto 1.0.8 → 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.
@@ -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.slice(0, saltLength);
41
- const nonce = data.slice(saltLength, saltLength + nonceLength);
42
- const ciphertext = data.slice(saltLength + nonceLength);
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":"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"}
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.slice(0, nonceLength);
47
- const ciphertext = ciphertextAndNonce.slice(nonceLength, ciphertextAndNonce.length - algorithmTagLength);
48
- const tag = ciphertextAndNonce.slice(ciphertext.length + nonceLength);
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.slice(0, saltLength);
68
- const ciphertextAndNonce = data.slice(saltLength);
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,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;QACtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,MAAM,GAAG,kBAAkB,CAAC,CAAA;QACxG,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,CAAA;QAErE,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,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAEjD,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"}
1
+ {"version":3,"file":"aes-gcm.js","sourceRoot":"","sources":["../../../src/ciphers/aes-gcm.ts"],"names":[],"mappings":"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"}
@@ -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.slice(0, 1), Uint8Array.from([4]))) {
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.slice(1, byteLen + 1), 'base64url'),
88
- y: uint8ArrayToString(key.slice(1 + byteLen), 'base64url'),
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":"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"}
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<Uint8Array>;
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.slice(0, crypto.privateKeyLength);
92
- const publicKeyBytes = bytes.slice(crypto.privateKeyLength, bytes.length);
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.slice(0, crypto.privateKeyLength);
97
- const publicKeyBytes = bytes.slice(crypto.publicKeyLength);
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: Uint8Array;
15
+ publicKey: Buffer;
15
16
  }>;
16
- export declare function hashAndSign(privateKey: Uint8Array, msg: Uint8Array): Promise<Uint8Array>;
17
- export declare function hashAndVerify(publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array): Promise<boolean>;
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":"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"}
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"}
@@ -1,18 +1,31 @@
1
- import * as ed from '@noble/ed25519';
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
- // 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);
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 privateKeyRaw = seed;
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(privateKey, msg) {
38
- const privateKeyRaw = privateKey.slice(0, KEYS_BYTE_LENGTH);
39
- return await ed.sign(msg, privateKeyRaw);
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(publicKey, sig, msg) {
42
- return await ed.verify(sig, msg, publicKey);
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,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"}
1
+ {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../../src/keys/ed25519.ts"],"names":[],"mappings":"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"}
@@ -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.slice(0, half);
54
- const r2 = resultBuffer.slice(half, resultLength);
53
+ const r1 = resultBuffer.subarray(0, half);
54
+ const r2 = resultBuffer.subarray(half, resultLength);
55
55
  const createKey = (res) => ({
56
- iv: res.slice(0, ivSize),
57
- cipherKey: res.slice(ivSize, ivSize + cipherKeySize),
58
- macKey: res.slice(ivSize + cipherKeySize)
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":"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"}
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.slice(1) : 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');
@@ -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,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAEvC,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"}
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.8",
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",
@@ -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.slice(0, saltLength)
50
- const nonce = data.slice(saltLength, saltLength + nonceLength)
51
- const ciphertext = data.slice(saltLength + nonceLength)
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') {
@@ -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.slice(0, nonceLength)
59
- const ciphertext = ciphertextAndNonce.slice(nonceLength, ciphertextAndNonce.length - algorithmTagLength)
60
- const tag = ciphertextAndNonce.slice(ciphertext.length + nonceLength)
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.slice(0, saltLength)
83
- const ciphertextAndNonce = data.slice(saltLength)
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)
@@ -118,15 +118,15 @@ function unmarshalPublicKey (curve: string, key: Uint8Array) {
118
118
 
119
119
  const byteLen = curveLengths[curve]
120
120
 
121
- if (!uint8ArrayEquals(key.slice(0, 1), Uint8Array.from([4]))) {
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.slice(1, byteLen + 1), 'base64url'),
129
- y: uint8ArrayToString(key.slice(1 + byteLen), 'base64url'),
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.slice(0, crypto.privateKeyLength)
114
- const publicKeyBytes = bytes.slice(crypto.privateKeyLength, bytes.length)
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.slice(0, crypto.privateKeyLength)
120
- const publicKeyBytes = bytes.slice(crypto.publicKeyLength)
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
 
@@ -1,23 +1,38 @@
1
- import * as ed from '@noble/ed25519'
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
- // the actual private key (32 bytes)
12
- const privateKeyRaw = ed.utils.randomPrivateKey()
13
- const publicKey = await ed.getPublicKey(privateKeyRaw)
23
+ const key = await keypair('ed25519', {
24
+ publicKeyEncoding: { type: 'spki', format: 'jwk' },
25
+ privateKeyEncoding: { type: 'pkcs8', format: 'jwk' }
26
+ })
14
27
 
15
- // concatenated the public key to the private key
16
- const privateKey = concatKeys(privateKeyRaw, publicKey)
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 privateKeyRaw = seed
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 (privateKey: Uint8Array, msg: Uint8Array) {
47
- const privateKeyRaw = privateKey.slice(0, KEYS_BYTE_LENGTH)
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 await ed.sign(msg, privateKeyRaw)
86
+ return crypto.sign(null, msg, obj)
50
87
  }
51
88
 
52
- export async function hashAndVerify (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array) {
53
- return await ed.verify(sig, msg, publicKey)
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.slice(0, half)
65
- const r2 = resultBuffer.slice(half, resultLength)
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.slice(0, ivSize),
69
- cipherKey: res.slice(ivSize, ivSize + cipherKeySize),
70
- macKey: res.slice(ivSize + cipherKeySize)
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.slice(1) : 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')