@noble/curves 0.7.3 → 0.8.1
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 +16 -17
- 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/esm/abstract/hash-to-curve.js +8 -8
- package/esm/abstract/hash-to-curve.js.map +1 -1
- package/esm/abstract/modular.js +1 -0
- package/esm/abstract/modular.js.map +1 -1
- package/esm/abstract/weierstrass.js +4 -9
- package/esm/abstract/weierstrass.js.map +1 -1
- package/esm/ed25519.js +13 -1
- package/esm/ed25519.js.map +1 -1
- package/esm/package.json +1 -1
- package/esm/secp256k1.js +6 -7
- package/esm/secp256k1.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 +3 -7
- 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/esm/stark.js +0 -251
- package/esm/stark.js.map +0 -1
- package/src/stark.ts +0 -318
- package/stark.d.ts +0 -83
- package/stark.d.ts.map +0 -1
- package/stark.js +0 -273
- package/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,
|