@libp2p/crypto 2.0.8 → 3.0.0-06e6d235f

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 (93) hide show
  1. package/README.md +1 -9
  2. package/dist/index.min.js +11 -11
  3. package/dist/src/aes/cipher-mode.js +1 -1
  4. package/dist/src/aes/cipher-mode.js.map +1 -1
  5. package/dist/src/aes/index.d.ts +1 -1
  6. package/dist/src/aes/index.d.ts.map +1 -1
  7. package/dist/src/aes/index.js +1 -1
  8. package/dist/src/aes/index.js.map +1 -1
  9. package/dist/src/ciphers/aes-gcm.browser.js.map +1 -1
  10. package/dist/src/ciphers/aes-gcm.js +3 -3
  11. package/dist/src/ciphers/aes-gcm.js.map +1 -1
  12. package/dist/src/keys/ecdh-browser.js +2 -2
  13. package/dist/src/keys/ecdh-browser.js.map +1 -1
  14. package/dist/src/keys/ecdh.js +1 -1
  15. package/dist/src/keys/ecdh.js.map +1 -1
  16. package/dist/src/keys/ed25519-browser.d.ts +5 -4
  17. package/dist/src/keys/ed25519-browser.d.ts.map +1 -1
  18. package/dist/src/keys/ed25519-browser.js +6 -6
  19. package/dist/src/keys/ed25519-browser.js.map +1 -1
  20. package/dist/src/keys/ed25519-class.d.ts +4 -3
  21. package/dist/src/keys/ed25519-class.d.ts.map +1 -1
  22. package/dist/src/keys/ed25519-class.js +20 -9
  23. package/dist/src/keys/ed25519-class.js.map +1 -1
  24. package/dist/src/keys/ed25519.d.ts +5 -4
  25. package/dist/src/keys/ed25519.d.ts.map +1 -1
  26. package/dist/src/keys/ed25519.js +11 -19
  27. package/dist/src/keys/ed25519.js.map +1 -1
  28. package/dist/src/keys/index.d.ts +1 -1
  29. package/dist/src/keys/index.d.ts.map +1 -1
  30. package/dist/src/keys/index.js +1 -1
  31. package/dist/src/keys/index.js.map +1 -1
  32. package/dist/src/keys/key-stretcher.js +1 -1
  33. package/dist/src/keys/key-stretcher.js.map +1 -1
  34. package/dist/src/keys/keys.js.map +1 -1
  35. package/dist/src/keys/rsa-browser.d.ts +5 -4
  36. package/dist/src/keys/rsa-browser.d.ts.map +1 -1
  37. package/dist/src/keys/rsa-browser.js +4 -4
  38. package/dist/src/keys/rsa-browser.js.map +1 -1
  39. package/dist/src/keys/rsa-class.d.ts +8 -7
  40. package/dist/src/keys/rsa-class.d.ts.map +1 -1
  41. package/dist/src/keys/rsa-class.js +16 -9
  42. package/dist/src/keys/rsa-class.js.map +1 -1
  43. package/dist/src/keys/rsa-utils.js +1 -1
  44. package/dist/src/keys/rsa-utils.js.map +1 -1
  45. package/dist/src/keys/rsa.d.ts +5 -4
  46. package/dist/src/keys/rsa.d.ts.map +1 -1
  47. package/dist/src/keys/rsa.js +39 -13
  48. package/dist/src/keys/rsa.js.map +1 -1
  49. package/dist/src/keys/secp256k1-browser.d.ts +18 -0
  50. package/dist/src/keys/secp256k1-browser.d.ts.map +1 -0
  51. package/dist/src/keys/secp256k1-browser.js +78 -0
  52. package/dist/src/keys/secp256k1-browser.js.map +1 -0
  53. package/dist/src/keys/secp256k1-class.d.ts +4 -3
  54. package/dist/src/keys/secp256k1-class.d.ts.map +1 -1
  55. package/dist/src/keys/secp256k1-class.js +18 -7
  56. package/dist/src/keys/secp256k1-class.js.map +1 -1
  57. package/dist/src/keys/secp256k1.d.ts +3 -2
  58. package/dist/src/keys/secp256k1.d.ts.map +1 -1
  59. package/dist/src/keys/secp256k1.js +24 -6
  60. package/dist/src/keys/secp256k1.js.map +1 -1
  61. package/dist/src/pbkdf2.js +1 -1
  62. package/dist/src/pbkdf2.js.map +1 -1
  63. package/dist/src/random-bytes.js +1 -1
  64. package/dist/src/random-bytes.js.map +1 -1
  65. package/dist/src/util.d.ts +1 -0
  66. package/dist/src/util.d.ts.map +1 -1
  67. package/dist/src/util.js +8 -0
  68. package/dist/src/util.js.map +1 -1
  69. package/dist/src/webcrypto.js +1 -1
  70. package/dist/src/webcrypto.js.map +1 -1
  71. package/package.json +11 -6
  72. package/src/aes/cipher-mode.ts +1 -1
  73. package/src/aes/index.ts +1 -1
  74. package/src/ciphers/aes-gcm.ts +3 -3
  75. package/src/keys/ecdh-browser.ts +1 -1
  76. package/src/keys/ecdh.ts +1 -1
  77. package/src/keys/ed25519-browser.ts +7 -6
  78. package/src/keys/ed25519-class.ts +22 -9
  79. package/src/keys/ed25519.ts +12 -20
  80. package/src/keys/index.ts +2 -2
  81. package/src/keys/key-stretcher.ts +1 -1
  82. package/src/keys/rsa-browser.ts +10 -9
  83. package/src/keys/rsa-class.ts +22 -12
  84. package/src/keys/rsa-utils.ts +1 -1
  85. package/src/keys/rsa.ts +44 -17
  86. package/src/keys/secp256k1-browser.ts +87 -0
  87. package/src/keys/secp256k1-class.ts +20 -7
  88. package/src/keys/secp256k1.ts +29 -6
  89. package/src/pbkdf2.ts +1 -1
  90. package/src/random-bytes.ts +1 -1
  91. package/src/util.ts +10 -0
  92. package/src/webcrypto.ts +1 -1
  93. package/dist/typedoc-urls.json +0 -37
@@ -1,6 +1,6 @@
1
- import { CodeError } from '@libp2p/interface/errors';
1
+ import crypto from 'node:crypto';
2
+ import { CodeError } from '@libp2p/interface';
2
3
  import { secp256k1 as secp } from '@noble/curves/secp256k1';
3
- import { sha256 } from 'multiformats/hashes/sha2';
4
4
  const PRIVATE_KEY_BYTE_LENGTH = 32;
5
5
  export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
6
6
  export function generateKey() {
@@ -9,8 +9,17 @@ export function generateKey() {
9
9
  /**
10
10
  * Hash and sign message with private key
11
11
  */
12
- export async function hashAndSign(key, msg) {
13
- const { digest } = await sha256.digest(msg);
12
+ export function hashAndSign(key, msg) {
13
+ const hash = crypto.createHash('sha256');
14
+ if (msg instanceof Uint8Array) {
15
+ hash.update(msg);
16
+ }
17
+ else {
18
+ for (const buf of msg) {
19
+ hash.update(buf);
20
+ }
21
+ }
22
+ const digest = hash.digest();
14
23
  try {
15
24
  const signature = secp.sign(digest, key);
16
25
  return signature.toDERRawBytes();
@@ -22,9 +31,18 @@ export async function hashAndSign(key, msg) {
22
31
  /**
23
32
  * Hash message and verify signature with public key
24
33
  */
25
- export async function hashAndVerify(key, sig, msg) {
34
+ export function hashAndVerify(key, sig, msg) {
35
+ const hash = crypto.createHash('sha256');
36
+ if (msg instanceof Uint8Array) {
37
+ hash.update(msg);
38
+ }
39
+ else {
40
+ for (const buf of msg) {
41
+ hash.update(buf);
42
+ }
43
+ }
44
+ const digest = hash.digest();
26
45
  try {
27
- const { digest } = await sha256.digest(msg);
28
46
  return secp.verify(sig, digest, key);
29
47
  }
30
48
  catch (err) {
@@ -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,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
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../src/keys/secp256k1.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors';
1
+ import { CodeError } from '@libp2p/interface';
2
2
  // @ts-expect-error types are missing
3
3
  import forgePbkdf2 from 'node-forge/lib/pbkdf2.js';
4
4
  // @ts-expect-error types are missing
@@ -1 +1 @@
1
- {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,qCAAqC;AACrC,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAClD,qCAAqC;AACrC,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,QAAQ;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAgB,EAAE,IAAY,EAAE,UAAkB,EAAE,OAAe,EAAE,IAAY;IAC/G,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,EAAE;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,IAAI,SAAS,CAAC,SAAS,IAAI,0CAA0C,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAA;KACjH;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,WAAW,CACrB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,CACP,CAAA;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,qCAAqC;AACrC,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAClD,qCAAqC;AACrC,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,QAAQ;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAgB,EAAE,IAAY,EAAE,UAAkB,EAAE,OAAe,EAAE,IAAY;IAC/G,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,IAAI,SAAS,CAAC,SAAS,IAAI,0CAA0C,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAA;IAClH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,WAAW,CACrB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,CACP,CAAA;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors';
1
+ import { CodeError } from '@libp2p/interface';
2
2
  import { randomBytes as randB } from '@noble/hashes/utils';
3
3
  /**
4
4
  * Generates a Uint8Array with length `number` populated by random bytes
@@ -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,WAAW,IAAI,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE1D;;GAEG;AACH,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"}
1
+ {"version":3,"file":"random-bytes.js","sourceRoot":"","sources":["../../src/random-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,WAAW,IAAI,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE1D;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,MAAc;IACjD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,oDAAoD,EAAE,oBAAoB,CAAC,CAAA;IACjG,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAA;AACtB,CAAC"}
@@ -6,4 +6,5 @@ export declare function bigIntegerToUintBase64url(num: {
6
6
  }, len?: number): string;
7
7
  export declare function base64urlToBigInteger(str: string): typeof forge.jsbn.BigInteger;
8
8
  export declare function base64urlToBuffer(str: string, len?: number): Uint8Array;
9
+ export declare function isPromise<T = unknown>(thing: any): thing is Promise<T>;
9
10
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAE/B,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAK3C,wBAAgB,yBAAyB,CAAE,GAAG,EAAE;IAAE,GAAG,IAAI,GAAG,CAAA;CAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBpF;AAGD,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAGhF;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CASxE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAE/B,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAK3C,wBAAgB,yBAAyB,CAAE,GAAG,EAAE;IAAE,GAAG,IAAI,GAAG,CAAA;CAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBpF;AAGD,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAGhF;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CASxE;AAED,wBAAgB,SAAS,CAAE,CAAC,GAAG,OAAO,EAAG,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAQxE"}
package/dist/src/util.js CHANGED
@@ -34,4 +34,12 @@ export function base64urlToBuffer(str, len) {
34
34
  }
35
35
  return buf;
36
36
  }
37
+ export function isPromise(thing) {
38
+ if (thing == null) {
39
+ return false;
40
+ }
41
+ return typeof thing.then === 'function' &&
42
+ typeof thing.catch === 'function' &&
43
+ typeof thing.finally === 'function';
44
+ }
37
45
  //# sourceMappingURL=util.js.map
@@ -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,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,MAAM,UAAU,yBAAyB,CAAE,GAAmB,EAAE,GAAY;IAC1E,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"}
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,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,MAAM,UAAU,yBAAyB,CAAE,GAAmB,EAAE,GAAY;IAC1E,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,CAAC;QAChB,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;IACjE,CAAC;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,CAAC;QAChB,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;IACjE,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,SAAS,CAAgB,KAAU;IACjD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU;QACrC,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QACjC,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,CAAA;AACvC,CAAC"}
@@ -9,7 +9,7 @@ export default {
9
9
  'The most likely cause of this error is that this page is being accessed ' +
10
10
  'from an insecure context (i.e. not HTTPS). For more information and ' +
11
11
  'possible resolutions see ' +
12
- 'https://github.com/libp2p/js-libp2p-crypto/blob/master/README.md#web-crypto-api'), { code: 'ERR_MISSING_WEB_CRYPTO' });
12
+ 'https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api'), { code: 'ERR_MISSING_WEB_CRYPTO' });
13
13
  }
14
14
  return nativeCrypto;
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["../../src/webcrypto.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,+EAA+E;AAC/E,6CAA6C;AAC7C,eAAe;IACb,GAAG,CAAE,GAAG,GAAG,UAAU;QACnB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAA;QAE/B,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE;YACvD,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,0BAA0B;gBAC1B,0EAA0E;gBAC1E,sEAAsE;gBACtE,2BAA2B;gBAC3B,iFAAiF,CAClF,EACD,EAAE,IAAI,EAAE,wBAAwB,EAAE,CACnC,CAAA;SACF;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["../../src/webcrypto.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,+EAA+E;AAC/E,6CAA6C;AAC7C,eAAe;IACb,GAAG,CAAE,GAAG,GAAG,UAAU;QACnB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAA;QAE/B,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YACxD,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,0BAA0B;gBAC1B,0EAA0E;gBAC1E,sEAAsE;gBACtE,2BAA2B;gBAC3B,wFAAwF,CACzF,EACD,EAAE,IAAI,EAAE,wBAAwB,EAAE,CACnC,CAAA;QACH,CAAC;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;CACF,CAAA"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@libp2p/crypto",
3
- "version": "2.0.8",
3
+ "version": "3.0.0-06e6d235f",
4
4
  "description": "Crypto primitives for libp2p",
5
5
  "license": "Apache-2.0 OR MIT",
6
- "homepage": "https://github.com/libp2p/js-libp2p/tree/master/packages/crypto#readme",
6
+ "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/crypto#readme",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/libp2p/js-libp2p.git"
@@ -11,6 +11,10 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/libp2p/js-libp2p/issues"
13
13
  },
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "provenance": true
17
+ },
14
18
  "keywords": [
15
19
  "IPFS",
16
20
  "crypto",
@@ -86,10 +90,10 @@
86
90
  "generate": "protons ./src/keys/keys.proto"
87
91
  },
88
92
  "dependencies": {
89
- "@libp2p/interface": "^0.1.6",
93
+ "@libp2p/interface": "1.0.0-06e6d235f",
90
94
  "@noble/curves": "^1.1.0",
91
95
  "@noble/hashes": "^1.3.1",
92
- "multiformats": "^12.0.1",
96
+ "multiformats": "^12.1.3",
93
97
  "node-forge": "^1.1.0",
94
98
  "protons-runtime": "^5.0.0",
95
99
  "uint8arraylist": "^2.4.3",
@@ -99,7 +103,7 @@
99
103
  "@types/mocha": "^10.0.0",
100
104
  "aegir": "^41.0.2",
101
105
  "benchmark": "^2.1.4",
102
- "protons": "^7.0.2"
106
+ "protons": "^7.3.0"
103
107
  },
104
108
  "browser": {
105
109
  "./dist/src/aes/ciphers.js": "./dist/src/aes/ciphers-browser.js",
@@ -107,6 +111,7 @@
107
111
  "./dist/src/hmac/index.js": "./dist/src/hmac/index-browser.js",
108
112
  "./dist/src/keys/ecdh.js": "./dist/src/keys/ecdh-browser.js",
109
113
  "./dist/src/keys/ed25519.js": "./dist/src/keys/ed25519-browser.js",
110
- "./dist/src/keys/rsa.js": "./dist/src/keys/rsa-browser.js"
114
+ "./dist/src/keys/rsa.js": "./dist/src/keys/rsa-browser.js",
115
+ "./dist/src/keys/secp256k1.js": "./dist/src/keys/secp256k1-browser.js"
111
116
  }
112
117
  }
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
 
3
3
  const CIPHER_MODES = {
4
4
  16: 'aes-128-ctr',
package/src/aes/index.ts CHANGED
@@ -51,7 +51,7 @@ export interface AESCipher {
51
51
  * @param key - The key, if length `16` then `AES 128` is used. For length `32`, `AES 256` is used
52
52
  * @param iv - Must have length `16`
53
53
  */
54
- export async function create (key: Uint8Array, iv: Uint8Array): Promise<AESCipher> {
54
+ export function create (key: Uint8Array, iv: Uint8Array): AESCipher {
55
55
  const mode = cipherMode(key)
56
56
  const cipher = ciphers.createCipheriv(mode, key, iv)
57
57
  const decipher = ciphers.createDecipheriv(mode, key, iv)
@@ -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> {
17
+ function encryptWithKey (data: Uint8Array, key: Uint8Array): Uint8Array {
18
18
  const nonce = crypto.randomBytes(nonceLength)
19
19
 
20
20
  // Create the cipher instance.
@@ -43,7 +43,7 @@ export function create (opts?: CreateOptions): AESCipher {
43
43
  const key = crypto.pbkdf2Sync(password, salt, iterations, keyLength, digest)
44
44
 
45
45
  // Encrypt and prepend salt.
46
- return uint8ArrayConcat([salt, await encryptWithKey(Uint8Array.from(data), key)])
46
+ return uint8ArrayConcat([salt, encryptWithKey(Uint8Array.from(data), key)])
47
47
  }
48
48
 
49
49
  /**
@@ -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> {
56
+ function decryptWithKey (ciphertextAndNonce: Uint8Array, key: Uint8Array): 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)
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
  import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
3
3
  import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
4
4
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
package/src/keys/ecdh.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import crypto from 'crypto'
2
- import { CodeError } from '@libp2p/interface/errors'
2
+ import { CodeError } from '@libp2p/interface'
3
3
  import type { ECDHKey, ECDHKeyPair } from './interface.js'
4
4
 
5
5
  const curves = {
@@ -1,5 +1,6 @@
1
1
  import { ed25519 as ed } from '@noble/curves/ed25519'
2
2
  import type { Uint8ArrayKeyPair } from './interface'
3
+ import type { Uint8ArrayList } from 'uint8arraylist'
3
4
 
4
5
  const PUBLIC_KEY_BYTE_LENGTH = 32
5
6
  const PRIVATE_KEY_BYTE_LENGTH = 64 // private key is actually 32 bytes but for historical reasons we concat private and public keys
@@ -8,7 +9,7 @@ const KEYS_BYTE_LENGTH = 32
8
9
  export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength }
9
10
  export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
10
11
 
11
- export async function generateKey (): Promise<Uint8ArrayKeyPair> {
12
+ export function generateKey (): Uint8ArrayKeyPair {
12
13
  // the actual private key (32 bytes)
13
14
  const privateKeyRaw = ed.utils.randomPrivateKey()
14
15
  const publicKey = ed.getPublicKey(privateKeyRaw)
@@ -25,7 +26,7 @@ export async function generateKey (): Promise<Uint8ArrayKeyPair> {
25
26
  /**
26
27
  * Generate keypair from a 32 byte uint8array
27
28
  */
28
- export async function generateKeyFromSeed (seed: Uint8Array): Promise<Uint8ArrayKeyPair> {
29
+ export function generateKeyFromSeed (seed: Uint8Array): Uint8ArrayKeyPair {
29
30
  if (seed.length !== KEYS_BYTE_LENGTH) {
30
31
  throw new TypeError('"seed" must be 32 bytes in length.')
31
32
  } else if (!(seed instanceof Uint8Array)) {
@@ -44,14 +45,14 @@ export async function generateKeyFromSeed (seed: Uint8Array): Promise<Uint8Array
44
45
  }
45
46
  }
46
47
 
47
- export async function hashAndSign (privateKey: Uint8Array, msg: Uint8Array): Promise<Uint8Array> {
48
+ export function hashAndSign (privateKey: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array {
48
49
  const privateKeyRaw = privateKey.subarray(0, KEYS_BYTE_LENGTH)
49
50
 
50
- return ed.sign(msg, privateKeyRaw)
51
+ return ed.sign(msg instanceof Uint8Array ? msg : msg.subarray(), privateKeyRaw)
51
52
  }
52
53
 
53
- export async function hashAndVerify (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array): Promise<boolean> {
54
- return ed.verify(sig, msg, publicKey)
54
+ export function hashAndVerify (publicKey: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean {
55
+ return ed.verify(sig, msg instanceof Uint8Array ? msg : msg.subarray(), publicKey)
55
56
  }
56
57
 
57
58
  function concatKeys (privateKeyRaw: Uint8Array, publicKey: Uint8Array): Uint8Array {
@@ -1,12 +1,14 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
  import { base58btc } from 'multiformats/bases/base58'
3
3
  import { identity } from 'multiformats/hashes/identity'
4
4
  import { sha256 } from 'multiformats/hashes/sha2'
5
5
  import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
6
+ import { isPromise } from '../util.js'
6
7
  import * as crypto from './ed25519.js'
7
8
  import { exporter } from './exporter.js'
8
9
  import * as pbm from './keys.js'
9
10
  import type { Multibase } from 'multiformats'
11
+ import type { Uint8ArrayList } from 'uint8arraylist'
10
12
 
11
13
  export class Ed25519PublicKey {
12
14
  private readonly _key: Uint8Array
@@ -15,7 +17,7 @@ export class Ed25519PublicKey {
15
17
  this._key = ensureKey(key, crypto.publicKeyLength)
16
18
  }
17
19
 
18
- async verify (data: Uint8Array, sig: Uint8Array): Promise<boolean> {
20
+ verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean {
19
21
  return crypto.hashAndVerify(this._key, sig, data)
20
22
  }
21
23
 
@@ -34,10 +36,14 @@ export class Ed25519PublicKey {
34
36
  return uint8ArrayEquals(this.bytes, key.bytes)
35
37
  }
36
38
 
37
- async hash (): Promise<Uint8Array> {
38
- const { bytes } = await sha256.digest(this.bytes)
39
+ hash (): Uint8Array | Promise<Uint8Array> {
40
+ const p = sha256.digest(this.bytes)
39
41
 
40
- return bytes
42
+ if (isPromise(p)) {
43
+ return p.then(({ bytes }) => bytes)
44
+ }
45
+
46
+ return p.bytes
41
47
  }
42
48
  }
43
49
 
@@ -52,7 +58,7 @@ export class Ed25519PrivateKey {
52
58
  this._publicKey = ensureKey(publicKey, crypto.publicKeyLength)
53
59
  }
54
60
 
55
- async sign (message: Uint8Array): Promise<Uint8Array> {
61
+ sign (message: Uint8Array | Uint8ArrayList): Uint8Array {
56
62
  return crypto.hashAndSign(this._key, message)
57
63
  }
58
64
 
@@ -76,7 +82,14 @@ export class Ed25519PrivateKey {
76
82
  }
77
83
 
78
84
  async hash (): Promise<Uint8Array> {
79
- const { bytes } = await sha256.digest(this.bytes)
85
+ const p = sha256.digest(this.bytes)
86
+ let bytes: Uint8Array
87
+
88
+ if (isPromise(p)) {
89
+ ({ bytes } = await p)
90
+ } else {
91
+ bytes = p.bytes
92
+ }
80
93
 
81
94
  return bytes
82
95
  }
@@ -128,12 +141,12 @@ export function unmarshalEd25519PublicKey (bytes: Uint8Array): Ed25519PublicKey
128
141
  }
129
142
 
130
143
  export async function generateKeyPair (): Promise<Ed25519PrivateKey> {
131
- const { privateKey, publicKey } = await crypto.generateKey()
144
+ const { privateKey, publicKey } = crypto.generateKey()
132
145
  return new Ed25519PrivateKey(privateKey, publicKey)
133
146
  }
134
147
 
135
148
  export async function generateKeyPairFromSeed (seed: Uint8Array): Promise<Ed25519PrivateKey> {
136
- const { privateKey, publicKey } = await crypto.generateKeyFromSeed(seed)
149
+ const { privateKey, publicKey } = crypto.generateKeyFromSeed(seed)
137
150
  return new Ed25519PrivateKey(privateKey, publicKey)
138
151
  }
139
152
 
@@ -1,10 +1,11 @@
1
1
  import crypto from 'crypto'
2
- import { promisify } from 'util'
2
+ import { concat as uint8arrayConcat } from 'uint8arrays/concat'
3
3
  import { fromString as uint8arrayFromString } from 'uint8arrays/from-string'
4
4
  import { toString as uint8arrayToString } from 'uint8arrays/to-string'
5
5
  import type { Uint8ArrayKeyPair } from './interface.js'
6
+ import type { Uint8ArrayList } from 'uint8arraylist'
6
7
 
7
- const keypair = promisify(crypto.generateKeyPair)
8
+ const keypair = crypto.generateKeyPairSync
8
9
 
9
10
  const PUBLIC_KEY_BYTE_LENGTH = 32
10
11
  const PRIVATE_KEY_BYTE_LENGTH = 64 // private key is actually 32 bytes but for historical reasons we concat private and public keys
@@ -35,8 +36,8 @@ function derivePublicKey (privateKey: Uint8Array): Uint8Array {
35
36
  return uint8arrayFromString(jwk.x, 'base64url')
36
37
  }
37
38
 
38
- export async function generateKey (): Promise<Uint8ArrayKeyPair> {
39
- const key = await keypair('ed25519', {
39
+ export function generateKey (): Uint8ArrayKeyPair {
40
+ const key = keypair('ed25519', {
40
41
  publicKeyEncoding: { type: 'spki', format: 'jwk' },
41
42
  privateKeyEncoding: { type: 'pkcs8', format: 'jwk' }
42
43
  })
@@ -47,7 +48,7 @@ export async function generateKey (): Promise<Uint8ArrayKeyPair> {
47
48
  const publicKeyRaw = uint8arrayFromString(key.privateKey.x, 'base64url')
48
49
 
49
50
  return {
50
- privateKey: concatKeys(privateKeyRaw, publicKeyRaw),
51
+ privateKey: uint8arrayConcat([privateKeyRaw, publicKeyRaw], privateKeyRaw.byteLength + publicKeyRaw.byteLength),
51
52
  publicKey: publicKeyRaw
52
53
  }
53
54
  }
@@ -55,7 +56,7 @@ export async function generateKey (): Promise<Uint8ArrayKeyPair> {
55
56
  /**
56
57
  * Generate keypair from a 32 byte uint8array
57
58
  */
58
- export async function generateKeyFromSeed (seed: Uint8Array): Promise<Uint8ArrayKeyPair> {
59
+ export function generateKeyFromSeed (seed: Uint8Array): Uint8ArrayKeyPair {
59
60
  if (seed.length !== KEYS_BYTE_LENGTH) {
60
61
  throw new TypeError('"seed" must be 32 bytes in length.')
61
62
  } else if (!(seed instanceof Uint8Array)) {
@@ -66,12 +67,12 @@ export async function generateKeyFromSeed (seed: Uint8Array): Promise<Uint8Array
66
67
  const publicKeyRaw = derivePublicKey(seed)
67
68
 
68
69
  return {
69
- privateKey: concatKeys(seed, publicKeyRaw),
70
+ privateKey: uint8arrayConcat([seed, publicKeyRaw], seed.byteLength + publicKeyRaw.byteLength),
70
71
  publicKey: publicKeyRaw
71
72
  }
72
73
  }
73
74
 
74
- export async function hashAndSign (key: Uint8Array, msg: Uint8Array): Promise<Buffer> {
75
+ export function hashAndSign (key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Buffer {
75
76
  if (!(key instanceof Uint8Array)) {
76
77
  throw new TypeError('"key" must be a node.js Buffer, or Uint8Array.')
77
78
  }
@@ -99,10 +100,10 @@ export async function hashAndSign (key: Uint8Array, msg: Uint8Array): Promise<Bu
99
100
  }
100
101
  })
101
102
 
102
- return crypto.sign(null, msg, obj)
103
+ return crypto.sign(null, msg instanceof Uint8Array ? msg : msg.subarray(), obj)
103
104
  }
104
105
 
105
- export async function hashAndVerify (key: Uint8Array, sig: Uint8Array, msg: Uint8Array): Promise<boolean> {
106
+ export function hashAndVerify (key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean {
106
107
  if (key.byteLength !== PUBLIC_KEY_BYTE_LENGTH) {
107
108
  throw new TypeError('"key" must be 32 bytes in length.')
108
109
  } else if (!(key instanceof Uint8Array)) {
@@ -124,14 +125,5 @@ export async function hashAndVerify (key: Uint8Array, sig: Uint8Array, msg: Uint
124
125
  }
125
126
  })
126
127
 
127
- return crypto.verify(null, msg, obj, sig)
128
- }
129
-
130
- function concatKeys (privateKeyRaw: Uint8Array, publicKey: Uint8Array): Uint8Array {
131
- const privateKey = new Uint8Array(PRIVATE_KEY_BYTE_LENGTH)
132
- for (let i = 0; i < KEYS_BYTE_LENGTH; i++) {
133
- privateKey[i] = privateKeyRaw[i]
134
- privateKey[KEYS_BYTE_LENGTH + i] = publicKey[i]
135
- }
136
- return privateKey
128
+ return crypto.verify(null, msg instanceof Uint8Array ? msg : msg.subarray(), obj, sig)
137
129
  }
package/src/keys/index.ts CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  import 'node-forge/lib/asn1.js'
14
14
  import 'node-forge/lib/pbe.js'
15
- import { CodeError } from '@libp2p/interface/errors'
15
+ import { CodeError } from '@libp2p/interface'
16
16
  // @ts-expect-error types are missing
17
17
  import forge from 'node-forge/lib/forge.js'
18
18
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
@@ -23,7 +23,7 @@ import { keyStretcher } from './key-stretcher.js'
23
23
  import * as keysPBM from './keys.js'
24
24
  import * as RSA from './rsa-class.js'
25
25
  import * as Secp256k1 from './secp256k1-class.js'
26
- import type { PrivateKey, PublicKey } from '@libp2p/interface/keys'
26
+ import type { PrivateKey, PublicKey } from '@libp2p/interface'
27
27
 
28
28
  export { keyStretcher }
29
29
  export { generateEphemeralKeyPair }
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
  import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
3
3
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
4
4
  import * as hmac from '../hmac/index.js'
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
3
3
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
4
4
  import randomBytes from '../random-bytes.js'
@@ -6,6 +6,7 @@ import webcrypto from '../webcrypto.js'
6
6
  import { jwk2pub, jwk2priv } from './jwk2pem.js'
7
7
  import * as utils from './rsa-utils.js'
8
8
  import type { JWKKeyPair } from './interface.js'
9
+ import type { Uint8ArrayList } from 'uint8arraylist'
9
10
 
10
11
  export { utils }
11
12
 
@@ -60,7 +61,7 @@ export async function unmarshalPrivateKey (key: JsonWebKey): Promise<JWKKeyPair>
60
61
 
61
62
  export { randomBytes as getRandomValues }
62
63
 
63
- export async function hashAndSign (key: JsonWebKey, msg: Uint8Array): Promise<Uint8Array> {
64
+ export async function hashAndSign (key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array> {
64
65
  const privateKey = await webcrypto.get().subtle.importKey(
65
66
  'jwk',
66
67
  key,
@@ -75,13 +76,13 @@ export async function hashAndSign (key: JsonWebKey, msg: Uint8Array): Promise<Ui
75
76
  const sig = await webcrypto.get().subtle.sign(
76
77
  { name: 'RSASSA-PKCS1-v1_5' },
77
78
  privateKey,
78
- Uint8Array.from(msg)
79
+ msg instanceof Uint8Array ? msg : msg.subarray()
79
80
  )
80
81
 
81
82
  return new Uint8Array(sig, 0, sig.byteLength)
82
83
  }
83
84
 
84
- export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array): Promise<boolean> {
85
+ export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean> {
85
86
  const publicKey = await webcrypto.get().subtle.importKey(
86
87
  'jwk',
87
88
  key,
@@ -97,7 +98,7 @@ export async function hashAndVerify (key: JsonWebKey, sig: Uint8Array, msg: Uint
97
98
  { name: 'RSASSA-PKCS1-v1_5' },
98
99
  publicKey,
99
100
  sig,
100
- msg
101
+ msg instanceof Uint8Array ? msg : msg.subarray()
101
102
  )
102
103
  }
103
104
 
@@ -141,18 +142,18 @@ Explanation:
141
142
 
142
143
  */
143
144
 
144
- function convertKey (key: JsonWebKey, pub: boolean, msg: Uint8Array, handle: (msg: string, key: { encrypt(msg: string): string, decrypt(msg: string): string }) => string): Uint8Array {
145
+ function convertKey (key: JsonWebKey, pub: boolean, msg: Uint8Array | Uint8ArrayList, handle: (msg: string, key: { encrypt(msg: string): string, decrypt(msg: string): string }) => string): Uint8Array {
145
146
  const fkey = pub ? jwk2pub(key) : jwk2priv(key)
146
- const fmsg = uint8ArrayToString(Uint8Array.from(msg), 'ascii')
147
+ const fmsg = uint8ArrayToString(msg instanceof Uint8Array ? msg : msg.subarray(), 'ascii')
147
148
  const fomsg = handle(fmsg, fkey)
148
149
  return uint8ArrayFromString(fomsg, 'ascii')
149
150
  }
150
151
 
151
- export function encrypt (key: JsonWebKey, msg: Uint8Array): Uint8Array {
152
+ export function encrypt (key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Uint8Array {
152
153
  return convertKey(key, true, msg, (msg, key) => key.encrypt(msg))
153
154
  }
154
155
 
155
- export function decrypt (key: JsonWebKey, msg: Uint8Array): Uint8Array {
156
+ export function decrypt (key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Uint8Array {
156
157
  return convertKey(key, false, msg, (msg, key) => key.decrypt(msg))
157
158
  }
158
159