@libp2p/crypto 5.1.4 → 5.1.5

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.
Files changed (56) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/keys/ecdsa/ecdsa.d.ts +3 -3
  4. package/dist/src/keys/ecdsa/ecdsa.d.ts.map +1 -1
  5. package/dist/src/keys/ecdsa/ecdsa.js +4 -4
  6. package/dist/src/keys/ecdsa/ecdsa.js.map +1 -1
  7. package/dist/src/keys/ecdsa/index.d.ts +3 -2
  8. package/dist/src/keys/ecdsa/index.d.ts.map +1 -1
  9. package/dist/src/keys/ecdsa/index.js +8 -3
  10. package/dist/src/keys/ecdsa/index.js.map +1 -1
  11. package/dist/src/keys/ed25519/ed25519.d.ts +3 -3
  12. package/dist/src/keys/ed25519/ed25519.d.ts.map +1 -1
  13. package/dist/src/keys/ed25519/ed25519.js +22 -4
  14. package/dist/src/keys/ed25519/ed25519.js.map +1 -1
  15. package/dist/src/keys/ed25519/index.browser.d.ts +2 -5
  16. package/dist/src/keys/ed25519/index.browser.d.ts.map +1 -1
  17. package/dist/src/keys/ed25519/index.browser.js +61 -5
  18. package/dist/src/keys/ed25519/index.browser.js.map +1 -1
  19. package/dist/src/keys/ed25519/index.d.ts +1 -1
  20. package/dist/src/keys/ed25519/index.d.ts.map +1 -1
  21. package/dist/src/keys/rsa/index.browser.d.ts +4 -3
  22. package/dist/src/keys/rsa/index.browser.d.ts.map +1 -1
  23. package/dist/src/keys/rsa/index.browser.js +15 -7
  24. package/dist/src/keys/rsa/index.browser.js.map +1 -1
  25. package/dist/src/keys/rsa/index.d.ts +4 -3
  26. package/dist/src/keys/rsa/index.d.ts.map +1 -1
  27. package/dist/src/keys/rsa/index.js +8 -5
  28. package/dist/src/keys/rsa/index.js.map +1 -1
  29. package/dist/src/keys/rsa/rsa.d.ts +3 -3
  30. package/dist/src/keys/rsa/rsa.d.ts.map +1 -1
  31. package/dist/src/keys/rsa/rsa.js +4 -4
  32. package/dist/src/keys/rsa/rsa.js.map +1 -1
  33. package/dist/src/keys/secp256k1/index.browser.d.ts +3 -2
  34. package/dist/src/keys/secp256k1/index.browser.d.ts.map +1 -1
  35. package/dist/src/keys/secp256k1/index.browser.js +19 -4
  36. package/dist/src/keys/secp256k1/index.browser.js.map +1 -1
  37. package/dist/src/keys/secp256k1/index.d.ts +3 -2
  38. package/dist/src/keys/secp256k1/index.d.ts.map +1 -1
  39. package/dist/src/keys/secp256k1/index.js +4 -2
  40. package/dist/src/keys/secp256k1/index.js.map +1 -1
  41. package/dist/src/keys/secp256k1/secp256k1.d.ts +3 -3
  42. package/dist/src/keys/secp256k1/secp256k1.d.ts.map +1 -1
  43. package/dist/src/keys/secp256k1/secp256k1.js +4 -4
  44. package/dist/src/keys/secp256k1/secp256k1.js.map +1 -1
  45. package/package.json +5 -5
  46. package/src/keys/ecdsa/ecdsa.ts +5 -5
  47. package/src/keys/ecdsa/index.ts +10 -3
  48. package/src/keys/ed25519/ed25519.ts +27 -5
  49. package/src/keys/ed25519/index.browser.ts +72 -5
  50. package/src/keys/ed25519/index.ts +1 -1
  51. package/src/keys/rsa/index.browser.ts +18 -7
  52. package/src/keys/rsa/index.ts +11 -5
  53. package/src/keys/rsa/rsa.ts +5 -5
  54. package/src/keys/secp256k1/index.browser.ts +22 -4
  55. package/src/keys/secp256k1/index.ts +6 -2
  56. package/src/keys/secp256k1/secp256k1.ts +5 -5
@@ -32,8 +32,8 @@ export class RSAPublicKey {
32
32
  }
33
33
  return uint8ArrayEquals(this.raw, key.raw);
34
34
  }
35
- verify(data, sig) {
36
- return hashAndVerify(this.jwk, sig, data);
35
+ verify(data, sig, options) {
36
+ return hashAndVerify(this.jwk, sig, data, options);
37
37
  }
38
38
  }
39
39
  export class RSAPrivateKey {
@@ -57,8 +57,8 @@ export class RSAPrivateKey {
57
57
  }
58
58
  return uint8ArrayEquals(this.raw, key.raw);
59
59
  }
60
- sign(message) {
61
- return hashAndSign(this.jwk, message);
60
+ sign(message, options) {
61
+ return hashAndSign(this.jwk, message, options);
62
62
  }
63
63
  }
64
64
  //# sourceMappingURL=rsa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../../../src/keys/rsa/rsa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK9D,MAAM,OAAO,YAAY;IACP,IAAI,GAAG,KAAK,CAAA;IACZ,GAAG,CAAY;IACvB,IAAI,CAAa;IACR,UAAU,CAAoB;IAE/C,YAAa,GAAe,EAAE,MAA0B;QACtD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;IAC1B,CAAC;IAED,IAAI,GAAG;QACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,KAAK;QACH,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAE,GAAS;QACf,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,CAAE,IAAiC,EAAE,GAAe;QACxD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACR,IAAI,GAAG,KAAK,CAAA;IACZ,GAAG,CAAY;IACvB,IAAI,CAAa;IACT,SAAS,CAAc;IAEvC,YAAa,GAAe,EAAE,SAAuB;QACnD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,IAAI,GAAG;QACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,MAAM,CAAE,GAAQ;QACd,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,CAAE,OAAoC;QACxC,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../../../src/keys/rsa/rsa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK9D,MAAM,OAAO,YAAY;IACP,IAAI,GAAG,KAAK,CAAA;IACZ,GAAG,CAAY;IACvB,IAAI,CAAa;IACR,UAAU,CAAoB;IAE/C,YAAa,GAAe,EAAE,MAA0B;QACtD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;IAC1B,CAAC;IAED,IAAI,GAAG;QACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,KAAK;QACH,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAE,GAAS;QACf,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,CAAE,IAAiC,EAAE,GAAe,EAAE,OAAsB;QAChF,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACR,IAAI,GAAG,KAAK,CAAA;IACZ,GAAG,CAAY;IACvB,IAAI,CAAa;IACT,SAAS,CAAc;IAEvC,YAAa,GAAe,EAAE,SAAuB;QACnD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,IAAI,GAAG;QACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,MAAM,CAAE,GAAQ;QACd,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,CAAE,OAAoC,EAAE,OAAsB;QAChE,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;CACF"}
@@ -1,3 +1,4 @@
1
+ import type { AbortOptions } from '@libp2p/interface';
1
2
  import type { Uint8ArrayList } from 'uint8arraylist';
2
3
  declare const PUBLIC_KEY_BYTE_LENGTH = 33;
3
4
  declare const PRIVATE_KEY_BYTE_LENGTH = 32;
@@ -6,9 +7,9 @@ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
6
7
  /**
7
8
  * Hash and sign message with private key
8
9
  */
9
- export declare function hashAndSign(key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
10
+ export declare function hashAndSign(key: Uint8Array, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array | Promise<Uint8Array>;
10
11
  /**
11
12
  * Hash message and verify signature with public key
12
13
  */
13
- export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean | Promise<boolean>;
14
+ export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): boolean | Promise<boolean>;
14
15
  //# sourceMappingURL=index.browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.browser.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAehH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAe7H"}
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.browser.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAuBxI;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBrJ"}
@@ -9,11 +9,18 @@ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
9
9
  /**
10
10
  * Hash and sign message with private key
11
11
  */
12
- export function hashAndSign(key, msg) {
12
+ export function hashAndSign(key, msg, options) {
13
13
  const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray());
14
14
  if (isPromise(p)) {
15
- return p.then(({ digest }) => secp.sign(digest, key).toDERRawBytes())
15
+ return p
16
+ .then(({ digest }) => {
17
+ options?.signal?.throwIfAborted();
18
+ return secp.sign(digest, key).toDERRawBytes();
19
+ })
16
20
  .catch(err => {
21
+ if (err.name === 'AbortError') {
22
+ throw err;
23
+ }
17
24
  throw new SigningError(String(err));
18
25
  });
19
26
  }
@@ -27,15 +34,23 @@ export function hashAndSign(key, msg) {
27
34
  /**
28
35
  * Hash message and verify signature with public key
29
36
  */
30
- export function hashAndVerify(key, sig, msg) {
37
+ export function hashAndVerify(key, sig, msg, options) {
31
38
  const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray());
32
39
  if (isPromise(p)) {
33
- return p.then(({ digest }) => secp.verify(sig, digest, key))
40
+ return p
41
+ .then(({ digest }) => {
42
+ options?.signal?.throwIfAborted();
43
+ return secp.verify(sig, digest, key);
44
+ })
34
45
  .catch(err => {
46
+ if (err.name === 'AbortError') {
47
+ throw err;
48
+ }
35
49
  throw new VerificationError(String(err));
36
50
  });
37
51
  }
38
52
  try {
53
+ options?.signal?.throwIfAborted();
39
54
  return secp.verify(sig, p.digest, key);
40
55
  }
41
56
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAGzC,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACjC,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAe,EAAE,GAAgC;IAC5E,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;aAClE,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAgC;IAC/F,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;aACzD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACjC,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAe,EAAE,GAAgC,EAAE,OAAsB;IACpG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC;aACL,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACnB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;YACjC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,CAAA;QAC/C,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,GAAG,CAAA;YACX,CAAC;YAED,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAgC,EAAE,OAAsB;IACvH,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC;aACL,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACnB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;YACjC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QACtC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,GAAG,CAAA;YACX,CAAC;YAED,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { AbortOptions } from '@libp2p/interface';
1
2
  import type { Uint8ArrayList } from 'uint8arraylist';
2
3
  declare const PUBLIC_KEY_BYTE_LENGTH = 33;
3
4
  declare const PRIVATE_KEY_BYTE_LENGTH = 32;
@@ -6,9 +7,9 @@ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
6
7
  /**
7
8
  * Hash and sign message with private key
8
9
  */
9
- export declare function hashAndSign(key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array;
10
+ export declare function hashAndSign(key: Uint8Array, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array;
10
11
  /**
11
12
  * Hash message and verify signature with public key
12
13
  */
13
- export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean;
14
+ export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): boolean;
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAmB1F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAkB1G"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAqBlH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAmBlI"}
@@ -8,7 +8,8 @@ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
8
8
  /**
9
9
  * Hash and sign message with private key
10
10
  */
11
- export function hashAndSign(key, msg) {
11
+ export function hashAndSign(key, msg, options) {
12
+ options?.signal?.throwIfAborted();
12
13
  const hash = crypto.createHash('sha256');
13
14
  if (msg instanceof Uint8Array) {
14
15
  hash.update(msg);
@@ -30,7 +31,8 @@ export function hashAndSign(key, msg) {
30
31
  /**
31
32
  * Hash message and verify signature with public key
32
33
  */
33
- export function hashAndVerify(key, sig, msg) {
34
+ export function hashAndVerify(key, sig, msg, options) {
35
+ options?.signal?.throwIfAborted();
34
36
  const hash = crypto.createHash('sha256');
35
37
  if (msg instanceof Uint8Array) {
36
38
  hash.update(msg);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGjE,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACjC,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAe,EAAE,GAAgC;IAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAE5B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACxC,OAAO,SAAS,CAAC,aAAa,EAAE,CAAA;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAgC;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAE5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAIjE,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACjC,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAe,EAAE,GAAgC,EAAE,OAAsB;IACpG,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAE5B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACxC,OAAO,SAAS,CAAC,aAAa,EAAE,CAAA;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAgC,EAAE,OAAsB;IACvH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAE5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { CID } from 'multiformats/cid';
2
- import type { Secp256k1PublicKey as Secp256k1PublicKeyInterface, Secp256k1PrivateKey as Secp256k1PrivateKeyInterface } from '@libp2p/interface';
2
+ import type { Secp256k1PublicKey as Secp256k1PublicKeyInterface, Secp256k1PrivateKey as Secp256k1PrivateKeyInterface, AbortOptions } from '@libp2p/interface';
3
3
  import type { Digest } from 'multiformats/hashes/digest';
4
4
  import type { Uint8ArrayList } from 'uint8arraylist';
5
5
  export declare class Secp256k1PublicKey implements Secp256k1PublicKeyInterface {
@@ -11,7 +11,7 @@ export declare class Secp256k1PublicKey implements Secp256k1PublicKeyInterface {
11
11
  toCID(): CID<unknown, 114, 0x0, 1>;
12
12
  toString(): string;
13
13
  equals(key: any): boolean;
14
- verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean;
14
+ verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array, options?: AbortOptions): boolean;
15
15
  }
16
16
  export declare class Secp256k1PrivateKey implements Secp256k1PrivateKeyInterface {
17
17
  readonly type = "secp256k1";
@@ -19,6 +19,6 @@ export declare class Secp256k1PrivateKey implements Secp256k1PrivateKeyInterface
19
19
  readonly publicKey: Secp256k1PublicKey;
20
20
  constructor(key: Uint8Array, publicKey?: Uint8Array);
21
21
  equals(key?: any): boolean;
22
- sign(message: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
22
+ sign(message: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array | Promise<Uint8Array>;
23
23
  }
24
24
  //# sourceMappingURL=secp256k1.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/secp256k1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAMtC,OAAO,KAAK,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,mBAAmB,IAAI,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAC/I,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,kBAAmB,YAAW,2BAA2B;IACpE,SAAgB,IAAI,eAAc;IAClC,SAAgB,GAAG,EAAE,UAAU,CAAA;IAC/B,SAAgB,IAAI,EAAE,UAAU,CAAA;gBAEnB,GAAG,EAAE,UAAU;IAK5B,WAAW,IAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAInC,KAAK,IAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAInC,QAAQ,IAAK,MAAM;IAInB,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAQ1B,MAAM,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO;CAGrE;AAED,qBAAa,mBAAoB,YAAW,4BAA4B;IACtE,SAAgB,IAAI,eAAc;IAClC,SAAgB,GAAG,EAAE,UAAU,CAAA;IAC/B,SAAgB,SAAS,EAAE,kBAAkB,CAAA;gBAEhC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU;IAKpD,MAAM,CAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO;IAQ3B,IAAI,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAG9E"}
1
+ {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/secp256k1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAMtC,OAAO,KAAK,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,mBAAmB,IAAI,4BAA4B,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC7J,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,kBAAmB,YAAW,2BAA2B;IACpE,SAAgB,IAAI,eAAc;IAClC,SAAgB,GAAG,EAAE,UAAU,CAAA;IAC/B,SAAgB,IAAI,EAAE,UAAU,CAAA;gBAEnB,GAAG,EAAE,UAAU;IAK5B,WAAW,IAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAInC,KAAK,IAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAInC,QAAQ,IAAK,MAAM;IAInB,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAQ1B,MAAM,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO;CAG7F;AAED,qBAAa,mBAAoB,YAAW,4BAA4B;IACtE,SAAgB,IAAI,eAAc;IAClC,SAAgB,GAAG,EAAE,UAAU,CAAA;IAC/B,SAAgB,SAAS,EAAE,kBAAkB,CAAA;gBAEhC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU;IAKpD,MAAM,CAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO;IAQ3B,IAAI,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAGtG"}
@@ -28,8 +28,8 @@ export class Secp256k1PublicKey {
28
28
  }
29
29
  return uint8ArrayEquals(this.raw, key.raw);
30
30
  }
31
- verify(data, sig) {
32
- return hashAndVerify(this._key, sig, data);
31
+ verify(data, sig, options) {
32
+ return hashAndVerify(this._key, sig, data, options);
33
33
  }
34
34
  }
35
35
  export class Secp256k1PrivateKey {
@@ -46,8 +46,8 @@ export class Secp256k1PrivateKey {
46
46
  }
47
47
  return uint8ArrayEquals(this.raw, key.raw);
48
48
  }
49
- sign(message) {
50
- return hashAndSign(this.raw, message);
49
+ sign(message, options) {
50
+ return hashAndSign(this.raw, message, options);
51
51
  }
52
52
  }
53
53
  //# sourceMappingURL=secp256k1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAC3I,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAKvD,MAAM,OAAO,kBAAkB;IACb,IAAI,GAAG,WAAW,CAAA;IAClB,GAAG,CAAY;IACf,IAAI,CAAY;IAEhC,YAAa,GAAe;QAC1B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC;IAED,WAAW;QACT,OAAO,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,KAAK;QACH,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAE,GAAQ;QACd,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,CAAE,IAAiC,EAAE,GAAe;QACxD,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC5C,CAAC;CACF;AAED,MAAM,OAAO,mBAAmB;IACd,IAAI,GAAG,WAAW,CAAA;IAClB,GAAG,CAAY;IACf,SAAS,CAAoB;IAE7C,YAAa,GAAe,EAAE,SAAsB;QAClD,IAAI,CAAC,GAAG,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,CAAC,SAAS,IAAI,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAA;IACtF,CAAC;IAED,MAAM,CAAE,GAAS;QACf,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,CAAE,OAAoC;QACxC,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAC3I,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAKvD,MAAM,OAAO,kBAAkB;IACb,IAAI,GAAG,WAAW,CAAA;IAClB,GAAG,CAAY;IACf,IAAI,CAAY;IAEhC,YAAa,GAAe;QAC1B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC;IAED,WAAW;QACT,OAAO,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,KAAK;QACH,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAE,GAAQ;QACd,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,CAAE,IAAiC,EAAE,GAAe,EAAE,OAAsB;QAChF,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC;CACF;AAED,MAAM,OAAO,mBAAmB;IACd,IAAI,GAAG,WAAW,CAAA;IAClB,GAAG,CAAY;IACf,SAAS,CAAoB;IAE7C,YAAa,GAAe,EAAE,SAAsB;QAClD,IAAI,CAAC,GAAG,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,CAAC,SAAS,IAAI,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAA;IACtF,CAAC;IAED,MAAM,CAAE,GAAS;QACf,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,CAAE,OAAoC,EAAE,OAAsB;QAChE,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/crypto",
3
- "version": "5.1.4",
3
+ "version": "5.1.5",
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/main/packages/crypto#readme",
@@ -85,20 +85,20 @@
85
85
  "generate": "protons ./src/keys/keys.proto"
86
86
  },
87
87
  "dependencies": {
88
- "@libp2p/interface": "^2.10.2",
88
+ "@libp2p/interface": "^2.10.3",
89
89
  "@noble/curves": "^1.9.1",
90
90
  "@noble/hashes": "^1.8.0",
91
- "multiformats": "^13.3.4",
91
+ "multiformats": "^13.3.6",
92
92
  "protons-runtime": "^5.5.0",
93
93
  "uint8arraylist": "^2.4.8",
94
94
  "uint8arrays": "^5.1.0"
95
95
  },
96
96
  "devDependencies": {
97
97
  "@types/mocha": "^10.0.10",
98
- "aegir": "^47.0.6",
98
+ "aegir": "^47.0.14",
99
99
  "asn1js": "^3.0.6",
100
100
  "benchmark": "^2.1.4",
101
- "protons": "^7.6.0"
101
+ "protons": "^7.6.1"
102
102
  },
103
103
  "browser": {
104
104
  "./dist/src/ciphers/aes-gcm.js": "./dist/src/ciphers/aes-gcm.browser.js",
@@ -5,7 +5,7 @@ import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
5
5
  import { publicKeyToProtobuf } from '../index.js'
6
6
  import { privateKeyToPKIMessage, publicKeyToPKIMessage } from './utils.js'
7
7
  import { hashAndVerify, hashAndSign } from './index.js'
8
- import type { ECDSAPublicKey as ECDSAPublicKeyInterface, ECDSAPrivateKey as ECDSAPrivateKeyInterface } from '@libp2p/interface'
8
+ import type { ECDSAPublicKey as ECDSAPublicKeyInterface, ECDSAPrivateKey as ECDSAPrivateKeyInterface, AbortOptions } from '@libp2p/interface'
9
9
  import type { Digest } from 'multiformats/hashes/digest'
10
10
  import type { Uint8ArrayList } from 'uint8arraylist'
11
11
 
@@ -46,8 +46,8 @@ export class ECDSAPublicKey implements ECDSAPublicKeyInterface {
46
46
  return uint8ArrayEquals(this.raw, key.raw)
47
47
  }
48
48
 
49
- async verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array): Promise<boolean> {
50
- return hashAndVerify(this.jwk, sig, data)
49
+ async verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array, options?: AbortOptions): Promise<boolean> {
50
+ return hashAndVerify(this.jwk, sig, data, options)
51
51
  }
52
52
  }
53
53
 
@@ -85,7 +85,7 @@ export class ECDSAPrivateKey implements ECDSAPrivateKeyInterface {
85
85
  return uint8ArrayEquals(this.raw, key.raw)
86
86
  }
87
87
 
88
- async sign (message: Uint8Array | Uint8ArrayList): Promise<Uint8Array> {
89
- return hashAndSign(this.jwk, message)
88
+ async sign (message: Uint8Array | Uint8ArrayList, options?: AbortOptions): Promise<Uint8Array> {
89
+ return hashAndSign(this.jwk, message, options)
90
90
  }
91
91
  }
@@ -1,4 +1,5 @@
1
1
  import type { JWKKeyPair } from '../interface.js'
2
+ import type { AbortOptions } from '@libp2p/interface'
2
3
  import type { Uint8ArrayList } from 'uint8arraylist'
3
4
 
4
5
  export type Curve = 'P-256' | 'P-384' | 'P-521'
@@ -19,11 +20,12 @@ export async function generateECDSAKey (curve: Curve = 'P-256'): Promise<JWKKeyP
19
20
  }
20
21
  }
21
22
 
22
- export async function hashAndSign (key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array> {
23
+ export async function hashAndSign (key: JsonWebKey, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): Promise<Uint8Array> {
23
24
  const privateKey = await crypto.subtle.importKey('jwk', key, {
24
25
  name: 'ECDSA',
25
26
  namedCurve: key.crv ?? 'P-256'
26
27
  }, false, ['sign'])
28
+ options?.signal?.throwIfAborted()
27
29
 
28
30
  const signature = await crypto.subtle.sign({
29
31
  name: 'ECDSA',
@@ -31,20 +33,25 @@ export async function hashAndSign (key: JsonWebKey, msg: Uint8Array | Uint8Array
31
33
  name: 'SHA-256'
32
34
  }
33
35
  }, privateKey, msg.subarray())
36
+ options?.signal?.throwIfAborted()
34
37
 
35
38
  return new Uint8Array(signature, 0, signature.byteLength)
36
39
  }
37
40
 
38
- export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean> {
41
+ export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): Promise<boolean> {
39
42
  const publicKey = await crypto.subtle.importKey('jwk', key, {
40
43
  name: 'ECDSA',
41
44
  namedCurve: key.crv ?? 'P-256'
42
45
  }, false, ['verify'])
46
+ options?.signal?.throwIfAborted()
43
47
 
44
- return crypto.subtle.verify({
48
+ const result = await crypto.subtle.verify({
45
49
  name: 'ECDSA',
46
50
  hash: {
47
51
  name: 'SHA-256'
48
52
  }
49
53
  }, publicKey, sig, msg.subarray())
54
+ options?.signal?.throwIfAborted()
55
+
56
+ return result
50
57
  }
@@ -2,10 +2,11 @@ import { base58btc } from 'multiformats/bases/base58'
2
2
  import { CID } from 'multiformats/cid'
3
3
  import { identity } from 'multiformats/hashes/identity'
4
4
  import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
5
+ import { isPromise } from '../../util.ts'
5
6
  import { publicKeyToProtobuf } from '../index.js'
6
7
  import { ensureEd25519Key } from './utils.js'
7
8
  import * as crypto from './index.js'
8
- import type { Ed25519PublicKey as Ed25519PublicKeyInterface, Ed25519PrivateKey as Ed25519PrivateKeyInterface } from '@libp2p/interface'
9
+ import type { Ed25519PublicKey as Ed25519PublicKeyInterface, Ed25519PrivateKey as Ed25519PrivateKeyInterface, AbortOptions } from '@libp2p/interface'
9
10
  import type { Digest } from 'multiformats/hashes/digest'
10
11
  import type { Uint8ArrayList } from 'uint8arraylist'
11
12
 
@@ -37,8 +38,18 @@ export class Ed25519PublicKey implements Ed25519PublicKeyInterface {
37
38
  return uint8ArrayEquals(this.raw, key.raw)
38
39
  }
39
40
 
40
- verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean {
41
- return crypto.hashAndVerify(this.raw, sig, data)
41
+ verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array, options?: AbortOptions): boolean | Promise<boolean> {
42
+ options?.signal?.throwIfAborted()
43
+ const result = crypto.hashAndVerify(this.raw, sig, data)
44
+
45
+ if (isPromise<boolean>(result)) {
46
+ return result.then(res => {
47
+ options?.signal?.throwIfAborted()
48
+ return res
49
+ })
50
+ }
51
+
52
+ return result
42
53
  }
43
54
  }
44
55
 
@@ -62,7 +73,18 @@ export class Ed25519PrivateKey implements Ed25519PrivateKeyInterface {
62
73
  return uint8ArrayEquals(this.raw, key.raw)
63
74
  }
64
75
 
65
- sign (message: Uint8Array | Uint8ArrayList): Uint8Array {
66
- return crypto.hashAndSign(this.raw, message)
76
+ sign (message: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array | Promise<Uint8Array> {
77
+ options?.signal?.throwIfAborted()
78
+ const sig = crypto.hashAndSign(this.raw, message)
79
+
80
+ if (isPromise<Uint8Array>(sig)) {
81
+ return sig.then(res => {
82
+ options?.signal?.throwIfAborted()
83
+ return res
84
+ })
85
+ }
86
+
87
+ options?.signal?.throwIfAborted()
88
+ return sig
67
89
  }
68
90
  }
@@ -1,4 +1,6 @@
1
1
  import { ed25519 as ed } from '@noble/curves/ed25519'
2
+ import { toString as uint8arrayToString } from 'uint8arrays/to-string'
3
+ import crypto from '../../webcrypto/index.js'
2
4
  import type { Uint8ArrayKeyPair } from '../interface.js'
3
5
  import type { Uint8ArrayList } from 'uint8arraylist'
4
6
 
@@ -9,6 +11,17 @@ const KEYS_BYTE_LENGTH = 32
9
11
  export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength }
10
12
  export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
11
13
 
14
+ // memoize support result to skip additional awaits every time we use an ed key
15
+ let ed25519Supported: boolean | undefined
16
+ const webCryptoEd25519SupportedPromise = (async () => {
17
+ try {
18
+ await crypto.get().subtle.generateKey({ name: 'Ed25519' }, true, ['sign', 'verify'])
19
+ return true
20
+ } catch {
21
+ return false
22
+ }
23
+ })()
24
+
12
25
  export function generateKey (): Uint8ArrayKeyPair {
13
26
  // the actual private key (32 bytes)
14
27
  const privateKeyRaw = ed.utils.randomPrivateKey()
@@ -23,9 +36,6 @@ export function generateKey (): Uint8ArrayKeyPair {
23
36
  }
24
37
  }
25
38
 
26
- /**
27
- * Generate keypair from a 32 byte uint8array
28
- */
29
39
  export function generateKeyFromSeed (seed: Uint8Array): Uint8ArrayKeyPair {
30
40
  if (seed.length !== KEYS_BYTE_LENGTH) {
31
41
  throw new TypeError('"seed" must be 32 bytes in length.')
@@ -45,16 +55,73 @@ export function generateKeyFromSeed (seed: Uint8Array): Uint8ArrayKeyPair {
45
55
  }
46
56
  }
47
57
 
48
- export function hashAndSign (privateKey: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array {
58
+ async function hashAndSignWebCrypto (privateKey: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array> {
59
+ let privateKeyRaw: Uint8Array
60
+ if (privateKey.length === PRIVATE_KEY_BYTE_LENGTH) {
61
+ privateKeyRaw = privateKey.subarray(0, 32)
62
+ } else {
63
+ privateKeyRaw = privateKey
64
+ }
65
+
66
+ const jwk: JsonWebKey = {
67
+ crv: 'Ed25519',
68
+ kty: 'OKP',
69
+ x: uint8arrayToString(privateKey.subarray(32), 'base64url'),
70
+ d: uint8arrayToString(privateKeyRaw, 'base64url'),
71
+ ext: true,
72
+ key_ops: ['sign']
73
+ }
74
+
75
+ const key = await crypto.get().subtle.importKey('jwk', jwk, { name: 'Ed25519' }, true, ['sign'])
76
+ const sig = await crypto.get().subtle.sign({ name: 'Ed25519' }, key, msg instanceof Uint8Array ? msg : msg.subarray())
77
+
78
+ return new Uint8Array(sig, 0, sig.byteLength)
79
+ }
80
+
81
+ function hashAndSignNoble (privateKey: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array {
49
82
  const privateKeyRaw = privateKey.subarray(0, KEYS_BYTE_LENGTH)
50
83
 
51
84
  return ed.sign(msg instanceof Uint8Array ? msg : msg.subarray(), privateKeyRaw)
52
85
  }
53
86
 
54
- export function hashAndVerify (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean {
87
+ export async function hashAndSign (privateKey: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array> {
88
+ if (ed25519Supported == null) {
89
+ ed25519Supported = await webCryptoEd25519SupportedPromise
90
+ }
91
+
92
+ if (ed25519Supported) {
93
+ return hashAndSignWebCrypto(privateKey, msg)
94
+ }
95
+
96
+ return hashAndSignNoble(privateKey, msg)
97
+ }
98
+
99
+ async function hashAndVerifyWebCrypto (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean> {
100
+ if (publicKey.buffer instanceof ArrayBuffer) {
101
+ const key = await crypto.get().subtle.importKey('raw', publicKey.buffer, { name: 'Ed25519' }, false, ['verify'])
102
+ const isValid = await crypto.get().subtle.verify({ name: 'Ed25519' }, key, sig, msg instanceof Uint8Array ? msg : msg.subarray())
103
+ return isValid
104
+ }
105
+
106
+ throw new TypeError('WebCrypto does not support SharedArrayBuffer for Ed25519 keys')
107
+ }
108
+
109
+ function hashAndVerifyNoble (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean {
55
110
  return ed.verify(sig, msg instanceof Uint8Array ? msg : msg.subarray(), publicKey)
56
111
  }
57
112
 
113
+ export async function hashAndVerify (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean> {
114
+ if (ed25519Supported == null) {
115
+ ed25519Supported = await webCryptoEd25519SupportedPromise
116
+ }
117
+
118
+ if (ed25519Supported) {
119
+ return hashAndVerifyWebCrypto(publicKey, sig, msg)
120
+ }
121
+
122
+ return hashAndVerifyNoble(publicKey, sig, msg)
123
+ }
124
+
58
125
  function concatKeys (privateKeyRaw: Uint8Array, publicKey: Uint8Array): Uint8Array {
59
126
  const privateKey = new Uint8Array(PRIVATE_KEY_BYTE_LENGTH)
60
127
  for (let i = 0; i < KEYS_BYTE_LENGTH; i++) {
@@ -72,7 +72,7 @@ export function generateKeyFromSeed (seed: Uint8Array): Uint8ArrayKeyPair {
72
72
  }
73
73
  }
74
74
 
75
- export function hashAndSign (key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Buffer {
75
+ export function hashAndSign (key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array {
76
76
  if (!(key instanceof Uint8Array)) {
77
77
  throw new TypeError('"key" must be a node.js Buffer, or Uint8Array.')
78
78
  }
@@ -4,12 +4,13 @@ import randomBytes from '../../random-bytes.js'
4
4
  import webcrypto from '../../webcrypto/index.js'
5
5
  import * as utils from './utils.js'
6
6
  import type { JWKKeyPair } from '../interface.js'
7
+ import type { AbortOptions } from '@libp2p/interface'
7
8
  import type { Uint8ArrayList } from 'uint8arraylist'
8
9
 
9
10
  export const RSAES_PKCS1_V1_5_OID = '1.2.840.113549.1.1.1'
10
11
  export { utils }
11
12
 
12
- export async function generateRSAKey (bits: number): Promise<JWKKeyPair> {
13
+ export async function generateRSAKey (bits: number, options?: AbortOptions): Promise<JWKKeyPair> {
13
14
  const pair = await webcrypto.get().subtle.generateKey(
14
15
  {
15
16
  name: 'RSASSA-PKCS1-v1_5',
@@ -20,8 +21,9 @@ export async function generateRSAKey (bits: number): Promise<JWKKeyPair> {
20
21
  true,
21
22
  ['sign', 'verify']
22
23
  )
24
+ options?.signal?.throwIfAborted()
23
25
 
24
- const keys = await exportKey(pair)
26
+ const keys = await exportKey(pair, options)
25
27
 
26
28
  return {
27
29
  privateKey: keys[0],
@@ -31,7 +33,7 @@ export async function generateRSAKey (bits: number): Promise<JWKKeyPair> {
31
33
 
32
34
  export { randomBytes as getRandomValues }
33
35
 
34
- export async function hashAndSign (key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array> {
36
+ export async function hashAndSign (key: JsonWebKey, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): Promise<Uint8Array> {
35
37
  const privateKey = await webcrypto.get().subtle.importKey(
36
38
  'jwk',
37
39
  key,
@@ -42,17 +44,19 @@ export async function hashAndSign (key: JsonWebKey, msg: Uint8Array | Uint8Array
42
44
  false,
43
45
  ['sign']
44
46
  )
47
+ options?.signal?.throwIfAborted()
45
48
 
46
49
  const sig = await webcrypto.get().subtle.sign(
47
50
  { name: 'RSASSA-PKCS1-v1_5' },
48
51
  privateKey,
49
52
  msg instanceof Uint8Array ? msg : msg.subarray()
50
53
  )
54
+ options?.signal?.throwIfAborted()
51
55
 
52
56
  return new Uint8Array(sig, 0, sig.byteLength)
53
57
  }
54
58
 
55
- export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean> {
59
+ export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList, options?: AbortOptions): Promise<boolean> {
56
60
  const publicKey = await webcrypto.get().subtle.importKey(
57
61
  'jwk',
58
62
  key,
@@ -63,24 +67,31 @@ export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint
63
67
  false,
64
68
  ['verify']
65
69
  )
70
+ options?.signal?.throwIfAborted()
66
71
 
67
- return webcrypto.get().subtle.verify(
72
+ const result = await webcrypto.get().subtle.verify(
68
73
  { name: 'RSASSA-PKCS1-v1_5' },
69
74
  publicKey,
70
75
  sig,
71
76
  msg instanceof Uint8Array ? msg : msg.subarray()
72
77
  )
78
+ options?.signal?.throwIfAborted()
79
+
80
+ return result
73
81
  }
74
82
 
75
- async function exportKey (pair: CryptoKeyPair): Promise<[JsonWebKey, JsonWebKey]> {
83
+ async function exportKey (pair: CryptoKeyPair, options?: AbortOptions): Promise<[JsonWebKey, JsonWebKey]> {
76
84
  if (pair.privateKey == null || pair.publicKey == null) {
77
85
  throw new InvalidParametersError('Private and public key are required')
78
86
  }
79
87
 
80
- return Promise.all([
88
+ const result = await Promise.all([
81
89
  webcrypto.get().subtle.exportKey('jwk', pair.privateKey),
82
90
  webcrypto.get().subtle.exportKey('jwk', pair.publicKey)
83
91
  ])
92
+ options?.signal?.throwIfAborted()
93
+
94
+ return result
84
95
  }
85
96
 
86
97
  export function rsaKeySize (jwk: JsonWebKey): number {