@noble/curves 1.0.0 → 1.1.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 +165 -116
- package/_shortw_utils.d.ts +1 -1
- package/abstract/edwards.d.ts +7 -2
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +7 -2
- package/abstract/edwards.js.map +1 -1
- package/abstract/modular.d.ts +5 -3
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +6 -4
- package/abstract/modular.js.map +1 -1
- package/abstract/utils.d.ts +42 -5
- package/abstract/utils.d.ts.map +1 -1
- package/abstract/utils.js +68 -25
- package/abstract/utils.js.map +1 -1
- package/abstract/weierstrass.d.ts +17 -2
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +28 -12
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +4 -3
- package/bls12-381.js.map +1 -1
- package/ed25519.d.ts +32 -20
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +52 -33
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +4 -4
- package/ed448.d.ts.map +1 -1
- package/ed448.js +12 -11
- package/ed448.js.map +1 -1
- package/esm/abstract/edwards.js +7 -2
- package/esm/abstract/edwards.js.map +1 -1
- package/esm/abstract/modular.js +6 -4
- package/esm/abstract/modular.js.map +1 -1
- package/esm/abstract/utils.js +68 -25
- package/esm/abstract/utils.js.map +1 -1
- package/esm/abstract/weierstrass.js +28 -12
- package/esm/abstract/weierstrass.js.map +1 -1
- package/esm/bls12-381.js +4 -3
- package/esm/bls12-381.js.map +1 -1
- package/esm/ed25519.js +51 -32
- package/esm/ed25519.js.map +1 -1
- package/esm/ed448.js +10 -8
- package/esm/ed448.js.map +1 -1
- package/esm/p256.js +10 -9
- package/esm/p256.js.map +1 -1
- package/esm/p384.js +7 -6
- package/esm/p384.js.map +1 -1
- package/esm/p521.js +7 -6
- package/esm/p521.js.map +1 -1
- package/esm/secp256k1.js +11 -9
- package/esm/secp256k1.js.map +1 -1
- package/p256.d.ts +4 -5
- package/p256.d.ts.map +1 -1
- package/p256.js +10 -10
- package/p256.js.map +1 -1
- package/p384.d.ts +4 -5
- package/p384.d.ts.map +1 -1
- package/p384.js +7 -7
- package/p384.js.map +1 -1
- package/p521.d.ts +4 -5
- package/p521.d.ts.map +1 -1
- package/p521.js +7 -7
- package/p521.js.map +1 -1
- package/package.json +5 -8
- package/secp256k1.d.ts +5 -5
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +11 -10
- package/secp256k1.js.map +1 -1
- package/src/abstract/edwards.ts +13 -4
- package/src/abstract/modular.ts +6 -8
- package/src/abstract/utils.ts +73 -32
- package/src/abstract/weierstrass.ts +39 -19
- package/src/bls12-381.ts +5 -9
- package/src/ed25519.ts +96 -69
- package/src/ed448.ts +36 -32
- package/src/p256.ts +13 -14
- package/src/p384.ts +12 -13
- package/src/p521.ts +12 -13
- package/src/secp256k1.ts +60 -55
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noble/curves",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Audited & minimal JS implementation of elliptic curve cryptography",
|
|
5
5
|
"files": [
|
|
6
6
|
"abstract",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@noble/hashes": "1.3.
|
|
31
|
+
"@noble/hashes": "1.3.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"fast-check": "3.0.0",
|
|
@@ -164,6 +164,8 @@
|
|
|
164
164
|
"secp256k1",
|
|
165
165
|
"ed25519",
|
|
166
166
|
"ed448",
|
|
167
|
+
"x25519",
|
|
168
|
+
"ed25519",
|
|
167
169
|
"bls12-381",
|
|
168
170
|
"bn254",
|
|
169
171
|
"pasta",
|
|
@@ -174,10 +176,5 @@
|
|
|
174
176
|
"eddsa",
|
|
175
177
|
"schnorr"
|
|
176
178
|
],
|
|
177
|
-
"funding":
|
|
178
|
-
{
|
|
179
|
-
"type": "individual",
|
|
180
|
-
"url": "https://paulmillr.com/funding/"
|
|
181
|
-
}
|
|
182
|
-
]
|
|
179
|
+
"funding": "https://paulmillr.com/funding/"
|
|
183
180
|
}
|
package/secp256k1.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { mod } from './abstract/modular.js';
|
|
2
2
|
import { ProjPointType as PointType } from './abstract/weierstrass.js';
|
|
3
3
|
import type { Hex, PrivKey } from './abstract/utils.js';
|
|
4
|
-
import { bytesToNumberBE } from './abstract/utils.js';
|
|
5
|
-
import * as htf from './abstract/hash-to-curve.js';
|
|
4
|
+
import { bytesToNumberBE, numberToBytesBE } from './abstract/utils.js';
|
|
6
5
|
export declare const secp256k1: Readonly<{
|
|
7
6
|
create: (hash: import("./abstract/utils.js").CHash) => import("./abstract/weierstrass.js").CurveFn;
|
|
8
7
|
CURVE: Readonly<{
|
|
@@ -40,7 +39,7 @@ export declare const secp256k1: Readonly<{
|
|
|
40
39
|
}>;
|
|
41
40
|
getPublicKey: (privateKey: PrivKey, isCompressed?: boolean | undefined) => Uint8Array;
|
|
42
41
|
getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean | undefined) => Uint8Array;
|
|
43
|
-
sign: (msgHash: Hex, privKey: PrivKey, opts?: import("./abstract/weierstrass.js").SignOpts | undefined) => import("./abstract/weierstrass.js").
|
|
42
|
+
sign: (msgHash: Hex, privKey: PrivKey, opts?: import("./abstract/weierstrass.js").SignOpts | undefined) => import("./abstract/weierstrass.js").RecoveredSignatureType;
|
|
44
43
|
verify: (signature: Hex | {
|
|
45
44
|
r: bigint;
|
|
46
45
|
s: bigint;
|
|
@@ -82,12 +81,13 @@ export declare const schnorr: {
|
|
|
82
81
|
randomPrivateKey: () => Uint8Array;
|
|
83
82
|
lift_x: typeof lift_x;
|
|
84
83
|
pointToBytes: (point: PointType<bigint>) => Uint8Array;
|
|
85
|
-
numberToBytesBE:
|
|
84
|
+
numberToBytesBE: typeof numberToBytesBE;
|
|
86
85
|
bytesToNumberBE: typeof bytesToNumberBE;
|
|
87
86
|
taggedHash: typeof taggedHash;
|
|
88
87
|
mod: typeof mod;
|
|
89
88
|
};
|
|
90
89
|
};
|
|
91
|
-
export declare const hashToCurve: (msg: Uint8Array, options?:
|
|
90
|
+
export declare const hashToCurve: (msg: Uint8Array, options?: import("./abstract/hash-to-curve.js").htfBasicOpts | undefined) => import("./abstract/hash-to-curve.js").H2CPoint<bigint>;
|
|
91
|
+
export declare const encodeToCurve: (msg: Uint8Array, options?: import("./abstract/hash-to-curve.js").htfBasicOpts | undefined) => import("./abstract/hash-to-curve.js").H2CPoint<bigint>;
|
|
92
92
|
export {};
|
|
93
93
|
//# sourceMappingURL=secp256k1.d.ts.map
|
package/secp256k1.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,GAAG,EAAQ,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,IAAI,SAAS,EAAuB,MAAM,2BAA2B,CAAC;AAC5F,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,GAAG,EAAQ,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,IAAI,SAAS,EAAuB,MAAM,2BAA2B,CAAC;AAC5F,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAA4B,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAwCjG,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CrB,CAAC;AASF,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAQtE;AAkBD;;;GAGG;AACH,iBAAS,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAS5C;AAQD;;GAEG;AACH,iBAAS,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,UAAU,CAExD;AAED;;;GAGG;AACH,iBAAS,WAAW,CAClB,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,OAAO,EACnB,OAAO,GAAE,GAAqB,GAC7B,UAAU,CAgBZ;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAiB5E;AAED,eAAO,MAAM,OAAO;;;;;;;8BA5FS,UAAU,MAAM,CAAC;;;;;;CAyGzC,CAAC;AA0DN,eAAO,MAAM,WAAW,uJAA4C,CAAC;AACrE,eAAO,MAAM,aAAa,uJAA8C,CAAC"}
|
package/secp256k1.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.encodeToCurve = exports.hashToCurve = exports.schnorr = exports.secp256k1 = void 0;
|
|
5
4
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
@@ -8,7 +7,7 @@ const utils_1 = require("@noble/hashes/utils");
|
|
|
8
7
|
const modular_js_1 = require("./abstract/modular.js");
|
|
9
8
|
const weierstrass_js_1 = require("./abstract/weierstrass.js");
|
|
10
9
|
const utils_js_1 = require("./abstract/utils.js");
|
|
11
|
-
const
|
|
10
|
+
const hash_to_curve_js_1 = require("./abstract/hash-to-curve.js");
|
|
12
11
|
const _shortw_utils_js_1 = require("./_shortw_utils.js");
|
|
13
12
|
const secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');
|
|
14
13
|
const secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
|
|
@@ -193,7 +192,7 @@ function schnorrVerify(signature, message, publicKey) {
|
|
|
193
192
|
return false;
|
|
194
193
|
}
|
|
195
194
|
}
|
|
196
|
-
exports.schnorr = {
|
|
195
|
+
exports.schnorr = (() => ({
|
|
197
196
|
getPublicKey: schnorrGetPublicKey,
|
|
198
197
|
sign: schnorrSign,
|
|
199
198
|
verify: schnorrVerify,
|
|
@@ -206,8 +205,8 @@ exports.schnorr = {
|
|
|
206
205
|
taggedHash,
|
|
207
206
|
mod: modular_js_1.mod,
|
|
208
207
|
},
|
|
209
|
-
};
|
|
210
|
-
const isoMap =
|
|
208
|
+
}))();
|
|
209
|
+
const isoMap = /* @__PURE__ */ (() => (0, hash_to_curve_js_1.isogenyMap)(Fp, [
|
|
211
210
|
// xNum
|
|
212
211
|
[
|
|
213
212
|
'0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',
|
|
@@ -235,13 +234,13 @@ const isoMap = htf.isogenyMap(Fp, [
|
|
|
235
234
|
'0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',
|
|
236
235
|
'0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1
|
|
237
236
|
],
|
|
238
|
-
].map((i) => i.map((j) => BigInt(j))));
|
|
239
|
-
const mapSWU = (0, weierstrass_js_1.mapToCurveSimpleSWU)(Fp, {
|
|
237
|
+
].map((i) => i.map((j) => BigInt(j)))))();
|
|
238
|
+
const mapSWU = /* @__PURE__ */ (() => (0, weierstrass_js_1.mapToCurveSimpleSWU)(Fp, {
|
|
240
239
|
A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),
|
|
241
240
|
B: BigInt('1771'),
|
|
242
241
|
Z: Fp.create(BigInt('-11')),
|
|
243
|
-
});
|
|
244
|
-
|
|
242
|
+
}))();
|
|
243
|
+
const htf = /* @__PURE__ */ (() => (0, hash_to_curve_js_1.createHasher)(exports.secp256k1.ProjectivePoint, (scalars) => {
|
|
245
244
|
const { x, y } = mapSWU(Fp.create(scalars[0]));
|
|
246
245
|
return isoMap(x, y);
|
|
247
246
|
}, {
|
|
@@ -252,5 +251,7 @@ _a = htf.createHasher(exports.secp256k1.ProjectivePoint, (scalars) => {
|
|
|
252
251
|
k: 128,
|
|
253
252
|
expand: 'xmd',
|
|
254
253
|
hash: sha256_1.sha256,
|
|
255
|
-
})
|
|
254
|
+
}))();
|
|
255
|
+
exports.hashToCurve = (() => htf.hashToCurve)();
|
|
256
|
+
exports.encodeToCurve = (() => htf.encodeToCurve)();
|
|
256
257
|
//# 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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"}
|
package/src/abstract/edwards.ts
CHANGED
|
@@ -75,8 +75,13 @@ export interface ExtPointConstructor extends GroupConstructor<ExtPointType> {
|
|
|
75
75
|
export type CurveFn = {
|
|
76
76
|
CURVE: ReturnType<typeof validateOpts>;
|
|
77
77
|
getPublicKey: (privateKey: Hex) => Uint8Array;
|
|
78
|
-
sign: (message: Hex, privateKey: Hex) => Uint8Array;
|
|
79
|
-
verify: (
|
|
78
|
+
sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;
|
|
79
|
+
verify: (
|
|
80
|
+
sig: Hex,
|
|
81
|
+
message: Hex,
|
|
82
|
+
publicKey: Hex,
|
|
83
|
+
options?: { context?: Hex; zip215: boolean }
|
|
84
|
+
) => boolean;
|
|
80
85
|
ExtendedPoint: ExtPointConstructor;
|
|
81
86
|
utils: {
|
|
82
87
|
randomPrivateKey: () => Uint8Array;
|
|
@@ -102,7 +107,7 @@ export function twistedEdwards(curveDef: CurveType): CurveFn {
|
|
|
102
107
|
nByteLength,
|
|
103
108
|
h: cofactor,
|
|
104
109
|
} = CURVE;
|
|
105
|
-
const MASK = _2n
|
|
110
|
+
const MASK = _2n << (BigInt(nByteLength * 8) - _1n);
|
|
106
111
|
const modP = Fp.create; // Function overrides
|
|
107
112
|
|
|
108
113
|
// sqrt(u/v)
|
|
@@ -379,7 +384,10 @@ export function twistedEdwards(curveDef: CurveType): CurveFn {
|
|
|
379
384
|
let { isValid, value: x } = uvRatio(u, v); // √(u/v)
|
|
380
385
|
if (!isValid) throw new Error('Point.fromHex: invalid y coordinate');
|
|
381
386
|
const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper
|
|
382
|
-
const isLastByteOdd = (lastByte & 0x80) !== 0; //
|
|
387
|
+
const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit
|
|
388
|
+
if (!zip215 && x === _0n && isLastByteOdd)
|
|
389
|
+
// if x=0 and x_0 = 1, fail
|
|
390
|
+
throw new Error('Point.fromHex: x=0 and x_0=1');
|
|
383
391
|
if (isLastByteOdd !== isXOdd) x = modP(-x); // if x_0 != x mod 2, set x = p-x
|
|
384
392
|
return Point.fromAffine({ x, y });
|
|
385
393
|
}
|
|
@@ -466,6 +474,7 @@ export function twistedEdwards(curveDef: CurveType): CurveFn {
|
|
|
466
474
|
} catch (error) {
|
|
467
475
|
return false;
|
|
468
476
|
}
|
|
477
|
+
if (!zip215 && A.isSmallOrder()) return false;
|
|
469
478
|
|
|
470
479
|
const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);
|
|
471
480
|
const RkA = R.add(A.multiplyUnsafe(k));
|
package/src/abstract/modular.ts
CHANGED
|
@@ -22,10 +22,10 @@ export function mod(a: bigint, b: bigint): bigint {
|
|
|
22
22
|
return result >= _0n ? result : b + result;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Efficiently
|
|
25
|
+
* Efficiently raise num to power and do modular division.
|
|
26
26
|
* Unsafe in some contexts: uses ladder, so can expose bigint bits.
|
|
27
27
|
* @example
|
|
28
|
-
*
|
|
28
|
+
* pow(2n, 6n, 11n) // 64n % 11n == 9n
|
|
29
29
|
*/
|
|
30
30
|
// TODO: use field version && remove
|
|
31
31
|
export function pow(num: bigint, power: bigint, modulo: bigint): bigint {
|
|
@@ -55,7 +55,7 @@ export function invert(number: bigint, modulo: bigint): bigint {
|
|
|
55
55
|
if (number === _0n || modulo <= _0n) {
|
|
56
56
|
throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
|
|
57
57
|
}
|
|
58
|
-
//
|
|
58
|
+
// Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/
|
|
59
59
|
// Fermat's little theorem "CT-like" version inv(n) = n^(m-2) mod m is 30x slower.
|
|
60
60
|
let a = mod(number, modulo);
|
|
61
61
|
let b = modulo;
|
|
@@ -198,10 +198,6 @@ export function FpSqrt(P: bigint) {
|
|
|
198
198
|
// Little-endian check for first LE bit (last BE bit);
|
|
199
199
|
export const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;
|
|
200
200
|
|
|
201
|
-
// Currently completly inconsistent naming:
|
|
202
|
-
// - readable: add, mul, sqr, sqrt, inv, div, pow, eq, sub
|
|
203
|
-
// - unreadable mess: addition, multiply, square, squareRoot, inversion, divide, power, equals, subtract
|
|
204
|
-
|
|
205
201
|
// Field is not always over prime, Fp2 for example has ORDER(q)=p^m
|
|
206
202
|
export interface IField<T> {
|
|
207
203
|
ORDER: bigint;
|
|
@@ -406,10 +402,12 @@ export function FpSqrtEven<T>(Fp: IField<T>, elm: T) {
|
|
|
406
402
|
/**
|
|
407
403
|
* FIPS 186 B.4.1-compliant "constant-time" private key generation utility.
|
|
408
404
|
* Can take (n+8) or more bytes of uniform input e.g. from CSPRNG or KDF
|
|
409
|
-
* and convert them into private scalar, with the modulo bias being
|
|
405
|
+
* and convert them into private scalar, with the modulo bias being negligible.
|
|
410
406
|
* Needs at least 40 bytes of input for 32-byte private key.
|
|
411
407
|
* https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/
|
|
412
408
|
* @param hash hash output from SHA3 or a similar function
|
|
409
|
+
* @param groupOrder size of subgroup - (e.g. curveFn.CURVE.n)
|
|
410
|
+
* @param isLE interpret hash bytes as LE num
|
|
413
411
|
* @returns valid private scalar
|
|
414
412
|
*/
|
|
415
413
|
export function hashToPrivateScalar(
|
package/src/abstract/utils.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
2
|
+
// 100 lines of code in the file are duplicated from noble-hashes (utils).
|
|
3
|
+
// This is OK: `abstract` directory does not use noble-hashes.
|
|
4
|
+
// User may opt-in into using different hashing library. This way, noble-hashes
|
|
5
|
+
// won't be included into their bundle.
|
|
2
6
|
const _0n = BigInt(0);
|
|
3
7
|
const _1n = BigInt(1);
|
|
4
8
|
const _2n = BigInt(2);
|
|
5
9
|
const u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;
|
|
6
|
-
|
|
7
|
-
//
|
|
8
|
-
export type Hex = Uint8Array | string;
|
|
9
|
-
// Very few implementations accept numbers, we do it to ease learning curve
|
|
10
|
-
export type PrivKey = Hex | bigint;
|
|
10
|
+
export type Hex = Uint8Array | string; // hex strings are accepted for simplicity
|
|
11
|
+
export type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve
|
|
11
12
|
export type CHash = {
|
|
12
13
|
(message: Uint8Array | string): Uint8Array;
|
|
13
14
|
blockLen: number;
|
|
@@ -17,6 +18,9 @@ export type CHash = {
|
|
|
17
18
|
export type FHash = (message: Uint8Array | string) => Uint8Array;
|
|
18
19
|
|
|
19
20
|
const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));
|
|
21
|
+
/**
|
|
22
|
+
* @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'
|
|
23
|
+
*/
|
|
20
24
|
export function bytesToHex(bytes: Uint8Array): string {
|
|
21
25
|
if (!u8a(bytes)) throw new Error('Uint8Array expected');
|
|
22
26
|
// pre-caching improves the speed 6x
|
|
@@ -38,22 +42,25 @@ export function hexToNumber(hex: string): bigint {
|
|
|
38
42
|
return BigInt(hex === '' ? '0' : `0x${hex}`);
|
|
39
43
|
}
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
/**
|
|
46
|
+
* @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])
|
|
47
|
+
*/
|
|
42
48
|
export function hexToBytes(hex: string): Uint8Array {
|
|
43
49
|
if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);
|
|
44
|
-
|
|
45
|
-
|
|
50
|
+
const len = hex.length;
|
|
51
|
+
if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);
|
|
52
|
+
const array = new Uint8Array(len / 2);
|
|
46
53
|
for (let i = 0; i < array.length; i++) {
|
|
47
54
|
const j = i * 2;
|
|
48
55
|
const hexByte = hex.slice(j, j + 2);
|
|
49
56
|
const byte = Number.parseInt(hexByte, 16);
|
|
50
|
-
if (Number.isNaN(byte) || byte < 0) throw new Error('
|
|
57
|
+
if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');
|
|
51
58
|
array[i] = byte;
|
|
52
59
|
}
|
|
53
60
|
return array;
|
|
54
61
|
}
|
|
55
62
|
|
|
56
|
-
// Big Endian
|
|
63
|
+
// BE: Big Endian, LE: Little Endian
|
|
57
64
|
export function bytesToNumberBE(bytes: Uint8Array): bigint {
|
|
58
65
|
return hexToNumber(bytesToHex(bytes));
|
|
59
66
|
}
|
|
@@ -62,12 +69,26 @@ export function bytesToNumberLE(bytes: Uint8Array): bigint {
|
|
|
62
69
|
return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));
|
|
63
70
|
}
|
|
64
71
|
|
|
65
|
-
export
|
|
66
|
-
hexToBytes(n.toString(16).padStart(len * 2, '0'));
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
export function numberToBytesBE(n: number | bigint, len: number): Uint8Array {
|
|
73
|
+
return hexToBytes(n.toString(16).padStart(len * 2, '0'));
|
|
74
|
+
}
|
|
75
|
+
export function numberToBytesLE(n: number | bigint, len: number): Uint8Array {
|
|
76
|
+
return numberToBytesBE(n, len).reverse();
|
|
77
|
+
}
|
|
78
|
+
// Unpadded, rarely used
|
|
79
|
+
export function numberToVarBytesBE(n: number | bigint): Uint8Array {
|
|
80
|
+
return hexToBytes(numberToHexUnpadded(n));
|
|
81
|
+
}
|
|
70
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Takes hex string or Uint8Array, converts to Uint8Array.
|
|
85
|
+
* Validates output length.
|
|
86
|
+
* Will throw error for other types.
|
|
87
|
+
* @param title descriptive title for an error e.g. 'private key'
|
|
88
|
+
* @param hex hex string or Uint8Array
|
|
89
|
+
* @param expectedLength optional, will compare to result array's length
|
|
90
|
+
* @returns
|
|
91
|
+
*/
|
|
71
92
|
export function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {
|
|
72
93
|
let res: Uint8Array;
|
|
73
94
|
if (typeof hex === 'string') {
|
|
@@ -89,11 +110,13 @@ export function ensureBytes(title: string, hex: Hex, expectedLength?: number): U
|
|
|
89
110
|
return res;
|
|
90
111
|
}
|
|
91
112
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Copies several Uint8Arrays into one.
|
|
115
|
+
*/
|
|
116
|
+
export function concatBytes(...arrays: Uint8Array[]): Uint8Array {
|
|
117
|
+
const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));
|
|
95
118
|
let pad = 0; // walk through each item, ensure they have proper type
|
|
96
|
-
|
|
119
|
+
arrays.forEach((a) => {
|
|
97
120
|
if (!u8a(a)) throw new Error('Uint8Array expected');
|
|
98
121
|
r.set(a, pad);
|
|
99
122
|
pad += a.length;
|
|
@@ -111,29 +134,47 @@ export function equalBytes(b1: Uint8Array, b2: Uint8Array) {
|
|
|
111
134
|
// Global symbols in both browsers and Node.js since v11
|
|
112
135
|
// See https://github.com/microsoft/TypeScript/issues/31535
|
|
113
136
|
declare const TextEncoder: any;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])
|
|
140
|
+
*/
|
|
114
141
|
export function utf8ToBytes(str: string): Uint8Array {
|
|
115
|
-
if (typeof str !== 'string') {
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
return new TextEncoder().encode(str);
|
|
142
|
+
if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);
|
|
143
|
+
return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809
|
|
119
144
|
}
|
|
120
145
|
|
|
121
146
|
// Bit operations
|
|
122
147
|
|
|
123
|
-
|
|
148
|
+
/**
|
|
149
|
+
* Calculates amount of bits in a bigint.
|
|
150
|
+
* Same as `n.toString(2).length`
|
|
151
|
+
*/
|
|
124
152
|
export function bitLen(n: bigint) {
|
|
125
153
|
let len;
|
|
126
154
|
for (len = 0; n > _0n; n >>= _1n, len += 1);
|
|
127
155
|
return len;
|
|
128
156
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Gets single bit at position.
|
|
160
|
+
* NOTE: first bit position is 0 (same as arrays)
|
|
161
|
+
* Same as `!!+Array.from(n.toString(2)).reverse()[pos]`
|
|
162
|
+
*/
|
|
163
|
+
export function bitGet(n: bigint, pos: number) {
|
|
164
|
+
return (n >> BigInt(pos)) & _1n;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Sets single bit at position.
|
|
169
|
+
*/
|
|
170
|
+
export const bitSet = (n: bigint, pos: number, value: boolean) => {
|
|
171
|
+
return n | ((value ? _1n : _0n) << BigInt(pos));
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Calculate mask for N bits. Not using ** operator with bigints because of old engines.
|
|
176
|
+
* Same as BigInt(`0b${Array(i).fill('1').join('')}`)
|
|
177
|
+
*/
|
|
137
178
|
export const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;
|
|
138
179
|
|
|
139
180
|
// DRBG
|
|
@@ -618,7 +618,7 @@ export interface SignatureType {
|
|
|
618
618
|
readonly s: bigint;
|
|
619
619
|
readonly recovery?: number;
|
|
620
620
|
assertValidity(): void;
|
|
621
|
-
addRecoveryBit(recovery: number):
|
|
621
|
+
addRecoveryBit(recovery: number): RecoveredSignatureType;
|
|
622
622
|
hasHighS(): boolean;
|
|
623
623
|
normalizeS(): SignatureType;
|
|
624
624
|
recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;
|
|
@@ -628,6 +628,9 @@ export interface SignatureType {
|
|
|
628
628
|
toDERRawBytes(isCompressed?: boolean): Uint8Array;
|
|
629
629
|
toDERHex(isCompressed?: boolean): string;
|
|
630
630
|
}
|
|
631
|
+
export type RecoveredSignatureType = SignatureType & {
|
|
632
|
+
readonly recovery: number;
|
|
633
|
+
};
|
|
631
634
|
// Static methods
|
|
632
635
|
export type SignatureConstructor = {
|
|
633
636
|
new (r: bigint, s: bigint): SignatureType;
|
|
@@ -669,7 +672,7 @@ export type CurveFn = {
|
|
|
669
672
|
CURVE: ReturnType<typeof validateOpts>;
|
|
670
673
|
getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;
|
|
671
674
|
getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;
|
|
672
|
-
sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) =>
|
|
675
|
+
sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;
|
|
673
676
|
verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;
|
|
674
677
|
ProjectivePoint: ProjConstructor<bigint>;
|
|
675
678
|
Signature: SignatureConstructor;
|
|
@@ -782,8 +785,8 @@ export function weierstrass(curveDef: CurveType): CurveFn {
|
|
|
782
785
|
if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');
|
|
783
786
|
}
|
|
784
787
|
|
|
785
|
-
addRecoveryBit(recovery: number) {
|
|
786
|
-
return new Signature(this.r, this.s, recovery);
|
|
788
|
+
addRecoveryBit(recovery: number): RecoveredSignature {
|
|
789
|
+
return new Signature(this.r, this.s, recovery) as RecoveredSignature;
|
|
787
790
|
}
|
|
788
791
|
|
|
789
792
|
recoverPublicKey(msgHash: Hex): typeof Point.BASE {
|
|
@@ -828,6 +831,7 @@ export function weierstrass(curveDef: CurveType): CurveFn {
|
|
|
828
831
|
return numToNByteStr(this.r) + numToNByteStr(this.s);
|
|
829
832
|
}
|
|
830
833
|
}
|
|
834
|
+
type RecoveredSignature = Signature & { recovery: number };
|
|
831
835
|
|
|
832
836
|
const utils = {
|
|
833
837
|
isValidPrivateKey(privateKey: PrivKey) {
|
|
@@ -965,7 +969,7 @@ export function weierstrass(curveDef: CurveType): CurveFn {
|
|
|
965
969
|
const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2
|
|
966
970
|
const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!
|
|
967
971
|
// Converts signature params into point w r/s, checks result for validity.
|
|
968
|
-
function k2sig(kBytes: Uint8Array):
|
|
972
|
+
function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {
|
|
969
973
|
// RFC 6979 Section 3.2, step 3: k = bits2int(T)
|
|
970
974
|
const k = bits2int(kBytes); // Cannot use fields methods, since it is group element
|
|
971
975
|
if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N
|
|
@@ -984,7 +988,7 @@ export function weierstrass(curveDef: CurveType): CurveFn {
|
|
|
984
988
|
normS = normalizeS(s); // if lowS was passed, ensure s is always
|
|
985
989
|
recovery ^= 1; // // in the bottom half of N
|
|
986
990
|
}
|
|
987
|
-
return new Signature(r, normS, recovery); // use normS, not s
|
|
991
|
+
return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s
|
|
988
992
|
}
|
|
989
993
|
return { seed, k2sig };
|
|
990
994
|
}
|
|
@@ -992,18 +996,22 @@ export function weierstrass(curveDef: CurveType): CurveFn {
|
|
|
992
996
|
const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };
|
|
993
997
|
|
|
994
998
|
/**
|
|
995
|
-
* Signs message hash
|
|
999
|
+
* Signs message hash with a private key.
|
|
996
1000
|
* ```
|
|
997
1001
|
* sign(m, d, k) where
|
|
998
1002
|
* (x, y) = G × k
|
|
999
1003
|
* r = x mod n
|
|
1000
1004
|
* s = (m + dr)/k mod n
|
|
1001
1005
|
* ```
|
|
1002
|
-
* @param
|
|
1006
|
+
* @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.
|
|
1007
|
+
* @param privKey private key
|
|
1008
|
+
* @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.
|
|
1009
|
+
* @returns signature with recovery param
|
|
1003
1010
|
*/
|
|
1004
|
-
function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts):
|
|
1011
|
+
function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {
|
|
1005
1012
|
const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.
|
|
1006
|
-
const
|
|
1013
|
+
const C = CURVE;
|
|
1014
|
+
const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);
|
|
1007
1015
|
return drbg(seed, k2sig); // Steps B, C, D, E, F, G
|
|
1008
1016
|
}
|
|
1009
1017
|
|
|
@@ -1084,20 +1092,29 @@ export function weierstrass(curveDef: CurveType): CurveFn {
|
|
|
1084
1092
|
};
|
|
1085
1093
|
}
|
|
1086
1094
|
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1095
|
+
/**
|
|
1096
|
+
* Implementation of the Shallue and van de Woestijne method for any weierstrass curve.
|
|
1097
|
+
* TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.
|
|
1098
|
+
* b = True and y = sqrt(u / v) if (u / v) is square in F, and
|
|
1099
|
+
* b = False and y = sqrt(Z * (u / v)) otherwise.
|
|
1100
|
+
* @param Fp
|
|
1101
|
+
* @param Z
|
|
1102
|
+
* @returns
|
|
1103
|
+
*/
|
|
1091
1104
|
export function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {
|
|
1092
1105
|
// Generic implementation
|
|
1093
1106
|
const q = Fp.ORDER;
|
|
1094
1107
|
let l = _0n;
|
|
1095
1108
|
for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;
|
|
1096
1109
|
const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.
|
|
1097
|
-
|
|
1110
|
+
// We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.
|
|
1111
|
+
// 2n ** c1 == 2n << (c1-1)
|
|
1112
|
+
const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);
|
|
1113
|
+
const _2n_pow_c1 = _2n_pow_c1_1 * _2n;
|
|
1114
|
+
const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic
|
|
1098
1115
|
const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic
|
|
1099
|
-
const c4 =
|
|
1100
|
-
const c5 =
|
|
1116
|
+
const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic
|
|
1117
|
+
const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic
|
|
1101
1118
|
const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2
|
|
1102
1119
|
const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)
|
|
1103
1120
|
let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {
|
|
@@ -1119,7 +1136,8 @@ export function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {
|
|
|
1119
1136
|
tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)
|
|
1120
1137
|
// 17. for i in (c1, c1 - 1, ..., 2):
|
|
1121
1138
|
for (let i = c1; i > _1n; i--) {
|
|
1122
|
-
let tv5 =
|
|
1139
|
+
let tv5 = i - _2n; // 18. tv5 = i - 2
|
|
1140
|
+
tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5
|
|
1123
1141
|
let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5
|
|
1124
1142
|
const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1
|
|
1125
1143
|
tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1
|
|
@@ -1151,7 +1169,9 @@ export function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {
|
|
|
1151
1169
|
// if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8
|
|
1152
1170
|
return sqrtRatio;
|
|
1153
1171
|
}
|
|
1154
|
-
|
|
1172
|
+
/**
|
|
1173
|
+
* From draft-irtf-cfrg-hash-to-curve-16
|
|
1174
|
+
*/
|
|
1155
1175
|
export function mapToCurveSimpleSWU<T>(
|
|
1156
1176
|
Fp: mod.IField<T>,
|
|
1157
1177
|
opts: {
|
package/src/bls12-381.ts
CHANGED
|
@@ -60,11 +60,10 @@ const _8n = BigInt(8), _16n = BigInt(16);
|
|
|
60
60
|
|
|
61
61
|
// CURVE FIELDS
|
|
62
62
|
// Finite field over p.
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
'0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'
|
|
66
|
-
)
|
|
63
|
+
const Fp_raw = BigInt(
|
|
64
|
+
'0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'
|
|
67
65
|
);
|
|
66
|
+
const Fp = mod.Field(Fp_raw);
|
|
68
67
|
type Fp = bigint;
|
|
69
68
|
// Finite field over r.
|
|
70
69
|
// This particular field is not used anywhere in bls12-381, but it is still useful.
|
|
@@ -110,10 +109,7 @@ type Fp2Utils = {
|
|
|
110
109
|
// G² - 1
|
|
111
110
|
// h2q
|
|
112
111
|
// NOTE: ORDER was wrong!
|
|
113
|
-
const FP2_ORDER =
|
|
114
|
-
BigInt(
|
|
115
|
-
'0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'
|
|
116
|
-
) ** _2n;
|
|
112
|
+
const FP2_ORDER = Fp_raw * Fp_raw;
|
|
117
113
|
|
|
118
114
|
const Fp2: mod.IField<Fp2> & Fp2Utils = {
|
|
119
115
|
ORDER: FP2_ORDER,
|
|
@@ -1197,7 +1193,7 @@ export const bls12_381: CurveFn<Fp, Fp2, Fp6, Fp12> = bls({
|
|
|
1197
1193
|
),
|
|
1198
1194
|
]),
|
|
1199
1195
|
a: Fp2.ZERO,
|
|
1200
|
-
b: Fp2.fromBigTuple([
|
|
1196
|
+
b: Fp2.fromBigTuple([_4n, _4n]),
|
|
1201
1197
|
hEff: BigInt(
|
|
1202
1198
|
'0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551'
|
|
1203
1199
|
),
|