@libp2p/crypto 0.0.0 → 0.22.0

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 (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +314 -0
  3. package/dist/src/aes/cipher-mode.d.ts +2 -0
  4. package/dist/src/aes/cipher-mode.d.ts.map +1 -0
  5. package/dist/src/aes/cipher-mode.js +13 -0
  6. package/dist/src/aes/cipher-mode.js.map +1 -0
  7. package/dist/src/aes/ciphers-browser.d.ts +8 -0
  8. package/dist/src/aes/ciphers-browser.d.ts.map +1 -0
  9. package/dist/src/aes/ciphers-browser.js +26 -0
  10. package/dist/src/aes/ciphers-browser.js.map +1 -0
  11. package/dist/src/aes/ciphers.d.ts +5 -0
  12. package/dist/src/aes/ciphers.d.ts.map +1 -0
  13. package/dist/src/aes/ciphers.js +4 -0
  14. package/dist/src/aes/ciphers.js.map +1 -0
  15. package/dist/src/aes/index.d.ts +6 -0
  16. package/dist/src/aes/index.d.ts.map +1 -0
  17. package/dist/src/aes/index.js +17 -0
  18. package/dist/src/aes/index.js.map +1 -0
  19. package/dist/src/ciphers/aes-gcm.browser.d.ts +3 -0
  20. package/dist/src/ciphers/aes-gcm.browser.d.ts.map +1 -0
  21. package/dist/src/ciphers/aes-gcm.browser.js +61 -0
  22. package/dist/src/ciphers/aes-gcm.browser.js.map +1 -0
  23. package/dist/src/ciphers/aes-gcm.d.ts +3 -0
  24. package/dist/src/ciphers/aes-gcm.d.ts.map +1 -0
  25. package/dist/src/ciphers/aes-gcm.js +83 -0
  26. package/dist/src/ciphers/aes-gcm.js.map +1 -0
  27. package/dist/src/ciphers/interface.d.ts +14 -0
  28. package/dist/src/ciphers/interface.d.ts.map +1 -0
  29. package/dist/src/ciphers/interface.js +2 -0
  30. package/dist/src/ciphers/interface.js.map +1 -0
  31. package/dist/src/hmac/index-browser.d.ts +5 -0
  32. package/dist/src/hmac/index-browser.d.ts.map +1 -0
  33. package/dist/src/hmac/index-browser.js +25 -0
  34. package/dist/src/hmac/index-browser.js.map +1 -0
  35. package/dist/src/hmac/index.d.ts +5 -0
  36. package/dist/src/hmac/index.d.ts.map +1 -0
  37. package/dist/src/hmac/index.js +14 -0
  38. package/dist/src/hmac/index.js.map +1 -0
  39. package/dist/src/hmac/lengths.d.ts +7 -0
  40. package/dist/src/hmac/lengths.d.ts.map +1 -0
  41. package/dist/src/hmac/lengths.js +6 -0
  42. package/dist/src/hmac/lengths.js.map +1 -0
  43. package/dist/src/index.d.ts +11 -0
  44. package/dist/src/index.d.ts.map +1 -0
  45. package/dist/src/index.js +11 -0
  46. package/dist/src/index.js.map +1 -0
  47. package/dist/src/keys/ecdh-browser.d.ts +3 -0
  48. package/dist/src/keys/ecdh-browser.d.ts.map +1 -0
  49. package/dist/src/keys/ecdh-browser.js +97 -0
  50. package/dist/src/keys/ecdh-browser.js.map +1 -0
  51. package/dist/src/keys/ecdh.d.ts +3 -0
  52. package/dist/src/keys/ecdh.d.ts.map +1 -0
  53. package/dist/src/keys/ecdh.js +26 -0
  54. package/dist/src/keys/ecdh.js.map +1 -0
  55. package/dist/src/keys/ed25519-class.d.ts +39 -0
  56. package/dist/src/keys/ed25519-class.d.ts.map +1 -0
  57. package/dist/src/keys/ed25519-class.js +119 -0
  58. package/dist/src/keys/ed25519-class.js.map +1 -0
  59. package/dist/src/keys/ed25519.d.ts +18 -0
  60. package/dist/src/keys/ed25519.d.ts.map +1 -0
  61. package/dist/src/keys/ed25519.js +52 -0
  62. package/dist/src/keys/ed25519.js.map +1 -0
  63. package/dist/src/keys/ephemeral-keys.d.ts +9 -0
  64. package/dist/src/keys/ephemeral-keys.d.ts.map +1 -0
  65. package/dist/src/keys/ephemeral-keys.js +9 -0
  66. package/dist/src/keys/ephemeral-keys.js.map +1 -0
  67. package/dist/src/keys/exporter.d.ts +7 -0
  68. package/dist/src/keys/exporter.d.ts.map +1 -0
  69. package/dist/src/keys/exporter.js +13 -0
  70. package/dist/src/keys/exporter.js.map +1 -0
  71. package/dist/src/keys/importer.d.ts +7 -0
  72. package/dist/src/keys/importer.d.ts.map +1 -0
  73. package/dist/src/keys/importer.js +13 -0
  74. package/dist/src/keys/importer.js.map +1 -0
  75. package/dist/src/keys/index.d.ts +33 -0
  76. package/dist/src/keys/index.d.ts.map +1 -0
  77. package/dist/src/keys/index.js +111 -0
  78. package/dist/src/keys/index.js.map +1 -0
  79. package/dist/src/keys/interface.d.ts +17 -0
  80. package/dist/src/keys/interface.d.ts.map +1 -0
  81. package/dist/src/keys/interface.js +2 -0
  82. package/dist/src/keys/interface.js.map +1 -0
  83. package/dist/src/keys/jwk2pem.d.ts +4 -0
  84. package/dist/src/keys/jwk2pem.d.ts.map +1 -0
  85. package/dist/src/keys/jwk2pem.js +14 -0
  86. package/dist/src/keys/jwk2pem.js.map +1 -0
  87. package/dist/src/keys/key-stretcher.d.ts +17 -0
  88. package/dist/src/keys/key-stretcher.d.ts.map +1 -0
  89. package/dist/src/keys/key-stretcher.js +65 -0
  90. package/dist/src/keys/key-stretcher.js.map +1 -0
  91. package/dist/src/keys/keys.d.ts +225 -0
  92. package/dist/src/keys/keys.d.ts.map +1 -0
  93. package/dist/src/keys/keys.js +345 -0
  94. package/dist/src/keys/keys.js.map +1 -0
  95. package/dist/src/keys/rsa-browser.d.ts +17 -0
  96. package/dist/src/keys/rsa-browser.d.ts.map +1 -0
  97. package/dist/src/keys/rsa-browser.js +99 -0
  98. package/dist/src/keys/rsa-browser.js.map +1 -0
  99. package/dist/src/keys/rsa-class.d.ts +42 -0
  100. package/dist/src/keys/rsa-class.d.ts.map +1 -0
  101. package/dist/src/keys/rsa-class.js +126 -0
  102. package/dist/src/keys/rsa-class.js.map +1 -0
  103. package/dist/src/keys/rsa-utils.d.ts +7 -0
  104. package/dist/src/keys/rsa-utils.d.ts.map +1 -0
  105. package/dist/src/keys/rsa-utils.js +65 -0
  106. package/dist/src/keys/rsa-utils.js.map +1 -0
  107. package/dist/src/keys/rsa.d.ts +13 -0
  108. package/dist/src/keys/rsa.d.ts.map +1 -0
  109. package/dist/src/keys/rsa.js +58 -0
  110. package/dist/src/keys/rsa.js.map +1 -0
  111. package/dist/src/keys/secp256k1-class.d.ts +36 -0
  112. package/dist/src/keys/secp256k1-class.d.ts.map +1 -0
  113. package/dist/src/keys/secp256k1-class.js +95 -0
  114. package/dist/src/keys/secp256k1-class.js.map +1 -0
  115. package/dist/src/keys/secp256k1.d.ts +17 -0
  116. package/dist/src/keys/secp256k1.d.ts.map +1 -0
  117. package/dist/src/keys/secp256k1.js +65 -0
  118. package/dist/src/keys/secp256k1.js.map +1 -0
  119. package/dist/src/pbkdf2.d.ts +5 -0
  120. package/dist/src/pbkdf2.d.ts.map +1 -0
  121. package/dist/src/pbkdf2.js +30 -0
  122. package/dist/src/pbkdf2.js.map +1 -0
  123. package/dist/src/random-bytes.d.ts +2 -0
  124. package/dist/src/random-bytes.d.ts.map +1 -0
  125. package/dist/src/random-bytes.js +9 -0
  126. package/dist/src/random-bytes.js.map +1 -0
  127. package/dist/src/util.d.ts +9 -0
  128. package/dist/src/util.d.ts.map +1 -0
  129. package/dist/src/util.js +37 -0
  130. package/dist/src/util.js.map +1 -0
  131. package/dist/src/webcrypto.d.ts +5 -0
  132. package/dist/src/webcrypto.d.ts.map +1 -0
  133. package/dist/src/webcrypto.js +17 -0
  134. package/dist/src/webcrypto.js.map +1 -0
  135. package/package.json +123 -4
  136. package/src/aes/cipher-mode.ts +15 -0
  137. package/src/aes/ciphers-browser.ts +28 -0
  138. package/src/aes/ciphers.ts +4 -0
  139. package/src/aes/index.ts +25 -0
  140. package/src/ciphers/aes-gcm.browser.ts +74 -0
  141. package/src/ciphers/aes-gcm.ts +102 -0
  142. package/src/ciphers/interface.ts +15 -0
  143. package/src/hmac/index-browser.ts +35 -0
  144. package/src/hmac/index.ts +15 -0
  145. package/src/hmac/lengths.ts +6 -0
  146. package/src/index.ts +11 -0
  147. package/src/keys/ecdh-browser.ts +138 -0
  148. package/src/keys/ecdh.ts +33 -0
  149. package/src/keys/ed25519-class.ts +145 -0
  150. package/src/keys/ed25519.ts +63 -0
  151. package/src/keys/ephemeral-keys.ts +9 -0
  152. package/src/keys/exporter.ts +13 -0
  153. package/src/keys/importer.ts +13 -0
  154. package/src/keys/index.ts +126 -0
  155. package/src/keys/interface.ts +20 -0
  156. package/src/keys/jwk2pem.ts +16 -0
  157. package/src/keys/key-stretcher.ts +77 -0
  158. package/src/keys/keys.d.ts +146 -0
  159. package/src/keys/keys.js +366 -0
  160. package/src/keys/keys.proto +15 -0
  161. package/src/keys/rsa-browser.ts +156 -0
  162. package/src/keys/rsa-class.ts +155 -0
  163. package/src/keys/rsa-utils.ts +74 -0
  164. package/src/keys/rsa.ts +69 -0
  165. package/src/keys/secp256k1-class.ts +118 -0
  166. package/src/keys/secp256k1.ts +69 -0
  167. package/src/pbkdf2.ts +39 -0
  168. package/src/random-bytes.ts +9 -0
  169. package/src/util.ts +42 -0
  170. package/src/webcrypto.ts +24 -0
@@ -0,0 +1,7 @@
1
+ import 'node-forge/lib/asn1.js';
2
+ import 'node-forge/lib/rsa.js';
3
+ export declare function pkcs1ToJwk(bytes: Uint8Array): JsonWebKey;
4
+ export declare function jwkToPkcs1(jwk: JsonWebKey): Uint8Array;
5
+ export declare function pkixToJwk(bytes: Uint8Array): JsonWebKey;
6
+ export declare function jwkToPkix(jwk: JsonWebKey): Uint8Array;
7
+ //# sourceMappingURL=rsa-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-utils.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa-utils.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAA;AAC/B,OAAO,uBAAuB,CAAA;AAS9B,wBAAgB,UAAU,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAiBzD;AAGD,wBAAgB,UAAU,CAAE,GAAG,EAAE,UAAU,cAiB1C;AAGD,wBAAgB,SAAS,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CASxD;AAGD,wBAAgB,SAAS,CAAE,GAAG,EAAE,UAAU,cAWzC"}
@@ -0,0 +1,65 @@
1
+ import 'node-forge/lib/asn1.js';
2
+ import 'node-forge/lib/rsa.js';
3
+ // @ts-expect-error types are missing
4
+ import forge from 'node-forge/lib/forge.js';
5
+ import { bigIntegerToUintBase64url, base64urlToBigInteger } from './../util.js';
6
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
7
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
8
+ import errcode from 'err-code';
9
+ // Convert a PKCS#1 in ASN1 DER format to a JWK key
10
+ export function pkcs1ToJwk(bytes) {
11
+ const asn1 = forge.asn1.fromDer(uint8ArrayToString(bytes, 'ascii'));
12
+ const privateKey = forge.pki.privateKeyFromAsn1(asn1);
13
+ // https://tools.ietf.org/html/rfc7518#section-6.3.1
14
+ return {
15
+ kty: 'RSA',
16
+ n: bigIntegerToUintBase64url(privateKey.n),
17
+ e: bigIntegerToUintBase64url(privateKey.e),
18
+ d: bigIntegerToUintBase64url(privateKey.d),
19
+ p: bigIntegerToUintBase64url(privateKey.p),
20
+ q: bigIntegerToUintBase64url(privateKey.q),
21
+ dp: bigIntegerToUintBase64url(privateKey.dP),
22
+ dq: bigIntegerToUintBase64url(privateKey.dQ),
23
+ qi: bigIntegerToUintBase64url(privateKey.qInv),
24
+ alg: 'RS256'
25
+ };
26
+ }
27
+ // Convert a JWK key into PKCS#1 in ASN1 DER format
28
+ export function jwkToPkcs1(jwk) {
29
+ if (jwk.n == null || jwk.e == null || jwk.d == null || jwk.p == null || jwk.q == null || jwk.dp == null || jwk.dq == null || jwk.qi == null) {
30
+ throw errcode(new Error('JWK was missing components'), 'ERR_INVALID_PARAMETERS');
31
+ }
32
+ const asn1 = forge.pki.privateKeyToAsn1({
33
+ n: base64urlToBigInteger(jwk.n),
34
+ e: base64urlToBigInteger(jwk.e),
35
+ d: base64urlToBigInteger(jwk.d),
36
+ p: base64urlToBigInteger(jwk.p),
37
+ q: base64urlToBigInteger(jwk.q),
38
+ dP: base64urlToBigInteger(jwk.dp),
39
+ dQ: base64urlToBigInteger(jwk.dq),
40
+ qInv: base64urlToBigInteger(jwk.qi)
41
+ });
42
+ return uint8ArrayFromString(forge.asn1.toDer(asn1).getBytes(), 'ascii');
43
+ }
44
+ // Convert a PKCIX in ASN1 DER format to a JWK key
45
+ export function pkixToJwk(bytes) {
46
+ const asn1 = forge.asn1.fromDer(uint8ArrayToString(bytes, 'ascii'));
47
+ const publicKey = forge.pki.publicKeyFromAsn1(asn1);
48
+ return {
49
+ kty: 'RSA',
50
+ n: bigIntegerToUintBase64url(publicKey.n),
51
+ e: bigIntegerToUintBase64url(publicKey.e)
52
+ };
53
+ }
54
+ // Convert a JWK key to PKCIX in ASN1 DER format
55
+ export function jwkToPkix(jwk) {
56
+ if (jwk.n == null || jwk.e == null) {
57
+ throw errcode(new Error('JWK was missing components'), 'ERR_INVALID_PARAMETERS');
58
+ }
59
+ const asn1 = forge.pki.publicKeyToAsn1({
60
+ n: base64urlToBigInteger(jwk.n),
61
+ e: base64urlToBigInteger(jwk.e)
62
+ });
63
+ return uint8ArrayFromString(forge.asn1.toDer(asn1).getBytes(), 'ascii');
64
+ }
65
+ //# sourceMappingURL=rsa-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-utils.js","sourceRoot":"","sources":["../../../src/keys/rsa-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import randomBytes from '../random-bytes.js';
3
+ import * as utils from './rsa-utils.js';
4
+ import type { JWKKeyPair } from './interface.js';
5
+ export { utils };
6
+ export declare function generateKey(bits: number): Promise<JWKKeyPair>;
7
+ export declare function unmarshalPrivateKey(key: JsonWebKey): Promise<JWKKeyPair>;
8
+ export { randomBytes as getRandomValues };
9
+ export declare function hashAndSign(key: JsonWebKey, msg: Uint8Array): Promise<Buffer & string>;
10
+ export declare function hashAndVerify(key: JsonWebKey, sig: Uint8Array, msg: Uint8Array): Promise<boolean>;
11
+ export declare function encrypt(key: JsonWebKey, bytes: Uint8Array): Buffer;
12
+ export declare function decrypt(key: JsonWebKey, bytes: Uint8Array): Buffer;
13
+ //# sourceMappingURL=rsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../../src/keys/rsa.ts"],"names":[],"mappings":";AAGA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAIhD,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,wBAAsB,WAAW,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAcpE;AAGD,wBAAsB,mBAAmB,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAY/E;AAED,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,CAAA;AAEzC,wBAAsB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,4BAKlE;AAED,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,oBAKrF;AAID,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,UAG1D;AAED,wBAAgB,OAAO,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,UAG1D"}
@@ -0,0 +1,58 @@
1
+ import crypto from 'crypto';
2
+ import { promisify } from 'util';
3
+ import errcode from 'err-code';
4
+ import randomBytes from '../random-bytes.js';
5
+ import * as utils from './rsa-utils.js';
6
+ const keypair = promisify(crypto.generateKeyPair);
7
+ export { utils };
8
+ export async function generateKey(bits) {
9
+ // @ts-expect-error node types are missing jwk as a format
10
+ const key = await keypair('rsa', {
11
+ modulusLength: bits,
12
+ publicKeyEncoding: { type: 'pkcs1', format: 'jwk' },
13
+ privateKeyEncoding: { type: 'pkcs1', format: 'jwk' }
14
+ });
15
+ return {
16
+ // @ts-expect-error node types are missing jwk as a format
17
+ privateKey: key.privateKey,
18
+ // @ts-expect-error node types are missing jwk as a format
19
+ publicKey: key.publicKey
20
+ };
21
+ }
22
+ // Takes a jwk key
23
+ export async function unmarshalPrivateKey(key) {
24
+ if (key == null) {
25
+ throw errcode(new Error('Missing key parameter'), 'ERR_MISSING_KEY');
26
+ }
27
+ return {
28
+ privateKey: key,
29
+ publicKey: {
30
+ kty: key.kty,
31
+ n: key.n,
32
+ e: key.e
33
+ }
34
+ };
35
+ }
36
+ export { randomBytes as getRandomValues };
37
+ export async function hashAndSign(key, msg) {
38
+ return crypto.createSign('RSA-SHA256')
39
+ .update(msg)
40
+ // @ts-expect-error node types are missing jwk as a format
41
+ .sign({ format: 'jwk', key });
42
+ }
43
+ export async function hashAndVerify(key, sig, msg) {
44
+ // @ts-expect-error node types are missing jwk as a format
45
+ return crypto.createVerify('RSA-SHA256')
46
+ .update(msg)
47
+ .verify({ format: 'jwk', key }, sig);
48
+ }
49
+ const padding = crypto.constants.RSA_PKCS1_PADDING;
50
+ export function encrypt(key, bytes) {
51
+ // @ts-expect-error node types are missing jwk as a format
52
+ return crypto.publicEncrypt({ format: 'jwk', key, padding }, bytes);
53
+ }
54
+ export function decrypt(key, bytes) {
55
+ // @ts-expect-error node types are missing jwk as a format
56
+ return crypto.privateDecrypt({ format: 'jwk', key, padding }, bytes);
57
+ }
58
+ //# sourceMappingURL=rsa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../../src/keys/rsa.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAGvC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,IAAY;IAC7C,0DAA0D;IAC1D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;QAC/B,aAAa,EAAE,IAAI;QACnB,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;QACnD,kBAAkB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;KACrD,CAAC,CAAA;IAEF,OAAO;QACL,0DAA0D;QAC1D,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,0DAA0D;QAC1D,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAA;AACH,CAAC;AAED,kBAAkB;AAClB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAE,GAAe;IACxD,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,CAAA;KACrE;IACD,OAAO;QACL,UAAU,EAAE,GAAG;QACf,SAAS,EAAE;YACT,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC,CAAC;SACT;KACF,CAAA;AACH,CAAC;AAED,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,GAAe,EAAE,GAAe;IACjE,OAAO,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;SACnC,MAAM,CAAC,GAAG,CAAC;QACZ,0DAA0D;SACzD,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAe;IACpF,0DAA0D;IAC1D,OAAO,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;SACrC,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAA;AAElD,MAAM,UAAU,OAAO,CAAE,GAAe,EAAE,KAAiB;IACzD,0DAA0D;IAC1D,OAAO,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,OAAO,CAAE,GAAe,EAAE,KAAiB;IACzD,0DAA0D;IAC1D,OAAO,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,CAAA;AACtE,CAAC"}
@@ -0,0 +1,36 @@
1
+ export declare class Secp256k1PublicKey {
2
+ private readonly _key;
3
+ constructor(key: Uint8Array);
4
+ verify(data: Uint8Array, sig: Uint8Array): Promise<boolean>;
5
+ marshal(): Uint8Array;
6
+ get bytes(): Uint8Array;
7
+ equals(key: Secp256k1PublicKey): boolean;
8
+ hash(): Promise<Uint8Array>;
9
+ }
10
+ export declare class Secp256k1PrivateKey {
11
+ private readonly _key;
12
+ private readonly _publicKey;
13
+ constructor(key: Uint8Array, publicKey?: Uint8Array);
14
+ sign(message: Uint8Array): Promise<Uint8Array>;
15
+ get public(): Secp256k1PublicKey;
16
+ marshal(): Uint8Array;
17
+ get bytes(): Uint8Array;
18
+ equals(key: Secp256k1PrivateKey): boolean;
19
+ hash(): Promise<Uint8Array>;
20
+ /**
21
+ * Gets the ID of the key.
22
+ *
23
+ * The key id is the base58 encoding of the SHA-256 multihash of its public key.
24
+ * The public key is a protobuf encoding containing a type and the DER encoding
25
+ * of the PKCS SubjectPublicKeyInfo.
26
+ */
27
+ id(): Promise<string>;
28
+ /**
29
+ * Exports the key into a password protected `format`
30
+ */
31
+ export(password: string, format?: string): Promise<import("multiformats/bases/base").Multibase<"m">>;
32
+ }
33
+ export declare function unmarshalSecp256k1PrivateKey(bytes: Uint8Array): Secp256k1PrivateKey;
34
+ export declare function unmarshalSecp256k1PublicKey(bytes: Uint8Array): Secp256k1PublicKey;
35
+ export declare function generateKeyPair(): Promise<Secp256k1PrivateKey>;
36
+ //# sourceMappingURL=secp256k1-class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1-class.d.ts","sourceRoot":"","sources":["../../../src/keys/secp256k1-class.ts"],"names":[],"mappings":"AAQA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAEpB,GAAG,EAAE,UAAU;IAKtB,MAAM,CAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU;IAI/C,OAAO;IAIP,IAAI,KAAK,eAKR;IAED,MAAM,CAAE,GAAG,EAAE,kBAAkB;IAIzB,IAAI;CAKX;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE1B,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU;IAO9C,IAAI,CAAE,OAAO,EAAE,UAAU;IAI/B,IAAI,MAAM,uBAET;IAED,OAAO;IAIP,IAAI,KAAK,eAKR;IAED,MAAM,CAAE,GAAG,EAAE,mBAAmB;IAI1B,IAAI;IAMV;;;;;;OAMG;IACG,EAAE;IAKR;;OAEG;IACG,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAe;CAOtD;AAED,wBAAgB,4BAA4B,CAAE,KAAK,EAAE,UAAU,uBAE9D;AAED,wBAAgB,2BAA2B,CAAE,KAAK,EAAE,UAAU,sBAE7D;AAED,wBAAsB,eAAe,iCAGpC"}
@@ -0,0 +1,95 @@
1
+ import { sha256 } from 'multiformats/hashes/sha2';
2
+ import errcode from 'err-code';
3
+ import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
4
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
5
+ import * as crypto from './secp256k1.js';
6
+ import { exporter } from './exporter.js';
7
+ import * as keysProtobuf from './keys.js';
8
+ export class Secp256k1PublicKey {
9
+ constructor(key) {
10
+ crypto.validatePublicKey(key);
11
+ this._key = key;
12
+ }
13
+ async verify(data, sig) {
14
+ return await crypto.hashAndVerify(this._key, sig, data);
15
+ }
16
+ marshal() {
17
+ return crypto.compressPublicKey(this._key);
18
+ }
19
+ get bytes() {
20
+ return keysProtobuf.PublicKey.encode({
21
+ Type: keysProtobuf.KeyType.Secp256k1,
22
+ Data: this.marshal()
23
+ }).finish();
24
+ }
25
+ equals(key) {
26
+ return uint8ArrayEquals(this.bytes, key.bytes);
27
+ }
28
+ async hash() {
29
+ const { bytes } = await sha256.digest(this.bytes);
30
+ return bytes;
31
+ }
32
+ }
33
+ export class Secp256k1PrivateKey {
34
+ constructor(key, publicKey) {
35
+ this._key = key;
36
+ this._publicKey = publicKey ?? crypto.computePublicKey(key);
37
+ crypto.validatePrivateKey(this._key);
38
+ crypto.validatePublicKey(this._publicKey);
39
+ }
40
+ async sign(message) {
41
+ return await crypto.hashAndSign(this._key, message);
42
+ }
43
+ get public() {
44
+ return new Secp256k1PublicKey(this._publicKey);
45
+ }
46
+ marshal() {
47
+ return this._key;
48
+ }
49
+ get bytes() {
50
+ return keysProtobuf.PrivateKey.encode({
51
+ Type: keysProtobuf.KeyType.Secp256k1,
52
+ Data: this.marshal()
53
+ }).finish();
54
+ }
55
+ equals(key) {
56
+ return uint8ArrayEquals(this.bytes, key.bytes);
57
+ }
58
+ async hash() {
59
+ const { bytes } = await sha256.digest(this.bytes);
60
+ return bytes;
61
+ }
62
+ /**
63
+ * Gets the ID of the key.
64
+ *
65
+ * The key id is the base58 encoding of the SHA-256 multihash of its public key.
66
+ * The public key is a protobuf encoding containing a type and the DER encoding
67
+ * of the PKCS SubjectPublicKeyInfo.
68
+ */
69
+ async id() {
70
+ const hash = await this.public.hash();
71
+ return uint8ArrayToString(hash, 'base58btc');
72
+ }
73
+ /**
74
+ * Exports the key into a password protected `format`
75
+ */
76
+ async export(password, format = 'libp2p-key') {
77
+ if (format === 'libp2p-key') {
78
+ return await exporter(this.bytes, password);
79
+ }
80
+ else {
81
+ throw errcode(new Error(`export format '${format}' is not supported`), 'ERR_INVALID_EXPORT_FORMAT');
82
+ }
83
+ }
84
+ }
85
+ export function unmarshalSecp256k1PrivateKey(bytes) {
86
+ return new Secp256k1PrivateKey(bytes);
87
+ }
88
+ export function unmarshalSecp256k1PublicKey(bytes) {
89
+ return new Secp256k1PublicKey(bytes);
90
+ }
91
+ export async function generateKeyPair() {
92
+ const privateKeyBytes = await crypto.generateKey();
93
+ return new Secp256k1PrivateKey(privateKeyBytes);
94
+ }
95
+ //# sourceMappingURL=secp256k1-class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1-class.js","sourceRoot":"","sources":["../../../src/keys/secp256k1-class.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ declare const PRIVATE_KEY_BYTE_LENGTH = 32;
2
+ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
3
+ export declare function generateKey(): Uint8Array;
4
+ /**
5
+ * Hash and sign message with private key
6
+ */
7
+ export declare function hashAndSign(key: Uint8Array, msg: Uint8Array): Promise<Uint8Array>;
8
+ /**
9
+ * Hash message and verify signature with public key
10
+ */
11
+ export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array): Promise<boolean>;
12
+ export declare function compressPublicKey(key: Uint8Array): Uint8Array;
13
+ export declare function decompressPublicKey(key: Uint8Array): Uint8Array;
14
+ export declare function validatePrivateKey(key: Uint8Array): void;
15
+ export declare function validatePublicKey(key: Uint8Array): void;
16
+ export declare function computePublicKey(privateKey: Uint8Array): Uint8Array;
17
+ //# sourceMappingURL=secp256k1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/keys/secp256k1.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,WAAW,eAE1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,uBAOlE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,oBAOrF;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,cAGjD;AAED,wBAAgB,mBAAmB,CAAE,GAAG,EAAE,UAAU,cAGnD;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,QAMlD;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,QAMjD;AAED,wBAAgB,gBAAgB,CAAE,UAAU,EAAE,UAAU,cAMvD"}
@@ -0,0 +1,65 @@
1
+ import errcode from 'err-code';
2
+ import * as secp from '@noble/secp256k1';
3
+ import { sha256 } from 'multiformats/hashes/sha2';
4
+ const PRIVATE_KEY_BYTE_LENGTH = 32;
5
+ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength };
6
+ export function generateKey() {
7
+ return secp.utils.randomPrivateKey();
8
+ }
9
+ /**
10
+ * Hash and sign message with private key
11
+ */
12
+ export async function hashAndSign(key, msg) {
13
+ const { digest } = await sha256.digest(msg);
14
+ try {
15
+ return await secp.sign(digest, key);
16
+ }
17
+ catch (err) {
18
+ throw errcode(err, 'ERR_INVALID_INPUT');
19
+ }
20
+ }
21
+ /**
22
+ * Hash message and verify signature with public key
23
+ */
24
+ export async function hashAndVerify(key, sig, msg) {
25
+ try {
26
+ const { digest } = await sha256.digest(msg);
27
+ return secp.verify(sig, digest, key);
28
+ }
29
+ catch (err) {
30
+ throw errcode(err, 'ERR_INVALID_INPUT');
31
+ }
32
+ }
33
+ export function compressPublicKey(key) {
34
+ const point = secp.Point.fromHex(key).toRawBytes(true);
35
+ return point;
36
+ }
37
+ export function decompressPublicKey(key) {
38
+ const point = secp.Point.fromHex(key).toRawBytes(false);
39
+ return point;
40
+ }
41
+ export function validatePrivateKey(key) {
42
+ try {
43
+ secp.getPublicKey(key, true);
44
+ }
45
+ catch (err) {
46
+ throw errcode(err, 'ERR_INVALID_PRIVATE_KEY');
47
+ }
48
+ }
49
+ export function validatePublicKey(key) {
50
+ try {
51
+ secp.Point.fromHex(key);
52
+ }
53
+ catch (err) {
54
+ throw errcode(err, 'ERR_INVALID_PUBLIC_KEY');
55
+ }
56
+ }
57
+ export function computePublicKey(privateKey) {
58
+ try {
59
+ return secp.getPublicKey(privateKey, true);
60
+ }
61
+ catch (err) {
62
+ throw errcode(err, 'ERR_INVALID_PRIVATE_KEY');
63
+ }
64
+ }
65
+ //# sourceMappingURL=secp256k1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../src/keys/secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEjD,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,GAAe,EAAE,GAAe;IACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KACpC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;KACxC;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,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;KACxC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAe;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACtD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAE,GAAe;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACvD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,GAAe;IACjD,IAAI;QACF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;KAC7B;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,OAAO,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;KAC9C;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAe;IAChD,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;KACxB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,OAAO,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAA;KAC7C;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,OAAO,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;KAC9C;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Computes the Password-Based Key Derivation Function 2.
3
+ */
4
+ export default function pbkdf2(password: string, salt: string, iterations: number, keySize: number, hash: string): any;
5
+ //# sourceMappingURL=pbkdf2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbkdf2.d.ts","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAgBhH"}
@@ -0,0 +1,30 @@
1
+ // @ts-expect-error types are missing
2
+ import forgePbkdf2 from 'node-forge/lib/pbkdf2.js';
3
+ // @ts-expect-error types are missing
4
+ import forgeUtil from 'node-forge/lib/util.js';
5
+ import errcode from 'err-code';
6
+ /**
7
+ * Maps an IPFS hash name to its node-forge equivalent.
8
+ *
9
+ * See https://github.com/multiformats/multihash/blob/master/hashtable.csv
10
+ *
11
+ * @private
12
+ */
13
+ const hashName = {
14
+ sha1: 'sha1',
15
+ 'sha2-256': 'sha256',
16
+ 'sha2-512': 'sha512'
17
+ };
18
+ /**
19
+ * Computes the Password-Based Key Derivation Function 2.
20
+ */
21
+ export default function pbkdf2(password, salt, iterations, keySize, hash) {
22
+ if (hash !== 'sha1' && hash !== 'sha2-256' && hash !== 'sha2-512') {
23
+ const types = Object.keys(hashName).join(' / ');
24
+ throw errcode(new Error(`Hash '${hash}' is unknown or not supported. Must be ${types}`), 'ERR_UNSUPPORTED_HASH_TYPE');
25
+ }
26
+ const hasher = hashName[hash];
27
+ const dek = forgePbkdf2(password, salt, iterations, keySize, hasher);
28
+ return forgeUtil.encode64(dek, null);
29
+ }
30
+ //# sourceMappingURL=pbkdf2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/pbkdf2.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAClD,qCAAqC;AACrC,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAC9C,OAAO,OAAO,MAAM,UAAU,CAAA;AAE9B;;;;;;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,OAAO,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,0CAA0C,KAAK,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAA;KACtH;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"}
@@ -0,0 +1,2 @@
1
+ export default function randomBytes(length: number): Uint8Array;
2
+ //# sourceMappingURL=random-bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random-bytes.d.ts","sourceRoot":"","sources":["../../src/random-bytes.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAK/D"}
@@ -0,0 +1,9 @@
1
+ import isoRandomBytes from 'iso-random-stream/src/random.js';
2
+ import errcode from 'err-code';
3
+ export default function randomBytes(length) {
4
+ if (isNaN(length) || length <= 0) {
5
+ throw errcode(new Error('random bytes length must be a Number bigger than 0'), 'ERR_INVALID_LENGTH');
6
+ }
7
+ return isoRandomBytes(length);
8
+ }
9
+ //# sourceMappingURL=random-bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random-bytes.js","sourceRoot":"","sources":["../../src/random-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAA;AAC5D,OAAO,OAAO,MAAM,UAAU,CAAA;AAE9B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,MAAc;IACjD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;QAChC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,EAAE,oBAAoB,CAAC,CAAA;KACrG;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import 'node-forge/lib/util.js';
2
+ import 'node-forge/lib/jsbn.js';
3
+ import forge from 'node-forge/lib/forge.js';
4
+ export declare function bigIntegerToUintBase64url(num: {
5
+ abs: () => any;
6
+ }, len?: number): string;
7
+ export declare function base64urlToBigInteger(str: string): typeof forge.jsbn.BigInteger;
8
+ export declare function base64urlToBuffer(str: string, len?: number): Uint8Array;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +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,EAAE,MAAM,GAAG,CAAA;CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,UAgB9E;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,cAS3D"}
@@ -0,0 +1,37 @@
1
+ import 'node-forge/lib/util.js';
2
+ import 'node-forge/lib/jsbn.js';
3
+ // @ts-expect-error types are missing
4
+ import forge from 'node-forge/lib/forge.js';
5
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
6
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
7
+ import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
8
+ export function bigIntegerToUintBase64url(num, len) {
9
+ // Call `.abs()` to convert to unsigned
10
+ let buf = Uint8Array.from(num.abs().toByteArray()); // toByteArray converts to big endian
11
+ // toByteArray() gives us back a signed array, which will include a leading 0
12
+ // byte if the most significant bit of the number is 1:
13
+ // https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-integer
14
+ // Our number will always be positive so we should remove the leading padding.
15
+ buf = buf[0] === 0 ? buf.slice(1) : buf;
16
+ if (len != null) {
17
+ if (buf.length > len)
18
+ throw new Error('byte array longer than desired length');
19
+ buf = uint8ArrayConcat([new Uint8Array(len - buf.length), buf]);
20
+ }
21
+ return uint8ArrayToString(buf, 'base64url');
22
+ }
23
+ // Convert a base64url encoded string to a BigInteger
24
+ export function base64urlToBigInteger(str) {
25
+ const buf = base64urlToBuffer(str);
26
+ return new forge.jsbn.BigInteger(uint8ArrayToString(buf, 'base16'), 16);
27
+ }
28
+ export function base64urlToBuffer(str, len) {
29
+ let buf = uint8ArrayFromString(str, 'base64urlpad');
30
+ if (len != null) {
31
+ if (buf.length > len)
32
+ throw new Error('byte array longer than desired length');
33
+ buf = uint8ArrayConcat([new Uint8Array(len - buf.length), buf]);
34
+ }
35
+ return buf;
36
+ }
37
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAC/B,qCAAqC;AACrC,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAC3C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,MAAM,UAAU,yBAAyB,CAAE,GAAsB,EAAE,GAAY;IAC7E,uCAAuC;IACvC,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC,qCAAqC;IAExF,6EAA6E;IAC7E,uDAAuD;IACvD,6EAA6E;IAC7E,8EAA8E;IAC9E,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAEvC,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC9E,GAAG,GAAG,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;KAChE;IAED,OAAO,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;AAC7C,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,qBAAqB,CAAE,GAAW;IAChD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAClC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,GAAW,EAAE,GAAY;IAC1D,IAAI,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAEnD,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC9E,GAAG,GAAG,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;KAChE;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ get(win?: typeof globalThis): Crypto;
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=webcrypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["../../src/webcrypto.ts"],"names":[],"mappings":";;;AAIA,wBAmBC"}
@@ -0,0 +1,17 @@
1
+ /* eslint-env browser */
2
+ // Check native crypto exists and is enabled (In insecure context `self.crypto`
3
+ // exists but `self.crypto.subtle` does not).
4
+ export default {
5
+ get(win = globalThis) {
6
+ const nativeCrypto = win.crypto;
7
+ if (nativeCrypto == null || nativeCrypto.subtle == null) {
8
+ throw Object.assign(new Error('Missing Web Crypto API. ' +
9
+ 'The most likely cause of this error is that this page is being accessed ' +
10
+ 'from an insecure context (i.e. not HTTPS). For more information and ' +
11
+ 'possible resolutions see ' +
12
+ 'https://github.com/libp2p/js-libp2p-crypto/blob/master/README.md#web-crypto-api'), { code: 'ERR_MISSING_WEB_CRYPTO' });
13
+ }
14
+ return nativeCrypto;
15
+ }
16
+ };
17
+ //# sourceMappingURL=webcrypto.js.map
@@ -0,0 +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"}