@noble/curves 1.9.5 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/README.md +267 -421
  2. package/abstract/bls.d.ts +49 -111
  3. package/abstract/bls.d.ts.map +1 -1
  4. package/abstract/bls.js +108 -152
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/curve.d.ts +7 -48
  7. package/abstract/curve.d.ts.map +1 -1
  8. package/abstract/curve.js +22 -47
  9. package/abstract/curve.js.map +1 -1
  10. package/abstract/edwards.d.ts +17 -68
  11. package/abstract/edwards.d.ts.map +1 -1
  12. package/abstract/edwards.js +98 -175
  13. package/abstract/edwards.js.map +1 -1
  14. package/abstract/fft.js +14 -27
  15. package/abstract/fft.js.map +1 -1
  16. package/abstract/hash-to-curve.d.ts +11 -24
  17. package/abstract/hash-to-curve.d.ts.map +1 -1
  18. package/abstract/hash-to-curve.js +30 -35
  19. package/abstract/hash-to-curve.js.map +1 -1
  20. package/abstract/modular.d.ts +5 -17
  21. package/abstract/modular.d.ts.map +1 -1
  22. package/abstract/modular.js +166 -167
  23. package/abstract/modular.js.map +1 -1
  24. package/abstract/montgomery.d.ts +4 -9
  25. package/abstract/montgomery.d.ts.map +1 -1
  26. package/abstract/montgomery.js +17 -20
  27. package/abstract/montgomery.js.map +1 -1
  28. package/abstract/oprf.d.ts +282 -0
  29. package/abstract/oprf.d.ts.map +1 -0
  30. package/abstract/oprf.js +297 -0
  31. package/abstract/oprf.js.map +1 -0
  32. package/abstract/poseidon.js +20 -24
  33. package/abstract/poseidon.js.map +1 -1
  34. package/abstract/tower.d.ts +9 -7
  35. package/abstract/tower.d.ts.map +1 -1
  36. package/abstract/tower.js +600 -364
  37. package/abstract/tower.js.map +1 -1
  38. package/abstract/weierstrass.d.ts +12 -145
  39. package/abstract/weierstrass.d.ts.map +1 -1
  40. package/abstract/weierstrass.js +153 -377
  41. package/abstract/weierstrass.js.map +1 -1
  42. package/bls12-381.d.ts +2 -2
  43. package/bls12-381.d.ts.map +1 -1
  44. package/bls12-381.js +174 -216
  45. package/bls12-381.js.map +1 -1
  46. package/bn254.d.ts +58 -10
  47. package/bn254.d.ts.map +1 -1
  48. package/bn254.js +70 -130
  49. package/bn254.js.map +1 -1
  50. package/ed25519.d.ts +12 -31
  51. package/ed25519.d.ts.map +1 -1
  52. package/ed25519.js +104 -146
  53. package/ed25519.js.map +1 -1
  54. package/ed448.d.ts +14 -33
  55. package/ed448.d.ts.map +1 -1
  56. package/ed448.js +105 -132
  57. package/ed448.js.map +1 -1
  58. package/index.js +1 -1
  59. package/misc.d.ts +10 -14
  60. package/misc.d.ts.map +1 -1
  61. package/misc.js +51 -60
  62. package/misc.js.map +1 -1
  63. package/nist.d.ts +11 -14
  64. package/nist.d.ts.map +1 -1
  65. package/nist.js +46 -55
  66. package/nist.js.map +1 -1
  67. package/package.json +9 -224
  68. package/secp256k1.d.ts +7 -23
  69. package/secp256k1.d.ts.map +1 -1
  70. package/secp256k1.js +72 -83
  71. package/secp256k1.js.map +1 -1
  72. package/src/abstract/bls.ts +197 -344
  73. package/src/abstract/curve.ts +10 -83
  74. package/src/abstract/edwards.ts +96 -223
  75. package/src/abstract/hash-to-curve.ts +32 -45
  76. package/src/abstract/modular.ts +144 -130
  77. package/src/abstract/montgomery.ts +21 -22
  78. package/src/abstract/oprf.ts +600 -0
  79. package/src/abstract/tower.ts +627 -382
  80. package/src/abstract/weierstrass.ts +101 -482
  81. package/src/bls12-381.ts +148 -176
  82. package/src/bn254.ts +67 -122
  83. package/src/ed25519.ts +65 -118
  84. package/src/ed448.ts +63 -113
  85. package/src/index.ts +1 -1
  86. package/src/misc.ts +66 -49
  87. package/src/nist.ts +48 -57
  88. package/src/secp256k1.ts +56 -88
  89. package/src/utils.ts +41 -61
  90. package/src/webcrypto.ts +362 -0
  91. package/utils.d.ts +28 -19
  92. package/utils.d.ts.map +1 -1
  93. package/utils.js +45 -121
  94. package/utils.js.map +1 -1
  95. package/webcrypto.d.ts +47 -0
  96. package/webcrypto.d.ts.map +1 -0
  97. package/webcrypto.js +231 -0
  98. package/webcrypto.js.map +1 -0
  99. package/esm/_shortw_utils.d.ts +0 -19
  100. package/esm/_shortw_utils.d.ts.map +0 -1
  101. package/esm/_shortw_utils.js +0 -16
  102. package/esm/_shortw_utils.js.map +0 -1
  103. package/esm/abstract/bls.d.ts +0 -190
  104. package/esm/abstract/bls.d.ts.map +0 -1
  105. package/esm/abstract/bls.js +0 -408
  106. package/esm/abstract/bls.js.map +0 -1
  107. package/esm/abstract/curve.d.ts +0 -231
  108. package/esm/abstract/curve.d.ts.map +0 -1
  109. package/esm/abstract/curve.js +0 -465
  110. package/esm/abstract/curve.js.map +0 -1
  111. package/esm/abstract/edwards.d.ts +0 -237
  112. package/esm/abstract/edwards.d.ts.map +0 -1
  113. package/esm/abstract/edwards.js +0 -632
  114. package/esm/abstract/edwards.js.map +0 -1
  115. package/esm/abstract/fft.d.ts +0 -122
  116. package/esm/abstract/fft.d.ts.map +0 -1
  117. package/esm/abstract/fft.js +0 -425
  118. package/esm/abstract/fft.js.map +0 -1
  119. package/esm/abstract/hash-to-curve.d.ts +0 -102
  120. package/esm/abstract/hash-to-curve.d.ts.map +0 -1
  121. package/esm/abstract/hash-to-curve.js +0 -203
  122. package/esm/abstract/hash-to-curve.js.map +0 -1
  123. package/esm/abstract/modular.d.ts +0 -171
  124. package/esm/abstract/modular.d.ts.map +0 -1
  125. package/esm/abstract/modular.js +0 -530
  126. package/esm/abstract/modular.js.map +0 -1
  127. package/esm/abstract/montgomery.d.ts +0 -30
  128. package/esm/abstract/montgomery.d.ts.map +0 -1
  129. package/esm/abstract/montgomery.js +0 -157
  130. package/esm/abstract/montgomery.js.map +0 -1
  131. package/esm/abstract/poseidon.d.ts +0 -68
  132. package/esm/abstract/poseidon.d.ts.map +0 -1
  133. package/esm/abstract/poseidon.js +0 -296
  134. package/esm/abstract/poseidon.js.map +0 -1
  135. package/esm/abstract/tower.d.ts +0 -93
  136. package/esm/abstract/tower.d.ts.map +0 -1
  137. package/esm/abstract/tower.js +0 -502
  138. package/esm/abstract/tower.js.map +0 -1
  139. package/esm/abstract/utils.d.ts +0 -5
  140. package/esm/abstract/utils.d.ts.map +0 -1
  141. package/esm/abstract/utils.js +0 -7
  142. package/esm/abstract/utils.js.map +0 -1
  143. package/esm/abstract/weierstrass.d.ts +0 -412
  144. package/esm/abstract/weierstrass.d.ts.map +0 -1
  145. package/esm/abstract/weierstrass.js +0 -1428
  146. package/esm/abstract/weierstrass.js.map +0 -1
  147. package/esm/bls12-381.d.ts +0 -16
  148. package/esm/bls12-381.d.ts.map +0 -1
  149. package/esm/bls12-381.js +0 -738
  150. package/esm/bls12-381.js.map +0 -1
  151. package/esm/bn254.d.ts +0 -18
  152. package/esm/bn254.d.ts.map +0 -1
  153. package/esm/bn254.js +0 -246
  154. package/esm/bn254.js.map +0 -1
  155. package/esm/ed25519.d.ts +0 -106
  156. package/esm/ed25519.d.ts.map +0 -1
  157. package/esm/ed25519.js +0 -467
  158. package/esm/ed25519.js.map +0 -1
  159. package/esm/ed448.d.ts +0 -101
  160. package/esm/ed448.d.ts.map +0 -1
  161. package/esm/ed448.js +0 -448
  162. package/esm/ed448.js.map +0 -1
  163. package/esm/index.d.ts +0 -2
  164. package/esm/index.d.ts.map +0 -1
  165. package/esm/index.js +0 -17
  166. package/esm/index.js.map +0 -1
  167. package/esm/jubjub.d.ts +0 -12
  168. package/esm/jubjub.d.ts.map +0 -1
  169. package/esm/jubjub.js +0 -12
  170. package/esm/jubjub.js.map +0 -1
  171. package/esm/misc.d.ts +0 -19
  172. package/esm/misc.d.ts.map +0 -1
  173. package/esm/misc.js +0 -109
  174. package/esm/misc.js.map +0 -1
  175. package/esm/nist.d.ts +0 -21
  176. package/esm/nist.d.ts.map +0 -1
  177. package/esm/nist.js +0 -132
  178. package/esm/nist.js.map +0 -1
  179. package/esm/p256.d.ts +0 -16
  180. package/esm/p256.d.ts.map +0 -1
  181. package/esm/p256.js +0 -16
  182. package/esm/p256.js.map +0 -1
  183. package/esm/p384.d.ts +0 -16
  184. package/esm/p384.d.ts.map +0 -1
  185. package/esm/p384.js +0 -16
  186. package/esm/p384.js.map +0 -1
  187. package/esm/p521.d.ts +0 -16
  188. package/esm/p521.d.ts.map +0 -1
  189. package/esm/p521.js +0 -16
  190. package/esm/p521.js.map +0 -1
  191. package/esm/package.json +0 -4
  192. package/esm/pasta.d.ts +0 -10
  193. package/esm/pasta.d.ts.map +0 -1
  194. package/esm/pasta.js +0 -10
  195. package/esm/pasta.js.map +0 -1
  196. package/esm/secp256k1.d.ts +0 -89
  197. package/esm/secp256k1.d.ts.map +0 -1
  198. package/esm/secp256k1.js +0 -292
  199. package/esm/secp256k1.js.map +0 -1
  200. package/esm/utils.d.ts +0 -110
  201. package/esm/utils.d.ts.map +0 -1
  202. package/esm/utils.js +0 -322
  203. package/esm/utils.js.map +0 -1
  204. package/src/_shortw_utils.ts +0 -21
  205. package/src/abstract/utils.ts +0 -7
  206. package/src/jubjub.ts +0 -12
  207. package/src/p256.ts +0 -15
  208. package/src/p384.ts +0 -15
  209. package/src/p521.ts +0 -15
  210. package/src/package.json +0 -3
  211. 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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"}