@noble/curves 1.1.0 → 1.3.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 +295 -258
- package/abstract/bls.d.ts +27 -10
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/bls.js +60 -10
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.js.map +1 -1
- package/abstract/hash-to-curve.d.ts +2 -2
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +22 -16
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts +51 -11
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +79 -21
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +5 -7
- package/abstract/montgomery.js.map +1 -1
- package/abstract/poseidon.d.ts.map +1 -1
- package/abstract/poseidon.js +39 -41
- package/abstract/poseidon.js.map +1 -1
- package/abstract/utils.d.ts +3 -1
- package/abstract/utils.d.ts.map +1 -1
- package/abstract/utils.js +56 -31
- package/abstract/utils.js.map +1 -1
- package/abstract/weierstrass.d.ts +25 -28
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +17 -15
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +142 -88
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +3 -2
- package/bn254.d.ts.map +1 -1
- package/bn254.js +3 -2
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +5 -2
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +17 -8
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +53 -2
- package/ed448.d.ts.map +1 -1
- package/ed448.js +216 -29
- package/ed448.js.map +1 -1
- package/esm/abstract/bls.js +61 -11
- package/esm/abstract/bls.js.map +1 -1
- package/esm/abstract/curve.js.map +1 -1
- package/esm/abstract/edwards.js.map +1 -1
- package/esm/abstract/hash-to-curve.js +23 -17
- package/esm/abstract/hash-to-curve.js.map +1 -1
- package/esm/abstract/modular.js +75 -20
- package/esm/abstract/modular.js.map +1 -1
- package/esm/abstract/montgomery.js +5 -7
- package/esm/abstract/montgomery.js.map +1 -1
- package/esm/abstract/poseidon.js +39 -41
- package/esm/abstract/poseidon.js.map +1 -1
- package/esm/abstract/utils.js +54 -30
- package/esm/abstract/utils.js.map +1 -1
- package/esm/abstract/weierstrass.js +17 -15
- package/esm/abstract/weierstrass.js.map +1 -1
- package/esm/bls12-381.js +143 -89
- package/esm/bls12-381.js.map +1 -1
- package/esm/bn254.js +3 -2
- package/esm/bn254.js.map +1 -1
- package/esm/ed25519.js +17 -8
- package/esm/ed25519.js.map +1 -1
- package/esm/ed448.js +218 -32
- package/esm/ed448.js.map +1 -1
- package/esm/jubjub.js +1 -1
- package/esm/jubjub.js.map +1 -1
- package/esm/p256.js +2 -2
- package/esm/p256.js.map +1 -1
- package/esm/p384.js +2 -2
- package/esm/p384.js.map +1 -1
- package/esm/p521.js +3 -3
- package/esm/p521.js.map +1 -1
- package/esm/package.json +1 -4
- package/esm/secp256k1.js +6 -6
- package/esm/secp256k1.js.map +1 -1
- package/jubjub.js.map +1 -1
- package/p256.js +2 -2
- package/p256.js.map +1 -1
- package/p384.js +2 -2
- package/p384.js.map +1 -1
- package/p521.js +3 -3
- package/p521.js.map +1 -1
- package/package.json +7 -6
- package/secp256k1.js +6 -6
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +120 -22
- package/src/abstract/hash-to-curve.ts +24 -17
- package/src/abstract/modular.ts +81 -22
- package/src/abstract/montgomery.ts +4 -6
- package/src/abstract/poseidon.ts +39 -40
- package/src/abstract/utils.ts +55 -26
- package/src/abstract/weierstrass.ts +29 -18
- package/src/bls12-381.ts +132 -75
- package/src/bn254.ts +3 -2
- package/src/ed25519.ts +19 -8
- package/src/ed448.ts +267 -34
- package/src/jubjub.ts +1 -1
package/p521.js
CHANGED
|
@@ -25,12 +25,12 @@ const CURVE = {
|
|
|
25
25
|
};
|
|
26
26
|
// prettier-ignore
|
|
27
27
|
exports.p521 = (0, _shortw_utils_js_1.createCurve)({
|
|
28
|
-
a: CURVE.a,
|
|
28
|
+
a: CURVE.a, // Equation params: a, b
|
|
29
29
|
b: CURVE.b,
|
|
30
|
-
Fp,
|
|
30
|
+
Fp, // Field: 2n**521n - 1n
|
|
31
31
|
// Curve order, total count of valid points in the field
|
|
32
32
|
n: CURVE.n,
|
|
33
|
-
Gx: CURVE.Gx,
|
|
33
|
+
Gx: CURVE.Gx, // Base point (x, y) aka generator point
|
|
34
34
|
Gy: CURVE.Gy,
|
|
35
35
|
h: CURVE.h,
|
|
36
36
|
lowS: false,
|
package/p521.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p521.js","sourceRoot":"","sources":["src/p521.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACtE,yDAAiD;AACjD,iDAA8C;AAC9C,sDAA8C;AAC9C,8DAAgE;AAChE,kEAA2D;AAE3D,0BAA0B;AAC1B,mEAAmE;AACnE,0EAA0E;AAE1E,0CAA0C;AAC1C,kBAAkB;AAClB,MAAM,CAAC,GAAG,MAAM,CAAC,uIAAuI,CAAC,CAAC;AAC1J,MAAM,EAAE,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,CAAC;AAEpB,MAAM,KAAK,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,EAAE,MAAM,CACP,wIAAwI,CACzI;IACD,EAAE;IACF,CAAC,EAAE,MAAM,CACP,wIAAwI,CACzI;IACD,EAAE,EAAE,MAAM,CACR,wIAAwI,CACzI;IACD,EAAE,EAAE,MAAM,CACR,wIAAwI,CACzI;IACD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACb,CAAC;AAEF,kBAAkB;AACL,QAAA,IAAI,GAAG,IAAA,8BAAW,EAAC;IAC9B,CAAC,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"p521.js","sourceRoot":"","sources":["src/p521.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACtE,yDAAiD;AACjD,iDAA8C;AAC9C,sDAA8C;AAC9C,8DAAgE;AAChE,kEAA2D;AAE3D,0BAA0B;AAC1B,mEAAmE;AACnE,0EAA0E;AAE1E,0CAA0C;AAC1C,kBAAkB;AAClB,MAAM,CAAC,GAAG,MAAM,CAAC,uIAAuI,CAAC,CAAC;AAC1J,MAAM,EAAE,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,CAAC;AAEpB,MAAM,KAAK,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,EAAE,MAAM,CACP,wIAAwI,CACzI;IACD,EAAE;IACF,CAAC,EAAE,MAAM,CACP,wIAAwI,CACzI;IACD,EAAE,EAAE,MAAM,CACR,wIAAwI,CACzI;IACD,EAAE,EAAE,MAAM,CACR,wIAAwI,CACzI;IACD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACb,CAAC;AAEF,kBAAkB;AACL,QAAA,IAAI,GAAG,IAAA,8BAAW,EAAC;IAC9B,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,wBAAwB;IACpC,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,EAAE,EAAE,uBAAuB;IAC3B,wDAAwD;IACxD,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,wCAAwC;IACtD,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,IAAI,EAAE,KAAK;IACX,wBAAwB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,mDAAmD;CACrF,EAAE,eAAM,CAAC,CAAC;AACP,QAAA,SAAS,GAAG,YAAI,CAAC;AAE9B,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CACnC,IAAA,oCAAmB,EAAC,EAAE,EAAE;IACtB,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC,CAAC,EAAE,CAAC;AAER,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAChC,IAAA,+BAAY,EAAC,iBAAS,CAAC,eAAe,EAAE,CAAC,OAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;IACjF,GAAG,EAAE,2BAA2B;IAChC,SAAS,EAAE,2BAA2B;IACtC,CAAC,EAAE,EAAE,CAAC,KAAK;IACX,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,eAAM;CACb,CAAC,CAAC,EAAE,CAAC;AACK,QAAA,WAAW,GAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;AACxD,QAAA,aAAa,GAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noble/curves",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Audited & minimal JS implementation of elliptic curve cryptography",
|
|
5
5
|
"files": [
|
|
6
6
|
"abstract",
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
"*.d.ts.map"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
15
|
-
"bench": "cd benchmark; node secp256k1.js; node curves.js; node ecdh.js; node hash-to-curve.js; node modular.js; node bls.js",
|
|
15
|
+
"bench": "cd benchmark; node secp256k1.js; node curves.js; node ecdh.js; node hash-to-curve.js; node modular.js; node bls.js; node ristretto255.js; node decaf448.js",
|
|
16
16
|
"build": "tsc && tsc -p tsconfig.esm.json",
|
|
17
|
-
"build:release": "
|
|
17
|
+
"build:release": "cd build; npm install && npm run build",
|
|
18
18
|
"build:clean": "rm *.{js,d.ts,d.ts.map,js.map} esm/*.{js,d.ts,d.ts.map,js.map} 2> /dev/null",
|
|
19
19
|
"lint": "prettier --check 'src/**/*.{js,ts}' 'test/*.js'",
|
|
20
20
|
"format": "prettier --write 'src/**/*.{js,ts}' 'test/*.js'",
|
|
@@ -28,15 +28,16 @@
|
|
|
28
28
|
},
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@noble/hashes": "1.3.
|
|
31
|
+
"@noble/hashes": "1.3.3"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"fast-check": "3.0.0",
|
|
35
35
|
"micro-bmark": "0.3.1",
|
|
36
36
|
"micro-should": "0.4.0",
|
|
37
|
-
"prettier": "
|
|
38
|
-
"typescript": "5.
|
|
37
|
+
"prettier": "3.1.1",
|
|
38
|
+
"typescript": "5.3.2"
|
|
39
39
|
},
|
|
40
|
+
"sideEffects": false,
|
|
40
41
|
"main": "index.js",
|
|
41
42
|
"exports": {
|
|
42
43
|
".": {
|
package/secp256k1.js
CHANGED
|
@@ -44,15 +44,15 @@ function sqrtMod(y) {
|
|
|
44
44
|
}
|
|
45
45
|
const Fp = (0, modular_js_1.Field)(secp256k1P, undefined, undefined, { sqrt: sqrtMod });
|
|
46
46
|
exports.secp256k1 = (0, _shortw_utils_js_1.createCurve)({
|
|
47
|
-
a: BigInt(0),
|
|
48
|
-
b: BigInt(7),
|
|
49
|
-
Fp,
|
|
50
|
-
n: secp256k1N,
|
|
47
|
+
a: BigInt(0), // equation params: a, b
|
|
48
|
+
b: BigInt(7), // Seem to be rigid: bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975
|
|
49
|
+
Fp, // Field's prime: 2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n
|
|
50
|
+
n: secp256k1N, // Curve order, total count of valid points in the field
|
|
51
51
|
// Base point (x, y) aka generator point
|
|
52
52
|
Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),
|
|
53
53
|
Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),
|
|
54
|
-
h: BigInt(1),
|
|
55
|
-
lowS: true,
|
|
54
|
+
h: BigInt(1), // Cofactor
|
|
55
|
+
lowS: true, // Allow only low-S signatures by default in sign() and verify()
|
|
56
56
|
/**
|
|
57
57
|
* secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.
|
|
58
58
|
* Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.
|
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/bls.ts
CHANGED
|
@@ -12,9 +12,13 @@
|
|
|
12
12
|
* Some projects may prefer to swap this relation, it is not supported for now.
|
|
13
13
|
*/
|
|
14
14
|
import { AffinePoint } from './curve.js';
|
|
15
|
-
import { IField,
|
|
15
|
+
import { IField, getMinHashLength, mapHashToField } from './modular.js';
|
|
16
16
|
import { Hex, PrivKey, CHash, bitLen, bitGet, ensureBytes } from './utils.js';
|
|
17
|
-
|
|
17
|
+
// prettier-ignore
|
|
18
|
+
import {
|
|
19
|
+
MapToCurve, Opts as HTFOpts, H2CPointConstructor, htfBasicOpts,
|
|
20
|
+
createHasher
|
|
21
|
+
} from './hash-to-curve.js';
|
|
18
22
|
import {
|
|
19
23
|
CurvePointsType,
|
|
20
24
|
ProjPointType as ProjPointType,
|
|
@@ -27,6 +31,12 @@ type Fp = bigint; // Can be different field?
|
|
|
27
31
|
// prettier-ignore
|
|
28
32
|
const _2n = BigInt(2), _3n = BigInt(3);
|
|
29
33
|
|
|
34
|
+
export type ShortSignatureCoder<Fp> = {
|
|
35
|
+
fromHex(hex: Hex): ProjPointType<Fp>;
|
|
36
|
+
toRawBytes(point: ProjPointType<Fp>): Uint8Array;
|
|
37
|
+
toHex(point: ProjPointType<Fp>): string;
|
|
38
|
+
};
|
|
39
|
+
|
|
30
40
|
export type SignatureCoder<Fp2> = {
|
|
31
41
|
fromHex(hex: Hex): ProjPointType<Fp2>;
|
|
32
42
|
toRawBytes(point: ProjPointType<Fp2>): Uint8Array;
|
|
@@ -35,13 +45,14 @@ export type SignatureCoder<Fp2> = {
|
|
|
35
45
|
|
|
36
46
|
export type CurveType<Fp, Fp2, Fp6, Fp12> = {
|
|
37
47
|
G1: Omit<CurvePointsType<Fp>, 'n'> & {
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
ShortSignature: SignatureCoder<Fp>;
|
|
49
|
+
mapToCurve: MapToCurve<Fp>;
|
|
50
|
+
htfDefaults: HTFOpts;
|
|
40
51
|
};
|
|
41
52
|
G2: Omit<CurvePointsType<Fp2>, 'n'> & {
|
|
42
53
|
Signature: SignatureCoder<Fp2>;
|
|
43
|
-
mapToCurve:
|
|
44
|
-
htfDefaults:
|
|
54
|
+
mapToCurve: MapToCurve<Fp2>;
|
|
55
|
+
htfDefaults: HTFOpts;
|
|
45
56
|
};
|
|
46
57
|
fields: {
|
|
47
58
|
Fp: IField<Fp>;
|
|
@@ -63,26 +74,39 @@ export type CurveType<Fp, Fp2, Fp6, Fp12> = {
|
|
|
63
74
|
x: bigint;
|
|
64
75
|
r: bigint;
|
|
65
76
|
};
|
|
66
|
-
htfDefaults:
|
|
77
|
+
htfDefaults: HTFOpts;
|
|
67
78
|
hash: CHash; // Because we need outputLen for DRBG
|
|
68
79
|
randomBytes: (bytesLength?: number) => Uint8Array;
|
|
69
80
|
};
|
|
70
81
|
|
|
71
82
|
export type CurveFn<Fp, Fp2, Fp6, Fp12> = {
|
|
72
83
|
getPublicKey: (privateKey: PrivKey) => Uint8Array;
|
|
84
|
+
getPublicKeyForShortSignatures: (privateKey: PrivKey) => Uint8Array;
|
|
73
85
|
sign: {
|
|
74
86
|
(message: Hex, privateKey: PrivKey): Uint8Array;
|
|
75
87
|
(message: ProjPointType<Fp2>, privateKey: PrivKey): ProjPointType<Fp2>;
|
|
76
88
|
};
|
|
89
|
+
signShortSignature: {
|
|
90
|
+
(message: Hex, privateKey: PrivKey): Uint8Array;
|
|
91
|
+
(message: ProjPointType<Fp>, privateKey: PrivKey): ProjPointType<Fp>;
|
|
92
|
+
};
|
|
77
93
|
verify: (
|
|
78
94
|
signature: Hex | ProjPointType<Fp2>,
|
|
79
95
|
message: Hex | ProjPointType<Fp2>,
|
|
80
|
-
publicKey: Hex | ProjPointType<Fp
|
|
96
|
+
publicKey: Hex | ProjPointType<Fp>,
|
|
97
|
+
htfOpts?: htfBasicOpts
|
|
98
|
+
) => boolean;
|
|
99
|
+
verifyShortSignature: (
|
|
100
|
+
signature: Hex | ProjPointType<Fp>,
|
|
101
|
+
message: Hex | ProjPointType<Fp>,
|
|
102
|
+
publicKey: Hex | ProjPointType<Fp2>,
|
|
103
|
+
htfOpts?: htfBasicOpts
|
|
81
104
|
) => boolean;
|
|
82
105
|
verifyBatch: (
|
|
83
106
|
signature: Hex | ProjPointType<Fp2>,
|
|
84
107
|
messages: (Hex | ProjPointType<Fp2>)[],
|
|
85
|
-
publicKeys: (Hex | ProjPointType<Fp>)[]
|
|
108
|
+
publicKeys: (Hex | ProjPointType<Fp>)[],
|
|
109
|
+
htfOpts?: htfBasicOpts
|
|
86
110
|
) => boolean;
|
|
87
111
|
aggregatePublicKeys: {
|
|
88
112
|
(publicKeys: Hex[]): Uint8Array;
|
|
@@ -92,11 +116,16 @@ export type CurveFn<Fp, Fp2, Fp6, Fp12> = {
|
|
|
92
116
|
(signatures: Hex[]): Uint8Array;
|
|
93
117
|
(signatures: ProjPointType<Fp2>[]): ProjPointType<Fp2>;
|
|
94
118
|
};
|
|
119
|
+
aggregateShortSignatures: {
|
|
120
|
+
(signatures: Hex[]): Uint8Array;
|
|
121
|
+
(signatures: ProjPointType<Fp>[]): ProjPointType<Fp>;
|
|
122
|
+
};
|
|
95
123
|
millerLoop: (ell: [Fp2, Fp2, Fp2][], g1: [Fp, Fp]) => Fp12;
|
|
96
124
|
pairing: (P: ProjPointType<Fp>, Q: ProjPointType<Fp2>, withFinalExponent?: boolean) => Fp12;
|
|
97
|
-
G1: CurvePointsRes<Fp> & ReturnType<typeof
|
|
98
|
-
G2: CurvePointsRes<Fp2> & ReturnType<typeof
|
|
125
|
+
G1: CurvePointsRes<Fp> & ReturnType<typeof createHasher<Fp>>;
|
|
126
|
+
G2: CurvePointsRes<Fp2> & ReturnType<typeof createHasher<Fp2>>;
|
|
99
127
|
Signature: SignatureCoder<Fp2>;
|
|
128
|
+
ShortSignature: ShortSignatureCoder<Fp>;
|
|
100
129
|
params: {
|
|
101
130
|
x: bigint;
|
|
102
131
|
r: bigint;
|
|
@@ -122,7 +151,6 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
122
151
|
// Fields are specific for curve, so for now we'll need to pass them with opts
|
|
123
152
|
const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields;
|
|
124
153
|
const BLS_X_LEN = bitLen(CURVE.params.x);
|
|
125
|
-
const groupLen = 32; // TODO: calculate; hardcoded for now
|
|
126
154
|
|
|
127
155
|
// Pre-compute coefficients for sparse multiplication
|
|
128
156
|
// Point addition and point double calculations is reused for coefficients
|
|
@@ -189,7 +217,8 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
189
217
|
|
|
190
218
|
const utils = {
|
|
191
219
|
randomPrivateKey: (): Uint8Array => {
|
|
192
|
-
|
|
220
|
+
const length = getMinHashLength(Fr.ORDER);
|
|
221
|
+
return mapHashToField(CURVE.randomBytes(length), Fr.ORDER);
|
|
193
222
|
},
|
|
194
223
|
calcPairingPrecomputes,
|
|
195
224
|
};
|
|
@@ -198,7 +227,7 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
198
227
|
const G1_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G1 });
|
|
199
228
|
const G1 = Object.assign(
|
|
200
229
|
G1_,
|
|
201
|
-
|
|
230
|
+
createHasher(G1_.ProjectivePoint, CURVE.G1.mapToCurve, {
|
|
202
231
|
...CURVE.htfDefaults,
|
|
203
232
|
...CURVE.G1.htfDefaults,
|
|
204
233
|
})
|
|
@@ -224,12 +253,13 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
224
253
|
const G2_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G2 });
|
|
225
254
|
const G2 = Object.assign(
|
|
226
255
|
G2_,
|
|
227
|
-
|
|
256
|
+
createHasher(G2_.ProjectivePoint as H2CPointConstructor<Fp2>, CURVE.G2.mapToCurve, {
|
|
228
257
|
...CURVE.htfDefaults,
|
|
229
258
|
...CURVE.G2.htfDefaults,
|
|
230
259
|
})
|
|
231
260
|
);
|
|
232
261
|
|
|
262
|
+
const { ShortSignature } = CURVE.G1;
|
|
233
263
|
const { Signature } = CURVE.G2;
|
|
234
264
|
|
|
235
265
|
// Calculates bilinear pairing
|
|
@@ -251,26 +281,37 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
251
281
|
function normP1(point: G1Hex): G1 {
|
|
252
282
|
return point instanceof G1.ProjectivePoint ? (point as G1) : G1.ProjectivePoint.fromHex(point);
|
|
253
283
|
}
|
|
284
|
+
function normP1Hash(point: G1Hex, htfOpts?: htfBasicOpts): G1 {
|
|
285
|
+
return point instanceof G1.ProjectivePoint
|
|
286
|
+
? point
|
|
287
|
+
: (G1.hashToCurve(ensureBytes('point', point), htfOpts) as G1);
|
|
288
|
+
}
|
|
254
289
|
function normP2(point: G2Hex): G2 {
|
|
255
290
|
return point instanceof G2.ProjectivePoint ? point : Signature.fromHex(point);
|
|
256
291
|
}
|
|
257
|
-
function normP2Hash(point: G2Hex, htfOpts?:
|
|
292
|
+
function normP2Hash(point: G2Hex, htfOpts?: htfBasicOpts): G2 {
|
|
258
293
|
return point instanceof G2.ProjectivePoint
|
|
259
294
|
? point
|
|
260
295
|
: (G2.hashToCurve(ensureBytes('point', point), htfOpts) as G2);
|
|
261
296
|
}
|
|
262
297
|
|
|
263
|
-
// Multiplies generator by private key.
|
|
298
|
+
// Multiplies generator (G1) by private key.
|
|
264
299
|
// P = pk x G
|
|
265
300
|
function getPublicKey(privateKey: PrivKey): Uint8Array {
|
|
266
301
|
return G1.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);
|
|
267
302
|
}
|
|
268
303
|
|
|
304
|
+
// Multiplies generator (G2) by private key.
|
|
305
|
+
// P = pk x G
|
|
306
|
+
function getPublicKeyForShortSignatures(privateKey: PrivKey): Uint8Array {
|
|
307
|
+
return G2.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);
|
|
308
|
+
}
|
|
309
|
+
|
|
269
310
|
// Executes `hashToCurve` on the message and then multiplies the result by private key.
|
|
270
311
|
// S = pk x H(m)
|
|
271
|
-
function sign(message: Hex, privateKey: PrivKey, htfOpts?:
|
|
272
|
-
function sign(message: G2, privateKey: PrivKey, htfOpts?:
|
|
273
|
-
function sign(message: G2Hex, privateKey: PrivKey, htfOpts?:
|
|
312
|
+
function sign(message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;
|
|
313
|
+
function sign(message: G2, privateKey: PrivKey, htfOpts?: htfBasicOpts): G2;
|
|
314
|
+
function sign(message: G2Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array | G2 {
|
|
274
315
|
const msgPoint = normP2Hash(message, htfOpts);
|
|
275
316
|
msgPoint.assertValidity();
|
|
276
317
|
const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));
|
|
@@ -278,13 +319,31 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
278
319
|
return Signature.toRawBytes(sigPoint);
|
|
279
320
|
}
|
|
280
321
|
|
|
322
|
+
function signShortSignature(
|
|
323
|
+
message: Hex,
|
|
324
|
+
privateKey: PrivKey,
|
|
325
|
+
htfOpts?: htfBasicOpts
|
|
326
|
+
): Uint8Array;
|
|
327
|
+
function signShortSignature(message: G1, privateKey: PrivKey, htfOpts?: htfBasicOpts): G1;
|
|
328
|
+
function signShortSignature(
|
|
329
|
+
message: G1Hex,
|
|
330
|
+
privateKey: PrivKey,
|
|
331
|
+
htfOpts?: htfBasicOpts
|
|
332
|
+
): Uint8Array | G1 {
|
|
333
|
+
const msgPoint = normP1Hash(message, htfOpts);
|
|
334
|
+
msgPoint.assertValidity();
|
|
335
|
+
const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));
|
|
336
|
+
if (message instanceof G1.ProjectivePoint) return sigPoint;
|
|
337
|
+
return ShortSignature.toRawBytes(sigPoint);
|
|
338
|
+
}
|
|
339
|
+
|
|
281
340
|
// Checks if pairing of public key & hash is equal to pairing of generator & signature.
|
|
282
341
|
// e(P, H(m)) == e(G, S)
|
|
283
342
|
function verify(
|
|
284
343
|
signature: G2Hex,
|
|
285
344
|
message: G2Hex,
|
|
286
345
|
publicKey: G1Hex,
|
|
287
|
-
htfOpts?:
|
|
346
|
+
htfOpts?: htfBasicOpts
|
|
288
347
|
): boolean {
|
|
289
348
|
const P = normP1(publicKey);
|
|
290
349
|
const Hm = normP2Hash(message, htfOpts);
|
|
@@ -298,6 +357,26 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
298
357
|
return Fp12.eql(exp, Fp12.ONE);
|
|
299
358
|
}
|
|
300
359
|
|
|
360
|
+
// Checks if pairing of public key & hash is equal to pairing of generator & signature.
|
|
361
|
+
// e(S, G) == e(H(m), P)
|
|
362
|
+
function verifyShortSignature(
|
|
363
|
+
signature: G1Hex,
|
|
364
|
+
message: G1Hex,
|
|
365
|
+
publicKey: G2Hex,
|
|
366
|
+
htfOpts?: htfBasicOpts
|
|
367
|
+
): boolean {
|
|
368
|
+
const P = normP2(publicKey);
|
|
369
|
+
const Hm = normP1Hash(message, htfOpts);
|
|
370
|
+
const G = G2.ProjectivePoint.BASE;
|
|
371
|
+
const S = normP1(signature);
|
|
372
|
+
// Instead of doing 2 exponentiations, we use property of billinear maps
|
|
373
|
+
// and do one exp after multiplying 2 points.
|
|
374
|
+
const eHmP = pairing(Hm, P, false);
|
|
375
|
+
const eSG = pairing(S, G.negate(), false);
|
|
376
|
+
const exp = Fp12.finalExponentiate(Fp12.mul(eSG, eHmP));
|
|
377
|
+
return Fp12.eql(exp, Fp12.ONE);
|
|
378
|
+
}
|
|
379
|
+
|
|
301
380
|
// Adds a bunch of public key points together.
|
|
302
381
|
// pk1 + pk2 + pk3 = pkA
|
|
303
382
|
function aggregatePublicKeys(publicKeys: Hex[]): Uint8Array;
|
|
@@ -328,13 +407,27 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
328
407
|
return Signature.toRawBytes(aggAffine);
|
|
329
408
|
}
|
|
330
409
|
|
|
410
|
+
// Adds a bunch of signature points together.
|
|
411
|
+
function aggregateShortSignatures(signatures: Hex[]): Uint8Array;
|
|
412
|
+
function aggregateShortSignatures(signatures: G1[]): G1;
|
|
413
|
+
function aggregateShortSignatures(signatures: G1Hex[]): Uint8Array | G1 {
|
|
414
|
+
if (!signatures.length) throw new Error('Expected non-empty array');
|
|
415
|
+
const agg = signatures.map(normP1).reduce((sum, s) => sum.add(s), G1.ProjectivePoint.ZERO);
|
|
416
|
+
const aggAffine = agg; //.toAffine();
|
|
417
|
+
if (signatures[0] instanceof G1.ProjectivePoint) {
|
|
418
|
+
aggAffine.assertValidity();
|
|
419
|
+
return aggAffine;
|
|
420
|
+
}
|
|
421
|
+
return ShortSignature.toRawBytes(aggAffine);
|
|
422
|
+
}
|
|
423
|
+
|
|
331
424
|
// https://ethresear.ch/t/fast-verification-of-multiple-bls-signatures/5407
|
|
332
425
|
// e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))
|
|
333
426
|
function verifyBatch(
|
|
334
427
|
signature: G2Hex,
|
|
335
428
|
messages: G2Hex[],
|
|
336
429
|
publicKeys: G1Hex[],
|
|
337
|
-
htfOpts?:
|
|
430
|
+
htfOpts?: htfBasicOpts
|
|
338
431
|
): boolean {
|
|
339
432
|
// @ts-ignore
|
|
340
433
|
// console.log('verifyBatch', bytesToHex(signature as any), messages, publicKeys.map(bytesToHex));
|
|
@@ -370,16 +463,21 @@ export function bls<Fp2, Fp6, Fp12>(
|
|
|
370
463
|
|
|
371
464
|
return {
|
|
372
465
|
getPublicKey,
|
|
466
|
+
getPublicKeyForShortSignatures,
|
|
373
467
|
sign,
|
|
468
|
+
signShortSignature,
|
|
374
469
|
verify,
|
|
375
470
|
verifyBatch,
|
|
471
|
+
verifyShortSignature,
|
|
376
472
|
aggregatePublicKeys,
|
|
377
473
|
aggregateSignatures,
|
|
474
|
+
aggregateShortSignatures,
|
|
378
475
|
millerLoop,
|
|
379
476
|
pairing,
|
|
380
477
|
G1,
|
|
381
478
|
G2,
|
|
382
479
|
Signature,
|
|
480
|
+
ShortSignature,
|
|
383
481
|
fields: {
|
|
384
482
|
Fr,
|
|
385
483
|
Fp,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
2
2
|
import type { Group, GroupConstructor, AffinePoint } from './curve.js';
|
|
3
3
|
import { mod, IField } from './modular.js';
|
|
4
|
-
import {
|
|
4
|
+
import type { CHash } from './utils.js';
|
|
5
|
+
import { bytesToNumberBE, isBytes, concatBytes, utf8ToBytes, validateObject } from './utils.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* * `DST` is a domain separation tag, defined in section 2.2.5
|
|
@@ -22,7 +23,7 @@ export type Opts = {
|
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
function validateDST(dst: UnicodeOrBytes): Uint8Array {
|
|
25
|
-
if (dst
|
|
26
|
+
if (isBytes(dst)) return dst;
|
|
26
27
|
if (typeof dst === 'string') return utf8ToBytes(dst);
|
|
27
28
|
throw new Error('DST must be Uint8Array or string');
|
|
28
29
|
}
|
|
@@ -51,25 +52,25 @@ function strxor(a: Uint8Array, b: Uint8Array): Uint8Array {
|
|
|
51
52
|
return arr;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
function
|
|
55
|
-
if (!(item
|
|
55
|
+
function abytes(item: unknown): void {
|
|
56
|
+
if (!isBytes(item)) throw new Error('Uint8Array expected');
|
|
56
57
|
}
|
|
57
58
|
function isNum(item: unknown): void {
|
|
58
59
|
if (!Number.isSafeInteger(item)) throw new Error('number expected');
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits
|
|
62
|
-
// https://
|
|
63
|
+
// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1
|
|
63
64
|
export function expand_message_xmd(
|
|
64
65
|
msg: Uint8Array,
|
|
65
66
|
DST: Uint8Array,
|
|
66
67
|
lenInBytes: number,
|
|
67
68
|
H: CHash
|
|
68
69
|
): Uint8Array {
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
abytes(msg);
|
|
71
|
+
abytes(DST);
|
|
71
72
|
isNum(lenInBytes);
|
|
72
|
-
// https://
|
|
73
|
+
// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3
|
|
73
74
|
if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
|
|
74
75
|
const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
|
|
75
76
|
const ell = Math.ceil(lenInBytes / b_in_bytes);
|
|
@@ -88,6 +89,11 @@ export function expand_message_xmd(
|
|
|
88
89
|
return pseudo_random_bytes.slice(0, lenInBytes);
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
// Produces a uniformly random byte string using an extendable-output function (XOF) H.
|
|
93
|
+
// 1. The collision resistance of H MUST be at least k bits.
|
|
94
|
+
// 2. H MUST be an XOF that has been proved indifferentiable from
|
|
95
|
+
// a random oracle under a reasonable cryptographic assumption.
|
|
96
|
+
// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2
|
|
91
97
|
export function expand_message_xof(
|
|
92
98
|
msg: Uint8Array,
|
|
93
99
|
DST: Uint8Array,
|
|
@@ -95,10 +101,10 @@ export function expand_message_xof(
|
|
|
95
101
|
k: number,
|
|
96
102
|
H: CHash
|
|
97
103
|
): Uint8Array {
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
abytes(msg);
|
|
105
|
+
abytes(DST);
|
|
100
106
|
isNum(lenInBytes);
|
|
101
|
-
// https://
|
|
107
|
+
// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3
|
|
102
108
|
// DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));
|
|
103
109
|
if (DST.length > 255) {
|
|
104
110
|
const dkLen = Math.ceil((2 * k) / 8);
|
|
@@ -119,7 +125,7 @@ export function expand_message_xof(
|
|
|
119
125
|
|
|
120
126
|
/**
|
|
121
127
|
* Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F
|
|
122
|
-
* https://
|
|
128
|
+
* https://www.rfc-editor.org/rfc/rfc9380#section-5.2
|
|
123
129
|
* @param msg a byte string containing the message to hash
|
|
124
130
|
* @param count the number of elements of F to output
|
|
125
131
|
* @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above
|
|
@@ -127,14 +133,14 @@ export function expand_message_xof(
|
|
|
127
133
|
*/
|
|
128
134
|
export function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {
|
|
129
135
|
validateObject(options, {
|
|
130
|
-
DST: '
|
|
136
|
+
DST: 'stringOrUint8Array',
|
|
131
137
|
p: 'bigint',
|
|
132
138
|
m: 'isSafeInteger',
|
|
133
139
|
k: 'isSafeInteger',
|
|
134
140
|
hash: 'hash',
|
|
135
141
|
});
|
|
136
142
|
const { p, k, m, hash, expand, DST: _DST } = options;
|
|
137
|
-
|
|
143
|
+
abytes(msg);
|
|
138
144
|
isNum(count);
|
|
139
145
|
const DST = validateDST(_DST);
|
|
140
146
|
const log2p = p.toString(2).length;
|
|
@@ -201,8 +207,8 @@ export function createHasher<T>(
|
|
|
201
207
|
) {
|
|
202
208
|
if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');
|
|
203
209
|
return {
|
|
204
|
-
// Encodes byte string to elliptic curve
|
|
205
|
-
// https://
|
|
210
|
+
// Encodes byte string to elliptic curve.
|
|
211
|
+
// hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3
|
|
206
212
|
hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {
|
|
207
213
|
const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);
|
|
208
214
|
const u0 = Point.fromAffine(mapToCurve(u[0]));
|
|
@@ -212,7 +218,8 @@ export function createHasher<T>(
|
|
|
212
218
|
return P;
|
|
213
219
|
},
|
|
214
220
|
|
|
215
|
-
//
|
|
221
|
+
// Encodes byte string to elliptic curve.
|
|
222
|
+
// encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3
|
|
216
223
|
encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {
|
|
217
224
|
const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);
|
|
218
225
|
const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();
|