@libp2p/crypto 2.0.2 → 2.0.3

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.
@@ -1,4 +1,4 @@
1
- import * as ed from '@noble/ed25519';
1
+ import { ed25519 as ed } from '@noble/curves/ed25519';
2
2
  const PUBLIC_KEY_BYTE_LENGTH = 32;
3
3
  const PRIVATE_KEY_BYTE_LENGTH = 64; // private key is actually 32 bytes but for historical reasons we concat private and public keys
4
4
  const KEYS_BYTE_LENGTH = 32;
@@ -7,7 +7,7 @@ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
7
7
  export async function generateKey() {
8
8
  // the actual private key (32 bytes)
9
9
  const privateKeyRaw = ed.utils.randomPrivateKey();
10
- const publicKey = await ed.getPublicKey(privateKeyRaw);
10
+ const publicKey = ed.getPublicKey(privateKeyRaw);
11
11
  // concatenated the public key to the private key
12
12
  const privateKey = concatKeys(privateKeyRaw, publicKey);
13
13
  return {
@@ -27,7 +27,7 @@ export async function generateKeyFromSeed(seed) {
27
27
  }
28
28
  // based on node forges algorithm, the seed is used directly as private key
29
29
  const privateKeyRaw = seed;
30
- const publicKey = await ed.getPublicKey(privateKeyRaw);
30
+ const publicKey = ed.getPublicKey(privateKeyRaw);
31
31
  const privateKey = concatKeys(privateKeyRaw, publicKey);
32
32
  return {
33
33
  privateKey,
@@ -1 +1 @@
1
- {"version":3,"file":"ed25519-browser.js","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAGpC,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,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,SAAqB,EAAE,GAAe,EAAE,GAAe;IAC1F,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;AACvC,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-browser.js","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,uBAAuB,CAAA;AAGrD,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,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEhD,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,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEhD,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,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,SAAqB,EAAE,GAAe,EAAE,GAAe;IAC1F,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;AACvC,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 +1 @@
1
- {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/keys/secp256k1.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,WAAW,IAAK,UAAU,CAEzC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAOxF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxG;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAG9D;AAED,wBAAgB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAGhE;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAMzD;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAMxD;AAED,wBAAgB,gBAAgB,CAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAMpE"}
1
+ {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/keys/secp256k1.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,WAAW,IAAK,UAAU,CAEzC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQxF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxG;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAG9D;AAED,wBAAgB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAGhE;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAMzD;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAMxD;AAED,wBAAgB,gBAAgB,CAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAMpE"}
@@ -1,5 +1,5 @@
1
1
  import { CodeError } from '@libp2p/interface/errors';
2
- import * as secp from '@noble/secp256k1';
2
+ import { secp256k1 as secp } from '@noble/curves/secp256k1';
3
3
  import { sha256 } from 'multiformats/hashes/sha2';
4
4
  const PRIVATE_KEY_BYTE_LENGTH = 32;
5
5
  export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
@@ -12,7 +12,8 @@ export function generateKey() {
12
12
  export async function hashAndSign(key, msg) {
13
13
  const { digest } = await sha256.digest(msg);
14
14
  try {
15
- return await secp.sign(digest, key);
15
+ const signature = secp.sign(digest, key);
16
+ return signature.toDERRawBytes();
16
17
  }
17
18
  catch (err) {
18
19
  throw new CodeError(String(err), 'ERR_INVALID_INPUT');
@@ -31,11 +32,11 @@ export async function hashAndVerify(key, sig, msg) {
31
32
  }
32
33
  }
33
34
  export function compressPublicKey(key) {
34
- const point = secp.Point.fromHex(key).toRawBytes(true);
35
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(true);
35
36
  return point;
36
37
  }
37
38
  export function decompressPublicKey(key) {
38
- const point = secp.Point.fromHex(key).toRawBytes(false);
39
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(false);
39
40
  return point;
40
41
  }
41
42
  export function validatePrivateKey(key) {
@@ -48,7 +49,7 @@ export function validatePrivateKey(key) {
48
49
  }
49
50
  export function validatePublicKey(key) {
50
51
  try {
51
- secp.Point.fromHex(key);
52
+ secp.ProjectivePoint.fromHex(key);
52
53
  }
53
54
  catch (err) {
54
55
  throw new CodeError(String(err), 'ERR_INVALID_PUBLIC_KEY');
@@ -1 +1 @@
1
- {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../src/keys/secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEjD,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,GAAe,EAAE,GAAe;IACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KACpC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAA;KACtD;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAe;IACpF,IAAI;QACF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;KACrC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAA;KACtD;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAe;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACtD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAE,GAAe;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACvD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,GAAe;IACjD,IAAI;QACF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;KAC7B;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,yBAAyB,CAAC,CAAA;KAC5D;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAe;IAChD,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;KACxB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,wBAAwB,CAAC,CAAA;KAC3D;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAE,UAAsB;IACtD,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;KAC3C;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,yBAAyB,CAAC,CAAA;KAC5D;AACH,CAAC"}
1
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../src/keys/secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEjD,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,GAAe,EAAE,GAAe;IACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACxC,OAAO,SAAS,CAAC,aAAa,EAAE,CAAA;KACjC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAA;KACtD;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAe;IACpF,IAAI;QACF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;KACrC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAA;KACtD;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAe;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAChE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAE,GAAe;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACjE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,GAAe;IACjD,IAAI;QACF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;KAC7B;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,yBAAyB,CAAC,CAAA;KAC5D;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAe;IAChD,IAAI;QACF,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;KAClC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,wBAAwB,CAAC,CAAA;KAC3D;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAE,UAAsB;IACtD,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;KAC3C;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,yBAAyB,CAAC,CAAA;KAC5D;AACH,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { CodeError } from '@libp2p/interface/errors';
2
- import { utils } from '@noble/secp256k1';
2
+ import { randomBytes as randB } from '@noble/hashes/utils';
3
3
  export default function randomBytes(length) {
4
4
  if (isNaN(length) || length <= 0) {
5
5
  throw new CodeError('random bytes length must be a Number bigger than 0', 'ERR_INVALID_LENGTH');
6
6
  }
7
- return utils.randomBytes(length);
7
+ return randB(length);
8
8
  }
9
9
  //# sourceMappingURL=random-bytes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"random-bytes.js","sourceRoot":"","sources":["../../src/random-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAExC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,MAAc;IACjD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;QAChC,MAAM,IAAI,SAAS,CAAC,oDAAoD,EAAE,oBAAoB,CAAC,CAAA;KAChG;IACD,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AAClC,CAAC"}
1
+ {"version":3,"file":"random-bytes.js","sourceRoot":"","sources":["../../src/random-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,WAAW,IAAI,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,MAAc;IACjD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;QAChC,MAAM,IAAI,SAAS,CAAC,oDAAoD,EAAE,oBAAoB,CAAC,CAAA;KAChG;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAA;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/crypto",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Crypto primitives for libp2p",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/master/packages/crypto#readme",
@@ -85,18 +85,18 @@
85
85
  "generate": "protons ./src/keys/keys.proto"
86
86
  },
87
87
  "dependencies": {
88
- "@libp2p/interface": "^0.1.1",
89
- "@noble/ed25519": "^1.6.0",
90
- "@noble/secp256k1": "^1.5.4",
88
+ "@libp2p/interface": "^0.1.2",
89
+ "@noble/curves": "^1.1.0",
90
+ "@noble/hashes": "^1.3.1",
91
91
  "multiformats": "^12.0.1",
92
92
  "node-forge": "^1.1.0",
93
93
  "protons-runtime": "^5.0.0",
94
94
  "uint8arraylist": "^2.4.3",
95
- "uint8arrays": "^4.0.4"
95
+ "uint8arrays": "^4.0.6"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@types/mocha": "^10.0.0",
99
- "aegir": "^40.0.1",
99
+ "aegir": "^40.0.8",
100
100
  "benchmark": "^2.1.4",
101
101
  "protons": "^7.0.2"
102
102
  },
package/src/aes/index.ts CHANGED
@@ -6,17 +6,17 @@ export interface AESCipher {
6
6
  decrypt: (data: Uint8Array) => Promise<Uint8Array>
7
7
  }
8
8
 
9
- export async function create (key: Uint8Array, iv: Uint8Array): Promise<AESCipher> { // eslint-disable-line require-await
9
+ export async function create (key: Uint8Array, iv: Uint8Array): Promise<AESCipher> {
10
10
  const mode = cipherMode(key)
11
11
  const cipher = ciphers.createCipheriv(mode, key, iv)
12
12
  const decipher = ciphers.createDecipheriv(mode, key, iv)
13
13
 
14
14
  const res: AESCipher = {
15
- async encrypt (data) { // eslint-disable-line require-await
15
+ async encrypt (data) {
16
16
  return cipher.update(data)
17
17
  },
18
18
 
19
- async decrypt (data) { // eslint-disable-line require-await
19
+ async decrypt (data) {
20
20
  return decipher.update(data)
21
21
  }
22
22
  }
@@ -32,7 +32,7 @@ export function create (opts?: CreateOptions): AESCipher {
32
32
  * Uses the provided password to derive a pbkdf2 key. The key
33
33
  * will then be used to encrypt the data.
34
34
  */
35
- async function encrypt (data: Uint8Array, password: string | Uint8Array): Promise<Uint8Array> { // eslint-disable-line require-await
35
+ async function encrypt (data: Uint8Array, password: string | Uint8Array): Promise<Uint8Array> {
36
36
  const salt = crypto.getRandomValues(new Uint8Array(saltLength))
37
37
  const nonce = crypto.getRandomValues(new Uint8Array(nonceLength))
38
38
  const aesGcm = { name: algorithm, iv: nonce }
@@ -14,7 +14,7 @@ export function create (opts?: CreateOptions): AESCipher {
14
14
  const iterations = opts?.iterations ?? 32767
15
15
  const algorithmTagLength = opts?.algorithmTagLength ?? 16
16
16
 
17
- async function encryptWithKey (data: Uint8Array, key: Uint8Array): Promise<Uint8Array> { // eslint-disable-line require-await
17
+ async function encryptWithKey (data: Uint8Array, key: Uint8Array): Promise<Uint8Array> {
18
18
  const nonce = crypto.randomBytes(nonceLength)
19
19
 
20
20
  // Create the cipher instance.
@@ -31,7 +31,7 @@ export function create (opts?: CreateOptions): AESCipher {
31
31
  * Uses the provided password to derive a pbkdf2 key. The key
32
32
  * will then be used to encrypt the data.
33
33
  */
34
- async function encrypt (data: Uint8Array, password: string | Uint8Array): Promise<Uint8Array> { // eslint-disable-line require-await
34
+ async function encrypt (data: Uint8Array, password: string | Uint8Array): Promise<Uint8Array> {
35
35
  // Generate a 128-bit salt using a CSPRNG.
36
36
  const salt = crypto.randomBytes(saltLength)
37
37
 
@@ -53,7 +53,7 @@ export function create (opts?: CreateOptions): AESCipher {
53
53
  * this decryption cipher must be the same as those used to create
54
54
  * the encryption cipher.
55
55
  */
56
- async function decryptWithKey (ciphertextAndNonce: Uint8Array, key: Uint8Array): Promise<Uint8Array> { // eslint-disable-line require-await
56
+ async function decryptWithKey (ciphertextAndNonce: Uint8Array, key: Uint8Array): Promise<Uint8Array> {
57
57
  // Create Uint8Arrays of nonce, ciphertext and tag.
58
58
  const nonce = ciphertextAndNonce.subarray(0, nonceLength)
59
59
  const ciphertext = ciphertextAndNonce.subarray(nonceLength, ciphertextAndNonce.length - algorithmTagLength)
@@ -77,7 +77,7 @@ export function create (opts?: CreateOptions): AESCipher {
77
77
  * @param {Uint8Array} data - The data to decrypt
78
78
  * @param {string|Uint8Array} password - A plain password
79
79
  */
80
- async function decrypt (data: Uint8Array, password: string | Uint8Array): Promise<Uint8Array> { // eslint-disable-line require-await
80
+ async function decrypt (data: Uint8Array, password: string | Uint8Array): Promise<Uint8Array> {
81
81
  // Create Uint8Arrays of salt and ciphertextAndNonce.
82
82
  const salt = data.subarray(0, saltLength)
83
83
  const ciphertextAndNonce = data.subarray(saltLength)
@@ -27,7 +27,7 @@ export async function create (hashType: 'SHA1' | 'SHA256' | 'SHA512', secret: Ui
27
27
  )
28
28
 
29
29
  return {
30
- async digest (data: Uint8Array) { // eslint-disable-line require-await
30
+ async digest (data: Uint8Array) {
31
31
  return sign(key, data)
32
32
  },
33
33
  length: lengths[hashType]
package/src/hmac/index.ts CHANGED
@@ -8,7 +8,7 @@ export interface HMAC {
8
8
 
9
9
  export async function create (hash: 'SHA1' | 'SHA256' | 'SHA512', secret: Uint8Array): Promise<HMAC> {
10
10
  const res = {
11
- async digest (data: Uint8Array) { // eslint-disable-line require-await
11
+ async digest (data: Uint8Array) {
12
12
  const hmac = crypto.createHmac(hash.toLowerCase(), secret)
13
13
  hmac.update(data)
14
14
  return hmac.digest()
package/src/keys/ecdh.ts CHANGED
@@ -11,7 +11,7 @@ const curves = {
11
11
  const curveTypes = Object.keys(curves)
12
12
  const names = curveTypes.join(' / ')
13
13
 
14
- export async function generateEphmeralKeyPair (curve: string): Promise<ECDHKey> { // eslint-disable-line require-await
14
+ export async function generateEphmeralKeyPair (curve: string): Promise<ECDHKey> {
15
15
  if (curve !== 'P-256' && curve !== 'P-384' && curve !== 'P-521') {
16
16
  throw new CodeError(`Unknown curve: ${curve}. Must be ${names}`, 'ERR_INVALID_CURVE')
17
17
  }
@@ -22,7 +22,7 @@ export async function generateEphmeralKeyPair (curve: string): Promise<ECDHKey>
22
22
  return {
23
23
  key: ecdh.getPublicKey() as Uint8Array,
24
24
 
25
- async genSharedKey (theirPub: Uint8Array, forcePrivate?: ECDHKeyPair): Promise<Uint8Array> { // eslint-disable-line require-await
25
+ async genSharedKey (theirPub: Uint8Array, forcePrivate?: ECDHKeyPair): Promise<Uint8Array> {
26
26
  if (forcePrivate != null) {
27
27
  ecdh.setPrivateKey(forcePrivate.private)
28
28
  }
@@ -1,4 +1,4 @@
1
- import * as ed from '@noble/ed25519'
1
+ import { ed25519 as ed } from '@noble/curves/ed25519'
2
2
  import type { Uint8ArrayKeyPair } from './interface'
3
3
 
4
4
  const PUBLIC_KEY_BYTE_LENGTH = 32
@@ -11,7 +11,7 @@ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
11
11
  export async function generateKey (): Promise<Uint8ArrayKeyPair> {
12
12
  // the actual private key (32 bytes)
13
13
  const privateKeyRaw = ed.utils.randomPrivateKey()
14
- const publicKey = await ed.getPublicKey(privateKeyRaw)
14
+ const publicKey = ed.getPublicKey(privateKeyRaw)
15
15
 
16
16
  // concatenated the public key to the private key
17
17
  const privateKey = concatKeys(privateKeyRaw, publicKey)
@@ -34,7 +34,7 @@ export async function generateKeyFromSeed (seed: Uint8Array): Promise<Uint8Array
34
34
 
35
35
  // based on node forges algorithm, the seed is used directly as private key
36
36
  const privateKeyRaw = seed
37
- const publicKey = await ed.getPublicKey(privateKeyRaw)
37
+ const publicKey = ed.getPublicKey(privateKeyRaw)
38
38
 
39
39
  const privateKey = concatKeys(privateKeyRaw, publicKey)
40
40
 
@@ -15,7 +15,7 @@ export class Ed25519PublicKey {
15
15
  this._key = ensureKey(key, crypto.publicKeyLength)
16
16
  }
17
17
 
18
- async verify (data: Uint8Array, sig: Uint8Array): Promise<boolean> { // eslint-disable-line require-await
18
+ async verify (data: Uint8Array, sig: Uint8Array): Promise<boolean> {
19
19
  return crypto.hashAndVerify(this._key, sig, data)
20
20
  }
21
21
 
@@ -52,7 +52,7 @@ export class Ed25519PrivateKey {
52
52
  this._publicKey = ensureKey(publicKey, crypto.publicKeyLength)
53
53
  }
54
54
 
55
- async sign (message: Uint8Array): Promise<Uint8Array> { // eslint-disable-line require-await
55
+ async sign (message: Uint8Array): Promise<Uint8Array> {
56
56
  return crypto.hashAndSign(this._key, message)
57
57
  }
58
58
 
package/src/keys/index.ts CHANGED
@@ -41,13 +41,13 @@ function typeToKey (type: string): typeof RSA | typeof Ed25519 | typeof Secp256k
41
41
  }
42
42
 
43
43
  // Generates a keypair of the given type and bitsize
44
- export async function generateKeyPair (type: KeyTypes, bits?: number): Promise<PrivateKey> { // eslint-disable-line require-await
44
+ export async function generateKeyPair (type: KeyTypes, bits?: number): Promise<PrivateKey> {
45
45
  return typeToKey(type).generateKeyPair(bits ?? 2048)
46
46
  }
47
47
 
48
48
  // Generates a keypair of the given type and bitsize
49
49
  // seed is a 32 byte uint8array
50
- export async function generateKeyPairFromSeed (type: KeyTypes, seed: Uint8Array, bits?: number): Promise<PrivateKey> { // eslint-disable-line require-await
50
+ export async function generateKeyPairFromSeed (type: KeyTypes, seed: Uint8Array, bits?: number): Promise<PrivateKey> {
51
51
  if (type.toLowerCase() !== 'ed25519') {
52
52
  throw new CodeError('Seed key derivation is unimplemented for RSA or secp256k1', 'ERR_UNSUPPORTED_KEY_DERIVATION_TYPE')
53
53
  }
@@ -82,7 +82,7 @@ export function marshalPublicKey (key: { bytes: Uint8Array }, type?: string): Ui
82
82
 
83
83
  // Converts a protobuf serialized private key into its
84
84
  // representative object
85
- export async function unmarshalPrivateKey (buf: Uint8Array): Promise<PrivateKey> { // eslint-disable-line require-await
85
+ export async function unmarshalPrivateKey (buf: Uint8Array): Promise<PrivateKey> {
86
86
  const decoded = keysPBM.PrivateKey.decode(buf)
87
87
  const data = decoded.Data ?? new Uint8Array()
88
88
 
@@ -110,7 +110,7 @@ export function marshalPrivateKey (key: { bytes: Uint8Array }, type?: string): U
110
110
  * @param {string} encryptedKey
111
111
  * @param {string} password
112
112
  */
113
- export async function importKey (encryptedKey: string, password: string): Promise<PrivateKey> { // eslint-disable-line require-await
113
+ export async function importKey (encryptedKey: string, password: string): Promise<PrivateKey> {
114
114
  try {
115
115
  const key = await importer(encryptedKey, password)
116
116
  return await unmarshalPrivateKey(key)
@@ -19,7 +19,7 @@ export class RsaPublicKey {
19
19
  this._key = key
20
20
  }
21
21
 
22
- async verify (data: Uint8Array, sig: Uint8Array): Promise<boolean> { // eslint-disable-line require-await
22
+ async verify (data: Uint8Array, sig: Uint8Array): Promise<boolean> {
23
23
  return crypto.hashAndVerify(this._key, sig, data)
24
24
  }
25
25
 
@@ -62,7 +62,7 @@ export class RsaPrivateKey {
62
62
  return crypto.getRandomValues(16)
63
63
  }
64
64
 
65
- async sign (message: Uint8Array): Promise<Uint8Array> { // eslint-disable-line require-await
65
+ async sign (message: Uint8Array): Promise<Uint8Array> {
66
66
  return crypto.hashAndSign(this._key, message)
67
67
  }
68
68
 
@@ -114,7 +114,7 @@ export class RsaPrivateKey {
114
114
  /**
115
115
  * Exports the key into a password protected PEM format
116
116
  */
117
- async export (password: string, format = 'pkcs-8'): Promise<Multibase<'m'>> { // eslint-disable-line require-await
117
+ async export (password: string, format = 'pkcs-8'): Promise<Multibase<'m'>> {
118
118
  if (format === 'pkcs-8') {
119
119
  const buffer = new forge.util.ByteBuffer(this.marshal())
120
120
  const asn1 = forge.asn1.fromDer(buffer)
package/src/keys/rsa.ts CHANGED
@@ -9,7 +9,7 @@ const keypair = promisify(crypto.generateKeyPair)
9
9
 
10
10
  export { utils }
11
11
 
12
- export async function generateKey (bits: number): Promise<JWKKeyPair> { // eslint-disable-line require-await
12
+ export async function generateKey (bits: number): Promise<JWKKeyPair> {
13
13
  // @ts-expect-error node types are missing jwk as a format
14
14
  const key = await keypair('rsa', {
15
15
  modulusLength: bits,
@@ -26,7 +26,7 @@ export async function generateKey (bits: number): Promise<JWKKeyPair> { // eslin
26
26
  }
27
27
 
28
28
  // Takes a jwk key
29
- export async function unmarshalPrivateKey (key: JsonWebKey): Promise<JWKKeyPair> { // eslint-disable-line require-await
29
+ export async function unmarshalPrivateKey (key: JsonWebKey): Promise<JWKKeyPair> {
30
30
  if (key == null) {
31
31
  throw new CodeError('Missing key parameter', 'ERR_MISSING_KEY')
32
32
  }
@@ -49,7 +49,7 @@ export async function hashAndSign (key: JsonWebKey, msg: Uint8Array): Promise<Ui
49
49
  .sign({ format: 'jwk', key })
50
50
  }
51
51
 
52
- export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array): Promise<boolean> { // eslint-disable-line require-await
52
+ export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array): Promise<boolean> {
53
53
  return crypto.createVerify('RSA-SHA256')
54
54
  .update(msg)
55
55
  // @ts-expect-error node types are missing jwk as a format
@@ -1,5 +1,5 @@
1
1
  import { CodeError } from '@libp2p/interface/errors'
2
- import * as secp from '@noble/secp256k1'
2
+ import { secp256k1 as secp } from '@noble/curves/secp256k1'
3
3
  import { sha256 } from 'multiformats/hashes/sha2'
4
4
 
5
5
  const PRIVATE_KEY_BYTE_LENGTH = 32
@@ -16,7 +16,8 @@ export function generateKey (): Uint8Array {
16
16
  export async function hashAndSign (key: Uint8Array, msg: Uint8Array): Promise<Uint8Array> {
17
17
  const { digest } = await sha256.digest(msg)
18
18
  try {
19
- return await secp.sign(digest, key)
19
+ const signature = secp.sign(digest, key)
20
+ return signature.toDERRawBytes()
20
21
  } catch (err) {
21
22
  throw new CodeError(String(err), 'ERR_INVALID_INPUT')
22
23
  }
@@ -35,12 +36,12 @@ export async function hashAndVerify (key: Uint8Array, sig: Uint8Array, msg: Uint
35
36
  }
36
37
 
37
38
  export function compressPublicKey (key: Uint8Array): Uint8Array {
38
- const point = secp.Point.fromHex(key).toRawBytes(true)
39
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(true)
39
40
  return point
40
41
  }
41
42
 
42
43
  export function decompressPublicKey (key: Uint8Array): Uint8Array {
43
- const point = secp.Point.fromHex(key).toRawBytes(false)
44
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(false)
44
45
  return point
45
46
  }
46
47
 
@@ -54,7 +55,7 @@ export function validatePrivateKey (key: Uint8Array): void {
54
55
 
55
56
  export function validatePublicKey (key: Uint8Array): void {
56
57
  try {
57
- secp.Point.fromHex(key)
58
+ secp.ProjectivePoint.fromHex(key)
58
59
  } catch (err) {
59
60
  throw new CodeError(String(err), 'ERR_INVALID_PUBLIC_KEY')
60
61
  }
@@ -1,9 +1,9 @@
1
1
  import { CodeError } from '@libp2p/interface/errors'
2
- import { utils } from '@noble/secp256k1'
2
+ import { randomBytes as randB } from '@noble/hashes/utils'
3
3
 
4
4
  export default function randomBytes (length: number): Uint8Array {
5
5
  if (isNaN(length) || length <= 0) {
6
6
  throw new CodeError('random bytes length must be a Number bigger than 0', 'ERR_INVALID_LENGTH')
7
7
  }
8
- return utils.randomBytes(length)
8
+ return randB(length)
9
9
  }