@noble/curves 2.0.0-beta.1 → 2.0.0-beta.3
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 +443 -276
- package/abstract/bls.d.ts +17 -17
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.d.ts +14 -9
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +9 -3
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +7 -9
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +12 -16
- package/abstract/edwards.js.map +1 -1
- package/abstract/hash-to-curve.d.ts +32 -31
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +15 -14
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +7 -5
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +3 -3
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +9 -13
- package/abstract/montgomery.js.map +1 -1
- package/abstract/oprf.d.ts +4 -4
- package/abstract/oprf.d.ts.map +1 -1
- package/abstract/oprf.js +3 -3
- package/abstract/oprf.js.map +1 -1
- package/abstract/poseidon.d.ts.map +1 -1
- package/abstract/poseidon.js +8 -9
- package/abstract/poseidon.js.map +1 -1
- package/abstract/utils.d.ts +74 -1
- package/abstract/utils.d.ts.map +1 -1
- package/abstract/utils.js +67 -17
- package/abstract/utils.js.map +1 -1
- package/abstract/weierstrass.d.ts +66 -20
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +72 -68
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts +3 -9
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +3 -14
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +4 -4
- package/bn254.d.ts.map +1 -1
- package/bn254.js +1 -1
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +22 -18
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +59 -31
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +17 -8
- package/ed448.d.ts.map +1 -1
- package/ed448.js +69 -52
- package/ed448.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +20 -4
- package/index.js.map +1 -1
- package/misc.d.ts.map +1 -1
- package/misc.js +6 -8
- package/misc.js.map +1 -1
- package/nist.d.ts +20 -2
- package/nist.d.ts.map +1 -1
- package/nist.js +30 -10
- package/nist.js.map +1 -1
- package/package.json +34 -37
- package/secp256k1.d.ts +10 -7
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +15 -16
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +22 -22
- package/src/abstract/curve.ts +19 -5
- package/src/abstract/edwards.ts +20 -23
- package/src/abstract/hash-to-curve.ts +50 -51
- package/src/abstract/modular.ts +7 -5
- package/src/abstract/montgomery.ts +12 -18
- package/src/abstract/oprf.ts +6 -6
- package/src/abstract/poseidon.ts +6 -8
- package/src/abstract/weierstrass.ts +139 -89
- package/src/bls12-381.ts +4 -15
- package/src/bn254.ts +7 -7
- package/src/ed25519.ts +65 -40
- package/src/ed448.ts +87 -69
- package/src/index.ts +19 -3
- package/src/misc.ts +7 -8
- package/src/nist.ts +31 -15
- package/src/secp256k1.ts +16 -18
- package/src/utils.ts +33 -83
- package/src/webcrypto.ts +148 -107
- package/utils.d.ts +5 -21
- package/utils.d.ts.map +1 -1
- package/utils.js +31 -74
- package/utils.js.map +1 -1
- package/webcrypto.d.ts +73 -21
- package/webcrypto.d.ts.map +1 -1
- package/webcrypto.js +101 -76
- package/webcrypto.js.map +1 -1
package/webcrypto.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
-> "If format is "raw":" -> "If usages contains a value which is not "verify"
|
|
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
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
19
|
- Noble supports generating keys for both sign, verify & getSharedSecret,
|
|
20
20
|
but JWK key includes usage, which forces us to patch it (non-JWK is ok)
|
|
@@ -37,66 +37,84 @@ There seems no reasonable way to check for availability, other than actually cal
|
|
|
37
37
|
* @module
|
|
38
38
|
*/
|
|
39
39
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
/** Raw type */
|
|
41
|
+
const TYPE_RAW = 'raw';
|
|
42
|
+
const TYPE_JWK = 'jwk';
|
|
43
|
+
const TYPE_SPKI = 'spki';
|
|
44
|
+
const TYPE_PKCS = 'pkcs8';
|
|
45
|
+
// default formats
|
|
46
|
+
const dfsec = TYPE_PKCS;
|
|
47
|
+
const dfpub = TYPE_SPKI;
|
|
48
|
+
function getSubtle() {
|
|
49
|
+
const s = globalThis?.crypto?.subtle;
|
|
50
|
+
if (typeof s === 'object' && s != null)
|
|
51
|
+
return s;
|
|
45
52
|
throw new Error('crypto.subtle must be defined');
|
|
46
53
|
}
|
|
47
|
-
|
|
54
|
+
function createKeygenA(randomSecretKey, getPublicKey) {
|
|
55
|
+
return async function keygenA(_seed) {
|
|
56
|
+
const secretKey = await randomSecretKey();
|
|
57
|
+
return { secretKey, publicKey: await getPublicKey(secretKey) };
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function hexToBytesUns(hex) {
|
|
61
|
+
return Uint8Array.from(hex.match(/(\w\w)/g), (b) => Number.parseInt(b, 16));
|
|
62
|
+
}
|
|
48
63
|
function assertType(type, key) {
|
|
49
64
|
if (key.type !== type)
|
|
50
65
|
throw new Error(`invalid key type, expected ${type}`);
|
|
51
66
|
}
|
|
52
|
-
function createKeyUtils(algo, derive, keyLen,
|
|
67
|
+
function createKeyUtils(algo, derive, keyLen, pkcs8header) {
|
|
53
68
|
const secUsage = derive ? ['deriveBits'] : ['sign'];
|
|
54
69
|
const pubUsage = derive ? [] : ['verify'];
|
|
55
70
|
// Return Uint8Array instead of ArrayBuffer
|
|
56
|
-
const arrBufToU8 = (res, format) => format ===
|
|
71
|
+
const arrBufToU8 = (res, format) => format === TYPE_JWK ? res : new Uint8Array(res);
|
|
57
72
|
const pub = {
|
|
58
|
-
async import(key, format
|
|
59
|
-
const
|
|
60
|
-
const keyi = await crypto.importKey(format, key, algo, true, pubUsage);
|
|
73
|
+
async import(key, format) {
|
|
74
|
+
const keyi = await getSubtle().importKey(format, key, algo, true, pubUsage);
|
|
61
75
|
assertType('public', keyi);
|
|
62
76
|
return keyi;
|
|
63
77
|
},
|
|
64
|
-
async export(key, format
|
|
78
|
+
async export(key, format) {
|
|
65
79
|
assertType('public', key);
|
|
66
|
-
const
|
|
67
|
-
const keyi = await crypto.exportKey(format, key);
|
|
80
|
+
const keyi = await getSubtle().exportKey(format, key);
|
|
68
81
|
return arrBufToU8(keyi, format);
|
|
69
82
|
},
|
|
70
|
-
async convert(key, inFormat
|
|
83
|
+
async convert(key, inFormat, outFormat) {
|
|
71
84
|
return pub.export(await pub.import(key, inFormat), outFormat);
|
|
72
85
|
},
|
|
73
86
|
};
|
|
74
87
|
const priv = {
|
|
75
|
-
async import(key, format
|
|
76
|
-
const crypto =
|
|
88
|
+
async import(key, format) {
|
|
89
|
+
const crypto = getSubtle();
|
|
77
90
|
let keyi;
|
|
78
|
-
if (format ===
|
|
91
|
+
if (format === TYPE_RAW) {
|
|
79
92
|
// Chrome, node, bun, deno: works
|
|
80
93
|
// Safari, Firefox: Data provided to an operation does not meet requirements
|
|
81
94
|
// This is the best one can do. JWK can't be used: it contains public key component inside.
|
|
82
|
-
|
|
95
|
+
const k = key;
|
|
96
|
+
const head = hexToBytesUns(pkcs8header);
|
|
97
|
+
const all = new Uint8Array(head.length + k.length);
|
|
98
|
+
all.set(head, 0);
|
|
99
|
+
all.set(k, head.length);
|
|
100
|
+
keyi = await crypto.importKey(TYPE_PKCS, all, algo, true, secUsage);
|
|
83
101
|
}
|
|
84
102
|
else {
|
|
85
103
|
// Fix import of ECDSA keys into ECDH, other formats are ok
|
|
86
|
-
if (derive && format ===
|
|
104
|
+
if (derive && format === TYPE_JWK)
|
|
87
105
|
key = { ...key, key_ops: secUsage };
|
|
88
106
|
keyi = await crypto.importKey(format, key, algo, true, secUsage);
|
|
89
107
|
}
|
|
90
108
|
assertType('private', keyi);
|
|
91
109
|
return keyi;
|
|
92
110
|
},
|
|
93
|
-
async export(key, format
|
|
94
|
-
const crypto =
|
|
111
|
+
async export(key, format) {
|
|
112
|
+
const crypto = getSubtle();
|
|
95
113
|
assertType('private', key);
|
|
96
|
-
if (format ===
|
|
114
|
+
if (format === TYPE_RAW) {
|
|
97
115
|
// scure-base base64urlnopad could have been used, but we can't add more deps.
|
|
98
|
-
//
|
|
99
|
-
const jwk = await crypto.exportKey(
|
|
116
|
+
// pkcs8 would be even more fragile
|
|
117
|
+
const jwk = await crypto.exportKey(TYPE_JWK, key);
|
|
100
118
|
const base64 = jwk.d.replace(/-/g, '+').replace(/_/g, '/'); // base64url
|
|
101
119
|
const pad = base64.length % 4 ? '='.repeat(4 - (base64.length % 4)) : ''; // add padding
|
|
102
120
|
const binary = atob(base64 + pad);
|
|
@@ -110,51 +128,52 @@ function createKeyUtils(algo, derive, keyLen, pcks8header) {
|
|
|
110
128
|
const keyi = await crypto.exportKey(format, key);
|
|
111
129
|
return arrBufToU8(keyi, format);
|
|
112
130
|
},
|
|
113
|
-
async convert(key, inFormat
|
|
131
|
+
async convert(key, inFormat, outFormat) {
|
|
114
132
|
return priv.export(await priv.import(key, inFormat), outFormat);
|
|
115
133
|
},
|
|
116
134
|
};
|
|
135
|
+
async function getPublicKey(secretKey, opts = {}) {
|
|
136
|
+
const fsec = opts.formatSec ?? dfsec;
|
|
137
|
+
const fpub = opts.formatPub ?? dfpub;
|
|
138
|
+
// Export to jwk, remove private scalar and then convert to format
|
|
139
|
+
const jwk = (fsec === TYPE_JWK ? { ...secretKey } : await priv.convert(secretKey, fsec, TYPE_JWK));
|
|
140
|
+
delete jwk.d;
|
|
141
|
+
jwk.key_ops = pubUsage;
|
|
142
|
+
if (fpub === TYPE_JWK)
|
|
143
|
+
return jwk;
|
|
144
|
+
return pub.convert(jwk, TYPE_JWK, fpub);
|
|
145
|
+
}
|
|
146
|
+
async function randomSecretKey(format = dfsec) {
|
|
147
|
+
const keyPair = await getSubtle().generateKey(algo, true, secUsage);
|
|
148
|
+
return priv.export(keyPair.privateKey, format);
|
|
149
|
+
}
|
|
117
150
|
// Key generation could be slow, so we cache result once.
|
|
118
|
-
let
|
|
151
|
+
let supported;
|
|
119
152
|
return {
|
|
120
153
|
pub: pub,
|
|
121
154
|
priv: priv,
|
|
122
|
-
async
|
|
123
|
-
if (
|
|
124
|
-
return
|
|
155
|
+
async isSupported() {
|
|
156
|
+
if (supported !== undefined)
|
|
157
|
+
return supported;
|
|
125
158
|
try {
|
|
126
|
-
const crypto =
|
|
159
|
+
const crypto = getSubtle();
|
|
127
160
|
const key = await crypto.generateKey(algo, true, secUsage);
|
|
128
161
|
// Deno is broken and generates key for unsupported curves, but then fails on export
|
|
129
|
-
await priv.export(key.privateKey,
|
|
162
|
+
await priv.export(key.privateKey, TYPE_JWK);
|
|
130
163
|
// Bun fails on derive for x25519, but not x448
|
|
131
164
|
if (derive) {
|
|
132
165
|
await crypto.deriveBits({ name: typeof algo === 'string' ? algo : algo.name, public: key.publicKey }, key.privateKey, 8);
|
|
133
166
|
}
|
|
134
|
-
return (
|
|
167
|
+
return (supported = true);
|
|
135
168
|
}
|
|
136
169
|
catch (e) {
|
|
137
|
-
return (
|
|
170
|
+
return (supported = false);
|
|
138
171
|
}
|
|
139
172
|
},
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const fpriv = opts.secFormat ?? _format;
|
|
143
|
-
const fpub = opts.pubFormat ?? fpriv;
|
|
144
|
-
// Export to jwk, remove private scalar and then convert to format
|
|
145
|
-
const jwk = (fpriv === 'jwk' ? { ...secretKey } : await priv.convert(secretKey, fpriv, 'jwk'));
|
|
146
|
-
delete jwk.d;
|
|
147
|
-
jwk.key_ops = pubUsage;
|
|
148
|
-
if (fpub === 'jwk')
|
|
149
|
-
return jwk;
|
|
150
|
-
return pub.convert(jwk, 'jwk', fpub);
|
|
151
|
-
},
|
|
173
|
+
getPublicKey,
|
|
174
|
+
keygen: createKeygenA(randomSecretKey, getPublicKey),
|
|
152
175
|
utils: {
|
|
153
|
-
|
|
154
|
-
const crypto = getWebcryptoSubtle();
|
|
155
|
-
const keyPair = await crypto.generateKey(algo, true, secUsage);
|
|
156
|
-
return priv.export(keyPair.privateKey, format);
|
|
157
|
-
},
|
|
176
|
+
randomSecretKey,
|
|
158
177
|
convertPublicKey: pub.convert,
|
|
159
178
|
convertSecretKey: priv.convert,
|
|
160
179
|
},
|
|
@@ -163,15 +182,13 @@ function createKeyUtils(algo, derive, keyLen, pcks8header) {
|
|
|
163
182
|
function createSigner(keys, algo) {
|
|
164
183
|
return {
|
|
165
184
|
async sign(msgHash, secretKey, opts = {}) {
|
|
166
|
-
const
|
|
167
|
-
const
|
|
168
|
-
const sig = await crypto.sign(algo, key, msgHash);
|
|
185
|
+
const key = await keys.priv.import(secretKey, opts.formatSec ?? dfsec);
|
|
186
|
+
const sig = await getSubtle().sign(algo, key, msgHash);
|
|
169
187
|
return new Uint8Array(sig);
|
|
170
188
|
},
|
|
171
189
|
async verify(signature, msgHash, publicKey, opts = {}) {
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
return await crypto.verify(algo, key, signature, msgHash);
|
|
190
|
+
const key = await keys.pub.import(publicKey, opts.formatPub ?? dfpub);
|
|
191
|
+
return await getSubtle().verify(algo, key, signature, msgHash);
|
|
175
192
|
},
|
|
176
193
|
};
|
|
177
194
|
}
|
|
@@ -179,53 +196,61 @@ function createECDH(keys, algo, keyLen) {
|
|
|
179
196
|
return {
|
|
180
197
|
async getSharedSecret(secretKeyA, publicKeyB, opts = {}) {
|
|
181
198
|
// if (_isCompressed !== true) throw new Error('WebCrypto only supports compressed keys');
|
|
182
|
-
const
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
const shared = await crypto.deriveBits({ name: typeof algo === 'string' ? algo : algo.name, public: pubKey }, secKey, 8 * keyLen);
|
|
199
|
+
const secKey = await keys.priv.import(secretKeyA, opts.formatSec || dfsec);
|
|
200
|
+
const pubKey = await keys.pub.import(publicKeyB, opts.formatPub || dfpub);
|
|
201
|
+
const shared = await getSubtle().deriveBits({ name: typeof algo === 'string' ? algo : algo.name, public: pubKey }, secKey, 8 * keyLen);
|
|
186
202
|
return new Uint8Array(shared);
|
|
187
203
|
},
|
|
188
204
|
};
|
|
189
205
|
}
|
|
190
|
-
function
|
|
206
|
+
function wrapECDSA(curve, hash, keyLen, pkcs8header) {
|
|
191
207
|
const ECDH_ALGO = { name: 'ECDH', namedCurve: curve };
|
|
192
|
-
const keys = createKeyUtils({ name: 'ECDSA', namedCurve: curve }, false, keyLen,
|
|
193
|
-
const keysEcdh = createKeyUtils(ECDH_ALGO, true, keyLen,
|
|
208
|
+
const keys = createKeyUtils({ name: 'ECDSA', namedCurve: curve }, false, keyLen, pkcs8header);
|
|
209
|
+
const keysEcdh = createKeyUtils(ECDH_ALGO, true, keyLen, pkcs8header);
|
|
194
210
|
return Object.freeze({
|
|
195
211
|
name: curve,
|
|
196
|
-
|
|
212
|
+
isSupported: keys.isSupported,
|
|
197
213
|
getPublicKey: keys.getPublicKey,
|
|
214
|
+
keygen: createKeygenA(keys.utils.randomSecretKey, keys.getPublicKey),
|
|
198
215
|
...createSigner(keys, { name: 'ECDSA', hash: { name: hash } }),
|
|
199
216
|
...createECDH(keysEcdh, ECDH_ALGO, keyLen),
|
|
200
217
|
utils: keys.utils,
|
|
201
218
|
});
|
|
202
219
|
}
|
|
203
|
-
function wrapEdDSA(curve, keyLen,
|
|
204
|
-
const keys = createKeyUtils(curve, false, keyLen,
|
|
220
|
+
function wrapEdDSA(curve, keyLen, pkcs8header) {
|
|
221
|
+
const keys = createKeyUtils(curve, false, keyLen, pkcs8header);
|
|
205
222
|
return Object.freeze({
|
|
206
223
|
name: curve,
|
|
207
|
-
|
|
224
|
+
isSupported: keys.isSupported,
|
|
208
225
|
getPublicKey: keys.getPublicKey,
|
|
226
|
+
keygen: createKeygenA(keys.utils.randomSecretKey, keys.getPublicKey),
|
|
209
227
|
...createSigner(keys, { name: curve }),
|
|
210
228
|
utils: keys.utils,
|
|
211
229
|
});
|
|
212
230
|
}
|
|
213
|
-
function wrapMontgomery(curve, keyLen,
|
|
214
|
-
const keys = createKeyUtils(curve, true, keyLen,
|
|
231
|
+
function wrapMontgomery(curve, keyLen, pkcs8header) {
|
|
232
|
+
const keys = createKeyUtils(curve, true, keyLen, pkcs8header);
|
|
215
233
|
return Object.freeze({
|
|
216
234
|
name: curve,
|
|
217
|
-
|
|
235
|
+
isSupported: keys.isSupported,
|
|
218
236
|
getPublicKey: keys.getPublicKey,
|
|
237
|
+
keygen: createKeygenA(keys.utils.randomSecretKey, keys.getPublicKey),
|
|
219
238
|
...createECDH(keys, curve, keyLen),
|
|
220
239
|
utils: keys.utils,
|
|
221
240
|
});
|
|
222
241
|
}
|
|
223
|
-
|
|
224
|
-
export const
|
|
225
|
-
|
|
242
|
+
/** Friendly wrapper over built-in WebCrypto NIST P-256 (secp256r1). */
|
|
243
|
+
export const p256 = /* @__PURE__ */ wrapECDSA('P-256', 'SHA-256', 32, '3041020100301306072a8648ce3d020106082a8648ce3d030107042730250201010420');
|
|
244
|
+
/** Friendly wrapper over built-in WebCrypto NIST P-384 (secp384r1). */
|
|
245
|
+
export const p384 = /* @__PURE__ */ wrapECDSA('P-384', 'SHA-384', 48, '304e020100301006072a8648ce3d020106052b81040022043730350201010430');
|
|
246
|
+
/** Friendly wrapper over built-in WebCrypto NIST P-521 (secp521r1). */
|
|
247
|
+
export const p521 = /* @__PURE__ */ wrapECDSA('P-521', 'SHA-512', 66, '3060020100301006072a8648ce3d020106052b81040023044930470201010442');
|
|
248
|
+
/** Friendly wrapper over built-in WebCrypto ed25519. */
|
|
226
249
|
export const ed25519 = /* @__PURE__ */ wrapEdDSA('Ed25519', 32, '302e020100300506032b657004220420');
|
|
250
|
+
/** Friendly wrapper over built-in WebCrypto ed448. */
|
|
227
251
|
export const ed448 = /* @__PURE__ */ wrapEdDSA('Ed448', 57, '3047020100300506032b6571043b0439');
|
|
252
|
+
/** Friendly wrapper over built-in WebCrypto x25519 (ECDH over Curve25519). */
|
|
228
253
|
export const x25519 = /* @__PURE__ */ wrapMontgomery('X25519', 32, '302e020100300506032b656e04220420');
|
|
254
|
+
/** Friendly wrapper over built-in WebCrypto x448 (ECDH over Curve448). */
|
|
229
255
|
export const x448 = /* @__PURE__ */ wrapMontgomery('X448', 56, '3046020100300506032b656f043a0438');
|
|
230
|
-
export const supportsWc = (a) => a.isAvailable();
|
|
231
256
|
//# sourceMappingURL=webcrypto.js.map
|
package/webcrypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,sEAAsE;
|
|
1
|
+
{"version":3,"file":"webcrypto.js","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"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"}
|