@noble/curves 1.9.7 → 2.0.0-beta.2
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 +520 -505
- package/abstract/bls.d.ts +58 -120
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/bls.js +108 -152
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.d.ts +18 -54
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +30 -49
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +18 -77
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +68 -144
- package/abstract/edwards.js.map +1 -1
- package/abstract/fft.js +14 -27
- package/abstract/fft.js.map +1 -1
- package/abstract/hash-to-curve.d.ts +35 -47
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +42 -46
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts +5 -17
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +170 -169
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +7 -12
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +22 -29
- package/abstract/montgomery.js.map +1 -1
- package/abstract/oprf.d.ts +282 -0
- package/abstract/oprf.d.ts.map +1 -0
- package/abstract/oprf.js +297 -0
- package/abstract/oprf.js.map +1 -0
- package/abstract/poseidon.d.ts.map +1 -1
- package/abstract/poseidon.js +26 -31
- package/abstract/poseidon.js.map +1 -1
- package/abstract/tower.d.ts.map +1 -1
- package/abstract/tower.js +43 -19
- package/abstract/tower.js.map +1 -1
- package/abstract/weierstrass.d.ts +77 -168
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +184 -389
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts +5 -11
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +161 -181
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +59 -11
- package/bn254.d.ts.map +1 -1
- package/bn254.js +69 -97
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +33 -48
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +147 -161
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +27 -36
- package/ed448.d.ts.map +1 -1
- package/ed448.js +143 -164
- package/ed448.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +20 -4
- package/index.js.map +1 -1
- package/misc.d.ts +10 -14
- package/misc.d.ts.map +1 -1
- package/misc.js +53 -62
- package/misc.js.map +1 -1
- package/nist.d.ts +31 -16
- package/nist.d.ts.map +1 -1
- package/nist.js +75 -64
- package/nist.js.map +1 -1
- package/package.json +20 -234
- package/secp256k1.d.ts +17 -30
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +59 -73
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +207 -354
- package/src/abstract/curve.ts +25 -84
- package/src/abstract/edwards.ts +68 -193
- package/src/abstract/hash-to-curve.ts +71 -85
- package/src/abstract/modular.ts +150 -134
- package/src/abstract/montgomery.ts +28 -35
- package/src/abstract/oprf.ts +600 -0
- package/src/abstract/poseidon.ts +6 -8
- package/src/abstract/tower.ts +0 -3
- package/src/abstract/weierstrass.ts +203 -525
- package/src/bls12-381.ts +133 -139
- package/src/bn254.ts +69 -93
- package/src/ed25519.ts +106 -133
- package/src/ed448.ts +111 -138
- package/src/index.ts +19 -3
- package/src/misc.ts +68 -51
- package/src/nist.ts +77 -70
- package/src/secp256k1.ts +46 -81
- package/src/utils.ts +67 -137
- package/src/webcrypto.ts +403 -0
- package/utils.d.ts +31 -38
- package/utils.d.ts.map +1 -1
- package/utils.js +66 -185
- package/utils.js.map +1 -1
- package/webcrypto.d.ts +99 -0
- package/webcrypto.d.ts.map +1 -0
- package/webcrypto.js +256 -0
- package/webcrypto.js.map +1 -0
- package/_shortw_utils.d.ts +0 -19
- package/_shortw_utils.d.ts.map +0 -1
- package/_shortw_utils.js +0 -20
- package/_shortw_utils.js.map +0 -1
- package/abstract/utils.d.ts +0 -78
- package/abstract/utils.d.ts.map +0 -1
- package/abstract/utils.js +0 -73
- package/abstract/utils.js.map +0 -1
- package/esm/_shortw_utils.d.ts +0 -19
- package/esm/_shortw_utils.d.ts.map +0 -1
- package/esm/_shortw_utils.js +0 -16
- package/esm/_shortw_utils.js.map +0 -1
- package/esm/abstract/bls.d.ts +0 -190
- package/esm/abstract/bls.d.ts.map +0 -1
- package/esm/abstract/bls.js +0 -408
- package/esm/abstract/bls.js.map +0 -1
- package/esm/abstract/curve.d.ts +0 -231
- package/esm/abstract/curve.d.ts.map +0 -1
- package/esm/abstract/curve.js +0 -465
- package/esm/abstract/curve.js.map +0 -1
- package/esm/abstract/edwards.d.ts +0 -243
- package/esm/abstract/edwards.d.ts.map +0 -1
- package/esm/abstract/edwards.js +0 -627
- package/esm/abstract/edwards.js.map +0 -1
- package/esm/abstract/fft.d.ts +0 -122
- package/esm/abstract/fft.d.ts.map +0 -1
- package/esm/abstract/fft.js +0 -425
- package/esm/abstract/fft.js.map +0 -1
- package/esm/abstract/hash-to-curve.d.ts +0 -102
- package/esm/abstract/hash-to-curve.d.ts.map +0 -1
- package/esm/abstract/hash-to-curve.js +0 -203
- package/esm/abstract/hash-to-curve.js.map +0 -1
- package/esm/abstract/modular.d.ts +0 -171
- package/esm/abstract/modular.d.ts.map +0 -1
- package/esm/abstract/modular.js +0 -530
- package/esm/abstract/modular.js.map +0 -1
- package/esm/abstract/montgomery.d.ts +0 -30
- package/esm/abstract/montgomery.d.ts.map +0 -1
- package/esm/abstract/montgomery.js +0 -157
- package/esm/abstract/montgomery.js.map +0 -1
- package/esm/abstract/poseidon.d.ts +0 -68
- package/esm/abstract/poseidon.d.ts.map +0 -1
- package/esm/abstract/poseidon.js +0 -296
- package/esm/abstract/poseidon.js.map +0 -1
- package/esm/abstract/tower.d.ts +0 -95
- package/esm/abstract/tower.d.ts.map +0 -1
- package/esm/abstract/tower.js +0 -714
- package/esm/abstract/tower.js.map +0 -1
- package/esm/abstract/utils.d.ts +0 -78
- package/esm/abstract/utils.d.ts.map +0 -1
- package/esm/abstract/utils.js +0 -70
- package/esm/abstract/utils.js.map +0 -1
- package/esm/abstract/weierstrass.d.ts +0 -416
- package/esm/abstract/weierstrass.d.ts.map +0 -1
- package/esm/abstract/weierstrass.js +0 -1413
- package/esm/abstract/weierstrass.js.map +0 -1
- package/esm/bls12-381.d.ts +0 -16
- package/esm/bls12-381.d.ts.map +0 -1
- package/esm/bls12-381.js +0 -705
- package/esm/bls12-381.js.map +0 -1
- package/esm/bn254.d.ts +0 -18
- package/esm/bn254.d.ts.map +0 -1
- package/esm/bn254.js +0 -214
- package/esm/bn254.js.map +0 -1
- package/esm/ed25519.d.ts +0 -106
- package/esm/ed25519.d.ts.map +0 -1
- package/esm/ed25519.js +0 -467
- package/esm/ed25519.js.map +0 -1
- package/esm/ed448.d.ts +0 -100
- package/esm/ed448.d.ts.map +0 -1
- package/esm/ed448.js +0 -459
- package/esm/ed448.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -17
- package/esm/index.js.map +0 -1
- package/esm/jubjub.d.ts +0 -12
- package/esm/jubjub.d.ts.map +0 -1
- package/esm/jubjub.js +0 -12
- package/esm/jubjub.js.map +0 -1
- package/esm/misc.d.ts +0 -19
- package/esm/misc.d.ts.map +0 -1
- package/esm/misc.js +0 -109
- package/esm/misc.js.map +0 -1
- package/esm/nist.d.ts +0 -21
- package/esm/nist.d.ts.map +0 -1
- package/esm/nist.js +0 -132
- package/esm/nist.js.map +0 -1
- package/esm/p256.d.ts +0 -16
- package/esm/p256.d.ts.map +0 -1
- package/esm/p256.js +0 -16
- package/esm/p256.js.map +0 -1
- package/esm/p384.d.ts +0 -16
- package/esm/p384.d.ts.map +0 -1
- package/esm/p384.js +0 -16
- package/esm/p384.js.map +0 -1
- package/esm/p521.d.ts +0 -16
- package/esm/p521.d.ts.map +0 -1
- package/esm/p521.js +0 -16
- package/esm/p521.js.map +0 -1
- package/esm/package.json +0 -4
- package/esm/pasta.d.ts +0 -10
- package/esm/pasta.d.ts.map +0 -1
- package/esm/pasta.js +0 -10
- package/esm/pasta.js.map +0 -1
- package/esm/secp256k1.d.ts +0 -89
- package/esm/secp256k1.d.ts.map +0 -1
- package/esm/secp256k1.js +0 -294
- package/esm/secp256k1.js.map +0 -1
- package/esm/utils.d.ts +0 -110
- package/esm/utils.d.ts.map +0 -1
- package/esm/utils.js +0 -322
- package/esm/utils.js.map +0 -1
- package/jubjub.d.ts +0 -12
- package/jubjub.d.ts.map +0 -1
- package/jubjub.js +0 -15
- package/jubjub.js.map +0 -1
- package/p256.d.ts +0 -16
- package/p256.d.ts.map +0 -1
- package/p256.js +0 -13
- package/p256.js.map +0 -1
- package/p384.d.ts +0 -16
- package/p384.d.ts.map +0 -1
- package/p384.js +0 -13
- package/p384.js.map +0 -1
- package/p521.d.ts +0 -16
- package/p521.d.ts.map +0 -1
- package/p521.js +0 -13
- package/p521.js.map +0 -1
- package/pasta.d.ts +0 -10
- package/pasta.d.ts.map +0 -1
- package/pasta.js +0 -13
- package/pasta.js.map +0 -1
- package/src/_shortw_utils.ts +0 -21
- package/src/abstract/utils.ts +0 -80
- package/src/jubjub.ts +0 -12
- package/src/p256.ts +0 -15
- package/src/p384.ts +0 -15
- package/src/p521.ts +0 -15
- package/src/package.json +0 -3
- package/src/pasta.ts +0 -9
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* hash-to-curve from RFC 9380.
|
|
3
|
-
* Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.
|
|
4
|
-
* https://www.rfc-editor.org/rfc/rfc9380
|
|
5
|
-
* @module
|
|
6
|
-
*/
|
|
7
|
-
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
8
|
-
import type { CHash } from '../utils.ts';
|
|
9
|
-
import type { AffinePoint, Group, GroupConstructor } from './curve.ts';
|
|
10
|
-
import { type IField } from './modular.ts';
|
|
11
|
-
export type UnicodeOrBytes = string | Uint8Array;
|
|
12
|
-
/**
|
|
13
|
-
* * `DST` is a domain separation tag, defined in section 2.2.5
|
|
14
|
-
* * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m
|
|
15
|
-
* * `m` is extension degree (1 for prime fields)
|
|
16
|
-
* * `k` is the target security target in bits (e.g. 128), from section 5.1
|
|
17
|
-
* * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)
|
|
18
|
-
* * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props
|
|
19
|
-
*/
|
|
20
|
-
export type H2COpts = {
|
|
21
|
-
DST: UnicodeOrBytes;
|
|
22
|
-
expand: 'xmd' | 'xof';
|
|
23
|
-
hash: CHash;
|
|
24
|
-
p: bigint;
|
|
25
|
-
m: number;
|
|
26
|
-
k: number;
|
|
27
|
-
};
|
|
28
|
-
export type H2CHashOpts = {
|
|
29
|
-
expand: 'xmd' | 'xof';
|
|
30
|
-
hash: CHash;
|
|
31
|
-
};
|
|
32
|
-
export type Opts = H2COpts;
|
|
33
|
-
/**
|
|
34
|
-
* Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.
|
|
35
|
-
* [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).
|
|
36
|
-
*/
|
|
37
|
-
export declare function expand_message_xmd(msg: Uint8Array, DST: UnicodeOrBytes, lenInBytes: number, H: CHash): Uint8Array;
|
|
38
|
-
/**
|
|
39
|
-
* Produces a uniformly random byte string using an extendable-output function (XOF) H.
|
|
40
|
-
* 1. The collision resistance of H MUST be at least k bits.
|
|
41
|
-
* 2. H MUST be an XOF that has been proved indifferentiable from
|
|
42
|
-
* a random oracle under a reasonable cryptographic assumption.
|
|
43
|
-
* [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).
|
|
44
|
-
*/
|
|
45
|
-
export declare function expand_message_xof(msg: Uint8Array, DST: UnicodeOrBytes, lenInBytes: number, k: number, H: CHash): Uint8Array;
|
|
46
|
-
/**
|
|
47
|
-
* Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.
|
|
48
|
-
* [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).
|
|
49
|
-
* @param msg a byte string containing the message to hash
|
|
50
|
-
* @param count the number of elements of F to output
|
|
51
|
-
* @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above
|
|
52
|
-
* @returns [u_0, ..., u_(count - 1)], a list of field elements.
|
|
53
|
-
*/
|
|
54
|
-
export declare function hash_to_field(msg: Uint8Array, count: number, options: H2COpts): bigint[][];
|
|
55
|
-
export type XY<T> = (x: T, y: T) => {
|
|
56
|
-
x: T;
|
|
57
|
-
y: T;
|
|
58
|
-
};
|
|
59
|
-
export type XYRatio<T> = [T[], T[], T[], T[]];
|
|
60
|
-
export declare function isogenyMap<T, F extends IField<T>>(field: F, map: XYRatio<T>): XY<T>;
|
|
61
|
-
/** Point interface, which curves must implement to work correctly with the module. */
|
|
62
|
-
export interface H2CPoint<T> extends Group<H2CPoint<T>> {
|
|
63
|
-
add(rhs: H2CPoint<T>): H2CPoint<T>;
|
|
64
|
-
toAffine(iz?: bigint): AffinePoint<T>;
|
|
65
|
-
clearCofactor(): H2CPoint<T>;
|
|
66
|
-
assertValidity(): void;
|
|
67
|
-
}
|
|
68
|
-
export interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {
|
|
69
|
-
fromAffine(ap: AffinePoint<T>): H2CPoint<T>;
|
|
70
|
-
}
|
|
71
|
-
export type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;
|
|
72
|
-
export type htfBasicOpts = {
|
|
73
|
-
DST: UnicodeOrBytes;
|
|
74
|
-
};
|
|
75
|
-
export type H2CMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>;
|
|
76
|
-
export type HTFMethod<T> = H2CMethod<T>;
|
|
77
|
-
export type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>;
|
|
78
|
-
export type H2CHasherBase<T> = {
|
|
79
|
-
hashToCurve: H2CMethod<T>;
|
|
80
|
-
hashToScalar: (msg: Uint8Array, options: htfBasicOpts) => bigint;
|
|
81
|
-
};
|
|
82
|
-
/**
|
|
83
|
-
* RFC 9380 methods, with cofactor clearing. See https://www.rfc-editor.org/rfc/rfc9380#section-3.
|
|
84
|
-
*
|
|
85
|
-
* * hashToCurve: `map(hash(input))`, encodes RANDOM bytes to curve (WITH hashing)
|
|
86
|
-
* * encodeToCurve: `map(hash(input))`, encodes NON-UNIFORM bytes to curve (WITH hashing)
|
|
87
|
-
* * mapToCurve: `map(scalars)`, encodes NON-UNIFORM scalars to curve (NO hashing)
|
|
88
|
-
*/
|
|
89
|
-
export type H2CHasher<T> = H2CHasherBase<T> & {
|
|
90
|
-
encodeToCurve: H2CMethod<T>;
|
|
91
|
-
mapToCurve: MapMethod<T>;
|
|
92
|
-
defaults: H2COpts & {
|
|
93
|
-
encodeDST?: UnicodeOrBytes;
|
|
94
|
-
};
|
|
95
|
-
};
|
|
96
|
-
export type Hasher<T> = H2CHasher<T>;
|
|
97
|
-
export declare const _DST_scalar: Uint8Array;
|
|
98
|
-
/** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */
|
|
99
|
-
export declare function createHasher<T>(Point: H2CPointConstructor<T>, mapToCurve: MapToCurve<T>, defaults: H2COpts & {
|
|
100
|
-
encodeDST?: UnicodeOrBytes;
|
|
101
|
-
}): H2CHasher<T>;
|
|
102
|
-
//# sourceMappingURL=hash-to-curve.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hash-to-curve.d.ts","sourceRoot":"","sources":["../../src/abstract/hash-to-curve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { _validateObject, abytes, bytesToNumberBE, concatBytes, isBytes, isHash, utf8ToBytes, } from "../utils.js";
|
|
2
|
-
import { FpInvertBatch, mod } from "./modular.js";
|
|
3
|
-
// Octet Stream to Integer. "spec" implementation of os2ip is 2.5x slower vs bytesToNumberBE.
|
|
4
|
-
const os2ip = bytesToNumberBE;
|
|
5
|
-
// Integer to Octet Stream (numberToBytesBE)
|
|
6
|
-
function i2osp(value, length) {
|
|
7
|
-
anum(value);
|
|
8
|
-
anum(length);
|
|
9
|
-
if (value < 0 || value >= 1 << (8 * length))
|
|
10
|
-
throw new Error('invalid I2OSP input: ' + value);
|
|
11
|
-
const res = Array.from({ length }).fill(0);
|
|
12
|
-
for (let i = length - 1; i >= 0; i--) {
|
|
13
|
-
res[i] = value & 0xff;
|
|
14
|
-
value >>>= 8;
|
|
15
|
-
}
|
|
16
|
-
return new Uint8Array(res);
|
|
17
|
-
}
|
|
18
|
-
function strxor(a, b) {
|
|
19
|
-
const arr = new Uint8Array(a.length);
|
|
20
|
-
for (let i = 0; i < a.length; i++) {
|
|
21
|
-
arr[i] = a[i] ^ b[i];
|
|
22
|
-
}
|
|
23
|
-
return arr;
|
|
24
|
-
}
|
|
25
|
-
function anum(item) {
|
|
26
|
-
if (!Number.isSafeInteger(item))
|
|
27
|
-
throw new Error('number expected');
|
|
28
|
-
}
|
|
29
|
-
function normDST(DST) {
|
|
30
|
-
if (!isBytes(DST) && typeof DST !== 'string')
|
|
31
|
-
throw new Error('DST must be Uint8Array or string');
|
|
32
|
-
return typeof DST === 'string' ? utf8ToBytes(DST) : DST;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.
|
|
36
|
-
* [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).
|
|
37
|
-
*/
|
|
38
|
-
export function expand_message_xmd(msg, DST, lenInBytes, H) {
|
|
39
|
-
abytes(msg);
|
|
40
|
-
anum(lenInBytes);
|
|
41
|
-
DST = normDST(DST);
|
|
42
|
-
// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3
|
|
43
|
-
if (DST.length > 255)
|
|
44
|
-
DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
|
|
45
|
-
const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
|
|
46
|
-
const ell = Math.ceil(lenInBytes / b_in_bytes);
|
|
47
|
-
if (lenInBytes > 65535 || ell > 255)
|
|
48
|
-
throw new Error('expand_message_xmd: invalid lenInBytes');
|
|
49
|
-
const DST_prime = concatBytes(DST, i2osp(DST.length, 1));
|
|
50
|
-
const Z_pad = i2osp(0, r_in_bytes);
|
|
51
|
-
const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str
|
|
52
|
-
const b = new Array(ell);
|
|
53
|
-
const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));
|
|
54
|
-
b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));
|
|
55
|
-
for (let i = 1; i <= ell; i++) {
|
|
56
|
-
const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];
|
|
57
|
-
b[i] = H(concatBytes(...args));
|
|
58
|
-
}
|
|
59
|
-
const pseudo_random_bytes = concatBytes(...b);
|
|
60
|
-
return pseudo_random_bytes.slice(0, lenInBytes);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Produces a uniformly random byte string using an extendable-output function (XOF) H.
|
|
64
|
-
* 1. The collision resistance of H MUST be at least k bits.
|
|
65
|
-
* 2. H MUST be an XOF that has been proved indifferentiable from
|
|
66
|
-
* a random oracle under a reasonable cryptographic assumption.
|
|
67
|
-
* [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).
|
|
68
|
-
*/
|
|
69
|
-
export function expand_message_xof(msg, DST, lenInBytes, k, H) {
|
|
70
|
-
abytes(msg);
|
|
71
|
-
anum(lenInBytes);
|
|
72
|
-
DST = normDST(DST);
|
|
73
|
-
// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3
|
|
74
|
-
// DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));
|
|
75
|
-
if (DST.length > 255) {
|
|
76
|
-
const dkLen = Math.ceil((2 * k) / 8);
|
|
77
|
-
DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();
|
|
78
|
-
}
|
|
79
|
-
if (lenInBytes > 65535 || DST.length > 255)
|
|
80
|
-
throw new Error('expand_message_xof: invalid lenInBytes');
|
|
81
|
-
return (H.create({ dkLen: lenInBytes })
|
|
82
|
-
.update(msg)
|
|
83
|
-
.update(i2osp(lenInBytes, 2))
|
|
84
|
-
// 2. DST_prime = DST || I2OSP(len(DST), 1)
|
|
85
|
-
.update(DST)
|
|
86
|
-
.update(i2osp(DST.length, 1))
|
|
87
|
-
.digest());
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.
|
|
91
|
-
* [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).
|
|
92
|
-
* @param msg a byte string containing the message to hash
|
|
93
|
-
* @param count the number of elements of F to output
|
|
94
|
-
* @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above
|
|
95
|
-
* @returns [u_0, ..., u_(count - 1)], a list of field elements.
|
|
96
|
-
*/
|
|
97
|
-
export function hash_to_field(msg, count, options) {
|
|
98
|
-
_validateObject(options, {
|
|
99
|
-
p: 'bigint',
|
|
100
|
-
m: 'number',
|
|
101
|
-
k: 'number',
|
|
102
|
-
hash: 'function',
|
|
103
|
-
});
|
|
104
|
-
const { p, k, m, hash, expand, DST } = options;
|
|
105
|
-
if (!isHash(options.hash))
|
|
106
|
-
throw new Error('expected valid hash');
|
|
107
|
-
abytes(msg);
|
|
108
|
-
anum(count);
|
|
109
|
-
const log2p = p.toString(2).length;
|
|
110
|
-
const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above
|
|
111
|
-
const len_in_bytes = count * m * L;
|
|
112
|
-
let prb; // pseudo_random_bytes
|
|
113
|
-
if (expand === 'xmd') {
|
|
114
|
-
prb = expand_message_xmd(msg, DST, len_in_bytes, hash);
|
|
115
|
-
}
|
|
116
|
-
else if (expand === 'xof') {
|
|
117
|
-
prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);
|
|
118
|
-
}
|
|
119
|
-
else if (expand === '_internal_pass') {
|
|
120
|
-
// for internal tests only
|
|
121
|
-
prb = msg;
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
throw new Error('expand must be "xmd" or "xof"');
|
|
125
|
-
}
|
|
126
|
-
const u = new Array(count);
|
|
127
|
-
for (let i = 0; i < count; i++) {
|
|
128
|
-
const e = new Array(m);
|
|
129
|
-
for (let j = 0; j < m; j++) {
|
|
130
|
-
const elm_offset = L * (j + i * m);
|
|
131
|
-
const tv = prb.subarray(elm_offset, elm_offset + L);
|
|
132
|
-
e[j] = mod(os2ip(tv), p);
|
|
133
|
-
}
|
|
134
|
-
u[i] = e;
|
|
135
|
-
}
|
|
136
|
-
return u;
|
|
137
|
-
}
|
|
138
|
-
export function isogenyMap(field, map) {
|
|
139
|
-
// Make same order as in spec
|
|
140
|
-
const coeff = map.map((i) => Array.from(i).reverse());
|
|
141
|
-
return (x, y) => {
|
|
142
|
-
const [xn, xd, yn, yd] = coeff.map((val) => val.reduce((acc, i) => field.add(field.mul(acc, x), i)));
|
|
143
|
-
// 6.6.3
|
|
144
|
-
// Exceptional cases of iso_map are inputs that cause the denominator of
|
|
145
|
-
// either rational function to evaluate to zero; such cases MUST return
|
|
146
|
-
// the identity point on E.
|
|
147
|
-
const [xd_inv, yd_inv] = FpInvertBatch(field, [xd, yd], true);
|
|
148
|
-
x = field.mul(xn, xd_inv); // xNum / xDen
|
|
149
|
-
y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)
|
|
150
|
-
return { x, y };
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
export const _DST_scalar = utf8ToBytes('HashToScalar-');
|
|
154
|
-
/** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */
|
|
155
|
-
export function createHasher(Point, mapToCurve, defaults) {
|
|
156
|
-
if (typeof mapToCurve !== 'function')
|
|
157
|
-
throw new Error('mapToCurve() must be defined');
|
|
158
|
-
function map(num) {
|
|
159
|
-
return Point.fromAffine(mapToCurve(num));
|
|
160
|
-
}
|
|
161
|
-
function clear(initial) {
|
|
162
|
-
const P = initial.clearCofactor();
|
|
163
|
-
if (P.equals(Point.ZERO))
|
|
164
|
-
return Point.ZERO; // zero will throw in assert
|
|
165
|
-
P.assertValidity();
|
|
166
|
-
return P;
|
|
167
|
-
}
|
|
168
|
-
return {
|
|
169
|
-
defaults,
|
|
170
|
-
hashToCurve(msg, options) {
|
|
171
|
-
const opts = Object.assign({}, defaults, options);
|
|
172
|
-
const u = hash_to_field(msg, 2, opts);
|
|
173
|
-
const u0 = map(u[0]);
|
|
174
|
-
const u1 = map(u[1]);
|
|
175
|
-
return clear(u0.add(u1));
|
|
176
|
-
},
|
|
177
|
-
encodeToCurve(msg, options) {
|
|
178
|
-
const optsDst = defaults.encodeDST ? { DST: defaults.encodeDST } : {};
|
|
179
|
-
const opts = Object.assign({}, defaults, optsDst, options);
|
|
180
|
-
const u = hash_to_field(msg, 1, opts);
|
|
181
|
-
const u0 = map(u[0]);
|
|
182
|
-
return clear(u0);
|
|
183
|
-
},
|
|
184
|
-
/** See {@link H2CHasher} */
|
|
185
|
-
mapToCurve(scalars) {
|
|
186
|
-
if (!Array.isArray(scalars))
|
|
187
|
-
throw new Error('expected array of bigints');
|
|
188
|
-
for (const i of scalars)
|
|
189
|
-
if (typeof i !== 'bigint')
|
|
190
|
-
throw new Error('expected array of bigints');
|
|
191
|
-
return clear(map(scalars));
|
|
192
|
-
},
|
|
193
|
-
// hash_to_scalar can produce 0: https://www.rfc-editor.org/errata/eid8393
|
|
194
|
-
// RFC 9380, draft-irtf-cfrg-bbs-signatures-08
|
|
195
|
-
hashToScalar(msg, options) {
|
|
196
|
-
// @ts-ignore
|
|
197
|
-
const N = Point.Fn.ORDER;
|
|
198
|
-
const opts = Object.assign({}, defaults, { p: N, m: 1, DST: _DST_scalar }, options);
|
|
199
|
-
return hash_to_field(msg, 1, opts)[0][0];
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
//# sourceMappingURL=hash-to-curve.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hash-to-curve.js","sourceRoot":"","sources":["../../src/abstract/hash-to-curve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
export declare function mod(a: bigint, b: bigint): bigint;
|
|
2
|
-
/**
|
|
3
|
-
* Efficiently raise num to power and do modular division.
|
|
4
|
-
* Unsafe in some contexts: uses ladder, so can expose bigint bits.
|
|
5
|
-
* @example
|
|
6
|
-
* pow(2n, 6n, 11n) // 64n % 11n == 9n
|
|
7
|
-
*/
|
|
8
|
-
export declare function pow(num: bigint, power: bigint, modulo: bigint): bigint;
|
|
9
|
-
/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */
|
|
10
|
-
export declare function pow2(x: bigint, power: bigint, modulo: bigint): bigint;
|
|
11
|
-
/**
|
|
12
|
-
* Inverses number over modulo.
|
|
13
|
-
* Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).
|
|
14
|
-
*/
|
|
15
|
-
export declare function invert(number: bigint, modulo: bigint): bigint;
|
|
16
|
-
/**
|
|
17
|
-
* Tonelli-Shanks square root search algorithm.
|
|
18
|
-
* 1. https://eprint.iacr.org/2012/685.pdf (page 12)
|
|
19
|
-
* 2. Square Roots from 1; 24, 51, 10 to Dan Shanks
|
|
20
|
-
* @param P field order
|
|
21
|
-
* @returns function that takes field Fp (created from P) and number n
|
|
22
|
-
*/
|
|
23
|
-
export declare function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T;
|
|
24
|
-
/**
|
|
25
|
-
* Square root for a finite field. Will try optimized versions first:
|
|
26
|
-
*
|
|
27
|
-
* 1. P ≡ 3 (mod 4)
|
|
28
|
-
* 2. P ≡ 5 (mod 8)
|
|
29
|
-
* 3. P ≡ 9 (mod 16)
|
|
30
|
-
* 4. Tonelli-Shanks algorithm
|
|
31
|
-
*
|
|
32
|
-
* Different algorithms can give different roots, it is up to user to decide which one they want.
|
|
33
|
-
* For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).
|
|
34
|
-
*/
|
|
35
|
-
export declare function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T;
|
|
36
|
-
export declare const isNegativeLE: (num: bigint, modulo: bigint) => boolean;
|
|
37
|
-
/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */
|
|
38
|
-
export interface IField<T> {
|
|
39
|
-
ORDER: bigint;
|
|
40
|
-
isLE: boolean;
|
|
41
|
-
BYTES: number;
|
|
42
|
-
BITS: number;
|
|
43
|
-
MASK: bigint;
|
|
44
|
-
ZERO: T;
|
|
45
|
-
ONE: T;
|
|
46
|
-
create: (num: T) => T;
|
|
47
|
-
isValid: (num: T) => boolean;
|
|
48
|
-
is0: (num: T) => boolean;
|
|
49
|
-
isValidNot0: (num: T) => boolean;
|
|
50
|
-
neg(num: T): T;
|
|
51
|
-
inv(num: T): T;
|
|
52
|
-
sqrt(num: T): T;
|
|
53
|
-
sqr(num: T): T;
|
|
54
|
-
eql(lhs: T, rhs: T): boolean;
|
|
55
|
-
add(lhs: T, rhs: T): T;
|
|
56
|
-
sub(lhs: T, rhs: T): T;
|
|
57
|
-
mul(lhs: T, rhs: T | bigint): T;
|
|
58
|
-
pow(lhs: T, power: bigint): T;
|
|
59
|
-
div(lhs: T, rhs: T | bigint): T;
|
|
60
|
-
addN(lhs: T, rhs: T): T;
|
|
61
|
-
subN(lhs: T, rhs: T): T;
|
|
62
|
-
mulN(lhs: T, rhs: T | bigint): T;
|
|
63
|
-
sqrN(num: T): T;
|
|
64
|
-
isOdd?(num: T): boolean;
|
|
65
|
-
allowedLengths?: number[];
|
|
66
|
-
invertBatch: (lst: T[]) => T[];
|
|
67
|
-
toBytes(num: T): Uint8Array;
|
|
68
|
-
fromBytes(bytes: Uint8Array, skipValidation?: boolean): T;
|
|
69
|
-
cmov(a: T, b: T, c: boolean): T;
|
|
70
|
-
}
|
|
71
|
-
export declare function validateField<T>(field: IField<T>): IField<T>;
|
|
72
|
-
/**
|
|
73
|
-
* Same as `pow` but for Fp: non-constant-time.
|
|
74
|
-
* Unsafe in some contexts: uses ladder, so can expose bigint bits.
|
|
75
|
-
*/
|
|
76
|
-
export declare function FpPow<T>(Fp: IField<T>, num: T, power: bigint): T;
|
|
77
|
-
/**
|
|
78
|
-
* Efficiently invert an array of Field elements.
|
|
79
|
-
* Exception-free. Will return `undefined` for 0 elements.
|
|
80
|
-
* @param passZero map 0 to 0 (instead of undefined)
|
|
81
|
-
*/
|
|
82
|
-
export declare function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero?: boolean): T[];
|
|
83
|
-
export declare function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T;
|
|
84
|
-
/**
|
|
85
|
-
* Legendre symbol.
|
|
86
|
-
* Legendre constant is used to calculate Legendre symbol (a | p)
|
|
87
|
-
* which denotes the value of a^((p-1)/2) (mod p).
|
|
88
|
-
*
|
|
89
|
-
* * (a | p) ≡ 1 if a is a square (mod p), quadratic residue
|
|
90
|
-
* * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue
|
|
91
|
-
* * (a | p) ≡ 0 if a ≡ 0 (mod p)
|
|
92
|
-
*/
|
|
93
|
-
export declare function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1;
|
|
94
|
-
export declare function FpIsSquare<T>(Fp: IField<T>, n: T): boolean;
|
|
95
|
-
export type NLength = {
|
|
96
|
-
nByteLength: number;
|
|
97
|
-
nBitLength: number;
|
|
98
|
-
};
|
|
99
|
-
export declare function nLength(n: bigint, nBitLength?: number): NLength;
|
|
100
|
-
type FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;
|
|
101
|
-
type SqrtFn = (n: bigint) => bigint;
|
|
102
|
-
type FieldOpts = Partial<{
|
|
103
|
-
sqrt: SqrtFn;
|
|
104
|
-
isLE: boolean;
|
|
105
|
-
BITS: number;
|
|
106
|
-
modFromBytes: boolean;
|
|
107
|
-
allowedLengths?: readonly number[];
|
|
108
|
-
}>;
|
|
109
|
-
/**
|
|
110
|
-
* Creates a finite field. Major performance optimizations:
|
|
111
|
-
* * 1. Denormalized operations like mulN instead of mul.
|
|
112
|
-
* * 2. Identical object shape: never add or remove keys.
|
|
113
|
-
* * 3. `Object.freeze`.
|
|
114
|
-
* Fragile: always run a benchmark on a change.
|
|
115
|
-
* Security note: operations don't check 'isValid' for all elements for performance reasons,
|
|
116
|
-
* it is caller responsibility to check this.
|
|
117
|
-
* This is low-level code, please make sure you know what you're doing.
|
|
118
|
-
*
|
|
119
|
-
* Note about field properties:
|
|
120
|
-
* * CHARACTERISTIC p = prime number, number of elements in main subgroup.
|
|
121
|
-
* * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.
|
|
122
|
-
*
|
|
123
|
-
* @param ORDER field order, probably prime, or could be composite
|
|
124
|
-
* @param bitLen how many bits the field consumes
|
|
125
|
-
* @param isLE (default: false) if encoding / decoding should be in little-endian
|
|
126
|
-
* @param redef optional faster redefinitions of sqrt and other methods
|
|
127
|
-
*/
|
|
128
|
-
export declare function Field(ORDER: bigint, bitLenOrOpts?: number | FieldOpts, // TODO: use opts only in v2?
|
|
129
|
-
isLE?: boolean, opts?: {
|
|
130
|
-
sqrt?: SqrtFn;
|
|
131
|
-
}): Readonly<FpField>;
|
|
132
|
-
export declare function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T;
|
|
133
|
-
export declare function FpSqrtEven<T>(Fp: IField<T>, elm: T): T;
|
|
134
|
-
/**
|
|
135
|
-
* "Constant-time" private key generation utility.
|
|
136
|
-
* Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).
|
|
137
|
-
* Which makes it slightly more biased, less secure.
|
|
138
|
-
* @deprecated use `mapKeyToField` instead
|
|
139
|
-
*/
|
|
140
|
-
export declare function hashToPrivateScalar(hash: string | Uint8Array, groupOrder: bigint, isLE?: boolean): bigint;
|
|
141
|
-
/**
|
|
142
|
-
* Returns total number of bytes consumed by the field element.
|
|
143
|
-
* For example, 32 bytes for usual 256-bit weierstrass curve.
|
|
144
|
-
* @param fieldOrder number of field elements, usually CURVE.n
|
|
145
|
-
* @returns byte length of field
|
|
146
|
-
*/
|
|
147
|
-
export declare function getFieldBytesLength(fieldOrder: bigint): number;
|
|
148
|
-
/**
|
|
149
|
-
* Returns minimal amount of bytes that can be safely reduced
|
|
150
|
-
* by field order.
|
|
151
|
-
* Should be 2^-128 for 128-bit curve such as P256.
|
|
152
|
-
* @param fieldOrder number of field elements, usually CURVE.n
|
|
153
|
-
* @returns byte length of target hash
|
|
154
|
-
*/
|
|
155
|
-
export declare function getMinHashLength(fieldOrder: bigint): number;
|
|
156
|
-
/**
|
|
157
|
-
* "Constant-time" private key generation utility.
|
|
158
|
-
* Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF
|
|
159
|
-
* and convert them into private scalar, with the modulo bias being negligible.
|
|
160
|
-
* Needs at least 48 bytes of input for 32-byte private key.
|
|
161
|
-
* https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/
|
|
162
|
-
* FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final
|
|
163
|
-
* RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5
|
|
164
|
-
* @param hash hash output from SHA3 or a similar function
|
|
165
|
-
* @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)
|
|
166
|
-
* @param isLE interpret hash bytes as LE num
|
|
167
|
-
* @returns valid private scalar
|
|
168
|
-
*/
|
|
169
|
-
export declare function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE?: boolean): Uint8Array;
|
|
170
|
-
export {};
|
|
171
|
-
//# sourceMappingURL=modular.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modular.d.ts","sourceRoot":"","sources":["../../src/abstract/modular.ts"],"names":[],"mappings":"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"}
|