@libp2p/crypto 4.1.9 → 5.0.0-1210884ed

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 (192) hide show
  1. package/dist/index.min.js +4 -5
  2. package/dist/src/ciphers/aes-gcm.browser.js +1 -1
  3. package/dist/src/ciphers/aes-gcm.browser.js.map +1 -1
  4. package/dist/src/ciphers/index.d.ts +2 -0
  5. package/dist/src/ciphers/index.d.ts.map +1 -0
  6. package/dist/src/ciphers/index.js +2 -0
  7. package/dist/src/ciphers/index.js.map +1 -0
  8. package/dist/src/errors.d.ts +19 -0
  9. package/dist/src/errors.d.ts.map +1 -0
  10. package/dist/src/errors.js +28 -0
  11. package/dist/src/errors.js.map +1 -0
  12. package/dist/src/hmac/{index-browser.d.ts → index.browser.d.ts} +1 -1
  13. package/dist/src/hmac/{index-browser.d.ts.map → index.browser.d.ts.map} +1 -1
  14. package/dist/src/hmac/{index-browser.js → index.browser.js} +2 -2
  15. package/dist/src/hmac/{index-browser.js.map → index.browser.js.map} +1 -1
  16. package/dist/src/keys/ecdh/index.browser.d.ts +4 -0
  17. package/dist/src/keys/ecdh/index.browser.d.ts.map +1 -0
  18. package/dist/src/keys/{ecdh-browser.js → ecdh/index.browser.js} +13 -11
  19. package/dist/src/keys/ecdh/index.browser.js.map +1 -0
  20. package/dist/src/keys/{ecdh.d.ts → ecdh/index.d.ts} +4 -3
  21. package/dist/src/keys/ecdh/index.d.ts.map +1 -0
  22. package/dist/src/keys/{ecdh.js → ecdh/index.js} +4 -4
  23. package/dist/src/keys/ecdh/index.js.map +1 -0
  24. package/dist/src/keys/ed25519/ed25519.d.ts +23 -0
  25. package/dist/src/keys/ed25519/ed25519.d.ts.map +1 -0
  26. package/dist/src/keys/ed25519/ed25519.js +54 -0
  27. package/dist/src/keys/ed25519/ed25519.js.map +1 -0
  28. package/dist/src/keys/{ed25519-browser.d.ts → ed25519/index.browser.d.ts} +2 -2
  29. package/dist/src/keys/ed25519/index.browser.d.ts.map +1 -0
  30. package/dist/src/keys/{ed25519-browser.js → ed25519/index.browser.js} +1 -1
  31. package/dist/src/keys/ed25519/index.browser.js.map +1 -0
  32. package/dist/src/keys/{ed25519.d.ts → ed25519/index.d.ts} +2 -2
  33. package/dist/src/keys/ed25519/index.d.ts.map +1 -0
  34. package/dist/src/keys/{ed25519.js → ed25519/index.js} +1 -1
  35. package/dist/src/keys/ed25519/index.js.map +1 -0
  36. package/dist/src/keys/ed25519/utils.d.ts +7 -0
  37. package/dist/src/keys/ed25519/utils.d.ts.map +1 -0
  38. package/dist/src/keys/ed25519/utils.js +36 -0
  39. package/dist/src/keys/ed25519/utils.js.map +1 -0
  40. package/dist/src/keys/ephemeral-keys.d.ts +2 -2
  41. package/dist/src/keys/ephemeral-keys.d.ts.map +1 -1
  42. package/dist/src/keys/ephemeral-keys.js +2 -2
  43. package/dist/src/keys/ephemeral-keys.js.map +1 -1
  44. package/dist/src/keys/index.d.ts +33 -36
  45. package/dist/src/keys/index.d.ts.map +1 -1
  46. package/dist/src/keys/index.js +93 -83
  47. package/dist/src/keys/index.js.map +1 -1
  48. package/dist/src/keys/key-stretcher.d.ts.map +1 -1
  49. package/dist/src/keys/key-stretcher.js +9 -7
  50. package/dist/src/keys/key-stretcher.js.map +1 -1
  51. package/dist/src/keys/keys.d.ts +4 -4
  52. package/dist/src/keys/keys.d.ts.map +1 -1
  53. package/dist/src/keys/keys.js +21 -15
  54. package/dist/src/keys/keys.js.map +1 -1
  55. package/dist/src/keys/rsa/index.browser.d.ts +11 -0
  56. package/dist/src/keys/rsa/index.browser.d.ts.map +1 -0
  57. package/dist/src/keys/{rsa-browser.js → rsa/index.browser.js} +10 -39
  58. package/dist/src/keys/rsa/index.browser.js.map +1 -0
  59. package/dist/src/keys/rsa/index.d.ts +11 -0
  60. package/dist/src/keys/rsa/index.d.ts.map +1 -0
  61. package/dist/src/keys/{rsa.js → rsa/index.js} +8 -22
  62. package/dist/src/keys/rsa/index.js.map +1 -0
  63. package/dist/src/keys/rsa/rsa.d.ts +28 -0
  64. package/dist/src/keys/rsa/rsa.d.ts.map +1 -0
  65. package/dist/src/keys/rsa/rsa.js +65 -0
  66. package/dist/src/keys/rsa/rsa.js.map +1 -0
  67. package/dist/src/keys/rsa/utils.d.ts +34 -0
  68. package/dist/src/keys/rsa/utils.d.ts.map +1 -0
  69. package/dist/src/keys/rsa/utils.js +193 -0
  70. package/dist/src/keys/rsa/utils.js.map +1 -0
  71. package/dist/src/keys/secp256k1/index.browser.d.ts +10 -0
  72. package/dist/src/keys/secp256k1/index.browser.d.ts.map +1 -0
  73. package/dist/src/keys/secp256k1/index.browser.js +41 -0
  74. package/dist/src/keys/secp256k1/index.browser.js.map +1 -0
  75. package/dist/src/keys/secp256k1/index.d.ts +10 -0
  76. package/dist/src/keys/secp256k1/index.d.ts.map +1 -0
  77. package/dist/src/keys/secp256k1/index.js +47 -0
  78. package/dist/src/keys/secp256k1/index.js.map +1 -0
  79. package/dist/src/keys/secp256k1/secp256k1.d.ts +24 -0
  80. package/dist/src/keys/secp256k1/secp256k1.d.ts.map +1 -0
  81. package/dist/src/keys/secp256k1/secp256k1.js +53 -0
  82. package/dist/src/keys/secp256k1/secp256k1.js.map +1 -0
  83. package/dist/src/keys/secp256k1/utils.d.ts +13 -0
  84. package/dist/src/keys/secp256k1/utils.d.ts.map +1 -0
  85. package/dist/src/keys/secp256k1/utils.js +53 -0
  86. package/dist/src/keys/secp256k1/utils.js.map +1 -0
  87. package/dist/src/pbkdf2.js +2 -2
  88. package/dist/src/pbkdf2.js.map +1 -1
  89. package/dist/src/random-bytes.js +2 -2
  90. package/dist/src/random-bytes.js.map +1 -1
  91. package/dist/src/webcrypto/index.d.ts +3 -0
  92. package/dist/src/webcrypto/index.d.ts.map +1 -0
  93. package/dist/src/webcrypto/index.js +3 -0
  94. package/dist/src/webcrypto/index.js.map +1 -0
  95. package/dist/src/{webcrypto-browser.d.ts → webcrypto/webcrypto.browser.d.ts} +1 -1
  96. package/dist/src/webcrypto/webcrypto.browser.d.ts.map +1 -0
  97. package/dist/src/{webcrypto-browser.js → webcrypto/webcrypto.browser.js} +4 -3
  98. package/dist/src/webcrypto/webcrypto.browser.js.map +1 -0
  99. package/dist/src/webcrypto/webcrypto.d.ts.map +1 -0
  100. package/dist/src/webcrypto/webcrypto.js.map +1 -0
  101. package/package.json +16 -8
  102. package/src/ciphers/aes-gcm.browser.ts +1 -1
  103. package/src/ciphers/index.ts +1 -0
  104. package/src/errors.ts +29 -0
  105. package/src/hmac/{index-browser.ts → index.browser.ts} +1 -1
  106. package/src/keys/{ecdh-browser.ts → ecdh/index.browser.ts} +16 -13
  107. package/src/keys/{ecdh.ts → ecdh/index.ts} +6 -4
  108. package/src/keys/ed25519/ed25519.ts +68 -0
  109. package/src/keys/{ed25519-browser.ts → ed25519/index.browser.ts} +1 -1
  110. package/src/keys/{ed25519.ts → ed25519/index.ts} +1 -1
  111. package/src/keys/ed25519/utils.ts +42 -0
  112. package/src/keys/ephemeral-keys.ts +2 -2
  113. package/src/keys/index.ts +110 -92
  114. package/src/keys/key-stretcher.ts +15 -8
  115. package/src/keys/keys.proto +1 -1
  116. package/src/keys/keys.ts +21 -16
  117. package/src/keys/{rsa-browser.ts → rsa/index.browser.ts} +10 -56
  118. package/src/keys/{rsa.ts → rsa/index.ts} +8 -23
  119. package/src/keys/rsa/rsa.ts +83 -0
  120. package/src/keys/rsa/utils.ts +235 -0
  121. package/src/keys/secp256k1/index.browser.ts +45 -0
  122. package/src/keys/secp256k1/index.ts +51 -0
  123. package/src/keys/secp256k1/secp256k1.ts +68 -0
  124. package/src/keys/secp256k1/utils.ts +63 -0
  125. package/src/pbkdf2.ts +2 -2
  126. package/src/random-bytes.ts +2 -2
  127. package/src/webcrypto/index.ts +3 -0
  128. package/src/webcrypto/webcrypto.browser.ts +23 -0
  129. package/dist/src/keys/ecdh-browser.d.ts +0 -3
  130. package/dist/src/keys/ecdh-browser.d.ts.map +0 -1
  131. package/dist/src/keys/ecdh-browser.js.map +0 -1
  132. package/dist/src/keys/ecdh.d.ts.map +0 -1
  133. package/dist/src/keys/ecdh.js.map +0 -1
  134. package/dist/src/keys/ed25519-browser.d.ts.map +0 -1
  135. package/dist/src/keys/ed25519-browser.js.map +0 -1
  136. package/dist/src/keys/ed25519-class.d.ts +0 -42
  137. package/dist/src/keys/ed25519-class.d.ts.map +0 -1
  138. package/dist/src/keys/ed25519-class.js +0 -133
  139. package/dist/src/keys/ed25519-class.js.map +0 -1
  140. package/dist/src/keys/ed25519.d.ts.map +0 -1
  141. package/dist/src/keys/ed25519.js.map +0 -1
  142. package/dist/src/keys/exporter.d.ts +0 -8
  143. package/dist/src/keys/exporter.d.ts.map +0 -1
  144. package/dist/src/keys/exporter.js +0 -13
  145. package/dist/src/keys/exporter.js.map +0 -1
  146. package/dist/src/keys/importer.d.ts +0 -7
  147. package/dist/src/keys/importer.d.ts.map +0 -1
  148. package/dist/src/keys/importer.js +0 -13
  149. package/dist/src/keys/importer.js.map +0 -1
  150. package/dist/src/keys/rsa-browser.d.ts +0 -12
  151. package/dist/src/keys/rsa-browser.d.ts.map +0 -1
  152. package/dist/src/keys/rsa-browser.js.map +0 -1
  153. package/dist/src/keys/rsa-class.d.ts +0 -46
  154. package/dist/src/keys/rsa-class.d.ts.map +0 -1
  155. package/dist/src/keys/rsa-class.js +0 -135
  156. package/dist/src/keys/rsa-class.js.map +0 -1
  157. package/dist/src/keys/rsa-utils.d.ts +0 -20
  158. package/dist/src/keys/rsa-utils.d.ts.map +0 -1
  159. package/dist/src/keys/rsa-utils.js +0 -330
  160. package/dist/src/keys/rsa-utils.js.map +0 -1
  161. package/dist/src/keys/rsa.d.ts +0 -12
  162. package/dist/src/keys/rsa.d.ts.map +0 -1
  163. package/dist/src/keys/rsa.js.map +0 -1
  164. package/dist/src/keys/secp256k1-browser.d.ts +0 -18
  165. package/dist/src/keys/secp256k1-browser.d.ts.map +0 -1
  166. package/dist/src/keys/secp256k1-browser.js +0 -78
  167. package/dist/src/keys/secp256k1-browser.js.map +0 -1
  168. package/dist/src/keys/secp256k1-class.d.ts +0 -39
  169. package/dist/src/keys/secp256k1-class.d.ts.map +0 -1
  170. package/dist/src/keys/secp256k1-class.js +0 -109
  171. package/dist/src/keys/secp256k1-class.js.map +0 -1
  172. package/dist/src/keys/secp256k1.d.ts +0 -18
  173. package/dist/src/keys/secp256k1.d.ts.map +0 -1
  174. package/dist/src/keys/secp256k1.js +0 -84
  175. package/dist/src/keys/secp256k1.js.map +0 -1
  176. package/dist/src/webcrypto-browser.d.ts.map +0 -1
  177. package/dist/src/webcrypto-browser.js.map +0 -1
  178. package/dist/src/webcrypto.d.ts.map +0 -1
  179. package/dist/src/webcrypto.js.map +0 -1
  180. package/dist/typedoc-urls.json +0 -40
  181. package/src/keys/ed25519-class.ts +0 -160
  182. package/src/keys/exporter.ts +0 -14
  183. package/src/keys/importer.ts +0 -13
  184. package/src/keys/rsa-class.ts +0 -172
  185. package/src/keys/rsa-utils.ts +0 -408
  186. package/src/keys/secp256k1-browser.ts +0 -87
  187. package/src/keys/secp256k1-class.ts +0 -133
  188. package/src/keys/secp256k1.ts +0 -93
  189. package/src/webcrypto-browser.ts +0 -24
  190. /package/dist/src/{webcrypto.d.ts → webcrypto/webcrypto.d.ts} +0 -0
  191. /package/dist/src/{webcrypto.js → webcrypto/webcrypto.js} +0 -0
  192. /package/src/{webcrypto.ts → webcrypto/webcrypto.ts} +0 -0
@@ -0,0 +1,24 @@
1
+ import { CID } from 'multiformats/cid';
2
+ import type { Secp256k1PublicKey as Secp256k1PublicKeyInterface, Secp256k1PrivateKey as Secp256k1PrivateKeyInterface } from '@libp2p/interface';
3
+ import type { Digest } from 'multiformats/hashes/digest';
4
+ import type { Uint8ArrayList } from 'uint8arraylist';
5
+ export declare class Secp256k1PublicKey implements Secp256k1PublicKeyInterface {
6
+ readonly type = "secp256k1";
7
+ readonly raw: Uint8Array;
8
+ readonly _key: Uint8Array;
9
+ constructor(key: Uint8Array);
10
+ toMultihash(): Digest<0x0, number>;
11
+ toCID(): CID<unknown, 114, 0x0, 1>;
12
+ toString(): string;
13
+ equals(key: any): boolean;
14
+ verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean;
15
+ }
16
+ export declare class Secp256k1PrivateKey implements Secp256k1PrivateKeyInterface {
17
+ readonly type = "secp256k1";
18
+ readonly raw: Uint8Array;
19
+ readonly publicKey: Secp256k1PublicKey;
20
+ constructor(key: Uint8Array, publicKey?: Uint8Array);
21
+ equals(key?: any): boolean;
22
+ sign(message: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
23
+ }
24
+ //# sourceMappingURL=secp256k1.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,53 @@
1
+ import { base58btc } from 'multiformats/bases/base58';
2
+ import { CID } from 'multiformats/cid';
3
+ import { identity } from 'multiformats/hashes/identity';
4
+ import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
5
+ import { publicKeyToProtobuf } from '../index.js';
6
+ import { validateSecp256k1PublicKey, compressSecp256k1PublicKey, computeSecp256k1PublicKey, validateSecp256k1PrivateKey } from './utils.js';
7
+ import { hashAndVerify, hashAndSign } from './index.js';
8
+ export class Secp256k1PublicKey {
9
+ type = 'secp256k1';
10
+ raw;
11
+ _key;
12
+ constructor(key) {
13
+ this._key = validateSecp256k1PublicKey(key);
14
+ this.raw = compressSecp256k1PublicKey(this._key);
15
+ }
16
+ toMultihash() {
17
+ return identity.digest(publicKeyToProtobuf(this));
18
+ }
19
+ toCID() {
20
+ return CID.createV1(114, this.toMultihash());
21
+ }
22
+ toString() {
23
+ return base58btc.encode(this.toMultihash().bytes).substring(1);
24
+ }
25
+ equals(key) {
26
+ if (key == null || !(key.raw instanceof Uint8Array)) {
27
+ return false;
28
+ }
29
+ return uint8ArrayEquals(this.raw, key.raw);
30
+ }
31
+ verify(data, sig) {
32
+ return hashAndVerify(this._key, sig, data);
33
+ }
34
+ }
35
+ export class Secp256k1PrivateKey {
36
+ type = 'secp256k1';
37
+ raw;
38
+ publicKey;
39
+ constructor(key, publicKey) {
40
+ this.raw = validateSecp256k1PrivateKey(key);
41
+ this.publicKey = new Secp256k1PublicKey(publicKey ?? computeSecp256k1PublicKey(key));
42
+ }
43
+ equals(key) {
44
+ if (key == null || !(key.raw instanceof Uint8Array)) {
45
+ return false;
46
+ }
47
+ return uint8ArrayEquals(this.raw, key.raw);
48
+ }
49
+ sign(message) {
50
+ return hashAndSign(this.raw, message);
51
+ }
52
+ }
53
+ //# sourceMappingURL=secp256k1.js.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ import type { Secp256k1PublicKey, Secp256k1PrivateKey } from '@libp2p/interface';
2
+ declare const PRIVATE_KEY_BYTE_LENGTH = 32;
3
+ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
4
+ export declare function unmarshalSecp256k1PrivateKey(bytes: Uint8Array): Secp256k1PrivateKey;
5
+ export declare function unmarshalSecp256k1PublicKey(bytes: Uint8Array): Secp256k1PublicKey;
6
+ export declare function generateSecp256k1KeyPair(): Promise<Secp256k1PrivateKey>;
7
+ export declare function compressSecp256k1PublicKey(key: Uint8Array): Uint8Array;
8
+ export declare function decompressSecp256k1PublicKey(key: Uint8Array): Uint8Array;
9
+ export declare function validateSecp256k1PrivateKey(key: Uint8Array): Uint8Array;
10
+ export declare function validateSecp256k1PublicKey(key: Uint8Array): Uint8Array;
11
+ export declare function computeSecp256k1PublicKey(privateKey: Uint8Array): Uint8Array;
12
+ export declare function generateSecp256k1PrivateKey(): Uint8Array;
13
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEhF,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,4BAA4B,CAAE,KAAK,EAAE,UAAU,GAAG,mBAAmB,CAEpF;AAED,wBAAgB,2BAA2B,CAAE,KAAK,EAAE,UAAU,GAAG,kBAAkB,CAElF;AAED,wBAAsB,wBAAwB,IAAK,OAAO,CAAC,mBAAmB,CAAC,CAG9E;AAED,wBAAgB,0BAA0B,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAGvE;AAED,wBAAgB,4BAA4B,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAGzE;AAED,wBAAgB,2BAA2B,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAQxE;AAED,wBAAgB,0BAA0B,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAQvE;AAED,wBAAgB,yBAAyB,CAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAM7E;AAED,wBAAgB,2BAA2B,IAAK,UAAU,CAEzD"}
@@ -0,0 +1,53 @@
1
+ import { InvalidPrivateKeyError, InvalidPublicKeyError } from '@libp2p/interface';
2
+ import { secp256k1 as secp } from '@noble/curves/secp256k1';
3
+ import { Secp256k1PublicKey as Secp256k1PublicKeyClass, Secp256k1PrivateKey as Secp256k1PrivateKeyClass } from './secp256k1.js';
4
+ const PRIVATE_KEY_BYTE_LENGTH = 32;
5
+ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
6
+ export function unmarshalSecp256k1PrivateKey(bytes) {
7
+ return new Secp256k1PrivateKeyClass(bytes);
8
+ }
9
+ export function unmarshalSecp256k1PublicKey(bytes) {
10
+ return new Secp256k1PublicKeyClass(bytes);
11
+ }
12
+ export async function generateSecp256k1KeyPair() {
13
+ const privateKeyBytes = generateSecp256k1PrivateKey();
14
+ return new Secp256k1PrivateKeyClass(privateKeyBytes);
15
+ }
16
+ export function compressSecp256k1PublicKey(key) {
17
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(true);
18
+ return point;
19
+ }
20
+ export function decompressSecp256k1PublicKey(key) {
21
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(false);
22
+ return point;
23
+ }
24
+ export function validateSecp256k1PrivateKey(key) {
25
+ try {
26
+ secp.getPublicKey(key, true);
27
+ return key;
28
+ }
29
+ catch (err) {
30
+ throw new InvalidPrivateKeyError(String(err));
31
+ }
32
+ }
33
+ export function validateSecp256k1PublicKey(key) {
34
+ try {
35
+ secp.ProjectivePoint.fromHex(key);
36
+ return key;
37
+ }
38
+ catch (err) {
39
+ throw new InvalidPublicKeyError(String(err));
40
+ }
41
+ }
42
+ export function computeSecp256k1PublicKey(privateKey) {
43
+ try {
44
+ return secp.getPublicKey(privateKey, true);
45
+ }
46
+ catch (err) {
47
+ throw new InvalidPrivateKeyError(String(err));
48
+ }
49
+ }
50
+ export function generateSecp256k1PrivateKey() {
51
+ return secp.utils.randomPrivateKey();
52
+ }
53
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,mBAAmB,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAG/H,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,MAAM,UAAU,4BAA4B,CAAE,KAAiB;IAC7D,OAAO,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAE,KAAiB;IAC5D,OAAO,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,eAAe,GAAG,2BAA2B,EAAE,CAAA;IACrD,OAAO,IAAI,wBAAwB,CAAC,eAAe,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAE,GAAe;IACzD,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,4BAA4B,CAAE,GAAe;IAC3D,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,2BAA2B,CAAE,GAAe;IAC1D,IAAI,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAE5B,OAAO,GAAG,CAAA;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAE,GAAe;IACzD,IAAI,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAEjC,OAAO,GAAG,CAAA;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAE,UAAsB;IAC/D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;AACtC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface';
1
+ import { InvalidParametersError } from '@libp2p/interface';
2
2
  import { pbkdf2 as pbkdf2Sync } from '@noble/hashes/pbkdf2';
3
3
  import { sha1 } from '@noble/hashes/sha1';
4
4
  import { sha256 } from '@noble/hashes/sha256';
@@ -22,7 +22,7 @@ const hashName = {
22
22
  export default function pbkdf2(password, salt, iterations, keySize, hash) {
23
23
  if (hash !== 'sha1' && hash !== 'sha2-256' && hash !== 'sha2-512') {
24
24
  const types = Object.keys(hashName).join(' / ');
25
- throw new CodeError(`Hash '${hash}' is unknown or not supported. Must be ${types}`, 'ERR_UNSUPPORTED_HASH_TYPE');
25
+ throw new InvalidParametersError(`Hash '${hash}' is unknown or not supported. Must be ${types}`);
26
26
  }
27
27
  const hasher = hashName[hash];
28
28
  const dek = pbkdf2Sync(hasher, password, salt, {
@@ -1 +1 @@
1
- {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG;IACf,IAAI;IACJ,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,MAAM;CACnB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAgB,EAAE,IAAyB,EAAE,UAAkB,EAAE,OAAe,EAAE,IAAY;IAC5H,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,UAAU,CACpB,MAAM,EACN,QAAQ,EACR,IAAI,EAAE;QACJ,CAAC,EAAE,UAAU;QACb,KAAK,EAAE,OAAO;KACf,CACF,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AACxC,CAAC"}
1
+ {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG;IACf,IAAI;IACJ,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,MAAM;CACnB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAgB,EAAE,IAAyB,EAAE,UAAkB,EAAE,OAAe,EAAE,IAAY;IAC5H,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,sBAAsB,CAAC,SAAS,IAAI,0CAA0C,KAAK,EAAE,CAAC,CAAA;IAClG,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,UAAU,CACpB,MAAM,EACN,QAAQ,EACR,IAAI,EAAE;QACJ,CAAC,EAAE,UAAU;QACb,KAAK,EAAE,OAAO;KACf,CACF,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AACxC,CAAC"}
@@ -1,11 +1,11 @@
1
- import { CodeError } from '@libp2p/interface';
1
+ import { InvalidParametersError } 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
5
5
  */
6
6
  export default function randomBytes(length) {
7
7
  if (isNaN(length) || length <= 0) {
8
- throw new CodeError('random bytes length must be a Number bigger than 0', 'ERR_INVALID_LENGTH');
8
+ throw new InvalidParametersError('random bytes length must be a Number bigger than 0');
9
9
  }
10
10
  return randB(length);
11
11
  }
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"random-bytes.js","sourceRoot":"","sources":["../../src/random-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,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,sBAAsB,CAAC,oDAAoD,CAAC,CAAA;IACxF,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAA;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import webcrypto from './webcrypto.js';
2
+ export default webcrypto;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webcrypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAEtC,eAAe,SAAS,CAAA"}
@@ -0,0 +1,3 @@
1
+ import webcrypto from './webcrypto.js';
2
+ export default webcrypto;
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webcrypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAEtC,eAAe,SAAS,CAAA"}
@@ -2,4 +2,4 @@ declare const _default: {
2
2
  get(win?: typeof globalThis): Crypto;
3
3
  };
4
4
  export default _default;
5
- //# sourceMappingURL=webcrypto-browser.d.ts.map
5
+ //# sourceMappingURL=webcrypto.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.browser.d.ts","sourceRoot":"","sources":["../../../src/webcrypto/webcrypto.browser.ts"],"names":[],"mappings":";;;AAMA,wBAgBC"}
@@ -1,17 +1,18 @@
1
1
  /* eslint-env browser */
2
+ import { WebCryptoMissingError } from '../errors.js';
2
3
  // Check native crypto exists and is enabled (In insecure context `self.crypto`
3
4
  // exists but `self.crypto.subtle` does not).
4
5
  export default {
5
6
  get(win = globalThis) {
6
7
  const nativeCrypto = win.crypto;
7
8
  if (nativeCrypto?.subtle == null) {
8
- throw Object.assign(new Error('Missing Web Crypto API. ' +
9
+ throw new WebCryptoMissingError('Missing Web Crypto API. ' +
9
10
  'The most likely cause of this error is that this page is being accessed ' +
10
11
  'from an insecure context (i.e. not HTTPS). For more information and ' +
11
12
  'possible resolutions see ' +
12
- 'https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api'), { code: 'ERR_MISSING_WEB_CRYPTO' });
13
+ 'https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api');
13
14
  }
14
15
  return nativeCrypto;
15
16
  }
16
17
  };
17
- //# sourceMappingURL=webcrypto-browser.js.map
18
+ //# sourceMappingURL=webcrypto.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.browser.js","sourceRoot":"","sources":["../../../src/webcrypto/webcrypto.browser.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,+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,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,qBAAqB,CAC7B,0BAA0B;gBAC1B,0EAA0E;gBAC1E,sEAAsE;gBACtE,2BAA2B;gBAC3B,wFAAwF,CACzF,CAAA;QACH,CAAC;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;CACF,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["../../../src/webcrypto/webcrypto.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;;;;AAIlC,wBAIC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["../../../src/webcrypto/webcrypto.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,6EAA6E;AAC7E,kEAAkE;AAClE,eAAe;IACb,GAAG,CAAE,GAAG,GAAG,UAAU;QACnB,OAAO,SAAS,CAAA;IAClB,CAAC;CACF,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/crypto",
3
- "version": "4.1.9",
3
+ "version": "5.0.0-1210884ed",
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",
@@ -51,6 +51,10 @@
51
51
  "types": "./src/index.d.ts",
52
52
  "import": "./dist/src/index.js"
53
53
  },
54
+ "./ciphers": {
55
+ "types": "./dist/src/ciphers/index.d.ts",
56
+ "import": "./dist/src/ciphers/index.js"
57
+ },
54
58
  "./hmac": {
55
59
  "types": "./dist/src/hmac/index.d.ts",
56
60
  "import": "./dist/src/hmac/index.js"
@@ -58,6 +62,10 @@
58
62
  "./keys": {
59
63
  "types": "./dist/src/keys/index.d.ts",
60
64
  "import": "./dist/src/keys/index.js"
65
+ },
66
+ "./webcrypto": {
67
+ "types": "./dist/src/webcrypto/index.d.ts",
68
+ "import": "./dist/src/webcrypto/index.js"
61
69
  }
62
70
  },
63
71
  "eslintConfig": {
@@ -84,7 +92,7 @@
84
92
  "generate": "protons ./src/keys/keys.proto"
85
93
  },
86
94
  "dependencies": {
87
- "@libp2p/interface": "^1.7.0",
95
+ "@libp2p/interface": "2.0.0-1210884ed",
88
96
  "@noble/curves": "^1.4.0",
89
97
  "@noble/hashes": "^1.4.0",
90
98
  "asn1js": "^3.0.5",
@@ -101,12 +109,12 @@
101
109
  },
102
110
  "browser": {
103
111
  "./dist/src/ciphers/aes-gcm.js": "./dist/src/ciphers/aes-gcm.browser.js",
104
- "./dist/src/hmac/index.js": "./dist/src/hmac/index-browser.js",
105
- "./dist/src/keys/ecdh.js": "./dist/src/keys/ecdh-browser.js",
106
- "./dist/src/keys/ed25519.js": "./dist/src/keys/ed25519-browser.js",
107
- "./dist/src/keys/rsa.js": "./dist/src/keys/rsa-browser.js",
108
- "./dist/src/keys/secp256k1.js": "./dist/src/keys/secp256k1-browser.js",
109
- "./dist/src/webcrypto.js": "./dist/src/webcrypto-browser.js"
112
+ "./dist/src/hmac/index.js": "./dist/src/hmac/index.browser.js",
113
+ "./dist/src/keys/ecdh/index.js": "./dist/src/keys/ecdh/index.browser.js",
114
+ "./dist/src/keys/ed25519/index.js": "./dist/src/keys/ed25519/index.browser.js",
115
+ "./dist/src/keys/rsa/index.js": "./dist/src/keys/rsa/index.browser.js",
116
+ "./dist/src/keys/secp256k1/index.js": "./dist/src/keys/secp256k1/index.browser.js",
117
+ "./dist/src/webcrypto/webcrypto.js": "./dist/src/webcrypto/webcrypto.browser.js"
110
118
  },
111
119
  "sideEffects": false
112
120
  }
@@ -1,6 +1,6 @@
1
1
  import { concat } from 'uint8arrays/concat'
2
2
  import { fromString } from 'uint8arrays/from-string'
3
- import webcrypto from '../webcrypto.js'
3
+ import webcrypto from '../webcrypto/index.js'
4
4
  import type { CreateOptions, AESCipher } from './interface.js'
5
5
 
6
6
  // WebKit on Linux does not support deriving a key from an empty PBKDF2 key.
@@ -0,0 +1 @@
1
+ export * as AES_GCM from './aes-gcm.js'
package/src/errors.ts ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Signing a message failed
3
+ */
4
+ export class SigningError extends Error {
5
+ constructor (message = 'An error occurred while signing a message') {
6
+ super(message)
7
+ this.name = 'SigningError'
8
+ }
9
+ }
10
+
11
+ /**
12
+ * Verifying a message signature failed
13
+ */
14
+ export class VerificationError extends Error {
15
+ constructor (message = 'An error occurred while verifying a message') {
16
+ super(message)
17
+ this.name = 'VerificationError'
18
+ }
19
+ }
20
+
21
+ /**
22
+ * WebCrypto was not available in the current context
23
+ */
24
+ export class WebCryptoMissingError extends Error {
25
+ constructor (message = 'Missing Web Crypto API') {
26
+ super(message)
27
+ this.name = 'WebCryptoMissingError'
28
+ }
29
+ }
@@ -1,4 +1,4 @@
1
- import webcrypto from '../webcrypto.js'
1
+ import webcrypto from '../webcrypto/index.js'
2
2
  import lengths from './lengths.js'
3
3
 
4
4
  const hashTypes = {
@@ -1,10 +1,11 @@
1
- import { CodeError } from '@libp2p/interface'
1
+ import { InvalidParametersError } 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'
5
- import { base64urlToBuffer } from '../util.js'
6
- import webcrypto from '../webcrypto.js'
7
- import type { ECDHKey, ECDHKeyPair, JWKEncodedPrivateKey, JWKEncodedPublicKey } from './interface.js'
5
+ import { base64urlToBuffer } from '../../util.js'
6
+ import webcrypto from '../../webcrypto/index.js'
7
+ import type { Curve } from './index.js'
8
+ import type { ECDHKey, ECDHKeyPair, JWKEncodedPrivateKey, JWKEncodedPublicKey } from '../interface.js'
8
9
 
9
10
  const bits = {
10
11
  'P-256': 256,
@@ -15,9 +16,9 @@ const bits = {
15
16
  const curveTypes = Object.keys(bits)
16
17
  const names = curveTypes.join(' / ')
17
18
 
18
- export async function generateEphmeralKeyPair (curve: string): Promise<ECDHKey> {
19
+ export async function generateEphemeralKeyPair (curve: Curve): Promise<ECDHKey> {
19
20
  if (curve !== 'P-256' && curve !== 'P-384' && curve !== 'P-521') {
20
- throw new CodeError(`Unknown curve: ${curve}. Must be ${names}`, 'ERR_INVALID_CURVE')
21
+ throw new InvalidParametersError(`Unknown curve: ${curve}. Must be ${names}`)
21
22
  }
22
23
 
23
24
  const pair = await webcrypto.get().subtle.generateKey(
@@ -94,11 +95,11 @@ const curveLengths = {
94
95
  // go-ipfs uses)
95
96
  function marshalPublicKey (jwk: JsonWebKey): Uint8Array {
96
97
  if (jwk.crv == null || jwk.x == null || jwk.y == null) {
97
- throw new CodeError('JWK was missing components', 'ERR_INVALID_PARAMETERS')
98
+ throw new InvalidParametersError('JWK was missing components')
98
99
  }
99
100
 
100
101
  if (jwk.crv !== 'P-256' && jwk.crv !== 'P-384' && jwk.crv !== 'P-521') {
101
- throw new CodeError(`Unknown curve: ${jwk.crv}. Must be ${names}`, 'ERR_INVALID_CURVE')
102
+ throw new InvalidParametersError(`Unknown curve: ${jwk.crv}. Must be ${names}`)
102
103
  }
103
104
 
104
105
  const byteLen = curveLengths[jwk.crv]
@@ -110,16 +111,18 @@ function marshalPublicKey (jwk: JsonWebKey): Uint8Array {
110
111
  ], 1 + byteLen * 2)
111
112
  }
112
113
 
113
- // Unmarshal converts a point, serialized by Marshal, into an jwk encoded key
114
- function unmarshalPublicKey (curve: string, key: Uint8Array): JWKEncodedPublicKey {
114
+ /**
115
+ * Unmarshal converts a point, serialized by Marshal, into an jwk encoded key
116
+ */
117
+ function unmarshalPublicKey (curve: Curve, key: Uint8Array): JWKEncodedPublicKey {
115
118
  if (curve !== 'P-256' && curve !== 'P-384' && curve !== 'P-521') {
116
- throw new CodeError(`Unknown curve: ${curve}. Must be ${names}`, 'ERR_INVALID_CURVE')
119
+ throw new InvalidParametersError(`Unknown curve: ${curve}. Must be ${names}`)
117
120
  }
118
121
 
119
122
  const byteLen = curveLengths[curve]
120
123
 
121
124
  if (!uint8ArrayEquals(key.subarray(0, 1), Uint8Array.from([4]))) {
122
- throw new CodeError('Cannot unmarshal public key - invalid key format', 'ERR_INVALID_KEY_FORMAT')
125
+ throw new InvalidParametersError('Cannot unmarshal public key - invalid key format')
123
126
  }
124
127
 
125
128
  return {
@@ -131,7 +134,7 @@ function unmarshalPublicKey (curve: string, key: Uint8Array): JWKEncodedPublicKe
131
134
  }
132
135
  }
133
136
 
134
- const unmarshalPrivateKey = (curve: string, key: ECDHKeyPair): JWKEncodedPrivateKey => ({
137
+ const unmarshalPrivateKey = (curve: Curve, key: ECDHKeyPair): JWKEncodedPrivateKey => ({
135
138
  ...unmarshalPublicKey(curve, key.public),
136
139
  d: uint8ArrayToString(key.private, 'base64url')
137
140
  })
@@ -1,6 +1,8 @@
1
1
  import crypto from 'crypto'
2
- import { CodeError } from '@libp2p/interface'
3
- import type { ECDHKey, ECDHKeyPair } from './interface.js'
2
+ import { InvalidParametersError } from '@libp2p/interface'
3
+ import type { ECDHKey, ECDHKeyPair } from '../interface.js'
4
+
5
+ export type Curve = 'P-256' | 'P-384' | 'P-521'
4
6
 
5
7
  const curves = {
6
8
  'P-256': 'prime256v1',
@@ -16,9 +18,9 @@ const names = curveTypes.join(' / ')
16
18
  *
17
19
  * Focuses only on ECDH now, but can be made more general in the future.
18
20
  */
19
- export async function generateEphmeralKeyPair (curve: string): Promise<ECDHKey> {
21
+ export async function generateEphemeralKeyPair (curve: Curve): Promise<ECDHKey> {
20
22
  if (curve !== 'P-256' && curve !== 'P-384' && curve !== 'P-521') {
21
- throw new CodeError(`Unknown curve: ${curve}. Must be ${names}`, 'ERR_INVALID_CURVE')
23
+ throw new InvalidParametersError(`Unknown curve: ${curve}. Must be ${names}`)
22
24
  }
23
25
 
24
26
  const ecdh = crypto.createECDH(curves[curve])
@@ -0,0 +1,68 @@
1
+ import { base58btc } from 'multiformats/bases/base58'
2
+ import { CID } from 'multiformats/cid'
3
+ import { type Digest } from 'multiformats/hashes/digest'
4
+ import { identity } from 'multiformats/hashes/identity'
5
+ import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
6
+ import { publicKeyToProtobuf } from '../index.js'
7
+ import { ensureEd25519Key } from './utils.js'
8
+ import * as crypto from './index.js'
9
+ import type { Ed25519PublicKey as Ed25519PublicKeyInterface, Ed25519PrivateKey as Ed25519PrivateKeyInterface } from '@libp2p/interface'
10
+ import type { Uint8ArrayList } from 'uint8arraylist'
11
+
12
+ export class Ed25519PublicKey implements Ed25519PublicKeyInterface {
13
+ public readonly type = 'Ed25519'
14
+ public readonly raw: Uint8Array
15
+
16
+ constructor (key: Uint8Array) {
17
+ this.raw = ensureEd25519Key(key, crypto.publicKeyLength)
18
+ }
19
+
20
+ toMultihash (): Digest<0x0, number> {
21
+ return identity.digest(publicKeyToProtobuf(this))
22
+ }
23
+
24
+ toCID (): CID<unknown, 114, 0x0, 1> {
25
+ return CID.createV1(114, this.toMultihash())
26
+ }
27
+
28
+ toString (): string {
29
+ return base58btc.encode(this.toMultihash().bytes).substring(1)
30
+ }
31
+
32
+ equals (key?: any): boolean {
33
+ if (key == null || !(key.raw instanceof Uint8Array)) {
34
+ return false
35
+ }
36
+
37
+ return uint8ArrayEquals(this.raw, key.raw)
38
+ }
39
+
40
+ verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean {
41
+ return crypto.hashAndVerify(this.raw, sig, data)
42
+ }
43
+ }
44
+
45
+ export class Ed25519PrivateKey implements Ed25519PrivateKeyInterface {
46
+ public readonly type = 'Ed25519'
47
+ public readonly raw: Uint8Array
48
+ public readonly publicKey: Ed25519PublicKey
49
+
50
+ // key - 64 byte Uint8Array containing private key
51
+ // publicKey - 32 byte Uint8Array containing public key
52
+ constructor (key: Uint8Array, publicKey: Uint8Array) {
53
+ this.raw = ensureEd25519Key(key, crypto.privateKeyLength)
54
+ this.publicKey = new Ed25519PublicKey(publicKey)
55
+ }
56
+
57
+ equals (key?: any): boolean {
58
+ if (key == null || !(key.raw instanceof Uint8Array)) {
59
+ return false
60
+ }
61
+
62
+ return uint8ArrayEquals(this.raw, key.raw)
63
+ }
64
+
65
+ sign (message: Uint8Array | Uint8ArrayList): Uint8Array {
66
+ return crypto.hashAndSign(this.raw, message)
67
+ }
68
+ }
@@ -1,5 +1,5 @@
1
1
  import { ed25519 as ed } from '@noble/curves/ed25519'
2
- import type { Uint8ArrayKeyPair } from './interface.js'
2
+ import type { Uint8ArrayKeyPair } from '../interface.js'
3
3
  import type { Uint8ArrayList } from 'uint8arraylist'
4
4
 
5
5
  const PUBLIC_KEY_BYTE_LENGTH = 32
@@ -2,7 +2,7 @@ import crypto from 'crypto'
2
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
- import type { Uint8ArrayKeyPair } from './interface.js'
5
+ import type { Uint8ArrayKeyPair } from '../interface.js'
6
6
  import type { Uint8ArrayList } from 'uint8arraylist'
7
7
 
8
8
  const keypair = crypto.generateKeyPairSync
@@ -0,0 +1,42 @@
1
+ import { InvalidParametersError } from '@libp2p/interface'
2
+ import { Ed25519PublicKey as Ed25519PublicKeyClass, Ed25519PrivateKey as Ed25519PrivateKeyClass } from './ed25519.js'
3
+ import * as crypto from './index.js'
4
+ import type { Ed25519PublicKey, Ed25519PrivateKey } from '@libp2p/interface'
5
+
6
+ export function unmarshalEd25519PrivateKey (bytes: Uint8Array): Ed25519PrivateKey {
7
+ // Try the old, redundant public key version
8
+ if (bytes.length > crypto.privateKeyLength) {
9
+ bytes = ensureEd25519Key(bytes, crypto.privateKeyLength + crypto.publicKeyLength)
10
+ const privateKeyBytes = bytes.subarray(0, crypto.privateKeyLength)
11
+ const publicKeyBytes = bytes.subarray(crypto.privateKeyLength, bytes.length)
12
+ return new Ed25519PrivateKeyClass(privateKeyBytes, publicKeyBytes)
13
+ }
14
+
15
+ bytes = ensureEd25519Key(bytes, crypto.privateKeyLength)
16
+ const privateKeyBytes = bytes.subarray(0, crypto.privateKeyLength)
17
+ const publicKeyBytes = bytes.subarray(crypto.publicKeyLength)
18
+ return new Ed25519PrivateKeyClass(privateKeyBytes, publicKeyBytes)
19
+ }
20
+
21
+ export function unmarshalEd25519PublicKey (bytes: Uint8Array): Ed25519PublicKey {
22
+ bytes = ensureEd25519Key(bytes, crypto.publicKeyLength)
23
+ return new Ed25519PublicKeyClass(bytes)
24
+ }
25
+
26
+ export async function generateEd25519KeyPair (): Promise<Ed25519PrivateKey> {
27
+ const { privateKey, publicKey } = crypto.generateKey()
28
+ return new Ed25519PrivateKeyClass(privateKey, publicKey)
29
+ }
30
+
31
+ export async function generateEd25519KeyPairFromSeed (seed: Uint8Array): Promise<Ed25519PrivateKey> {
32
+ const { privateKey, publicKey } = crypto.generateKeyFromSeed(seed)
33
+ return new Ed25519PrivateKeyClass(privateKey, publicKey)
34
+ }
35
+
36
+ export function ensureEd25519Key (key: Uint8Array, length: number): Uint8Array {
37
+ key = Uint8Array.from(key ?? [])
38
+ if (key.length !== length) {
39
+ throw new InvalidParametersError(`Key must be a Uint8Array of length ${length}, got ${key.length}`)
40
+ }
41
+ return key
42
+ }
@@ -1,4 +1,4 @@
1
- import { generateEphmeralKeyPair } from './ecdh.js'
1
+ import { generateEphemeralKeyPair } from './ecdh/index.js'
2
2
 
3
3
  /**
4
4
  * Generates an ephemeral public key and returns a function that will compute
@@ -6,4 +6,4 @@ import { generateEphmeralKeyPair } from './ecdh.js'
6
6
  *
7
7
  * Focuses only on ECDH now, but can be made more general in the future.
8
8
  */
9
- export default generateEphmeralKeyPair
9
+ export default generateEphemeralKeyPair