@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.
- package/README.md +214 -122
- package/abstract/bls.d.ts +299 -16
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/bls.js +89 -24
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.d.ts +274 -27
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +177 -23
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +166 -30
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +221 -86
- package/abstract/edwards.js.map +1 -1
- package/abstract/fft.d.ts +327 -10
- package/abstract/fft.d.ts.map +1 -1
- package/abstract/fft.js +155 -12
- package/abstract/fft.js.map +1 -1
- package/abstract/frost.d.ts +293 -0
- package/abstract/frost.d.ts.map +1 -0
- package/abstract/frost.js +704 -0
- package/abstract/frost.js.map +1 -0
- package/abstract/hash-to-curve.d.ts +173 -24
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +170 -31
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts +429 -37
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +414 -119
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +83 -12
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +32 -7
- package/abstract/montgomery.js.map +1 -1
- package/abstract/oprf.d.ts +164 -91
- package/abstract/oprf.d.ts.map +1 -1
- package/abstract/oprf.js +88 -29
- package/abstract/oprf.js.map +1 -1
- package/abstract/poseidon.d.ts +138 -7
- package/abstract/poseidon.d.ts.map +1 -1
- package/abstract/poseidon.js +178 -15
- package/abstract/poseidon.js.map +1 -1
- package/abstract/tower.d.ts +122 -3
- package/abstract/tower.d.ts.map +1 -1
- package/abstract/tower.js +323 -139
- package/abstract/tower.js.map +1 -1
- package/abstract/weierstrass.d.ts +339 -76
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +395 -205
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts +16 -2
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +199 -209
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +11 -2
- package/bn254.d.ts.map +1 -1
- package/bn254.js +93 -38
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +135 -14
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +207 -41
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +108 -14
- package/ed448.d.ts.map +1 -1
- package/ed448.js +194 -42
- package/ed448.js.map +1 -1
- package/index.js +7 -1
- package/index.js.map +1 -1
- package/misc.d.ts +106 -7
- package/misc.d.ts.map +1 -1
- package/misc.js +141 -32
- package/misc.js.map +1 -1
- package/nist.d.ts +112 -11
- package/nist.d.ts.map +1 -1
- package/nist.js +139 -17
- package/nist.js.map +1 -1
- package/package.json +34 -6
- package/secp256k1.d.ts +92 -15
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +211 -28
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +356 -69
- package/src/abstract/curve.ts +327 -44
- package/src/abstract/edwards.ts +367 -143
- package/src/abstract/fft.ts +371 -36
- package/src/abstract/frost.ts +1092 -0
- package/src/abstract/hash-to-curve.ts +255 -56
- package/src/abstract/modular.ts +591 -144
- package/src/abstract/montgomery.ts +114 -30
- package/src/abstract/oprf.ts +383 -194
- package/src/abstract/poseidon.ts +235 -35
- package/src/abstract/tower.ts +428 -159
- package/src/abstract/weierstrass.ts +710 -312
- package/src/bls12-381.ts +239 -236
- package/src/bn254.ts +107 -46
- package/src/ed25519.ts +234 -56
- package/src/ed448.ts +227 -57
- package/src/index.ts +7 -1
- package/src/misc.ts +154 -35
- package/src/nist.ts +143 -20
- package/src/secp256k1.ts +284 -41
- package/src/utils.ts +583 -81
- package/src/webcrypto.ts +302 -73
- package/utils.d.ts +457 -24
- package/utils.d.ts.map +1 -1
- package/utils.js +410 -53
- package/utils.js.map +1 -1
- package/webcrypto.d.ts +167 -25
- package/webcrypto.d.ts.map +1 -1
- package/webcrypto.js +165 -58
- 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
|
|
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
|
|
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
|
|
71
|
-
convertPublicKey: (key: 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
|
-
|
|
76
|
-
|
|
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
|
-
|
|
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
|
-
/**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
package/webcrypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,sEAAsE;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAe;AACf,QAAA,MAAM,QAAQ,QAAQ,CAAC;AACvB,QAAA,MAAM,QAAQ,QAAQ,CAAC;AACvB,QAAA,MAAM,SAAS,SAAS,CAAC;AACzB,QAAA,MAAM,SAAS,UAAU,CAAC;AAC1B,qEAAqE;AACrE,MAAM,MAAM,eAAe,GACvB,OAAO,QAAQ,GACf,OAAO,QAAQ,GACf,OAAO,SAAS,GAChB,OAAO,SAAS,CAAC;AACrB,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG;IAC1B,iDAAiD;IACjD,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,iDAAiD;IACjD,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAwBF,iBAAS,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAItD;AAED,eAAO,MAAM,MAAM,EAAE;IAAE,eAAe,EAAE,OAAO,eAAe,CAAA;CAE5D,CAAC;AAGH,KAAK,UAAU,GAAG;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AACF,KAAK,GAAG,GAAG,UAAU,GAAG,UAAU,CAAC;AAiOnC,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC,CAAC;IAC1E,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,KAAK,EAAE;QACL,eAAe,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,gBAAgB,EAAE,CAChB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EACd,QAAQ,CAAC,EAAE,eAAe,EAC1B,SAAS,CAAC,EAAE,eAAe,KACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,gBAAgB,EAAE,CAChB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EACd,QAAQ,CAAC,EAAE,eAAe,EAC1B,SAAS,CAAC,EAAE,eAAe,KACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;KACzB,CAAC;CACH,CAAC;AAGF,qEAAqE;AACrE,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;OAMG;IACH,IAAI,CACF,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EACzB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EACpB,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GACzB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7B;;;;;;;OAOG;IACH,MAAM,CACJ,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,EAC3B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EACzB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EACpB,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GACzB,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB,CAAC;AACF,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;;;;;OASG;IACH,eAAe,CACb,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EACtB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EACtB,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GACzB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;CAC9B,CAAC;AACF,wEAAwE;AACxE,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,eAAe,GAAG,aAAa,CAAC;AAClF,iEAAiE;AACjE,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAClE,mEAAmE;AACnE,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,aAAa,CAAC;AA8ErE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,cAAc,CAKrC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,cAAc,CAKrC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,cAAc,CAKrC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,EAAE,IAAI,CAAC,cAAc,CAIxC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,cAAc,CAItC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAI5C,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAI1C,CAAC"}
|
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
|
-
|
|
61
|
-
|
|
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
|
|
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 =
|
|
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
|
-
//
|
|
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
|
|
200
|
-
const pubKey = await keys.pub.import(publicKeyB, opts.formatPub
|
|
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:
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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":"AA6CA,eAAe;AACf,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,SAAS,GAAG,MAAM,CAAC;AACzB,MAAM,SAAS,GAAG,OAAO,CAAC;AAc1B,kBAAkB;AAClB,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,SAAS,SAAS;IAChB,MAAM,CAAC,GAAQ,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;IAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CACpB,eAAoB,EACpB,YAAiB;IAEjB,gGAAgG;IAChG,gGAAgG;IAChG,OAAO,KAAK,UAAU,OAAO,CAAC,KAAwB;QACpD,MAAM,SAAS,GAAG,CAAC,MAAM,eAAe,EAAE,CAAqB,CAAC;QAChE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAqB,EAAE,CAAC;IACvF,CAAC,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9E,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAqB,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAgD,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/F,eAAe;CAChB,CAAC,CAAC;AA2BH,SAAS,UAAU,CAAC,IAA0B,EAAE,GAAQ;IACtD,iGAAiG;IACjG,kEAAkE;IAClE,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,cAAc,CAAC,IAAU,EAAE,MAAe,EAAE,MAAc,EAAE,WAAmB;IACtF,MAAM,QAAQ,GAAe,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAe,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAC,GAAc,EAAE,MAAuB,EAAa,EAAE,CACxE,CAAC,MAAM,KAAK,QAAQ;QAClB,CAAC,CAAE,GAAkB;QACrB,CAAC,CAAC,IAAI,UAAU,CAAC,GAA6B,CAAC,CAAc,CAAC;IAClE,MAAM,GAAG,GAAa;QACpB,KAAK,CAAC,MAAM,CAAC,GAAc,EAAE,MAAuB;YAClD,0FAA0F;YAC1F,0FAA0F;YAC1F,MAAM,IAAI,GAAc,MAAM,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACvF,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAc,EAAE,MAAuB;YAClD,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACtD,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,OAAO,CACX,GAAc,EACd,QAAyB,EACzB,SAA0B;YAE1B,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;IACF,MAAM,IAAI,GAAa;QACrB,KAAK,CAAC,MAAM,CAAC,GAAc,EAAE,MAAuB;YAClD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,IAAI,IAAe,CAAC;YACpB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,iCAAiC;gBACjC,4EAA4E;gBAC5E,2FAA2F;gBAC3F,MAAM,CAAC,GAAG,GAAiB,CAAC;gBAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;gBAC1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;gBACnD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAExB,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,wFAAwF;gBACxF,sFAAsF;gBACtF,uFAAuF;gBACvF,yFAAyF;gBACzF,IAAI,MAAM,IAAI,MAAM,KAAK,QAAQ;oBAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACvE,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACnE,CAAC;YACD,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAc,EAAE,MAAuB;YAClD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,8EAA8E;gBAC9E,mCAAmC;gBACnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY;gBACxE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc;gBACxF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBAClC,2EAA2E;gBAC3E,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D,oEAAoE;gBACpE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClC,OAAO,GAAgB,CAAC;YAC1B,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACjD,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,OAAO,CACX,GAAc,EACd,QAAyB,EACzB,SAA0B;YAE1B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;IACF,KAAK,UAAU,YAAY,CACzB,SAAoB,EACpB,OAA4B,EAAE;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;QACrC,kEAAkE;QAClE,MAAM,GAAG,GAAG,CACV,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CACvE,CAAC;QAChB,OAAO,GAAG,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC;QACvB,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,GAAgB,CAAC;QAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,UAAU,eAAe,CAAC,SAA0B,KAAK;QAC5D,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,yDAAyD;IACzD,IAAI,SAA8B,CAAC;IACnC,OAAO;QACL,GAAG,EAAE,GAAe;QACpB,IAAI,EAAE,IAAgB;QACtB,KAAK,CAAC,WAAW;YACf,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC3D,oFAAoF;gBACpF,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAC5C,+CAA+C;gBAC/C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,MAAM,CAAC,UAAU,CACrB,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,EAC5E,GAAG,CAAC,UAAU,EACd,CAAC,CACF,CAAC;gBACJ,CAAC;gBACD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,YAAY;QACZ,MAAM,EAAE,aAAa,CAAC,eAAe,EAAE,YAAY,CAAC;QACpD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YACnB,eAAe;YACf,+EAA+E;YAC/E,+FAA+F;YAC/F,gBAAgB,EAAE,GAAG,CAAC,OAA8B;YACpD,+EAA+E;YAC/E,+FAA+F;YAC/F,gBAAgB,EAAE,IAAI,CAAC,OAA8B;SACtD,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAAuC,EACvC,IAAa;IAEb,OAAO;QACL,wFAAwF;QACxF,4FAA4F;QAC5F,2FAA2F;QAC3F,+DAA+D;QAC/D,KAAK,CAAC,IAAI,CACR,OAAyB,EACzB,SAAoB,EACpB,OAA4B,EAAE;YAE9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAqB,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,MAAM,CACV,SAA2B,EAC3B,OAAyB,EACzB,SAAoB,EACpB,OAA4B,EAAE;YAE9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;YACtE,OAAO,MAAM,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,IAAuC,EACvC,IAAU,EACV,MAAc;IAEd,OAAO;QACL,gGAAgG;QAChG,6CAA6C;QAC7C,KAAK,CAAC,eAAe,CACnB,UAA4B,EAC5B,UAA4B,EAC5B,OAA4B,EAAE;YAE9B,0FAA0F;YAC1F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CACnC,UAAU,EACV,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CACtD,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAClC,UAAU,EACV,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CACtD,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,UAAU,CACzC,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EACrE,MAAM,EACN,CAAC,GAAG,MAAM,CACX,CAAC;YACF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAqB,CAAC;QACpD,CAAC;KACF,CAAC;AACJ,CAAC;AA6ED,SAAS,SAAS,CAChB,KAAkC,EAClC,IAAY,EACZ,MAAc,EACd,WAAmB;IAEnB,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,0FAA0F;QAC1F,yFAAyF;QACzF,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;QACpE,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9D,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YACnB,GAAG,IAAI,CAAC,KAAK;YACb,KAAK,CAAC,gBAAgB,CACpB,GAAc,EACd,QAA0B,EAC1B,SAA2B;gBAE3B,MAAM,GAAG,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpE,+FAA+F;gBAC/F,sFAAsF;gBACtF,IACE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;oBAC3B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;oBACxB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY;oBAE/B,OAAO,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/D,CAAC;SACF,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAChB,KAA0B,EAC1B,MAAc,EACd,WAAmB;IAEnB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,8FAA8F;QAC9F,6EAA6E;QAC7E,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;QACpE,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACtC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,KAAwB,EACxB,MAAc,EACd,WAAmB;IAEnB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,8FAA8F;QAC9F,4CAA4C;QAC5C,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;QACpE,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAyB,eAAe,CAAC,SAAS,CACjE,OAAO,EACP,SAAS,EACT,EAAE,EACF,wEAAwE,CACzE,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,IAAI,GAAyB,eAAe,CAAC,SAAS,CACjE,OAAO,EACP,SAAS,EACT,EAAE,EACF,kEAAkE,CACnE,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,IAAI,GAAyB,eAAe,CAAC,SAAS,CACjE,OAAO,EACP,SAAS,EACT,EAAE,EACF,kEAAkE,CACnE,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,OAAO,GAAyB,eAAe,CAAC,SAAS,CACpE,SAAS,EACT,EAAE,EACF,kCAAkC,CACnC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,KAAK,GAAyB,eAAe,CAAC,SAAS,CAClE,OAAO,EACP,EAAE,EACF,kCAAkC,CACnC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,MAAM,GAA8B,eAAe,CAAC,cAAc,CAC7E,QAAQ,EACR,EAAE,EACF,kCAAkC,CACnC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,IAAI,GAA8B,eAAe,CAAC,cAAc,CAC3E,MAAM,EACN,EAAE,EACF,kCAAkC,CACnC,CAAC"}
|