@noble/curves 2.0.0 → 2.2.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 (110) hide show
  1. package/README.md +214 -122
  2. package/abstract/bls.d.ts +299 -16
  3. package/abstract/bls.d.ts.map +1 -1
  4. package/abstract/bls.js +89 -24
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/curve.d.ts +274 -27
  7. package/abstract/curve.d.ts.map +1 -1
  8. package/abstract/curve.js +177 -23
  9. package/abstract/curve.js.map +1 -1
  10. package/abstract/edwards.d.ts +166 -30
  11. package/abstract/edwards.d.ts.map +1 -1
  12. package/abstract/edwards.js +221 -86
  13. package/abstract/edwards.js.map +1 -1
  14. package/abstract/fft.d.ts +327 -10
  15. package/abstract/fft.d.ts.map +1 -1
  16. package/abstract/fft.js +155 -12
  17. package/abstract/fft.js.map +1 -1
  18. package/abstract/frost.d.ts +293 -0
  19. package/abstract/frost.d.ts.map +1 -0
  20. package/abstract/frost.js +704 -0
  21. package/abstract/frost.js.map +1 -0
  22. package/abstract/hash-to-curve.d.ts +173 -24
  23. package/abstract/hash-to-curve.d.ts.map +1 -1
  24. package/abstract/hash-to-curve.js +170 -31
  25. package/abstract/hash-to-curve.js.map +1 -1
  26. package/abstract/modular.d.ts +429 -37
  27. package/abstract/modular.d.ts.map +1 -1
  28. package/abstract/modular.js +414 -119
  29. package/abstract/modular.js.map +1 -1
  30. package/abstract/montgomery.d.ts +83 -12
  31. package/abstract/montgomery.d.ts.map +1 -1
  32. package/abstract/montgomery.js +32 -7
  33. package/abstract/montgomery.js.map +1 -1
  34. package/abstract/oprf.d.ts +164 -91
  35. package/abstract/oprf.d.ts.map +1 -1
  36. package/abstract/oprf.js +88 -29
  37. package/abstract/oprf.js.map +1 -1
  38. package/abstract/poseidon.d.ts +138 -7
  39. package/abstract/poseidon.d.ts.map +1 -1
  40. package/abstract/poseidon.js +178 -15
  41. package/abstract/poseidon.js.map +1 -1
  42. package/abstract/tower.d.ts +122 -3
  43. package/abstract/tower.d.ts.map +1 -1
  44. package/abstract/tower.js +323 -139
  45. package/abstract/tower.js.map +1 -1
  46. package/abstract/weierstrass.d.ts +339 -76
  47. package/abstract/weierstrass.d.ts.map +1 -1
  48. package/abstract/weierstrass.js +395 -205
  49. package/abstract/weierstrass.js.map +1 -1
  50. package/bls12-381.d.ts +16 -2
  51. package/bls12-381.d.ts.map +1 -1
  52. package/bls12-381.js +199 -209
  53. package/bls12-381.js.map +1 -1
  54. package/bn254.d.ts +11 -2
  55. package/bn254.d.ts.map +1 -1
  56. package/bn254.js +93 -38
  57. package/bn254.js.map +1 -1
  58. package/ed25519.d.ts +135 -14
  59. package/ed25519.d.ts.map +1 -1
  60. package/ed25519.js +207 -41
  61. package/ed25519.js.map +1 -1
  62. package/ed448.d.ts +108 -14
  63. package/ed448.d.ts.map +1 -1
  64. package/ed448.js +194 -42
  65. package/ed448.js.map +1 -1
  66. package/index.js +7 -1
  67. package/index.js.map +1 -1
  68. package/misc.d.ts +106 -7
  69. package/misc.d.ts.map +1 -1
  70. package/misc.js +141 -32
  71. package/misc.js.map +1 -1
  72. package/nist.d.ts +112 -11
  73. package/nist.d.ts.map +1 -1
  74. package/nist.js +139 -17
  75. package/nist.js.map +1 -1
  76. package/package.json +34 -6
  77. package/secp256k1.d.ts +92 -15
  78. package/secp256k1.d.ts.map +1 -1
  79. package/secp256k1.js +211 -28
  80. package/secp256k1.js.map +1 -1
  81. package/src/abstract/bls.ts +356 -69
  82. package/src/abstract/curve.ts +327 -44
  83. package/src/abstract/edwards.ts +367 -143
  84. package/src/abstract/fft.ts +371 -36
  85. package/src/abstract/frost.ts +1092 -0
  86. package/src/abstract/hash-to-curve.ts +255 -56
  87. package/src/abstract/modular.ts +591 -144
  88. package/src/abstract/montgomery.ts +114 -30
  89. package/src/abstract/oprf.ts +383 -194
  90. package/src/abstract/poseidon.ts +235 -35
  91. package/src/abstract/tower.ts +428 -159
  92. package/src/abstract/weierstrass.ts +710 -312
  93. package/src/bls12-381.ts +239 -236
  94. package/src/bn254.ts +107 -46
  95. package/src/ed25519.ts +234 -56
  96. package/src/ed448.ts +227 -57
  97. package/src/index.ts +7 -1
  98. package/src/misc.ts +154 -35
  99. package/src/nist.ts +143 -20
  100. package/src/secp256k1.ts +284 -41
  101. package/src/utils.ts +583 -81
  102. package/src/webcrypto.ts +302 -73
  103. package/utils.d.ts +457 -24
  104. package/utils.d.ts.map +1 -1
  105. package/utils.js +410 -53
  106. package/utils.js.map +1 -1
  107. package/webcrypto.d.ts +167 -25
  108. package/webcrypto.d.ts.map +1 -1
  109. package/webcrypto.js +165 -58
  110. package/webcrypto.js.map +1 -1
package/webcrypto.d.ts CHANGED
@@ -15,7 +15,9 @@
15
15
  then throw a SyntaxError."
16
16
  - SPKI (Simple public-key infrastructure) is public-key-only
17
17
  - PKCS8 is secret-key-only
18
- - No way to get public key from secret key, but we convert to jwk and then create it manually, since jwk secret key is priv+pub.
18
+ - No way to get public key from secret key, but we convert to JWK and then
19
+ create it manually, since a JWK secret key includes both private and public
20
+ parts.
19
21
  - Noble supports generating keys for both sign, verify & getSharedSecret,
20
22
  but JWK key includes usage, which forces us to patch it (non-JWK is ok)
21
23
  - We have import/export for 'raw', but it doesn't work in Firefox / Safari
@@ -26,7 +28,9 @@
26
28
  but this is implementation specific and not much we can do there.
27
29
  - `getSharedSecret` differs for p256, p384, p521:
28
30
  Noble returns 33-byte output (y-parity + x coordinate),
29
- while in WebCrypto returns 32-byte output (x coordinate)
31
+ while in WebCrypto returns 32-byte output (x coordinate).
32
+ This is intentional: noble keeps the full encoded shared point, and x-only
33
+ callers can slice it down themselves.
30
34
  - `getSharedSecret` identical for X25519, X448
31
35
 
32
36
  ## Availability
@@ -37,17 +41,25 @@ There seems no reasonable way to check for availability, other than actually cal
37
41
  * @module
38
42
  */
39
43
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
44
+ import type { TArg, TRet } from './utils.ts';
40
45
  /** Raw type */
41
46
  declare const TYPE_RAW = "raw";
42
47
  declare const TYPE_JWK = "jwk";
43
48
  declare const TYPE_SPKI = "spki";
44
49
  declare const TYPE_PKCS = "pkcs8";
50
+ /** Key serialization formats supported by the WebCrypto wrappers. */
45
51
  export type WebCryptoFormat = typeof TYPE_RAW | typeof TYPE_JWK | typeof TYPE_SPKI | typeof TYPE_PKCS;
46
52
  /** WebCrypto keys can be in raw, jwk, pkcs8/spki formats. Raw is internal and fragile. */
47
53
  export type WebCryptoOpts = {
54
+ /** Preferred secret-key serialization format. */
48
55
  formatSec?: WebCryptoFormat;
56
+ /** Preferred public-key serialization format. */
49
57
  formatPub?: WebCryptoFormat;
50
58
  };
59
+ declare function hexToBytesLocal(hex: string): TRet<Uint8Array>;
60
+ export declare const __TEST: {
61
+ hexToBytesLocal: typeof hexToBytesLocal;
62
+ };
51
63
  type JsonWebKey = {
52
64
  crv?: string;
53
65
  d?: string;
@@ -60,40 +72,170 @@ type Key = JsonWebKey | Uint8Array;
60
72
  type WebCryptoBaseCurve = {
61
73
  name: string;
62
74
  isSupported(): Promise<boolean>;
63
- keygen(): Promise<{
75
+ keygen(): TRet<Promise<{
64
76
  secretKey: Uint8Array;
65
77
  publicKey: Uint8Array;
66
- }>;
67
- getPublicKey(secretKey: Key, opts?: WebCryptoOpts): Promise<Key>;
78
+ }>>;
79
+ getPublicKey(secretKey: TArg<Key>, opts?: TArg<WebCryptoOpts>): TRet<Promise<Key>>;
68
80
  utils: {
69
- randomSecretKey: (format?: WebCryptoFormat) => Promise<Key>;
70
- convertSecretKey: (key: Key, inFormat?: WebCryptoFormat, outFormat?: WebCryptoFormat) => Promise<Key>;
71
- convertPublicKey: (key: Key, inFormat?: WebCryptoFormat, outFormat?: WebCryptoFormat) => Promise<Key>;
81
+ randomSecretKey: (format?: WebCryptoFormat) => TRet<Promise<Key>>;
82
+ convertSecretKey: (key: TArg<Key>, inFormat?: WebCryptoFormat, outFormat?: WebCryptoFormat) => TRet<Promise<Key>>;
83
+ convertPublicKey: (key: TArg<Key>, inFormat?: WebCryptoFormat, outFormat?: WebCryptoFormat) => TRet<Promise<Key>>;
72
84
  };
73
85
  };
86
+ /** WebCrypto signing interface shared by ECDSA and EdDSA helpers. */
74
87
  export type WebCryptoSigner = {
75
- sign(message: Uint8Array, secretKey: Key, opts?: WebCryptoOpts): Promise<Uint8Array>;
76
- verify(signature: Uint8Array, message: Uint8Array, publicKey: Key, opts?: WebCryptoOpts): Promise<boolean>;
88
+ /**
89
+ * Sign one message with a WebCrypto-backed private key.
90
+ * @param message - Message bytes to sign.
91
+ * @param secretKey - Secret key in one supported format.
92
+ * @param opts - Optional key-format overrides. See {@link WebCryptoOpts}.
93
+ * @returns Signature bytes.
94
+ */
95
+ sign(message: TArg<Uint8Array>, secretKey: TArg<Key>, opts?: TArg<WebCryptoOpts>): TRet<Promise<Uint8Array>>;
96
+ /**
97
+ * Verify one signature with a WebCrypto-backed public key.
98
+ * @param signature - Signature bytes.
99
+ * @param message - Signed message bytes.
100
+ * @param publicKey - Public key in one supported format.
101
+ * @param opts - Optional key-format overrides. See {@link WebCryptoOpts}.
102
+ * @returns `true` when the signature is valid.
103
+ */
104
+ verify(signature: TArg<Uint8Array>, message: TArg<Uint8Array>, publicKey: TArg<Key>, opts?: TArg<WebCryptoOpts>): Promise<boolean>;
77
105
  };
106
+ /** WebCrypto ECDH interface for shared-secret derivation. */
78
107
  export type WebCryptoECDH = {
79
- getSharedSecret(secA: Uint8Array, pubB: Uint8Array, opts?: WebCryptoOpts): Promise<Uint8Array>;
108
+ /**
109
+ * Derive one shared secret from a local secret key and peer public key.
110
+ * Short-Weierstrass wrappers return the raw x-coordinate here, not noble's parity-prefixed
111
+ * shared-point encoding. Runtime also accepts alternate key formats through `opts`, even though
112
+ * this public type is still narrowed to byte arrays.
113
+ * @param secA - Local secret key in one supported format.
114
+ * @param pubB - Peer public key in one supported format.
115
+ * @param opts - Optional key-format overrides. See {@link WebCryptoOpts}.
116
+ * @returns Shared secret bytes.
117
+ */
118
+ getSharedSecret(secA: TArg<Uint8Array>, pubB: TArg<Uint8Array>, opts?: TArg<WebCryptoOpts>): TRet<Promise<Uint8Array>>;
80
119
  };
120
+ /** WebCrypto ECDSA interface with keygen, signing, and ECDH helpers. */
81
121
  export type WebCryptoECDSA = WebCryptoBaseCurve & WebCryptoSigner & WebCryptoECDH;
122
+ /** WebCrypto EdDSA interface with keygen and signing helpers. */
82
123
  export type WebCryptoEdDSA = WebCryptoBaseCurve & WebCryptoSigner;
124
+ /** WebCrypto Montgomery interface with keygen and ECDH helpers. */
83
125
  export type WebCryptoMontgomery = WebCryptoBaseCurve & WebCryptoECDH;
84
- /** Friendly wrapper over built-in WebCrypto NIST P-256 (secp256r1). */
85
- export declare const p256: WebCryptoECDSA;
86
- /** Friendly wrapper over built-in WebCrypto NIST P-384 (secp384r1). */
87
- export declare const p384: WebCryptoECDSA;
88
- /** Friendly wrapper over built-in WebCrypto NIST P-521 (secp521r1). */
89
- export declare const p521: WebCryptoECDSA;
90
- /** Friendly wrapper over built-in WebCrypto ed25519. */
91
- export declare const ed25519: WebCryptoEdDSA;
92
- /** Friendly wrapper over built-in WebCrypto ed448. */
93
- export declare const ed448: WebCryptoEdDSA;
94
- /** Friendly wrapper over built-in WebCrypto x25519 (ECDH over Curve25519). */
95
- export declare const x25519: WebCryptoMontgomery;
96
- /** Friendly wrapper over built-in WebCrypto x448 (ECDH over Curve448). */
97
- export declare const x448: WebCryptoMontgomery;
126
+ /**
127
+ * Friendly wrapper over built-in WebCrypto NIST P-256 (secp256r1).
128
+ * Inherits the generic WebCrypto ECDSA caveats: `isSupported()` only probes the sign-side API, and
129
+ * the conversion/signing helpers keep the shared `createKeyUtils(...)` / `createSigner(...)` quirks,
130
+ * including raw WebCrypto ECDSA signatures without low-S normalization.
131
+ * @example
132
+ * Check support, then sign and verify once with WebCrypto P-256.
133
+ *
134
+ * ```ts
135
+ * if (await p256.isSupported()) {
136
+ * const { secretKey, publicKey } = await p256.keygen();
137
+ * const msg = new TextEncoder().encode('hello noble');
138
+ * const sig = await p256.sign(msg, secretKey);
139
+ * const isValid = await p256.verify(sig, msg, publicKey);
140
+ * }
141
+ * ```
142
+ */
143
+ export declare const p256: TRet<WebCryptoECDSA>;
144
+ /**
145
+ * Friendly wrapper over built-in WebCrypto NIST P-384 (secp384r1).
146
+ * Inherits the generic WebCrypto ECDSA caveats around support probing and key/signing conversion.
147
+ * @example
148
+ * Check support, then sign and verify once with WebCrypto P-384.
149
+ *
150
+ * ```ts
151
+ * if (await p384.isSupported()) {
152
+ * const { secretKey, publicKey } = await p384.keygen();
153
+ * const msg = new TextEncoder().encode('hello noble');
154
+ * const sig = await p384.sign(msg, secretKey);
155
+ * const isValid = await p384.verify(sig, msg, publicKey);
156
+ * }
157
+ * ```
158
+ */
159
+ export declare const p384: TRet<WebCryptoECDSA>;
160
+ /**
161
+ * Friendly wrapper over built-in WebCrypto NIST P-521 (secp521r1).
162
+ * Inherits the generic WebCrypto ECDSA caveats around support probing and key/signing conversion.
163
+ * @example
164
+ * Check support, then sign and verify once with WebCrypto P-521.
165
+ *
166
+ * ```ts
167
+ * if (await p521.isSupported()) {
168
+ * const { secretKey, publicKey } = await p521.keygen();
169
+ * const msg = new TextEncoder().encode('hello noble');
170
+ * const sig = await p521.sign(msg, secretKey);
171
+ * const isValid = await p521.verify(sig, msg, publicKey);
172
+ * }
173
+ * ```
174
+ */
175
+ export declare const p521: TRet<WebCryptoECDSA>;
176
+ /**
177
+ * Friendly wrapper over built-in WebCrypto ed25519.
178
+ * Inherits the generic WebCrypto EdDSA caveats around JWK conversion metadata and extractability.
179
+ * @example
180
+ * Check support, then sign and verify once with WebCrypto Ed25519.
181
+ *
182
+ * ```ts
183
+ * if (await ed25519.isSupported()) {
184
+ * const { secretKey, publicKey } = await ed25519.keygen();
185
+ * const msg = new TextEncoder().encode('hello noble');
186
+ * const sig = await ed25519.sign(msg, secretKey);
187
+ * const isValid = await ed25519.verify(sig, msg, publicKey);
188
+ * }
189
+ * ```
190
+ */
191
+ export declare const ed25519: TRet<WebCryptoEdDSA>;
192
+ /**
193
+ * Friendly wrapper over built-in WebCrypto ed448.
194
+ * Inherits the generic WebCrypto EdDSA caveats around JWK conversion metadata and extractability.
195
+ * @example
196
+ * Check support, then sign and verify once with WebCrypto Ed448.
197
+ *
198
+ * ```ts
199
+ * if (await ed448.isSupported()) {
200
+ * const { secretKey, publicKey } = await ed448.keygen();
201
+ * const msg = new TextEncoder().encode('hello noble');
202
+ * const sig = await ed448.sign(msg, secretKey);
203
+ * const isValid = await ed448.verify(sig, msg, publicKey);
204
+ * }
205
+ * ```
206
+ */
207
+ export declare const ed448: TRet<WebCryptoEdDSA>;
208
+ /**
209
+ * Friendly wrapper over built-in WebCrypto x25519 (ECDH over Curve25519).
210
+ * Inherits the generic WebCrypto Montgomery caveat that runtime accepts more key formats than the
211
+ * narrow public `Uint8Array` argument types suggest.
212
+ * @example
213
+ * Check support, then derive one shared secret with WebCrypto X25519.
214
+ *
215
+ * ```ts
216
+ * if (await x25519.isSupported()) {
217
+ * const alice = await x25519.keygen();
218
+ * const bob = await x25519.keygen();
219
+ * const shared = await x25519.getSharedSecret(alice.secretKey, bob.publicKey);
220
+ * }
221
+ * ```
222
+ */
223
+ export declare const x25519: TRet<WebCryptoMontgomery>;
224
+ /**
225
+ * Friendly wrapper over built-in WebCrypto x448 (ECDH over Curve448).
226
+ * Inherits the generic WebCrypto Montgomery caveat that runtime accepts more key formats than the
227
+ * narrow public `Uint8Array` argument types suggest.
228
+ * @example
229
+ * Check support, then derive one shared secret with WebCrypto X448.
230
+ *
231
+ * ```ts
232
+ * if (await x448.isSupported()) {
233
+ * const alice = await x448.keygen();
234
+ * const bob = await x448.keygen();
235
+ * const shared = await x448.getSharedSecret(alice.secretKey, bob.publicKey);
236
+ * }
237
+ * ```
238
+ */
239
+ export declare const x448: TRet<WebCryptoMontgomery>;
98
240
  export {};
99
241
  //# sourceMappingURL=webcrypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"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"}
package/webcrypto.js CHANGED
@@ -1,42 +1,3 @@
1
- /**
2
- * Friendly wrapper over elliptic curves from built-in WebCrypto. Experimental: API may change.
3
-
4
- # WebCrypto issues
5
-
6
- ## No way to get public keys
7
-
8
- - Export of raw secret key is prohibited by spec:
9
- - https://w3c.github.io/webcrypto/#ecdsa-operations-export-key
10
- -> "If format is "raw":" -> "If the [[type]] internal slot of key is not "public",
11
- then throw an InvalidAccessError."
12
- - Import of raw secret keys is prohibited by spec:
13
- - https://w3c.github.io/webcrypto/#ecdsa-operations-import-key
14
- -> "If format is "raw":" -> "If usages contains a value which is not "verify"
15
- then throw a SyntaxError."
16
- - SPKI (Simple public-key infrastructure) is public-key-only
17
- - PKCS8 is secret-key-only
18
- - No way to get public key from secret key, but we convert to jwk and then create it manually, since jwk secret key is priv+pub.
19
- - Noble supports generating keys for both sign, verify & getSharedSecret,
20
- but JWK key includes usage, which forces us to patch it (non-JWK is ok)
21
- - We have import/export for 'raw', but it doesn't work in Firefox / Safari
22
-
23
- ## Point encoding
24
-
25
- - Raw export of public points returns uncompressed points,
26
- but this is implementation specific and not much we can do there.
27
- - `getSharedSecret` differs for p256, p384, p521:
28
- Noble returns 33-byte output (y-parity + x coordinate),
29
- while in WebCrypto returns 32-byte output (x coordinate)
30
- - `getSharedSecret` identical for X25519, X448
31
-
32
- ## Availability
33
-
34
- Node.js additionally supports ed448.
35
- There seems no reasonable way to check for availability, other than actually calling methods.
36
-
37
- * @module
38
- */
39
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
40
1
  /** Raw type */
41
2
  const TYPE_RAW = 'raw';
42
3
  const TYPE_JWK = 'jwk';
@@ -52,15 +13,26 @@ function getSubtle() {
52
13
  throw new Error('crypto.subtle must be defined');
53
14
  }
54
15
  function createKeygenA(randomSecretKey, getPublicKey) {
16
+ // Runtime accepts an accidental `keygen(seed)` argument for parity with other wrappers, but the
17
+ // seed is intentionally ignored because WebCrypto keygen here always goes through fresh keygen.
55
18
  return async function keygenA(_seed) {
56
- const secretKey = await randomSecretKey();
57
- return { secretKey, publicKey: await getPublicKey(secretKey) };
19
+ const secretKey = (await randomSecretKey());
20
+ return { secretKey, publicKey: (await getPublicKey(secretKey)) };
58
21
  };
59
22
  }
60
- function hexToBytesUns(hex) {
61
- return Uint8Array.from(hex.match(/(\w\w)/g), (b) => Number.parseInt(b, 16));
23
+ // Internal helper only: strict hex parser for the local hardcoded PKCS8 header constants.
24
+ function hexToBytesLocal(hex) {
25
+ const pairs = hex.match(/[0-9a-f]{2}/gi);
26
+ if (!pairs || pairs.length * 2 !== hex.length)
27
+ throw new Error('invalid hex');
28
+ return Uint8Array.from(pairs, (b) => Number.parseInt(b, 16));
62
29
  }
30
+ export const __TEST = /* @__PURE__ */ Object.freeze({
31
+ hexToBytesLocal,
32
+ });
63
33
  function assertType(type, key) {
34
+ // Callers are expected to pass a non-null key-like object; `null` / `undefined` still fail first
35
+ // via property access before reaching the explicit wrapper error.
64
36
  if (key.type !== type)
65
37
  throw new Error(`invalid key type, expected ${type}`);
66
38
  }
@@ -68,9 +40,13 @@ function createKeyUtils(algo, derive, keyLen, pkcs8header) {
68
40
  const secUsage = derive ? ['deriveBits'] : ['sign'];
69
41
  const pubUsage = derive ? [] : ['verify'];
70
42
  // Return Uint8Array instead of ArrayBuffer
71
- const arrBufToU8 = (res, format) => format === TYPE_JWK ? res : new Uint8Array(res);
43
+ const arrBufToU8 = (res, format) => (format === TYPE_JWK
44
+ ? res
45
+ : new Uint8Array(res));
72
46
  const pub = {
73
47
  async import(key, format) {
48
+ // For sign/verify wrappers we pass caller-provided JWK metadata through unchanged and let
49
+ // WebCrypto enforce mismatched `key_ops` / extractability instead of normalizing it here.
74
50
  const keyi = await getSubtle().importKey(format, key, algo, true, pubUsage);
75
51
  assertType('public', keyi);
76
52
  return keyi;
@@ -93,14 +69,17 @@ function createKeyUtils(algo, derive, keyLen, pkcs8header) {
93
69
  // Safari, Firefox: Data provided to an operation does not meet requirements
94
70
  // This is the best one can do. JWK can't be used: it contains public key component inside.
95
71
  const k = key;
96
- const head = hexToBytesUns(pkcs8header);
72
+ const head = hexToBytesLocal(pkcs8header);
97
73
  const all = new Uint8Array(head.length + k.length);
98
74
  all.set(head, 0);
99
75
  all.set(k, head.length);
100
76
  keyi = await crypto.importKey(TYPE_PKCS, all, algo, true, secUsage);
101
77
  }
102
78
  else {
103
- // Fix import of ECDSA keys into ECDH, other formats are ok
79
+ // Sign/verify wrappers keep caller JWK metadata as-is and assume the supplied `key_ops`
80
+ // already match the requested operation. ECDH is different: noble treats the same key
81
+ // material as usable for both sign and derive, so JWK imported through the derive path
82
+ // must rewrite `key_ops` or WebCrypto refuses otherwise-correct keys exported by keygen.
104
83
  if (derive && format === TYPE_JWK)
105
84
  key = { ...key, key_ops: secUsage };
106
85
  keyi = await crypto.importKey(format, key, algo, true, secUsage);
@@ -172,15 +151,23 @@ function createKeyUtils(algo, derive, keyLen, pkcs8header) {
172
151
  },
173
152
  getPublicKey,
174
153
  keygen: createKeygenA(randomSecretKey, getPublicKey),
175
- utils: {
154
+ utils: Object.freeze({
176
155
  randomSecretKey,
156
+ // Runtime expects both formats explicitly here; omitted formats just flow into
157
+ // `subtle.importKey(...)`, and JWK conversion also assumes extractable keys (`ext !== false`).
177
158
  convertPublicKey: pub.convert,
159
+ // Runtime expects both formats explicitly here; omitted formats just flow into
160
+ // `subtle.importKey(...)`, and JWK conversion also assumes extractable keys (`ext !== false`).
178
161
  convertSecretKey: priv.convert,
179
- },
162
+ }),
180
163
  };
181
164
  }
182
165
  function createSigner(keys, algo) {
183
166
  return {
167
+ // Historical param name: wrappers pass message bytes here, while WebCrypto performs the
168
+ // algorithm-specific hashing itself for ECDSA. We also return provider signatures verbatim:
169
+ // this wrapper is intentionally "raw WebCrypto", so it does not parse scalars or normalize
170
+ // high-S ECDSA outputs into software noble's low-S convention.
184
171
  async sign(msgHash, secretKey, opts = {}) {
185
172
  const key = await keys.priv.import(secretKey, opts.formatSec ?? dfsec);
186
173
  const sig = await getSubtle().sign(algo, key, msgHash);
@@ -194,10 +181,12 @@ function createSigner(keys, algo) {
194
181
  }
195
182
  function createECDH(keys, algo, keyLen) {
196
183
  return {
184
+ // Runtime accepts the alternate key formats supported by `keys.import(...)`; the public type is
185
+ // still narrower than that accepted surface.
197
186
  async getSharedSecret(secretKeyA, publicKeyB, opts = {}) {
198
187
  // if (_isCompressed !== true) throw new Error('WebCrypto only supports compressed keys');
199
- const secKey = await keys.priv.import(secretKeyA, opts.formatSec || dfsec);
200
- const pubKey = await keys.pub.import(publicKeyB, opts.formatPub || dfpub);
188
+ const secKey = await keys.priv.import(secretKeyA, opts.formatSec === undefined ? dfsec : opts.formatSec);
189
+ const pubKey = await keys.pub.import(publicKeyB, opts.formatPub === undefined ? dfpub : opts.formatPub);
201
190
  const shared = await getSubtle().deriveBits({ name: typeof algo === 'string' ? algo : algo.name, public: pubKey }, secKey, 8 * keyLen);
202
191
  return new Uint8Array(shared);
203
192
  },
@@ -209,12 +198,26 @@ function wrapECDSA(curve, hash, keyLen, pkcs8header) {
209
198
  const keysEcdh = createKeyUtils(ECDH_ALGO, true, keyLen, pkcs8header);
210
199
  return Object.freeze({
211
200
  name: curve,
201
+ // Support probing comes from the sign-side wrapper only; ECDH availability is not checked
202
+ // independently here even though the public wrapper also exposes `getSharedSecret(...)`.
212
203
  isSupported: keys.isSupported,
213
204
  getPublicKey: keys.getPublicKey,
214
205
  keygen: createKeygenA(keys.utils.randomSecretKey, keys.getPublicKey),
215
206
  ...createSigner(keys, { name: 'ECDSA', hash: { name: hash } }),
216
207
  ...createECDH(keysEcdh, ECDH_ALGO, keyLen),
217
- utils: keys.utils,
208
+ utils: Object.freeze({
209
+ ...keys.utils,
210
+ async convertSecretKey(key, inFormat, outFormat) {
211
+ const jwk = inFormat === TYPE_JWK ? key : undefined;
212
+ // `wrapECDSA(...)` exposes the same key material for both sign and derive, so an ECDH-flavored
213
+ // JWK secret key from `getSharedSecret(...)` should still round-trip through `utils`.
214
+ if (Array.isArray(jwk?.key_ops) &&
215
+ jwk.key_ops.length === 1 &&
216
+ jwk.key_ops[0] === 'deriveBits')
217
+ return keysEcdh.utils.convertSecretKey(key, inFormat, outFormat);
218
+ return keys.utils.convertSecretKey(key, inFormat, outFormat);
219
+ },
220
+ }),
218
221
  });
219
222
  }
220
223
  function wrapEdDSA(curve, keyLen, pkcs8header) {
@@ -222,6 +225,8 @@ function wrapEdDSA(curve, keyLen, pkcs8header) {
222
225
  return Object.freeze({
223
226
  name: curve,
224
227
  isSupported: keys.isSupported,
228
+ // This wrapper intentionally re-exports the generic WebCrypto key-conversion/signing behavior
229
+ // without adding extra JWK-metadata or extractability guardrails of its own.
225
230
  getPublicKey: keys.getPublicKey,
226
231
  keygen: createKeygenA(keys.utils.randomSecretKey, keys.getPublicKey),
227
232
  ...createSigner(keys, { name: curve }),
@@ -233,24 +238,126 @@ function wrapMontgomery(curve, keyLen, pkcs8header) {
233
238
  return Object.freeze({
234
239
  name: curve,
235
240
  isSupported: keys.isSupported,
241
+ // This wrapper intentionally re-exports the generic ECDH key-format behavior without widening
242
+ // the narrow public `Uint8Array` key types.
236
243
  getPublicKey: keys.getPublicKey,
237
244
  keygen: createKeygenA(keys.utils.randomSecretKey, keys.getPublicKey),
238
245
  ...createECDH(keys, curve, keyLen),
239
246
  utils: keys.utils,
240
247
  });
241
248
  }
242
- /** Friendly wrapper over built-in WebCrypto NIST P-256 (secp256r1). */
249
+ /**
250
+ * Friendly wrapper over built-in WebCrypto NIST P-256 (secp256r1).
251
+ * Inherits the generic WebCrypto ECDSA caveats: `isSupported()` only probes the sign-side API, and
252
+ * the conversion/signing helpers keep the shared `createKeyUtils(...)` / `createSigner(...)` quirks,
253
+ * including raw WebCrypto ECDSA signatures without low-S normalization.
254
+ * @example
255
+ * Check support, then sign and verify once with WebCrypto P-256.
256
+ *
257
+ * ```ts
258
+ * if (await p256.isSupported()) {
259
+ * const { secretKey, publicKey } = await p256.keygen();
260
+ * const msg = new TextEncoder().encode('hello noble');
261
+ * const sig = await p256.sign(msg, secretKey);
262
+ * const isValid = await p256.verify(sig, msg, publicKey);
263
+ * }
264
+ * ```
265
+ */
243
266
  export const p256 = /* @__PURE__ */ wrapECDSA('P-256', 'SHA-256', 32, '3041020100301306072a8648ce3d020106082a8648ce3d030107042730250201010420');
244
- /** Friendly wrapper over built-in WebCrypto NIST P-384 (secp384r1). */
267
+ /**
268
+ * Friendly wrapper over built-in WebCrypto NIST P-384 (secp384r1).
269
+ * Inherits the generic WebCrypto ECDSA caveats around support probing and key/signing conversion.
270
+ * @example
271
+ * Check support, then sign and verify once with WebCrypto P-384.
272
+ *
273
+ * ```ts
274
+ * if (await p384.isSupported()) {
275
+ * const { secretKey, publicKey } = await p384.keygen();
276
+ * const msg = new TextEncoder().encode('hello noble');
277
+ * const sig = await p384.sign(msg, secretKey);
278
+ * const isValid = await p384.verify(sig, msg, publicKey);
279
+ * }
280
+ * ```
281
+ */
245
282
  export const p384 = /* @__PURE__ */ wrapECDSA('P-384', 'SHA-384', 48, '304e020100301006072a8648ce3d020106052b81040022043730350201010430');
246
- /** Friendly wrapper over built-in WebCrypto NIST P-521 (secp521r1). */
283
+ /**
284
+ * Friendly wrapper over built-in WebCrypto NIST P-521 (secp521r1).
285
+ * Inherits the generic WebCrypto ECDSA caveats around support probing and key/signing conversion.
286
+ * @example
287
+ * Check support, then sign and verify once with WebCrypto P-521.
288
+ *
289
+ * ```ts
290
+ * if (await p521.isSupported()) {
291
+ * const { secretKey, publicKey } = await p521.keygen();
292
+ * const msg = new TextEncoder().encode('hello noble');
293
+ * const sig = await p521.sign(msg, secretKey);
294
+ * const isValid = await p521.verify(sig, msg, publicKey);
295
+ * }
296
+ * ```
297
+ */
247
298
  export const p521 = /* @__PURE__ */ wrapECDSA('P-521', 'SHA-512', 66, '3060020100301006072a8648ce3d020106052b81040023044930470201010442');
248
- /** Friendly wrapper over built-in WebCrypto ed25519. */
299
+ /**
300
+ * Friendly wrapper over built-in WebCrypto ed25519.
301
+ * Inherits the generic WebCrypto EdDSA caveats around JWK conversion metadata and extractability.
302
+ * @example
303
+ * Check support, then sign and verify once with WebCrypto Ed25519.
304
+ *
305
+ * ```ts
306
+ * if (await ed25519.isSupported()) {
307
+ * const { secretKey, publicKey } = await ed25519.keygen();
308
+ * const msg = new TextEncoder().encode('hello noble');
309
+ * const sig = await ed25519.sign(msg, secretKey);
310
+ * const isValid = await ed25519.verify(sig, msg, publicKey);
311
+ * }
312
+ * ```
313
+ */
249
314
  export const ed25519 = /* @__PURE__ */ wrapEdDSA('Ed25519', 32, '302e020100300506032b657004220420');
250
- /** Friendly wrapper over built-in WebCrypto ed448. */
315
+ /**
316
+ * Friendly wrapper over built-in WebCrypto ed448.
317
+ * Inherits the generic WebCrypto EdDSA caveats around JWK conversion metadata and extractability.
318
+ * @example
319
+ * Check support, then sign and verify once with WebCrypto Ed448.
320
+ *
321
+ * ```ts
322
+ * if (await ed448.isSupported()) {
323
+ * const { secretKey, publicKey } = await ed448.keygen();
324
+ * const msg = new TextEncoder().encode('hello noble');
325
+ * const sig = await ed448.sign(msg, secretKey);
326
+ * const isValid = await ed448.verify(sig, msg, publicKey);
327
+ * }
328
+ * ```
329
+ */
251
330
  export const ed448 = /* @__PURE__ */ wrapEdDSA('Ed448', 57, '3047020100300506032b6571043b0439');
252
- /** Friendly wrapper over built-in WebCrypto x25519 (ECDH over Curve25519). */
331
+ /**
332
+ * Friendly wrapper over built-in WebCrypto x25519 (ECDH over Curve25519).
333
+ * Inherits the generic WebCrypto Montgomery caveat that runtime accepts more key formats than the
334
+ * narrow public `Uint8Array` argument types suggest.
335
+ * @example
336
+ * Check support, then derive one shared secret with WebCrypto X25519.
337
+ *
338
+ * ```ts
339
+ * if (await x25519.isSupported()) {
340
+ * const alice = await x25519.keygen();
341
+ * const bob = await x25519.keygen();
342
+ * const shared = await x25519.getSharedSecret(alice.secretKey, bob.publicKey);
343
+ * }
344
+ * ```
345
+ */
253
346
  export const x25519 = /* @__PURE__ */ wrapMontgomery('X25519', 32, '302e020100300506032b656e04220420');
254
- /** Friendly wrapper over built-in WebCrypto x448 (ECDH over Curve448). */
347
+ /**
348
+ * Friendly wrapper over built-in WebCrypto x448 (ECDH over Curve448).
349
+ * Inherits the generic WebCrypto Montgomery caveat that runtime accepts more key formats than the
350
+ * narrow public `Uint8Array` argument types suggest.
351
+ * @example
352
+ * Check support, then derive one shared secret with WebCrypto X448.
353
+ *
354
+ * ```ts
355
+ * if (await x448.isSupported()) {
356
+ * const alice = await x448.keygen();
357
+ * const bob = await x448.keygen();
358
+ * const shared = await x448.getSharedSecret(alice.secretKey, bob.publicKey);
359
+ * }
360
+ * ```
361
+ */
255
362
  export const x448 = /* @__PURE__ */ wrapMontgomery('X448', 56, '3046020100300506032b656f043a0438');
256
363
  //# sourceMappingURL=webcrypto.js.map
package/webcrypto.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"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"}