@noble/curves 0.7.3 → 0.8.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 +8 -4
- package/_shortw_utils.js +8 -13
- package/_shortw_utils.js.map +1 -1
- package/abstract/bls.js +12 -16
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.js +7 -12
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.js +16 -20
- package/abstract/edwards.js.map +1 -1
- package/abstract/hash-to-curve.d.ts +5 -3
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +25 -33
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +25 -44
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.js +11 -15
- package/abstract/montgomery.js.map +1 -1
- package/abstract/poseidon.js +6 -12
- package/abstract/poseidon.js.map +1 -1
- package/abstract/utils.js +19 -41
- package/abstract/utils.js.map +1 -1
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +25 -37
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.js +63 -66
- package/bls12-381.js.map +1 -1
- package/bn.js +7 -10
- package/bn.js.map +1 -1
- package/ed25519.d.ts +3 -0
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +81 -74
- package/ed25519.js.map +1 -1
- package/ed448.js +37 -41
- package/ed448.js.map +1 -1
- package/jubjub.js +17 -22
- package/jubjub.js.map +1 -1
- package/p256.js +13 -17
- package/p256.js.map +1 -1
- package/p384.js +13 -17
- package/p384.js.map +1 -1
- package/p521.js +13 -17
- package/p521.js.map +1 -1
- package/package.json +4 -26
- package/pasta.js +16 -19
- package/pasta.js.map +1 -1
- package/secp256k1.d.ts +0 -6
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +58 -63
- package/secp256k1.js.map +1 -1
- package/src/abstract/hash-to-curve.ts +13 -12
- package/src/abstract/modular.ts +1 -0
- package/src/abstract/weierstrass.ts +4 -10
- package/src/ed25519.ts +17 -1
- package/src/secp256k1.ts +7 -7
- package/src/stark.ts +50 -27
- package/stark.d.ts +17 -19
- package/stark.d.ts.map +1 -1
- package/stark.js +76 -72
- package/stark.js.map +1 -1
- package/esm/_shortw_utils.js +0 -17
- package/esm/_shortw_utils.js.map +0 -1
- package/esm/abstract/bls.js +0 -226
- package/esm/abstract/bls.js.map +0 -1
- package/esm/abstract/curve.js +0 -152
- package/esm/abstract/curve.js.map +0 -1
- package/esm/abstract/edwards.js +0 -409
- package/esm/abstract/edwards.js.map +0 -1
- package/esm/abstract/hash-to-curve.js +0 -166
- package/esm/abstract/hash-to-curve.js.map +0 -1
- package/esm/abstract/modular.js +0 -345
- package/esm/abstract/modular.js.map +0 -1
- package/esm/abstract/montgomery.js +0 -157
- package/esm/abstract/montgomery.js.map +0 -1
- package/esm/abstract/poseidon.js +0 -110
- package/esm/abstract/poseidon.js.map +0 -1
- package/esm/abstract/utils.js +0 -222
- package/esm/abstract/utils.js.map +0 -1
- package/esm/abstract/weierstrass.js +0 -1016
- package/esm/abstract/weierstrass.js.map +0 -1
- package/esm/bls12-381.js +0 -1173
- package/esm/bls12-381.js.map +0 -1
- package/esm/bn.js +0 -22
- package/esm/bn.js.map +0 -1
- package/esm/ed25519.js +0 -385
- package/esm/ed25519.js.map +0 -1
- package/esm/ed448.js +0 -213
- package/esm/ed448.js.map +0 -1
- package/esm/index.js +0 -3
- package/esm/index.js.map +0 -1
- package/esm/jubjub.js +0 -54
- package/esm/jubjub.js.map +0 -1
- package/esm/p256.js +0 -42
- package/esm/p256.js.map +0 -1
- package/esm/p384.js +0 -47
- package/esm/p384.js.map +0 -1
- package/esm/p521.js +0 -48
- package/esm/p521.js.map +0 -1
- package/esm/package.json +0 -7
- package/esm/pasta.js +0 -30
- package/esm/pasta.js.map +0 -1
- package/esm/secp256k1.js +0 -253
- package/esm/secp256k1.js.map +0 -1
- package/esm/stark.js +0 -251
- package/esm/stark.js.map +0 -1
package/secp256k1.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.encodeToCurve = exports.hashToCurve = exports.schnorr = exports.secp256k1 = void 0;
|
|
5
1
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
3
|
+
import { randomBytes } from '@noble/hashes/utils';
|
|
4
|
+
import { Fp as Field, mod, pow2 } from './abstract/modular.js';
|
|
5
|
+
import { mapToCurveSimpleSWU } from './abstract/weierstrass.js';
|
|
6
|
+
import { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';
|
|
7
|
+
import * as htf from './abstract/hash-to-curve.js';
|
|
8
|
+
import { createCurve } from './_shortw_utils.js';
|
|
13
9
|
const secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');
|
|
14
10
|
const secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
|
|
15
11
|
const _1n = BigInt(1);
|
|
@@ -27,24 +23,24 @@ function sqrtMod(y) {
|
|
|
27
23
|
const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);
|
|
28
24
|
const b2 = (y * y * y) % P; // x^3, 11
|
|
29
25
|
const b3 = (b2 * b2 * y) % P; // x^7
|
|
30
|
-
const b6 = (
|
|
31
|
-
const b9 = (
|
|
32
|
-
const b11 = (
|
|
33
|
-
const b22 = (
|
|
34
|
-
const b44 = (
|
|
35
|
-
const b88 = (
|
|
36
|
-
const b176 = (
|
|
37
|
-
const b220 = (
|
|
38
|
-
const b223 = (
|
|
39
|
-
const t1 = (
|
|
40
|
-
const t2 = (
|
|
41
|
-
const root =
|
|
26
|
+
const b6 = (pow2(b3, _3n, P) * b3) % P;
|
|
27
|
+
const b9 = (pow2(b6, _3n, P) * b3) % P;
|
|
28
|
+
const b11 = (pow2(b9, _2n, P) * b2) % P;
|
|
29
|
+
const b22 = (pow2(b11, _11n, P) * b11) % P;
|
|
30
|
+
const b44 = (pow2(b22, _22n, P) * b22) % P;
|
|
31
|
+
const b88 = (pow2(b44, _44n, P) * b44) % P;
|
|
32
|
+
const b176 = (pow2(b88, _88n, P) * b88) % P;
|
|
33
|
+
const b220 = (pow2(b176, _44n, P) * b44) % P;
|
|
34
|
+
const b223 = (pow2(b220, _3n, P) * b3) % P;
|
|
35
|
+
const t1 = (pow2(b223, _23n, P) * b22) % P;
|
|
36
|
+
const t2 = (pow2(t1, _6n, P) * b2) % P;
|
|
37
|
+
const root = pow2(t2, _2n, P);
|
|
42
38
|
if (!Fp.eql(Fp.sqr(root), y))
|
|
43
39
|
throw new Error('Cannot find square root');
|
|
44
40
|
return root;
|
|
45
41
|
}
|
|
46
|
-
const Fp = (
|
|
47
|
-
|
|
42
|
+
const Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });
|
|
43
|
+
export const secp256k1 = createCurve({
|
|
48
44
|
a: BigInt(0),
|
|
49
45
|
b: BigInt(7),
|
|
50
46
|
Fp,
|
|
@@ -71,8 +67,8 @@ exports.secp256k1 = (0, _shortw_utils_js_1.createCurve)({
|
|
|
71
67
|
const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)
|
|
72
68
|
const c1 = divNearest(b2 * k, n);
|
|
73
69
|
const c2 = divNearest(-b1 * k, n);
|
|
74
|
-
let k1 =
|
|
75
|
-
let k2 =
|
|
70
|
+
let k1 = mod(k - c1 * a1 - c2 * a2, n);
|
|
71
|
+
let k2 = mod(-c1 * b1 - c2 * b2, n);
|
|
76
72
|
const k1neg = k1 > POW_2_128;
|
|
77
73
|
const k2neg = k2 > POW_2_128;
|
|
78
74
|
if (k1neg)
|
|
@@ -85,7 +81,7 @@ exports.secp256k1 = (0, _shortw_utils_js_1.createCurve)({
|
|
|
85
81
|
return { k1neg, k1, k2neg, k2 };
|
|
86
82
|
},
|
|
87
83
|
},
|
|
88
|
-
},
|
|
84
|
+
}, sha256);
|
|
89
85
|
// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.
|
|
90
86
|
// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
|
|
91
87
|
const _0n = BigInt(0);
|
|
@@ -96,25 +92,25 @@ const TAGGED_HASH_PREFIXES = {};
|
|
|
96
92
|
function taggedHash(tag, ...messages) {
|
|
97
93
|
let tagP = TAGGED_HASH_PREFIXES[tag];
|
|
98
94
|
if (tagP === undefined) {
|
|
99
|
-
const tagH =
|
|
100
|
-
tagP =
|
|
95
|
+
const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));
|
|
96
|
+
tagP = concatBytes(tagH, tagH);
|
|
101
97
|
TAGGED_HASH_PREFIXES[tag] = tagP;
|
|
102
98
|
}
|
|
103
|
-
return
|
|
99
|
+
return sha256(concatBytes(tagP, ...messages));
|
|
104
100
|
}
|
|
105
101
|
// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03
|
|
106
102
|
const pointToBytes = (point) => point.toRawBytes(true).slice(1);
|
|
107
|
-
const numTo32b = (n) =>
|
|
108
|
-
const modP = (x) =>
|
|
109
|
-
const modN = (x) =>
|
|
110
|
-
const Point =
|
|
103
|
+
const numTo32b = (n) => numberToBytesBE(n, 32);
|
|
104
|
+
const modP = (x) => mod(x, secp256k1P);
|
|
105
|
+
const modN = (x) => mod(x, secp256k1N);
|
|
106
|
+
const Point = secp256k1.ProjectivePoint;
|
|
111
107
|
const GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);
|
|
112
108
|
// Calculate point, scalar and bytes
|
|
113
109
|
function schnorrGetExtPubKey(priv) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const scalar =
|
|
117
|
-
return {
|
|
110
|
+
let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey
|
|
111
|
+
let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside
|
|
112
|
+
const scalar = p.hasEvenY() ? d_ : modN(-d_);
|
|
113
|
+
return { scalar: scalar, bytes: pointToBytes(p) };
|
|
118
114
|
}
|
|
119
115
|
/**
|
|
120
116
|
* lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.
|
|
@@ -136,7 +132,7 @@ function lift_x(x) {
|
|
|
136
132
|
* Create tagged hash, convert it to bigint, reduce modulo-n.
|
|
137
133
|
*/
|
|
138
134
|
function challenge(...args) {
|
|
139
|
-
return modN(
|
|
135
|
+
return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));
|
|
140
136
|
}
|
|
141
137
|
/**
|
|
142
138
|
* Schnorr public key is just `x` coordinate of Point as per BIP340.
|
|
@@ -148,19 +144,19 @@ function schnorrGetPublicKey(privateKey) {
|
|
|
148
144
|
* Creates Schnorr signature as per BIP340. Verifies itself before returning anything.
|
|
149
145
|
* auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.
|
|
150
146
|
*/
|
|
151
|
-
function schnorrSign(message, privateKey, auxRand =
|
|
152
|
-
const m =
|
|
147
|
+
function schnorrSign(message, privateKey, auxRand = randomBytes(32)) {
|
|
148
|
+
const m = ensureBytes('message', message);
|
|
153
149
|
const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder
|
|
154
|
-
const a =
|
|
155
|
-
const t = numTo32b(d ^
|
|
150
|
+
const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array
|
|
151
|
+
const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)
|
|
156
152
|
const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)
|
|
157
|
-
const k_ = modN(
|
|
153
|
+
const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n
|
|
158
154
|
if (k_ === _0n)
|
|
159
155
|
throw new Error('sign failed: k is zero'); // Fail if k' = 0.
|
|
160
|
-
const {
|
|
156
|
+
const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.
|
|
161
157
|
const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.
|
|
162
158
|
const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).
|
|
163
|
-
sig.set(
|
|
159
|
+
sig.set(rx, 0);
|
|
164
160
|
sig.set(numTo32b(modN(k + e * d)), 32);
|
|
165
161
|
// If Verify(bytes(P), m, sig) (see below) returns failure, abort
|
|
166
162
|
if (!schnorrVerify(sig, m, px))
|
|
@@ -172,15 +168,15 @@ function schnorrSign(message, privateKey, auxRand = (0, utils_1.randomBytes)(32)
|
|
|
172
168
|
* Will swallow errors & return false except for initial type validation of arguments.
|
|
173
169
|
*/
|
|
174
170
|
function schnorrVerify(signature, message, publicKey) {
|
|
175
|
-
const sig =
|
|
176
|
-
const m =
|
|
177
|
-
const pub =
|
|
171
|
+
const sig = ensureBytes('signature', signature, 64);
|
|
172
|
+
const m = ensureBytes('message', message);
|
|
173
|
+
const pub = ensureBytes('publicKey', publicKey, 32);
|
|
178
174
|
try {
|
|
179
|
-
const P = lift_x(
|
|
180
|
-
const r =
|
|
175
|
+
const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails
|
|
176
|
+
const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.
|
|
181
177
|
if (!fe(r))
|
|
182
178
|
return false;
|
|
183
|
-
const s =
|
|
179
|
+
const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.
|
|
184
180
|
if (!ge(s))
|
|
185
181
|
return false;
|
|
186
182
|
const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n
|
|
@@ -193,19 +189,18 @@ function schnorrVerify(signature, message, publicKey) {
|
|
|
193
189
|
return false;
|
|
194
190
|
}
|
|
195
191
|
}
|
|
196
|
-
|
|
192
|
+
export const schnorr = {
|
|
197
193
|
getPublicKey: schnorrGetPublicKey,
|
|
198
194
|
sign: schnorrSign,
|
|
199
195
|
verify: schnorrVerify,
|
|
200
196
|
utils: {
|
|
201
|
-
randomPrivateKey:
|
|
202
|
-
getExtendedPublicKey: schnorrGetExtPubKey,
|
|
197
|
+
randomPrivateKey: secp256k1.utils.randomPrivateKey,
|
|
203
198
|
lift_x,
|
|
204
199
|
pointToBytes,
|
|
205
|
-
numberToBytesBE
|
|
206
|
-
bytesToNumberBE
|
|
200
|
+
numberToBytesBE,
|
|
201
|
+
bytesToNumberBE,
|
|
207
202
|
taggedHash,
|
|
208
|
-
mod
|
|
203
|
+
mod,
|
|
209
204
|
},
|
|
210
205
|
};
|
|
211
206
|
const isoMap = htf.isogenyMap(Fp, [
|
|
@@ -237,12 +232,12 @@ const isoMap = htf.isogenyMap(Fp, [
|
|
|
237
232
|
'0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1
|
|
238
233
|
],
|
|
239
234
|
].map((i) => i.map((j) => BigInt(j))));
|
|
240
|
-
const mapSWU =
|
|
235
|
+
const mapSWU = mapToCurveSimpleSWU(Fp, {
|
|
241
236
|
A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),
|
|
242
237
|
B: BigInt('1771'),
|
|
243
238
|
Z: Fp.create(BigInt('-11')),
|
|
244
239
|
});
|
|
245
|
-
|
|
240
|
+
export const { hashToCurve, encodeToCurve } = htf.createHasher(secp256k1.ProjectivePoint, (scalars) => {
|
|
246
241
|
const { x, y } = mapSWU(Fp.create(scalars[0]));
|
|
247
242
|
return isoMap(x, y);
|
|
248
243
|
}, {
|
|
@@ -252,6 +247,6 @@ _a = htf.createHasher(exports.secp256k1.ProjectivePoint, (scalars) => {
|
|
|
252
247
|
m: 1,
|
|
253
248
|
k: 128,
|
|
254
249
|
expand: 'xmd',
|
|
255
|
-
hash:
|
|
256
|
-
})
|
|
250
|
+
hash: sha256,
|
|
251
|
+
});
|
|
257
252
|
//# sourceMappingURL=secp256k1.js.map
|
package/secp256k1.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,9 @@ import { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from
|
|
|
11
11
|
* * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)
|
|
12
12
|
* * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props
|
|
13
13
|
*/
|
|
14
|
+
type UnicodeOrBytes = string | Uint8Array;
|
|
14
15
|
export type Opts = {
|
|
15
|
-
DST:
|
|
16
|
+
DST: UnicodeOrBytes;
|
|
16
17
|
p: bigint;
|
|
17
18
|
m: number;
|
|
18
19
|
k: number;
|
|
@@ -20,7 +21,7 @@ export type Opts = {
|
|
|
20
21
|
hash: CHash;
|
|
21
22
|
};
|
|
22
23
|
|
|
23
|
-
function validateDST(dst:
|
|
24
|
+
function validateDST(dst: UnicodeOrBytes): Uint8Array {
|
|
24
25
|
if (dst instanceof Uint8Array) return dst;
|
|
25
26
|
if (typeof dst === 'string') return utf8ToBytes(dst);
|
|
26
27
|
throw new Error('DST must be Uint8Array or string');
|
|
@@ -125,6 +126,13 @@ export function expand_message_xof(
|
|
|
125
126
|
* @returns [u_0, ..., u_(count - 1)], a list of field elements.
|
|
126
127
|
*/
|
|
127
128
|
export function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {
|
|
129
|
+
validateObject(options, {
|
|
130
|
+
DST: 'string',
|
|
131
|
+
p: 'bigint',
|
|
132
|
+
m: 'isSafeInteger',
|
|
133
|
+
k: 'isSafeInteger',
|
|
134
|
+
hash: 'hash',
|
|
135
|
+
});
|
|
128
136
|
const { p, k, m, hash, expand, DST: _DST } = options;
|
|
129
137
|
isBytes(msg);
|
|
130
138
|
isNum(count);
|
|
@@ -183,24 +191,17 @@ export type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;
|
|
|
183
191
|
|
|
184
192
|
// Separated from initialization opts, so users won't accidentally change per-curve parameters
|
|
185
193
|
// (changing DST is ok!)
|
|
186
|
-
export type htfBasicOpts = { DST:
|
|
194
|
+
export type htfBasicOpts = { DST: UnicodeOrBytes };
|
|
187
195
|
|
|
188
196
|
export function createHasher<T>(
|
|
189
197
|
Point: H2CPointConstructor<T>,
|
|
190
198
|
mapToCurve: MapToCurve<T>,
|
|
191
|
-
def: Opts & { encodeDST?:
|
|
199
|
+
def: Opts & { encodeDST?: UnicodeOrBytes }
|
|
192
200
|
) {
|
|
193
|
-
validateObject(def, {
|
|
194
|
-
DST: 'string',
|
|
195
|
-
p: 'bigint',
|
|
196
|
-
m: 'isSafeInteger',
|
|
197
|
-
k: 'isSafeInteger',
|
|
198
|
-
hash: 'hash',
|
|
199
|
-
});
|
|
200
201
|
if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');
|
|
201
202
|
return {
|
|
202
203
|
// Encodes byte string to elliptic curve
|
|
203
|
-
// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-
|
|
204
|
+
// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3
|
|
204
205
|
hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {
|
|
205
206
|
const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);
|
|
206
207
|
const u0 = Point.fromAffine(mapToCurve(u[0]));
|
package/src/abstract/modular.ts
CHANGED
|
@@ -56,6 +56,7 @@ export function invert(number: bigint, modulo: bigint): bigint {
|
|
|
56
56
|
throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
|
|
57
57
|
}
|
|
58
58
|
// Eucledian GCD https://brilliant.org/wiki/extended-euclidean-algorithm/
|
|
59
|
+
// Fermat's little theorem "CT-like" version inv(n) = n^(m-2) mod m is 30x slower.
|
|
59
60
|
let a = mod(number, modulo);
|
|
60
61
|
let b = modulo;
|
|
61
62
|
// prettier-ignore
|
|
@@ -943,16 +943,10 @@ export function weierstrass(curveDef: CurveType): CurveFn {
|
|
|
943
943
|
const q = Point.BASE.multiply(k).toAffine(); // q = Gk
|
|
944
944
|
const r = modN(q.x); // r = q.x mod n
|
|
945
945
|
if (r === _0n) return;
|
|
946
|
-
//
|
|
947
|
-
//
|
|
948
|
-
//
|
|
949
|
-
const
|
|
950
|
-
const bi = invN(b); // b^-1
|
|
951
|
-
const bdr = modN(b * d * r); // b * d * r
|
|
952
|
-
const bm = modN(b * m); // b * m
|
|
953
|
-
const mrx = modN(bi * modN(bdr + bm)); // b^-1(bm + bdr) -> m + rd
|
|
954
|
-
|
|
955
|
-
const s = modN(ik * mrx); // s = k^-1(m + rd) mod n
|
|
946
|
+
// Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to
|
|
947
|
+
// https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:
|
|
948
|
+
// a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT
|
|
949
|
+
const s = modN(ik * modN(m + r * d)); // Not using blinding here
|
|
956
950
|
if (s === _0n) return;
|
|
957
951
|
let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)
|
|
958
952
|
let normS = s;
|
package/src/ed25519.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
ensureBytes,
|
|
14
14
|
} from './abstract/utils.js';
|
|
15
15
|
import * as htf from './abstract/hash-to-curve.js';
|
|
16
|
+
import { AffinePoint } from './abstract/curve.js';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* ed25519 Twisted Edwards curve with following addons:
|
|
@@ -309,6 +310,11 @@ export class RistrettoPoint {
|
|
|
309
310
|
// Private property to discourage combining ExtendedPoint + RistrettoPoint
|
|
310
311
|
// Always use Ristretto encoding/decoding instead.
|
|
311
312
|
constructor(private readonly ep: ExtendedPoint) {}
|
|
313
|
+
|
|
314
|
+
static fromAffine(ap: AffinePoint<bigint>) {
|
|
315
|
+
return new RistrettoPoint(ed25519.ExtendedPoint.fromAffine(ap));
|
|
316
|
+
}
|
|
317
|
+
|
|
312
318
|
/**
|
|
313
319
|
* Takes uniform output of 64-bit hash function like sha512 and converts it to `RistrettoPoint`.
|
|
314
320
|
* The hash-to-group operation applies Elligator twice and adds the results.
|
|
@@ -401,7 +407,7 @@ export class RistrettoPoint {
|
|
|
401
407
|
equals(other: RistrettoPoint): boolean {
|
|
402
408
|
assertRstPoint(other);
|
|
403
409
|
const { ex: X1, ey: Y1 } = this.ep;
|
|
404
|
-
const { ex: X2, ey: Y2 } =
|
|
410
|
+
const { ex: X2, ey: Y2 } = other.ep;
|
|
405
411
|
const mod = ed25519.CURVE.Fp.create;
|
|
406
412
|
// (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)
|
|
407
413
|
const one = mod(X1 * Y2) === mod(Y1 * X2);
|
|
@@ -427,3 +433,13 @@ export class RistrettoPoint {
|
|
|
427
433
|
return new RistrettoPoint(this.ep.multiplyUnsafe(scalar));
|
|
428
434
|
}
|
|
429
435
|
}
|
|
436
|
+
|
|
437
|
+
// https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/14/
|
|
438
|
+
// Appendix B. Hashing to ristretto255
|
|
439
|
+
export const hash_to_ristretto255 = (msg: Uint8Array, options: htf.htfBasicOpts) => {
|
|
440
|
+
const d = options.DST;
|
|
441
|
+
const DST = typeof d === 'string' ? utf8ToBytes(d) : d;
|
|
442
|
+
const uniform_bytes = htf.expand_message_xmd(msg, DST, 64, sha512);
|
|
443
|
+
const P = RistrettoPoint.hashToCurve(uniform_bytes);
|
|
444
|
+
return P;
|
|
445
|
+
};
|
package/src/secp256k1.ts
CHANGED
|
@@ -115,12 +115,13 @@ const modN = (x: bigint) => mod(x, secp256k1N);
|
|
|
115
115
|
const Point = secp256k1.ProjectivePoint;
|
|
116
116
|
const GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>
|
|
117
117
|
Point.BASE.multiplyAndAddUnsafe(Q, a, b);
|
|
118
|
+
|
|
118
119
|
// Calculate point, scalar and bytes
|
|
119
120
|
function schnorrGetExtPubKey(priv: PrivKey) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const scalar =
|
|
123
|
-
return {
|
|
121
|
+
let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey
|
|
122
|
+
let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside
|
|
123
|
+
const scalar = p.hasEvenY() ? d_ : modN(-d_);
|
|
124
|
+
return { scalar: scalar, bytes: pointToBytes(p) };
|
|
124
125
|
}
|
|
125
126
|
/**
|
|
126
127
|
* lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.
|
|
@@ -166,10 +167,10 @@ function schnorrSign(
|
|
|
166
167
|
const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)
|
|
167
168
|
const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n
|
|
168
169
|
if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.
|
|
169
|
-
const {
|
|
170
|
+
const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.
|
|
170
171
|
const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.
|
|
171
172
|
const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).
|
|
172
|
-
sig.set(
|
|
173
|
+
sig.set(rx, 0);
|
|
173
174
|
sig.set(numTo32b(modN(k + e * d)), 32);
|
|
174
175
|
// If Verify(bytes(P), m, sig) (see below) returns failure, abort
|
|
175
176
|
if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');
|
|
@@ -205,7 +206,6 @@ export const schnorr = {
|
|
|
205
206
|
verify: schnorrVerify,
|
|
206
207
|
utils: {
|
|
207
208
|
randomPrivateKey: secp256k1.utils.randomPrivateKey,
|
|
208
|
-
getExtendedPublicKey: schnorrGetExtPubKey,
|
|
209
209
|
lift_x,
|
|
210
210
|
pointToBytes,
|
|
211
211
|
numberToBytesBE,
|
package/src/stark.ts
CHANGED
|
@@ -5,17 +5,8 @@ import { utf8ToBytes } from '@noble/hashes/utils';
|
|
|
5
5
|
import { Fp, mod, Field, validateField } from './abstract/modular.js';
|
|
6
6
|
import { poseidon } from './abstract/poseidon.js';
|
|
7
7
|
import { weierstrass, ProjPointType, SignatureType } from './abstract/weierstrass.js';
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
bitMask,
|
|
11
|
-
bytesToHex,
|
|
12
|
-
bytesToNumberBE,
|
|
13
|
-
concatBytes,
|
|
14
|
-
ensureBytes as ensureBytesOrig,
|
|
15
|
-
hexToBytes,
|
|
16
|
-
hexToNumber,
|
|
17
|
-
numberToVarBytesBE,
|
|
18
|
-
} from './abstract/utils.js';
|
|
8
|
+
import * as u from './abstract/utils.js';
|
|
9
|
+
import type { Hex } from './abstract/utils.js';
|
|
19
10
|
import { getHash } from './_shortw_utils.js';
|
|
20
11
|
|
|
21
12
|
// Stark-friendly elliptic curve
|
|
@@ -30,7 +21,7 @@ function bits2int(bytes: Uint8Array): bigint {
|
|
|
30
21
|
while (bytes[0] === 0) bytes = bytes.subarray(1); // strip leading 0s
|
|
31
22
|
// Copy-pasted from weierstrass.ts
|
|
32
23
|
const delta = bytes.length * 8 - nBitLength;
|
|
33
|
-
const num = bytesToNumberBE(bytes);
|
|
24
|
+
const num = u.bytesToNumberBE(bytes);
|
|
34
25
|
return delta > 0 ? num >> BigInt(delta) : num;
|
|
35
26
|
}
|
|
36
27
|
function hex0xToBytes(hex: string): Uint8Array {
|
|
@@ -38,7 +29,7 @@ function hex0xToBytes(hex: string): Uint8Array {
|
|
|
38
29
|
hex = strip0x(hex); // allow 0x prefix
|
|
39
30
|
if (hex.length & 1) hex = '0' + hex; // allow unpadded hex
|
|
40
31
|
}
|
|
41
|
-
return hexToBytes(hex);
|
|
32
|
+
return u.hexToBytes(hex);
|
|
42
33
|
}
|
|
43
34
|
const curve = weierstrass({
|
|
44
35
|
a: BigInt(1), // Params: a, b
|
|
@@ -59,7 +50,7 @@ const curve = weierstrass({
|
|
|
59
50
|
bits2int_modN: (bytes: Uint8Array): bigint => {
|
|
60
51
|
// 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee11318 =>
|
|
61
52
|
// 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee113180
|
|
62
|
-
const hex = bytesToNumberBE(bytes).toString(16); // toHex unpadded
|
|
53
|
+
const hex = u.bytesToNumberBE(bytes).toString(16); // toHex unpadded
|
|
63
54
|
if (hex.length === 63) bytes = hex0xToBytes(hex + '0'); // append trailing 0
|
|
64
55
|
return mod(bits2int(bytes), CURVE_ORDER);
|
|
65
56
|
},
|
|
@@ -67,11 +58,11 @@ const curve = weierstrass({
|
|
|
67
58
|
export const _starkCurve = curve;
|
|
68
59
|
|
|
69
60
|
function ensureBytes(hex: Hex): Uint8Array {
|
|
70
|
-
return
|
|
61
|
+
return u.ensureBytes('', typeof hex === 'string' ? hex0xToBytes(hex) : hex);
|
|
71
62
|
}
|
|
72
63
|
|
|
73
64
|
function normPrivKey(privKey: Hex): string {
|
|
74
|
-
return bytesToHex(ensureBytes(privKey)).padStart(64, '0');
|
|
65
|
+
return u.bytesToHex(ensureBytes(privKey)).padStart(64, '0');
|
|
75
66
|
}
|
|
76
67
|
export function getPublicKey(privKey: Hex, isCompressed = false): Uint8Array {
|
|
77
68
|
return curve.getPublicKey(normPrivKey(privKey), isCompressed);
|
|
@@ -91,7 +82,7 @@ const { CURVE, ProjectivePoint, Signature, utils } = curve;
|
|
|
91
82
|
export { CURVE, ProjectivePoint, Signature, utils };
|
|
92
83
|
|
|
93
84
|
function extractX(bytes: Uint8Array): string {
|
|
94
|
-
const hex = bytesToHex(bytes.subarray(1));
|
|
85
|
+
const hex = u.bytesToHex(bytes.subarray(1));
|
|
95
86
|
const stripped = hex.replace(/^0+/gm, ''); // strip leading 0s
|
|
96
87
|
return `0x${stripped}`;
|
|
97
88
|
}
|
|
@@ -109,7 +100,7 @@ export function grindKey(seed: Hex) {
|
|
|
109
100
|
const sha256mask = 2n ** 256n;
|
|
110
101
|
const limit = sha256mask - mod(sha256mask, CURVE_ORDER);
|
|
111
102
|
for (let i = 0; ; i++) {
|
|
112
|
-
const key = sha256Num(concatBytes(_seed, numberToVarBytesBE(BigInt(i))));
|
|
103
|
+
const key = sha256Num(u.concatBytes(_seed, u.numberToVarBytesBE(BigInt(i))));
|
|
113
104
|
if (key < limit) return mod(key, CURVE_ORDER).toString(16); // key should be in [0, limit)
|
|
114
105
|
if (i === 100000) throw new Error('grindKey is broken: tried 100k vals'); // prevent dos
|
|
115
106
|
}
|
|
@@ -135,7 +126,7 @@ export function getAccountPath(
|
|
|
135
126
|
): string {
|
|
136
127
|
const layerNum = int31(sha256Num(layer));
|
|
137
128
|
const applicationNum = int31(sha256Num(application));
|
|
138
|
-
const eth = hexToNumber(strip0x(ethereumAddress));
|
|
129
|
+
const eth = u.hexToNumber(strip0x(ethereumAddress));
|
|
139
130
|
return `m/2645'/${layerNum}'/${applicationNum}'/${int31(eth)}'/${int31(eth >> 31n)}'/${index}`;
|
|
140
131
|
}
|
|
141
132
|
|
|
@@ -196,7 +187,7 @@ function pedersenArg(arg: PedersenArg): bigint {
|
|
|
196
187
|
if (!Number.isSafeInteger(arg)) throw new Error(`Invalid pedersenArg: ${arg}`);
|
|
197
188
|
value = BigInt(arg);
|
|
198
189
|
} else {
|
|
199
|
-
value = bytesToNumberBE(ensureBytes(arg));
|
|
190
|
+
value = u.bytesToNumberBE(ensureBytes(arg));
|
|
200
191
|
}
|
|
201
192
|
if (!(0n <= value && value < curve.CURVE.Fp.ORDER))
|
|
202
193
|
throw new Error(`PedersenArg should be 0 <= value < CURVE.P: ${value}`); // [0..Fp)
|
|
@@ -207,7 +198,7 @@ function pedersenSingle(point: ProjectivePoint, value: PedersenArg, constants: P
|
|
|
207
198
|
let x = pedersenArg(value);
|
|
208
199
|
for (let j = 0; j < 252; j++) {
|
|
209
200
|
const pt = constants[j];
|
|
210
|
-
if (pt.
|
|
201
|
+
if (pt.equals(point)) throw new Error('Same point');
|
|
211
202
|
if ((x & 1n) !== 0n) point = point.add(pt);
|
|
212
203
|
x >>= 1n;
|
|
213
204
|
}
|
|
@@ -234,9 +225,9 @@ export function hashChain(data: PedersenArg[], fn = pedersen) {
|
|
|
234
225
|
export const computeHashOnElements = (data: PedersenArg[], fn = pedersen) =>
|
|
235
226
|
[0, ...data, data.length].reduce((x, y) => fn(x, y));
|
|
236
227
|
|
|
237
|
-
const MASK_250 = bitMask(250);
|
|
238
|
-
export const keccak = (data: Uint8Array): bigint => bytesToNumberBE(keccak_256(data)) & MASK_250;
|
|
239
|
-
const sha256Num = (data: Uint8Array | string): bigint => bytesToNumberBE(sha256(data));
|
|
228
|
+
const MASK_250 = u.bitMask(250);
|
|
229
|
+
export const keccak = (data: Uint8Array): bigint => u.bytesToNumberBE(keccak_256(data)) & MASK_250;
|
|
230
|
+
const sha256Num = (data: Uint8Array | string): bigint => u.bytesToNumberBE(sha256(data));
|
|
240
231
|
|
|
241
232
|
// Poseidon hash
|
|
242
233
|
export const Fp253 = Fp(
|
|
@@ -280,7 +271,13 @@ export type PoseidonOpts = {
|
|
|
280
271
|
roundsPartial: number;
|
|
281
272
|
};
|
|
282
273
|
|
|
283
|
-
export
|
|
274
|
+
export type PoseidonFn = ReturnType<typeof poseidon> & {
|
|
275
|
+
m: number;
|
|
276
|
+
rate: number;
|
|
277
|
+
capacity: number;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]): PoseidonFn {
|
|
284
281
|
validateField(opts.Fp);
|
|
285
282
|
if (!Number.isSafeInteger(opts.rate) || !Number.isSafeInteger(opts.capacity))
|
|
286
283
|
throw new Error(`Wrong poseidon opts: ${opts}`);
|
|
@@ -292,7 +289,7 @@ export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]) {
|
|
|
292
289
|
for (let j = 0; j < m; j++) row.push(poseidonRoundConstant(opts.Fp, 'Hades', m * i + j));
|
|
293
290
|
roundConstants.push(row);
|
|
294
291
|
}
|
|
295
|
-
|
|
292
|
+
const res: Partial<PoseidonFn> = poseidon({
|
|
296
293
|
...opts,
|
|
297
294
|
t: m,
|
|
298
295
|
sboxPower: 3,
|
|
@@ -300,6 +297,10 @@ export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]) {
|
|
|
300
297
|
mds,
|
|
301
298
|
roundConstants,
|
|
302
299
|
});
|
|
300
|
+
res.m = m;
|
|
301
|
+
res.rate = opts.rate;
|
|
302
|
+
res.capacity = opts.capacity;
|
|
303
|
+
return res as PoseidonFn;
|
|
303
304
|
}
|
|
304
305
|
|
|
305
306
|
export function poseidonCreate(opts: PoseidonOpts, mdsAttempt = 0) {
|
|
@@ -313,6 +314,28 @@ export const poseidonSmall = poseidonBasic(
|
|
|
313
314
|
MDS_SMALL
|
|
314
315
|
);
|
|
315
316
|
|
|
316
|
-
export function poseidonHash(x: bigint, y: bigint, fn = poseidonSmall) {
|
|
317
|
+
export function poseidonHash(x: bigint, y: bigint, fn = poseidonSmall): bigint {
|
|
317
318
|
return fn([x, y, 2n])[0];
|
|
318
319
|
}
|
|
320
|
+
|
|
321
|
+
export function poseidonHashFunc(x: Uint8Array, y: Uint8Array, fn = poseidonSmall): Uint8Array {
|
|
322
|
+
return u.numberToVarBytesBE(poseidonHash(u.bytesToNumberBE(x), u.bytesToNumberBE(y), fn));
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export function poseidonHashSingle(x: bigint, fn = poseidonSmall): bigint {
|
|
326
|
+
return fn([x, 0n, 1n])[0];
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
export function poseidonHashMany(values: bigint[], fn = poseidonSmall): bigint {
|
|
330
|
+
const { m, rate } = fn;
|
|
331
|
+
if (!Array.isArray(values)) throw new Error('bigint array expected in values');
|
|
332
|
+
const padded = Array.from(values); // copy
|
|
333
|
+
padded.push(1n);
|
|
334
|
+
while (padded.length % rate !== 0) padded.push(0n);
|
|
335
|
+
let state: bigint[] = new Array(m).fill(0n);
|
|
336
|
+
for (let i = 0; i < padded.length; i += rate) {
|
|
337
|
+
for (let j = 0; j < rate; j++) state[j] += padded[i + j];
|
|
338
|
+
state = fn(state);
|
|
339
|
+
}
|
|
340
|
+
return state[0];
|
|
341
|
+
}
|