@noble/curves 0.7.2 → 0.8.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.
Files changed (105) hide show
  1. package/README.md +32 -13
  2. package/_shortw_utils.js +8 -13
  3. package/_shortw_utils.js.map +1 -1
  4. package/abstract/bls.js +12 -16
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/curve.js +7 -12
  7. package/abstract/curve.js.map +1 -1
  8. package/abstract/edwards.js +16 -20
  9. package/abstract/edwards.js.map +1 -1
  10. package/abstract/hash-to-curve.d.ts +16 -5
  11. package/abstract/hash-to-curve.d.ts.map +1 -1
  12. package/abstract/hash-to-curve.js +51 -56
  13. package/abstract/hash-to-curve.js.map +1 -1
  14. package/abstract/modular.d.ts.map +1 -1
  15. package/abstract/modular.js +25 -44
  16. package/abstract/modular.js.map +1 -1
  17. package/abstract/montgomery.js +11 -15
  18. package/abstract/montgomery.js.map +1 -1
  19. package/abstract/poseidon.js +6 -12
  20. package/abstract/poseidon.js.map +1 -1
  21. package/abstract/utils.js +19 -41
  22. package/abstract/utils.js.map +1 -1
  23. package/abstract/weierstrass.d.ts.map +1 -1
  24. package/abstract/weierstrass.js +25 -37
  25. package/abstract/weierstrass.js.map +1 -1
  26. package/bls12-381.js +63 -66
  27. package/bls12-381.js.map +1 -1
  28. package/bn.js +7 -10
  29. package/bn.js.map +1 -1
  30. package/ed25519.d.ts +3 -0
  31. package/ed25519.d.ts.map +1 -1
  32. package/ed25519.js +81 -74
  33. package/ed25519.js.map +1 -1
  34. package/ed448.js +37 -41
  35. package/ed448.js.map +1 -1
  36. package/jubjub.js +17 -22
  37. package/jubjub.js.map +1 -1
  38. package/p256.js +13 -17
  39. package/p256.js.map +1 -1
  40. package/p384.js +13 -17
  41. package/p384.js.map +1 -1
  42. package/p521.js +13 -17
  43. package/p521.js.map +1 -1
  44. package/package.json +4 -26
  45. package/pasta.js +16 -19
  46. package/pasta.js.map +1 -1
  47. package/secp256k1.d.ts +0 -6
  48. package/secp256k1.d.ts.map +1 -1
  49. package/secp256k1.js +58 -63
  50. package/secp256k1.js.map +1 -1
  51. package/src/abstract/hash-to-curve.ts +49 -47
  52. package/src/abstract/modular.ts +1 -0
  53. package/src/abstract/weierstrass.ts +4 -10
  54. package/src/ed25519.ts +17 -1
  55. package/src/secp256k1.ts +7 -7
  56. package/src/stark.ts +50 -27
  57. package/stark.d.ts +17 -19
  58. package/stark.d.ts.map +1 -1
  59. package/stark.js +76 -72
  60. package/stark.js.map +1 -1
  61. package/esm/_shortw_utils.js +0 -17
  62. package/esm/_shortw_utils.js.map +0 -1
  63. package/esm/abstract/bls.js +0 -226
  64. package/esm/abstract/bls.js.map +0 -1
  65. package/esm/abstract/curve.js +0 -152
  66. package/esm/abstract/curve.js.map +0 -1
  67. package/esm/abstract/edwards.js +0 -409
  68. package/esm/abstract/edwards.js.map +0 -1
  69. package/esm/abstract/hash-to-curve.js +0 -163
  70. package/esm/abstract/hash-to-curve.js.map +0 -1
  71. package/esm/abstract/modular.js +0 -345
  72. package/esm/abstract/modular.js.map +0 -1
  73. package/esm/abstract/montgomery.js +0 -157
  74. package/esm/abstract/montgomery.js.map +0 -1
  75. package/esm/abstract/poseidon.js +0 -110
  76. package/esm/abstract/poseidon.js.map +0 -1
  77. package/esm/abstract/utils.js +0 -222
  78. package/esm/abstract/utils.js.map +0 -1
  79. package/esm/abstract/weierstrass.js +0 -1016
  80. package/esm/abstract/weierstrass.js.map +0 -1
  81. package/esm/bls12-381.js +0 -1173
  82. package/esm/bls12-381.js.map +0 -1
  83. package/esm/bn.js +0 -22
  84. package/esm/bn.js.map +0 -1
  85. package/esm/ed25519.js +0 -385
  86. package/esm/ed25519.js.map +0 -1
  87. package/esm/ed448.js +0 -213
  88. package/esm/ed448.js.map +0 -1
  89. package/esm/index.js +0 -3
  90. package/esm/index.js.map +0 -1
  91. package/esm/jubjub.js +0 -54
  92. package/esm/jubjub.js.map +0 -1
  93. package/esm/p256.js +0 -42
  94. package/esm/p256.js.map +0 -1
  95. package/esm/p384.js +0 -47
  96. package/esm/p384.js.map +0 -1
  97. package/esm/p521.js +0 -48
  98. package/esm/p521.js.map +0 -1
  99. package/esm/package.json +0 -7
  100. package/esm/pasta.js +0 -30
  101. package/esm/pasta.js.map +0 -1
  102. package/esm/secp256k1.js +0 -253
  103. package/esm/secp256k1.js.map +0 -1
  104. package/esm/stark.js +0 -251
  105. package/esm/stark.js.map +0 -1
package/esm/secp256k1.js DELETED
@@ -1,253 +0,0 @@
1
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
2
- import { sha256 } from '@noble/hashes/sha256';
3
- import { randomBytes } from '@noble/hashes/utils';
4
- import { Fp as Field, mod, pow2 } from './abstract/modular.js';
5
- import { mapToCurveSimpleSWU } from './abstract/weierstrass.js';
6
- import { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';
7
- import * as htf from './abstract/hash-to-curve.js';
8
- import { createCurve } from './_shortw_utils.js';
9
- const secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');
10
- const secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
11
- const _1n = BigInt(1);
12
- const _2n = BigInt(2);
13
- const divNearest = (a, b) => (a + b / _2n) / b;
14
- /**
15
- * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.
16
- * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]
17
- */
18
- function sqrtMod(y) {
19
- const P = secp256k1P;
20
- // prettier-ignore
21
- const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);
22
- // prettier-ignore
23
- const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);
24
- const b2 = (y * y * y) % P; // x^3, 11
25
- const b3 = (b2 * b2 * y) % P; // x^7
26
- const b6 = (pow2(b3, _3n, P) * b3) % P;
27
- const b9 = (pow2(b6, _3n, P) * b3) % P;
28
- const b11 = (pow2(b9, _2n, P) * b2) % P;
29
- const b22 = (pow2(b11, _11n, P) * b11) % P;
30
- const b44 = (pow2(b22, _22n, P) * b22) % P;
31
- const b88 = (pow2(b44, _44n, P) * b44) % P;
32
- const b176 = (pow2(b88, _88n, P) * b88) % P;
33
- const b220 = (pow2(b176, _44n, P) * b44) % P;
34
- const b223 = (pow2(b220, _3n, P) * b3) % P;
35
- const t1 = (pow2(b223, _23n, P) * b22) % P;
36
- const t2 = (pow2(t1, _6n, P) * b2) % P;
37
- const root = pow2(t2, _2n, P);
38
- if (!Fp.eql(Fp.sqr(root), y))
39
- throw new Error('Cannot find square root');
40
- return root;
41
- }
42
- const Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });
43
- export const secp256k1 = createCurve({
44
- a: BigInt(0),
45
- b: BigInt(7),
46
- Fp,
47
- n: secp256k1N,
48
- // Base point (x, y) aka generator point
49
- Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),
50
- Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),
51
- h: BigInt(1),
52
- lowS: true,
53
- /**
54
- * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.
55
- * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.
56
- * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.
57
- * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066
58
- */
59
- endo: {
60
- beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),
61
- splitScalar: (k) => {
62
- const n = secp256k1N;
63
- const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');
64
- const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');
65
- const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');
66
- const b2 = a1;
67
- const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)
68
- const c1 = divNearest(b2 * k, n);
69
- const c2 = divNearest(-b1 * k, n);
70
- let k1 = mod(k - c1 * a1 - c2 * a2, n);
71
- let k2 = mod(-c1 * b1 - c2 * b2, n);
72
- const k1neg = k1 > POW_2_128;
73
- const k2neg = k2 > POW_2_128;
74
- if (k1neg)
75
- k1 = n - k1;
76
- if (k2neg)
77
- k2 = n - k2;
78
- if (k1 > POW_2_128 || k2 > POW_2_128) {
79
- throw new Error('splitScalar: Endomorphism failed, k=' + k);
80
- }
81
- return { k1neg, k1, k2neg, k2 };
82
- },
83
- },
84
- }, sha256);
85
- // Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.
86
- // https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
87
- const _0n = BigInt(0);
88
- const fe = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1P;
89
- const ge = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1N;
90
- /** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */
91
- const TAGGED_HASH_PREFIXES = {};
92
- function taggedHash(tag, ...messages) {
93
- let tagP = TAGGED_HASH_PREFIXES[tag];
94
- if (tagP === undefined) {
95
- const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));
96
- tagP = concatBytes(tagH, tagH);
97
- TAGGED_HASH_PREFIXES[tag] = tagP;
98
- }
99
- return sha256(concatBytes(tagP, ...messages));
100
- }
101
- // ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03
102
- const pointToBytes = (point) => point.toRawBytes(true).slice(1);
103
- const numTo32b = (n) => numberToBytesBE(n, 32);
104
- const modP = (x) => mod(x, secp256k1P);
105
- const modN = (x) => mod(x, secp256k1N);
106
- const Point = secp256k1.ProjectivePoint;
107
- const GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);
108
- // Calculate point, scalar and bytes
109
- function schnorrGetExtPubKey(priv) {
110
- const d = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey
111
- const point = Point.fromPrivateKey(d); // P = d'⋅G; 0 < d' < n check is done inside
112
- const scalar = point.hasEvenY() ? d : modN(-d); // d = d' if has_even_y(P), otherwise d = n-d'
113
- return { point, scalar, bytes: pointToBytes(point) };
114
- }
115
- /**
116
- * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.
117
- * @returns valid point checked for being on-curve
118
- */
119
- function lift_x(x) {
120
- if (!fe(x))
121
- throw new Error('bad x: need 0 < x < p'); // Fail if x ≥ p.
122
- const xx = modP(x * x);
123
- const c = modP(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.
124
- let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.
125
- if (y % 2n !== 0n)
126
- y = modP(-y); // Return the unique point P such that x(P) = x and
127
- const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.
128
- p.assertValidity();
129
- return p;
130
- }
131
- /**
132
- * Create tagged hash, convert it to bigint, reduce modulo-n.
133
- */
134
- function challenge(...args) {
135
- return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));
136
- }
137
- /**
138
- * Schnorr public key is just `x` coordinate of Point as per BIP340.
139
- */
140
- function schnorrGetPublicKey(privateKey) {
141
- return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)
142
- }
143
- /**
144
- * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.
145
- * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.
146
- */
147
- function schnorrSign(message, privateKey, auxRand = randomBytes(32)) {
148
- const m = ensureBytes('message', message);
149
- const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder
150
- const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array
151
- const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)
152
- const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)
153
- const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n
154
- if (k_ === _0n)
155
- throw new Error('sign failed: k is zero'); // Fail if k' = 0.
156
- const { point: R, bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.
157
- const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.
158
- const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).
159
- sig.set(numTo32b(R.px), 0);
160
- sig.set(numTo32b(modN(k + e * d)), 32);
161
- // If Verify(bytes(P), m, sig) (see below) returns failure, abort
162
- if (!schnorrVerify(sig, m, px))
163
- throw new Error('sign: Invalid signature produced');
164
- return sig;
165
- }
166
- /**
167
- * Verifies Schnorr signature.
168
- * Will swallow errors & return false except for initial type validation of arguments.
169
- */
170
- function schnorrVerify(signature, message, publicKey) {
171
- const sig = ensureBytes('signature', signature, 64);
172
- const m = ensureBytes('message', message);
173
- const pub = ensureBytes('publicKey', publicKey, 32);
174
- try {
175
- const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails
176
- const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.
177
- if (!fe(r))
178
- return false;
179
- const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.
180
- if (!ge(s))
181
- return false;
182
- const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n
183
- const R = GmulAdd(P, s, modN(-e)); // R = s⋅G - e⋅P
184
- if (!R || !R.hasEvenY() || R.toAffine().x !== r)
185
- return false; // -eP == (n-e)P
186
- return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.
187
- }
188
- catch (error) {
189
- return false;
190
- }
191
- }
192
- export const schnorr = {
193
- getPublicKey: schnorrGetPublicKey,
194
- sign: schnorrSign,
195
- verify: schnorrVerify,
196
- utils: {
197
- randomPrivateKey: secp256k1.utils.randomPrivateKey,
198
- getExtendedPublicKey: schnorrGetExtPubKey,
199
- lift_x,
200
- pointToBytes,
201
- numberToBytesBE,
202
- bytesToNumberBE,
203
- taggedHash,
204
- mod,
205
- },
206
- };
207
- const isoMap = htf.isogenyMap(Fp, [
208
- // xNum
209
- [
210
- '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',
211
- '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',
212
- '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',
213
- '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',
214
- ],
215
- // xDen
216
- [
217
- '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',
218
- '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',
219
- '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1
220
- ],
221
- // yNum
222
- [
223
- '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',
224
- '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',
225
- '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',
226
- '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',
227
- ],
228
- // yDen
229
- [
230
- '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',
231
- '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',
232
- '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',
233
- '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1
234
- ],
235
- ].map((i) => i.map((j) => BigInt(j))));
236
- const mapSWU = mapToCurveSimpleSWU(Fp, {
237
- A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),
238
- B: BigInt('1771'),
239
- Z: Fp.create(BigInt('-11')),
240
- });
241
- export const { hashToCurve, encodeToCurve } = htf.createHasher(secp256k1.ProjectivePoint, (scalars) => {
242
- const { x, y } = mapSWU(Fp.create(scalars[0]));
243
- return isoMap(x, y);
244
- }, {
245
- DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',
246
- encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',
247
- p: Fp.ORDER,
248
- m: 1,
249
- k: 128,
250
- expand: 'xmd',
251
- hash: sha256,
252
- });
253
- //# sourceMappingURL=secp256k1.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../src/secp256k1.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAA8B,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,GAAG,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,UAAU,GAAG,MAAM,CAAC,oEAAoE,CAAC,CAAC;AAChG,MAAM,UAAU,GAAG,MAAM,CAAC,oEAAoE,CAAC,CAAC;AAChG,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAE/D;;;GAGG;AACH,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,CAAC,GAAG,UAAU,CAAC;IACrB,kBAAkB;IAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,kBAAkB;IAClB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;IACtC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IACpC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAClC;IACE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,EAAE;IACF,CAAC,EAAE,UAAU;IACb,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC,+EAA+E,CAAC;IAC3F,EAAE,EAAE,MAAM,CAAC,+EAA+E,CAAC;IAC3F,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,IAAI,EAAE,IAAI;IACV;;;;;OAKG;IACH,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC,oEAAoE,CAAC;QAClF,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE;YACzB,MAAM,CAAC,GAAG,UAAU,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAC;YACzD,MAAM,EAAE,GAAG,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC,0BAA0B;YAE3F,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC;YAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC;YAC7B,IAAI,KAAK;gBAAE,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,KAAK;gBAAE,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,GAAG,SAAS,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,CAAC,CAAC;aAC7D;YACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAClC,CAAC;KACF;CACF,EACD,MAAM,CACP,CAAC;AAEF,+FAA+F;AAC/F,iEAAiE;AACjE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AAC7E,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AAC7E,wFAAwF;AACxF,MAAM,oBAAoB,GAAkC,EAAE,CAAC;AAC/D,SAAS,UAAU,CAAC,GAAW,EAAE,GAAG,QAAsB;IACxD,IAAI,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAClC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,oFAAoF;AACpF,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC;AACxC,MAAM,OAAO,GAAG,CAAC,CAAoB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,CAC7D,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oCAAoC;AACpC,SAAS,mBAAmB,CAAC,IAAa;IACxC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,yCAAyC;IACjG,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,4CAA4C;IACnF,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;IAC9F,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;AACvD,CAAC;AACD;;;GAGG;AACH,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,iBAAiB;IACvE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;IAC5D,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;IAC/C,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;QAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mDAAmD;IACpF,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,mDAAmD;IACnF,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,OAAO,CAAC,CAAC;AACX,CAAC;AACD;;GAEG;AACH,SAAS,SAAS,CAAC,GAAG,IAAkB;IACtC,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAe;IAC1C,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,oDAAoD;AACpG,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,OAAY,EACZ,UAAmB,EACnB,UAAe,WAAW,CAAC,EAAE,CAAC;IAE9B,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,gCAAgC;IAClG,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C;IAC1F,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yDAAyD;IAChI,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,4CAA4C;IAChG,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B;IACnE,IAAI,EAAE,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,kBAAkB;IAC7E,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;IACpF,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gEAAgE;IAChG,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,+CAA+C;IAC/E,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvC,iEAAiE;IACjE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,SAAc,EAAE,OAAY,EAAE,SAAc;IACjE,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAClF,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;QACzF,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAC3F,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAChG,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACnD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,gBAAgB;QAC/E,OAAO,IAAI,CAAC,CAAC,yDAAyD;KACvE;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,YAAY,EAAE,mBAAmB;IACjC,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE;QACL,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,gBAAgB;QAClD,oBAAoB,EAAE,mBAAmB;QACzC,MAAM;QACN,YAAY;QACZ,eAAe;QACf,eAAe;QACf,UAAU;QACV,GAAG;KACJ;CACF,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAC3B,EAAE,EACF;IACE,OAAO;IACP;QACE,oEAAoE;QACpE,mEAAmE;QACnE,oEAAoE;QACpE,oEAAoE;KACrE;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE,EAAE,SAAS;KAChF;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;KACrE;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE,EAAE,SAAS;KAChF;CACF,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAA6B,CAClE,CAAC;AACF,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,EAAE;IACrC,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;CAC5B,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,YAAY,CAC5D,SAAS,CAAC,eAAe,EACzB,CAAC,OAAiB,EAAE,EAAE;IACpB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,CAAC,EACD;IACE,GAAG,EAAE,gCAAgC;IACrC,SAAS,EAAE,gCAAgC;IAC3C,CAAC,EAAE,EAAE,CAAC,KAAK;IACX,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,MAAM;CACb,CACF,CAAC"}
package/esm/stark.js DELETED
@@ -1,251 +0,0 @@
1
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
2
- import { keccak_256 } from '@noble/hashes/sha3';
3
- import { sha256 } from '@noble/hashes/sha256';
4
- import { utf8ToBytes } from '@noble/hashes/utils';
5
- import { Fp, mod, validateField } from './abstract/modular.js';
6
- import { poseidon } from './abstract/poseidon.js';
7
- import { weierstrass } from './abstract/weierstrass.js';
8
- import { bitMask, bytesToHex, bytesToNumberBE, concatBytes, ensureBytes as ensureBytesOrig, hexToBytes, hexToNumber, numberToVarBytesBE, } from './abstract/utils.js';
9
- import { getHash } from './_shortw_utils.js';
10
- const CURVE_ORDER = BigInt('3618502788666131213697322783095070105526743751716087489154079457884512865583');
11
- const nBitLength = 252;
12
- function bits2int(bytes) {
13
- while (bytes[0] === 0)
14
- bytes = bytes.subarray(1); // strip leading 0s
15
- // Copy-pasted from weierstrass.ts
16
- const delta = bytes.length * 8 - nBitLength;
17
- const num = bytesToNumberBE(bytes);
18
- return delta > 0 ? num >> BigInt(delta) : num;
19
- }
20
- function hex0xToBytes(hex) {
21
- if (typeof hex === 'string') {
22
- hex = strip0x(hex); // allow 0x prefix
23
- if (hex.length & 1)
24
- hex = '0' + hex; // allow unpadded hex
25
- }
26
- return hexToBytes(hex);
27
- }
28
- const curve = weierstrass({
29
- a: BigInt(1),
30
- b: BigInt('3141592653589793238462643383279502884197169399375105820974944592307816406665'),
31
- // Field over which we'll do calculations; 2n**251n + 17n * 2n**192n + 1n
32
- // There is no efficient sqrt for field (P%4==1)
33
- Fp: Fp(BigInt('0x800000000000011000000000000000000000000000000000000000000000001')),
34
- n: CURVE_ORDER,
35
- nBitLength,
36
- // Base point (x, y) aka generator point
37
- Gx: BigInt('874739451078007766457464989774322083649278607533249481151382481072868806602'),
38
- Gy: BigInt('152666792071518830868575557812948353041420400780739481342941381225525861407'),
39
- h: BigInt(1),
40
- lowS: false,
41
- ...getHash(sha256),
42
- // Custom truncation routines for stark curve
43
- bits2int,
44
- bits2int_modN: (bytes) => {
45
- // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee11318 =>
46
- // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee113180
47
- const hex = bytesToNumberBE(bytes).toString(16); // toHex unpadded
48
- if (hex.length === 63)
49
- bytes = hex0xToBytes(hex + '0'); // append trailing 0
50
- return mod(bits2int(bytes), CURVE_ORDER);
51
- },
52
- });
53
- export const _starkCurve = curve;
54
- function ensureBytes(hex) {
55
- return ensureBytesOrig('', typeof hex === 'string' ? hex0xToBytes(hex) : hex);
56
- }
57
- function normPrivKey(privKey) {
58
- return bytesToHex(ensureBytes(privKey)).padStart(64, '0');
59
- }
60
- export function getPublicKey(privKey, isCompressed = false) {
61
- return curve.getPublicKey(normPrivKey(privKey), isCompressed);
62
- }
63
- export function getSharedSecret(privKeyA, pubKeyB) {
64
- return curve.getSharedSecret(normPrivKey(privKeyA), pubKeyB);
65
- }
66
- export function sign(msgHash, privKey, opts) {
67
- return curve.sign(ensureBytes(msgHash), normPrivKey(privKey), opts);
68
- }
69
- export function verify(signature, msgHash, pubKey) {
70
- const sig = signature instanceof Signature ? signature : ensureBytes(signature);
71
- return curve.verify(sig, ensureBytes(msgHash), ensureBytes(pubKey));
72
- }
73
- const { CURVE, ProjectivePoint, Signature, utils } = curve;
74
- export { CURVE, ProjectivePoint, Signature, utils };
75
- function extractX(bytes) {
76
- const hex = bytesToHex(bytes.subarray(1));
77
- const stripped = hex.replace(/^0+/gm, ''); // strip leading 0s
78
- return `0x${stripped}`;
79
- }
80
- function strip0x(hex) {
81
- return hex.replace(/^0x/i, '');
82
- }
83
- function numberTo0x16(num) {
84
- // can't use utils.numberToHexUnpadded: adds leading 0 for even byte length
85
- return `0x${num.toString(16)}`;
86
- }
87
- // seed generation
88
- export function grindKey(seed) {
89
- const _seed = ensureBytes(seed);
90
- const sha256mask = 2n ** 256n;
91
- const limit = sha256mask - mod(sha256mask, CURVE_ORDER);
92
- for (let i = 0;; i++) {
93
- const key = sha256Num(concatBytes(_seed, numberToVarBytesBE(BigInt(i))));
94
- if (key < limit)
95
- return mod(key, CURVE_ORDER).toString(16); // key should be in [0, limit)
96
- if (i === 100000)
97
- throw new Error('grindKey is broken: tried 100k vals'); // prevent dos
98
- }
99
- }
100
- export function getStarkKey(privateKey) {
101
- return extractX(getPublicKey(privateKey, true));
102
- }
103
- export function ethSigToPrivate(signature) {
104
- signature = strip0x(signature);
105
- if (signature.length !== 130)
106
- throw new Error('Wrong ethereum signature');
107
- return grindKey(signature.substring(0, 64));
108
- }
109
- const MASK_31 = 2n ** 31n - 1n;
110
- const int31 = (n) => Number(n & MASK_31);
111
- export function getAccountPath(layer, application, ethereumAddress, index) {
112
- const layerNum = int31(sha256Num(layer));
113
- const applicationNum = int31(sha256Num(application));
114
- const eth = hexToNumber(strip0x(ethereumAddress));
115
- return `m/2645'/${layerNum}'/${applicationNum}'/${int31(eth)}'/${int31(eth >> 31n)}'/${index}`;
116
- }
117
- // https://docs.starkware.co/starkex/pedersen-hash-function.html
118
- const PEDERSEN_POINTS = [
119
- new ProjectivePoint(2089986280348253421170679821480865132823066470938446095505822317253594081284n, 1713931329540660377023406109199410414810705867260802078187082345529207694986n, 1n),
120
- new ProjectivePoint(996781205833008774514500082376783249102396023663454813447423147977397232763n, 1668503676786377725805489344771023921079126552019160156920634619255970485781n, 1n),
121
- new ProjectivePoint(2251563274489750535117886426533222435294046428347329203627021249169616184184n, 1798716007562728905295480679789526322175868328062420237419143593021674992973n, 1n),
122
- new ProjectivePoint(2138414695194151160943305727036575959195309218611738193261179310511854807447n, 113410276730064486255102093846540133784865286929052426931474106396135072156n, 1n),
123
- new ProjectivePoint(2379962749567351885752724891227938183011949129833673362440656643086021394946n, 776496453633298175483985398648758586525933812536653089401905292063708816422n, 1n),
124
- ];
125
- function pedersenPrecompute(p1, p2) {
126
- const out = [];
127
- let p = p1;
128
- for (let i = 0; i < 248; i++) {
129
- out.push(p);
130
- p = p.double();
131
- }
132
- // NOTE: we cannot use wNAF here, because last 4 bits will require full 248 bits multiplication
133
- // We can add support for this to wNAF, but it will complicate wNAF.
134
- p = p2;
135
- for (let i = 0; i < 4; i++) {
136
- out.push(p);
137
- p = p.double();
138
- }
139
- return out;
140
- }
141
- const PEDERSEN_POINTS1 = pedersenPrecompute(PEDERSEN_POINTS[1], PEDERSEN_POINTS[2]);
142
- const PEDERSEN_POINTS2 = pedersenPrecompute(PEDERSEN_POINTS[3], PEDERSEN_POINTS[4]);
143
- function pedersenArg(arg) {
144
- let value;
145
- if (typeof arg === 'bigint') {
146
- value = arg;
147
- }
148
- else if (typeof arg === 'number') {
149
- if (!Number.isSafeInteger(arg))
150
- throw new Error(`Invalid pedersenArg: ${arg}`);
151
- value = BigInt(arg);
152
- }
153
- else {
154
- value = bytesToNumberBE(ensureBytes(arg));
155
- }
156
- if (!(0n <= value && value < curve.CURVE.Fp.ORDER))
157
- throw new Error(`PedersenArg should be 0 <= value < CURVE.P: ${value}`); // [0..Fp)
158
- return value;
159
- }
160
- function pedersenSingle(point, value, constants) {
161
- let x = pedersenArg(value);
162
- for (let j = 0; j < 252; j++) {
163
- const pt = constants[j];
164
- if (pt.px === point.px)
165
- throw new Error('Same point');
166
- if ((x & 1n) !== 0n)
167
- point = point.add(pt);
168
- x >>= 1n;
169
- }
170
- return point;
171
- }
172
- // shift_point + x_low * P_0 + x_high * P1 + y_low * P2 + y_high * P3
173
- export function pedersen(x, y) {
174
- let point = PEDERSEN_POINTS[0];
175
- point = pedersenSingle(point, x, PEDERSEN_POINTS1);
176
- point = pedersenSingle(point, y, PEDERSEN_POINTS2);
177
- return extractX(point.toRawBytes(true));
178
- }
179
- export function hashChain(data, fn = pedersen) {
180
- if (!Array.isArray(data) || data.length < 1)
181
- throw new Error('data should be array of at least 1 element');
182
- if (data.length === 1)
183
- return numberTo0x16(pedersenArg(data[0]));
184
- return Array.from(data)
185
- .reverse()
186
- .reduce((acc, i) => fn(i, acc));
187
- }
188
- // Same as hashChain, but computes hash even for single element and order is not revesed
189
- export const computeHashOnElements = (data, fn = pedersen) => [0, ...data, data.length].reduce((x, y) => fn(x, y));
190
- const MASK_250 = bitMask(250);
191
- export const keccak = (data) => bytesToNumberBE(keccak_256(data)) & MASK_250;
192
- const sha256Num = (data) => bytesToNumberBE(sha256(data));
193
- // Poseidon hash
194
- export const Fp253 = Fp(BigInt('14474011154664525231415395255581126252639794253786371766033694892385558855681')); // 2^253 + 2^199 + 1
195
- export const Fp251 = Fp(BigInt('3618502788666131213697322783095070105623107215331596699973092056135872020481')); // 2^251 + 17 * 2^192 + 1
196
- function poseidonRoundConstant(Fp, name, idx) {
197
- const val = Fp.fromBytes(sha256(utf8ToBytes(`${name}${idx}`)));
198
- return Fp.create(val);
199
- }
200
- // NOTE: doesn't check eiginvalues and possible can create unsafe matrix. But any filtration here will break compatibility with starknet
201
- // Please use only if you really know what you doing.
202
- // https://eprint.iacr.org/2019/458.pdf Section 2.3 (Avoiding Insecure Matrices)
203
- export function _poseidonMDS(Fp, name, m, attempt = 0) {
204
- const x_values = [];
205
- const y_values = [];
206
- for (let i = 0; i < m; i++) {
207
- x_values.push(poseidonRoundConstant(Fp, `${name}x`, attempt * m + i));
208
- y_values.push(poseidonRoundConstant(Fp, `${name}y`, attempt * m + i));
209
- }
210
- if (new Set([...x_values, ...y_values]).size !== 2 * m)
211
- throw new Error('X and Y values are not distinct');
212
- return x_values.map((x) => y_values.map((y) => Fp.inv(Fp.sub(x, y))));
213
- }
214
- const MDS_SMALL = [
215
- [3, 1, 1],
216
- [1, -1, 1],
217
- [1, 1, -2],
218
- ].map((i) => i.map(BigInt));
219
- export function poseidonBasic(opts, mds) {
220
- validateField(opts.Fp);
221
- if (!Number.isSafeInteger(opts.rate) || !Number.isSafeInteger(opts.capacity))
222
- throw new Error(`Wrong poseidon opts: ${opts}`);
223
- const m = opts.rate + opts.capacity;
224
- const rounds = opts.roundsFull + opts.roundsPartial;
225
- const roundConstants = [];
226
- for (let i = 0; i < rounds; i++) {
227
- const row = [];
228
- for (let j = 0; j < m; j++)
229
- row.push(poseidonRoundConstant(opts.Fp, 'Hades', m * i + j));
230
- roundConstants.push(row);
231
- }
232
- return poseidon({
233
- ...opts,
234
- t: m,
235
- sboxPower: 3,
236
- reversePartialPowIdx: true,
237
- mds,
238
- roundConstants,
239
- });
240
- }
241
- export function poseidonCreate(opts, mdsAttempt = 0) {
242
- const m = opts.rate + opts.capacity;
243
- if (!Number.isSafeInteger(mdsAttempt))
244
- throw new Error(`Wrong mdsAttempt=${mdsAttempt}`);
245
- return poseidonBasic(opts, _poseidonMDS(opts.Fp, 'HadesMDS', m, mdsAttempt));
246
- }
247
- export const poseidonSmall = poseidonBasic({ Fp: Fp251, rate: 2, capacity: 1, roundsFull: 8, roundsPartial: 83 }, MDS_SMALL);
248
- export function poseidonHash(x, y, fn = poseidonSmall) {
249
- return fn([x, y, 2n])[0];
250
- }
251
- //# sourceMappingURL=stark.js.map
package/esm/stark.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"stark.js","sourceRoot":"","sources":["../src/stark.ts"],"names":[],"mappings":"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"}