@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
@@ -1,10 +1,10 @@
1
- import { CodeError } from '@libp2p/interface';
1
+ import { InvalidParametersError } from '@libp2p/interface';
2
2
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
3
- import randomBytes from '../random-bytes.js';
4
- import webcrypto from '../webcrypto.js';
5
- import * as utils from './rsa-utils.js';
3
+ import randomBytes from '../../random-bytes.js';
4
+ import webcrypto from '../../webcrypto/index.js';
5
+ import * as utils from './utils.js';
6
6
  export { utils };
7
- export async function generateKey(bits) {
7
+ export async function generateRSAKey(bits) {
8
8
  const pair = await webcrypto.get().subtle.generateKey({
9
9
  name: 'RSASSA-PKCS1-v1_5',
10
10
  modulusLength: bits,
@@ -17,25 +17,6 @@ export async function generateKey(bits) {
17
17
  publicKey: keys[1]
18
18
  };
19
19
  }
20
- // Takes a jwk key
21
- export async function unmarshalPrivateKey(key) {
22
- const privateKey = await webcrypto.get().subtle.importKey('jwk', key, {
23
- name: 'RSASSA-PKCS1-v1_5',
24
- hash: { name: 'SHA-256' }
25
- }, true, ['sign']);
26
- const pair = [
27
- privateKey,
28
- await derivePublicFromPrivate(key)
29
- ];
30
- const keys = await exportKey({
31
- privateKey: pair[0],
32
- publicKey: pair[1]
33
- });
34
- return {
35
- privateKey: keys[0],
36
- publicKey: keys[1]
37
- };
38
- }
39
20
  export { randomBytes as getRandomValues };
40
21
  export async function hashAndSign(key, msg) {
41
22
  const privateKey = await webcrypto.get().subtle.importKey('jwk', key, {
@@ -54,31 +35,21 @@ export async function hashAndVerify(key, sig, msg) {
54
35
  }
55
36
  async function exportKey(pair) {
56
37
  if (pair.privateKey == null || pair.publicKey == null) {
57
- throw new CodeError('Private and public key are required', 'ERR_INVALID_PARAMETERS');
38
+ throw new InvalidParametersError('Private and public key are required');
58
39
  }
59
40
  return Promise.all([
60
41
  webcrypto.get().subtle.exportKey('jwk', pair.privateKey),
61
42
  webcrypto.get().subtle.exportKey('jwk', pair.publicKey)
62
43
  ]);
63
44
  }
64
- async function derivePublicFromPrivate(jwKey) {
65
- return webcrypto.get().subtle.importKey('jwk', {
66
- kty: jwKey.kty,
67
- n: jwKey.n,
68
- e: jwKey.e
69
- }, {
70
- name: 'RSASSA-PKCS1-v1_5',
71
- hash: { name: 'SHA-256' }
72
- }, true, ['verify']);
73
- }
74
- export function keySize(jwk) {
45
+ export function rsaKeySize(jwk) {
75
46
  if (jwk.kty !== 'RSA') {
76
- throw new CodeError('invalid key type', 'ERR_INVALID_KEY_TYPE');
47
+ throw new InvalidParametersError('invalid key type');
77
48
  }
78
49
  else if (jwk.n == null) {
79
- throw new CodeError('invalid key modulus', 'ERR_INVALID_KEY_MODULUS');
50
+ throw new InvalidParametersError('invalid key modulus');
80
51
  }
81
52
  const bytes = uint8ArrayFromString(jwk.n, 'base64url');
82
53
  return bytes.length * 8;
83
54
  }
84
- //# sourceMappingURL=rsa-browser.js.map
55
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../../src/keys/rsa/index.browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import randomBytes from '../../random-bytes.js';
2
+ import * as utils from './utils.js';
3
+ import type { JWKKeyPair } from '../interface.js';
4
+ import type { Uint8ArrayList } from 'uint8arraylist';
5
+ export { utils };
6
+ export declare function generateRSAKey(bits: number): Promise<JWKKeyPair>;
7
+ export { randomBytes as getRandomValues };
8
+ export declare function hashAndSign(key: JsonWebKey, msg: Uint8Array | Uint8ArrayList): Promise<Uint8Array>;
9
+ export declare function hashAndVerify(key: JsonWebKey, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): Promise<boolean>;
10
+ export declare function rsaKeySize(jwk: JsonWebKey): number;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/keys/rsa/index.ts"],"names":[],"mappings":"AAIA,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAIpD,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,wBAAsB,cAAc,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAcvE;AAED,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,CAAA;AAEzC,wBAAsB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAazG;AAED,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAazH;AAED,wBAAgB,UAAU,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAQnD"}
@@ -1,12 +1,12 @@
1
1
  import crypto from 'crypto';
2
2
  import { promisify } from 'util';
3
- import { CodeError } from '@libp2p/interface';
3
+ import { InvalidParametersError } from '@libp2p/interface';
4
4
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
5
- import randomBytes from '../random-bytes.js';
6
- import * as utils from './rsa-utils.js';
5
+ import randomBytes from '../../random-bytes.js';
6
+ import * as utils from './utils.js';
7
7
  const keypair = promisify(crypto.generateKeyPair);
8
8
  export { utils };
9
- export async function generateKey(bits) {
9
+ export async function generateRSAKey(bits) {
10
10
  // @ts-expect-error node types are missing jwk as a format
11
11
  const key = await keypair('rsa', {
12
12
  modulusLength: bits,
@@ -20,20 +20,6 @@ export async function generateKey(bits) {
20
20
  publicKey: key.publicKey
21
21
  };
22
22
  }
23
- // Takes a jwk key
24
- export async function unmarshalPrivateKey(key) {
25
- if (key == null) {
26
- throw new CodeError('Missing key parameter', 'ERR_MISSING_KEY');
27
- }
28
- return {
29
- privateKey: key,
30
- publicKey: {
31
- kty: key.kty,
32
- n: key.n,
33
- e: key.e
34
- }
35
- };
36
- }
37
23
  export { randomBytes as getRandomValues };
38
24
  export async function hashAndSign(key, msg) {
39
25
  const hash = crypto.createSign('RSA-SHA256');
@@ -61,14 +47,14 @@ export async function hashAndVerify(key, sig, msg) {
61
47
  // @ts-expect-error node types are missing jwk as a format
62
48
  return hash.verify({ format: 'jwk', key }, sig);
63
49
  }
64
- export function keySize(jwk) {
50
+ export function rsaKeySize(jwk) {
65
51
  if (jwk.kty !== 'RSA') {
66
- throw new CodeError('invalid key type', 'ERR_INVALID_KEY_TYPE');
52
+ throw new InvalidParametersError('Invalid key type');
67
53
  }
68
54
  else if (jwk.n == null) {
69
- throw new CodeError('invalid key modulus', 'ERR_INVALID_KEY_MODULUS');
55
+ throw new InvalidParametersError('Invalid key modulus');
70
56
  }
71
57
  const modulus = uint8ArrayFromString(jwk.n, 'base64url');
72
58
  return modulus.length * 8;
73
59
  }
74
- //# sourceMappingURL=rsa.js.map
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/keys/rsa/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAInC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAE,IAAY;IAChD,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,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,GAAe,EAAE,GAAgC;IAClF,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IAE5C,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAgC;IACrG,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;IAE9C,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAE,GAAe;IACzC,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,sBAAsB,CAAC,kBAAkB,CAAC,CAAA;IACtD,CAAC;SAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,sBAAsB,CAAC,qBAAqB,CAAC,CAAA;IACzD,CAAC;IACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IACxD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { CID } from 'multiformats/cid';
2
+ import { type Digest } from 'multiformats/hashes/digest';
3
+ import type { RSAPublicKey as RSAPublicKeyInterface, RSAPrivateKey as RSAPrivateKeyInterface } from '@libp2p/interface';
4
+ import type { Uint8ArrayList } from 'uint8arraylist';
5
+ export declare class RSAPublicKey implements RSAPublicKeyInterface {
6
+ readonly type = "RSA";
7
+ private readonly _key;
8
+ private _raw?;
9
+ private readonly _multihash;
10
+ constructor(key: JsonWebKey, digest: Digest<18, number>);
11
+ get raw(): Uint8Array;
12
+ toMultihash(): Digest<18, number>;
13
+ toCID(): CID<unknown, 114, 18, 1>;
14
+ toString(): string;
15
+ equals(key?: any): boolean;
16
+ verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean | Promise<boolean>;
17
+ }
18
+ export declare class RSAPrivateKey implements RSAPrivateKeyInterface {
19
+ readonly type = "RSA";
20
+ private readonly _key;
21
+ private _raw?;
22
+ readonly publicKey: RSAPublicKey;
23
+ constructor(key: JsonWebKey, publicKey: RSAPublicKey);
24
+ get raw(): Uint8Array;
25
+ equals(key: any): boolean;
26
+ sign(message: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
27
+ }
28
+ //# sourceMappingURL=rsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../../../src/keys/rsa/rsa.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGxD,OAAO,KAAK,EAAE,YAAY,IAAI,qBAAqB,EAAE,aAAa,IAAI,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AACvH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,YAAa,YAAW,qBAAqB;IACxD,SAAgB,IAAI,SAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAElC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IAKxD,IAAI,GAAG,IAAK,UAAU,CAMrB;IAED,WAAW,IAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IAIlC,KAAK,IAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAIlC,QAAQ,IAAK,MAAM;IAInB,MAAM,CAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO;IAQ3B,MAAM,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAGxF;AAED,qBAAa,aAAc,YAAW,sBAAsB;IAC1D,SAAgB,IAAI,SAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,SAAgB,SAAS,EAAE,YAAY,CAAA;gBAE1B,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY;IAKrD,IAAI,GAAG,IAAK,UAAU,CAMrB;IAED,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAQ1B,IAAI,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAG9E"}
@@ -0,0 +1,65 @@
1
+ import { base58btc } from 'multiformats/bases/base58';
2
+ import { CID } from 'multiformats/cid';
3
+ import {} from 'multiformats/hashes/digest';
4
+ import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
5
+ import { hashAndSign, utils, hashAndVerify } from './index.js';
6
+ export class RSAPublicKey {
7
+ type = 'RSA';
8
+ _key;
9
+ _raw;
10
+ _multihash;
11
+ constructor(key, digest) {
12
+ this._key = key;
13
+ this._multihash = digest;
14
+ }
15
+ get raw() {
16
+ if (this._raw == null) {
17
+ this._raw = utils.jwkToPkix(this._key);
18
+ }
19
+ return this._raw;
20
+ }
21
+ toMultihash() {
22
+ return this._multihash;
23
+ }
24
+ toCID() {
25
+ return CID.createV1(114, this._multihash);
26
+ }
27
+ toString() {
28
+ return base58btc.encode(this.toMultihash().bytes).substring(1);
29
+ }
30
+ equals(key) {
31
+ if (key == null || !(key.raw instanceof Uint8Array)) {
32
+ return false;
33
+ }
34
+ return uint8ArrayEquals(this.raw, key.raw);
35
+ }
36
+ verify(data, sig) {
37
+ return hashAndVerify(this._key, sig, data);
38
+ }
39
+ }
40
+ export class RSAPrivateKey {
41
+ type = 'RSA';
42
+ _key;
43
+ _raw;
44
+ publicKey;
45
+ constructor(key, publicKey) {
46
+ this._key = key;
47
+ this.publicKey = publicKey;
48
+ }
49
+ get raw() {
50
+ if (this._raw == null) {
51
+ this._raw = utils.jwkToPkcs1(this._key);
52
+ }
53
+ return this._raw;
54
+ }
55
+ equals(key) {
56
+ if (key == null || !(key.raw instanceof Uint8Array)) {
57
+ return false;
58
+ }
59
+ return uint8ArrayEquals(this.raw, key.raw);
60
+ }
61
+ sign(message) {
62
+ return hashAndSign(this._key, message);
63
+ }
64
+ }
65
+ //# sourceMappingURL=rsa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../../../src/keys/rsa/rsa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAe,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI9D,MAAM,OAAO,YAAY;IACP,IAAI,GAAG,KAAK,CAAA;IACX,IAAI,CAAY;IACzB,IAAI,CAAa;IACR,UAAU,CAAoB;IAE/C,YAAa,GAAe,EAAE,MAA0B;QACtD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;IAC1B,CAAC;IAED,IAAI,GAAG;QACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,KAAK;QACH,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAE,GAAS;QACf,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,CAAE,IAAiC,EAAE,GAAe;QACxD,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC5C,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACR,IAAI,GAAG,KAAK,CAAA;IACX,IAAI,CAAY;IACzB,IAAI,CAAa;IACT,SAAS,CAAc;IAEvC,YAAa,GAAe,EAAE,SAAuB;QACnD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,IAAI,GAAG;QACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,MAAM,CAAE,GAAQ;QACd,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,CAAE,OAAoC;QACxC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ import type { JWKKeyPair } from '../interface.js';
2
+ import type { RSAPrivateKey, RSAPublicKey } from '@libp2p/interface';
3
+ export declare const MAX_RSA_KEY_SIZE = 8192;
4
+ /**
5
+ * Convert a PKCS#1 in ASN1 DER format to a JWK key
6
+ */
7
+ export declare function pkcs1ToJwk(bytes: Uint8Array): JsonWebKey;
8
+ /**
9
+ * Convert a JWK key into PKCS#1 in ASN1 DER format
10
+ */
11
+ export declare function jwkToPkcs1(jwk: JsonWebKey): Uint8Array;
12
+ /**
13
+ * Convert a PKIX in ASN1 DER format to a JWK key
14
+ */
15
+ export declare function pkixToJwk(bytes: Uint8Array): JsonWebKey;
16
+ /**
17
+ * Convert a JWK key to PKIX in ASN1 DER format
18
+ */
19
+ export declare function jwkToPkix(jwk: JsonWebKey): Uint8Array;
20
+ /**
21
+ * Turn PCKS#1 DER bytes to a PrivateKey
22
+ */
23
+ export declare function pkcs1ToRSAPrivateKey(bytes: Uint8Array): RSAPrivateKey;
24
+ /**
25
+ * Turn PKIX bytes to a PublicKey
26
+ */
27
+ export declare function pkixToRSAPublicKey(bytes: Uint8Array): RSAPublicKey;
28
+ export declare function jwkToRSAPrivateKey(jwk: JsonWebKey): RSAPrivateKey;
29
+ export declare function generateRSAKeyPair(bits: number): Promise<RSAPrivateKey>;
30
+ /**
31
+ * Takes a jwk key and returns a JWK KeyPair
32
+ */
33
+ export declare function jwkToJWKKeyPair(key: JsonWebKey): JWKKeyPair;
34
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/keys/rsa/utils.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEpE,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAGpC;;GAEG;AACH,wBAAgB,UAAU,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAqBzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAsBvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAYxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAgCtD;AAwCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAE,KAAK,EAAE,UAAU,GAAG,aAAa,CAItE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAcnE;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,aAAa,CAalE;AAED,wBAAsB,kBAAkB,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAa9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAa5D"}
@@ -0,0 +1,193 @@
1
+ import { InvalidParametersError, InvalidPublicKeyError } from '@libp2p/interface';
2
+ import { sha256 } from '@noble/hashes/sha256';
3
+ import * as asn1js from 'asn1js';
4
+ import { create } from 'multiformats/hashes/digest';
5
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
6
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
7
+ import * as pb from '../keys.js';
8
+ import { RSAPrivateKey as RSAPrivateKeyClass, RSAPublicKey as RSAPublicKeyClass } from './rsa.js';
9
+ import { generateRSAKey, rsaKeySize } from './index.js';
10
+ export const MAX_RSA_KEY_SIZE = 8192;
11
+ const SHA2_256_CODE = 0x12;
12
+ /**
13
+ * Convert a PKCS#1 in ASN1 DER format to a JWK key
14
+ */
15
+ export function pkcs1ToJwk(bytes) {
16
+ const { result } = asn1js.fromBER(bytes);
17
+ // @ts-expect-error this looks fragile but DER is a canonical format so we are
18
+ // safe to have deeply property chains like this
19
+ const values = result.valueBlock.value;
20
+ const key = {
21
+ n: uint8ArrayToString(bnToBuf(values[1].toBigInt()), 'base64url'),
22
+ e: uint8ArrayToString(bnToBuf(values[2].toBigInt()), 'base64url'),
23
+ d: uint8ArrayToString(bnToBuf(values[3].toBigInt()), 'base64url'),
24
+ p: uint8ArrayToString(bnToBuf(values[4].toBigInt()), 'base64url'),
25
+ q: uint8ArrayToString(bnToBuf(values[5].toBigInt()), 'base64url'),
26
+ dp: uint8ArrayToString(bnToBuf(values[6].toBigInt()), 'base64url'),
27
+ dq: uint8ArrayToString(bnToBuf(values[7].toBigInt()), 'base64url'),
28
+ qi: uint8ArrayToString(bnToBuf(values[8].toBigInt()), 'base64url'),
29
+ kty: 'RSA',
30
+ alg: 'RS256'
31
+ };
32
+ return key;
33
+ }
34
+ /**
35
+ * Convert a JWK key into PKCS#1 in ASN1 DER format
36
+ */
37
+ export function jwkToPkcs1(jwk) {
38
+ 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) {
39
+ throw new InvalidParametersError('JWK was missing components');
40
+ }
41
+ const root = new asn1js.Sequence({
42
+ value: [
43
+ new asn1js.Integer({ value: 0 }),
44
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
45
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url'))),
46
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.d, 'base64url'))),
47
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.p, 'base64url'))),
48
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.q, 'base64url'))),
49
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dp, 'base64url'))),
50
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dq, 'base64url'))),
51
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.qi, 'base64url')))
52
+ ]
53
+ });
54
+ const der = root.toBER();
55
+ return new Uint8Array(der, 0, der.byteLength);
56
+ }
57
+ /**
58
+ * Convert a PKIX in ASN1 DER format to a JWK key
59
+ */
60
+ export function pkixToJwk(bytes) {
61
+ const { result } = asn1js.fromBER(bytes);
62
+ // @ts-expect-error this looks fragile but DER is a canonical format so we are
63
+ // safe to have deeply property chains like this
64
+ const values = result.valueBlock.value[1].valueBlock.value[0].valueBlock.value;
65
+ return {
66
+ kty: 'RSA',
67
+ n: uint8ArrayToString(bnToBuf(values[0].toBigInt()), 'base64url'),
68
+ e: uint8ArrayToString(bnToBuf(values[1].toBigInt()), 'base64url')
69
+ };
70
+ }
71
+ /**
72
+ * Convert a JWK key to PKIX in ASN1 DER format
73
+ */
74
+ export function jwkToPkix(jwk) {
75
+ if (jwk.n == null || jwk.e == null) {
76
+ throw new InvalidParametersError('JWK was missing components');
77
+ }
78
+ const root = new asn1js.Sequence({
79
+ value: [
80
+ new asn1js.Sequence({
81
+ value: [
82
+ // rsaEncryption
83
+ new asn1js.ObjectIdentifier({
84
+ value: '1.2.840.113549.1.1.1'
85
+ }),
86
+ new asn1js.Null()
87
+ ]
88
+ }),
89
+ // this appears to be a bug in asn1js.js - this should really be a Sequence
90
+ // and not a BitString but it generates the same bytes as node-forge so 🤷‍♂️
91
+ new asn1js.BitString({
92
+ valueHex: new asn1js.Sequence({
93
+ value: [
94
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
95
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url')))
96
+ ]
97
+ }).toBER()
98
+ })
99
+ ]
100
+ });
101
+ const der = root.toBER();
102
+ return new Uint8Array(der, 0, der.byteLength);
103
+ }
104
+ function bnToBuf(bn) {
105
+ let hex = bn.toString(16);
106
+ if (hex.length % 2 > 0) {
107
+ hex = `0${hex}`;
108
+ }
109
+ const len = hex.length / 2;
110
+ const u8 = new Uint8Array(len);
111
+ let i = 0;
112
+ let j = 0;
113
+ while (i < len) {
114
+ u8[i] = parseInt(hex.slice(j, j + 2), 16);
115
+ i += 1;
116
+ j += 2;
117
+ }
118
+ return u8;
119
+ }
120
+ function bufToBn(u8) {
121
+ const hex = [];
122
+ u8.forEach(function (i) {
123
+ let h = i.toString(16);
124
+ if (h.length % 2 > 0) {
125
+ h = `0${h}`;
126
+ }
127
+ hex.push(h);
128
+ });
129
+ return BigInt('0x' + hex.join(''));
130
+ }
131
+ /**
132
+ * Turn PCKS#1 DER bytes to a PrivateKey
133
+ */
134
+ export function pkcs1ToRSAPrivateKey(bytes) {
135
+ const jwk = pkcs1ToJwk(bytes);
136
+ return jwkToRSAPrivateKey(jwk);
137
+ }
138
+ /**
139
+ * Turn PKIX bytes to a PublicKey
140
+ */
141
+ export function pkixToRSAPublicKey(bytes) {
142
+ const jwk = pkixToJwk(bytes);
143
+ if (rsaKeySize(jwk) > MAX_RSA_KEY_SIZE) {
144
+ throw new InvalidPublicKeyError('Key size is too large');
145
+ }
146
+ const hash = sha256(pb.PublicKey.encode({
147
+ Type: pb.KeyType.RSA,
148
+ Data: bytes
149
+ }));
150
+ const digest = create(SHA2_256_CODE, hash);
151
+ return new RSAPublicKeyClass(jwk, digest);
152
+ }
153
+ export function jwkToRSAPrivateKey(jwk) {
154
+ if (rsaKeySize(jwk) > MAX_RSA_KEY_SIZE) {
155
+ throw new InvalidParametersError('Key size is too large');
156
+ }
157
+ const keys = jwkToJWKKeyPair(jwk);
158
+ const hash = sha256(pb.PublicKey.encode({
159
+ Type: pb.KeyType.RSA,
160
+ Data: jwkToPkix(keys.publicKey)
161
+ }));
162
+ const digest = create(SHA2_256_CODE, hash);
163
+ return new RSAPrivateKeyClass(keys.privateKey, new RSAPublicKeyClass(keys.publicKey, digest));
164
+ }
165
+ export async function generateRSAKeyPair(bits) {
166
+ if (bits > MAX_RSA_KEY_SIZE) {
167
+ throw new InvalidParametersError('Key size is too large');
168
+ }
169
+ const keys = await generateRSAKey(bits);
170
+ const hash = sha256(pb.PublicKey.encode({
171
+ Type: pb.KeyType.RSA,
172
+ Data: jwkToPkix(keys.publicKey)
173
+ }));
174
+ const digest = create(SHA2_256_CODE, hash);
175
+ return new RSAPrivateKeyClass(keys.privateKey, new RSAPublicKeyClass(keys.publicKey, digest));
176
+ }
177
+ /**
178
+ * Takes a jwk key and returns a JWK KeyPair
179
+ */
180
+ export function jwkToJWKKeyPair(key) {
181
+ if (key == null) {
182
+ throw new InvalidParametersError('Missing key parameter');
183
+ }
184
+ return {
185
+ privateKey: key,
186
+ publicKey: {
187
+ kty: key.kty,
188
+ n: key.n,
189
+ e: key.e
190
+ }
191
+ };
192
+ }
193
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/keys/rsa/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Uint8ArrayList } from 'uint8arraylist';
2
+ /**
3
+ * Hash and sign message with private key
4
+ */
5
+ export declare function hashAndSign(key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array>;
6
+ /**
7
+ * Hash message and verify signature with public key
8
+ */
9
+ export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean | Promise<boolean>;
10
+ //# sourceMappingURL=index.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.browser.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAehH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAe7H"}
@@ -0,0 +1,41 @@
1
+ import { secp256k1 as secp } from '@noble/curves/secp256k1';
2
+ import { sha256 } from 'multiformats/hashes/sha2';
3
+ import { SigningError, VerificationError } from '../../errors.js';
4
+ import { isPromise } from '../../util.js';
5
+ /**
6
+ * Hash and sign message with private key
7
+ */
8
+ export function hashAndSign(key, msg) {
9
+ const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray());
10
+ if (isPromise(p)) {
11
+ return p.then(({ digest }) => secp.sign(digest, key).toDERRawBytes())
12
+ .catch(err => {
13
+ throw new SigningError(String(err));
14
+ });
15
+ }
16
+ try {
17
+ return secp.sign(p.digest, key).toDERRawBytes();
18
+ }
19
+ catch (err) {
20
+ throw new SigningError(String(err));
21
+ }
22
+ }
23
+ /**
24
+ * Hash message and verify signature with public key
25
+ */
26
+ export function hashAndVerify(key, sig, msg) {
27
+ const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray());
28
+ if (isPromise(p)) {
29
+ return p.then(({ digest }) => secp.verify(sig, digest, key))
30
+ .catch(err => {
31
+ throw new VerificationError(String(err));
32
+ });
33
+ }
34
+ try {
35
+ return secp.verify(sig, p.digest, key);
36
+ }
37
+ catch (err) {
38
+ throw new VerificationError(String(err));
39
+ }
40
+ }
41
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAGzC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAe,EAAE,GAAgC;IAC5E,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;aAClE,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAgC;IAC/F,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;aACzD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Uint8ArrayList } from 'uint8arraylist';
2
+ /**
3
+ * Hash and sign message with private key
4
+ */
5
+ export declare function hashAndSign(key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array;
6
+ /**
7
+ * Hash message and verify signature with public key
8
+ */
9
+ export declare function hashAndVerify(key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAmB1F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAkB1G"}
@@ -0,0 +1,47 @@
1
+ import crypto from 'node:crypto';
2
+ import { secp256k1 as secp } from '@noble/curves/secp256k1';
3
+ import { SigningError, VerificationError } from '../../errors.js';
4
+ /**
5
+ * Hash and sign message with private key
6
+ */
7
+ export function hashAndSign(key, msg) {
8
+ const hash = crypto.createHash('sha256');
9
+ if (msg instanceof Uint8Array) {
10
+ hash.update(msg);
11
+ }
12
+ else {
13
+ for (const buf of msg) {
14
+ hash.update(buf);
15
+ }
16
+ }
17
+ const digest = hash.digest();
18
+ try {
19
+ const signature = secp.sign(digest, key);
20
+ return signature.toDERRawBytes();
21
+ }
22
+ catch (err) {
23
+ throw new SigningError(String(err));
24
+ }
25
+ }
26
+ /**
27
+ * Hash message and verify signature with public key
28
+ */
29
+ export function hashAndVerify(key, sig, msg) {
30
+ const hash = crypto.createHash('sha256');
31
+ if (msg instanceof Uint8Array) {
32
+ hash.update(msg);
33
+ }
34
+ else {
35
+ for (const buf of msg) {
36
+ hash.update(buf);
37
+ }
38
+ }
39
+ const digest = hash.digest();
40
+ try {
41
+ return secp.verify(sig, digest, key);
42
+ }
43
+ catch (err) {
44
+ throw new VerificationError(String(err));
45
+ }
46
+ }
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/keys/secp256k1/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGjE;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAe,EAAE,GAAgC;IAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAE5B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACxC,OAAO,SAAS,CAAC,aAAa,EAAE,CAAA;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,GAAe,EAAE,GAAe,EAAE,GAAgC;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAE5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}