@noble/curves 0.7.3 → 0.8.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 (73) hide show
  1. package/README.md +16 -17
  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 +5 -3
  11. package/abstract/hash-to-curve.d.ts.map +1 -1
  12. package/abstract/hash-to-curve.js +25 -33
  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/esm/abstract/hash-to-curve.js +8 -8
  37. package/esm/abstract/hash-to-curve.js.map +1 -1
  38. package/esm/abstract/modular.js +1 -0
  39. package/esm/abstract/modular.js.map +1 -1
  40. package/esm/abstract/weierstrass.js +4 -9
  41. package/esm/abstract/weierstrass.js.map +1 -1
  42. package/esm/ed25519.js +13 -1
  43. package/esm/ed25519.js.map +1 -1
  44. package/esm/package.json +1 -1
  45. package/esm/secp256k1.js +6 -7
  46. package/esm/secp256k1.js.map +1 -1
  47. package/jubjub.js +17 -22
  48. package/jubjub.js.map +1 -1
  49. package/p256.js +13 -17
  50. package/p256.js.map +1 -1
  51. package/p384.js +13 -17
  52. package/p384.js.map +1 -1
  53. package/p521.js +13 -17
  54. package/p521.js.map +1 -1
  55. package/package.json +3 -7
  56. package/pasta.js +16 -19
  57. package/pasta.js.map +1 -1
  58. package/secp256k1.d.ts +0 -6
  59. package/secp256k1.d.ts.map +1 -1
  60. package/secp256k1.js +58 -63
  61. package/secp256k1.js.map +1 -1
  62. package/src/abstract/hash-to-curve.ts +13 -12
  63. package/src/abstract/modular.ts +1 -0
  64. package/src/abstract/weierstrass.ts +4 -10
  65. package/src/ed25519.ts +17 -1
  66. package/src/secp256k1.ts +7 -7
  67. package/esm/stark.js +0 -251
  68. package/esm/stark.js.map +0 -1
  69. package/src/stark.ts +0 -318
  70. package/stark.d.ts +0 -83
  71. package/stark.d.ts.map +0 -1
  72. package/stark.js +0 -273
  73. package/stark.js.map +0 -1
package/stark.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"stark.d.ts","sourceRoot":"","sources":["src/stark.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,EAAiB,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAe,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EACL,GAAG,EASJ,MAAM,qBAAqB,CAAC;AAM7B,aAAK,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AA2C7C,eAAO,MAAM,WAAW,6CAAQ,CAAC;AASjC,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,UAAQ,GAAG,UAAU,CAE3E;AACD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,UAAU,CAEvE;AACD,wBAAgB,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,aAAa,CAE1E;AACD,wBAAgB,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,WAG/E;AAED,QAAA,MAAQ,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAE,eAAe,+DAAE,SAAS,4DAAE,KAAK;;;;;CAAU,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAgBpD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,UASjC;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,CAEnD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIzD;AAID,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAkDD,aAAK,WAAW,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;AA4BzC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAK/D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,kBAAW,eAO3D;AAED,eAAO,MAAM,qBAAqB,SAAU,WAAW,EAAE,sCACH,CAAC;AAGvD,eAAO,MAAM,MAAM,SAAU,UAAU,KAAG,MAAsD,CAAC;AAIjG,eAAO,MAAM,KAAK,kEAEjB,CAAC;AACF,eAAO,MAAM,KAAK,kEAEjB,CAAC;AAUF,wBAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,SAAI,cAUnF;AAQD,oBAAY,YAAY,GAAG;IACzB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;;;EAoBhE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,SAAI;;;EAIhE;AAED,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;;;CAAgB,UAEpE"}
package/stark.js DELETED
@@ -1,273 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.poseidonHash = exports.poseidonSmall = exports.poseidonCreate = exports.poseidonBasic = exports._poseidonMDS = exports.Fp251 = exports.Fp253 = exports.keccak = exports.computeHashOnElements = exports.hashChain = exports.pedersen = exports.getAccountPath = exports.ethSigToPrivate = exports.getStarkKey = exports.grindKey = exports.utils = exports.Signature = exports.ProjectivePoint = exports.CURVE = exports.verify = exports.sign = exports.getSharedSecret = exports.getPublicKey = exports._starkCurve = void 0;
4
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
5
- const sha3_1 = require("@noble/hashes/sha3");
6
- const sha256_1 = require("@noble/hashes/sha256");
7
- const utils_1 = require("@noble/hashes/utils");
8
- const modular_js_1 = require("./abstract/modular.js");
9
- const poseidon_js_1 = require("./abstract/poseidon.js");
10
- const weierstrass_js_1 = require("./abstract/weierstrass.js");
11
- const utils_js_1 = require("./abstract/utils.js");
12
- const _shortw_utils_js_1 = require("./_shortw_utils.js");
13
- const CURVE_ORDER = BigInt('3618502788666131213697322783095070105526743751716087489154079457884512865583');
14
- const nBitLength = 252;
15
- function bits2int(bytes) {
16
- while (bytes[0] === 0)
17
- bytes = bytes.subarray(1); // strip leading 0s
18
- // Copy-pasted from weierstrass.ts
19
- const delta = bytes.length * 8 - nBitLength;
20
- const num = (0, utils_js_1.bytesToNumberBE)(bytes);
21
- return delta > 0 ? num >> BigInt(delta) : num;
22
- }
23
- function hex0xToBytes(hex) {
24
- if (typeof hex === 'string') {
25
- hex = strip0x(hex); // allow 0x prefix
26
- if (hex.length & 1)
27
- hex = '0' + hex; // allow unpadded hex
28
- }
29
- return (0, utils_js_1.hexToBytes)(hex);
30
- }
31
- const curve = (0, weierstrass_js_1.weierstrass)({
32
- a: BigInt(1),
33
- b: BigInt('3141592653589793238462643383279502884197169399375105820974944592307816406665'),
34
- // Field over which we'll do calculations; 2n**251n + 17n * 2n**192n + 1n
35
- // There is no efficient sqrt for field (P%4==1)
36
- Fp: (0, modular_js_1.Fp)(BigInt('0x800000000000011000000000000000000000000000000000000000000000001')),
37
- n: CURVE_ORDER,
38
- nBitLength,
39
- // Base point (x, y) aka generator point
40
- Gx: BigInt('874739451078007766457464989774322083649278607533249481151382481072868806602'),
41
- Gy: BigInt('152666792071518830868575557812948353041420400780739481342941381225525861407'),
42
- h: BigInt(1),
43
- lowS: false,
44
- ...(0, _shortw_utils_js_1.getHash)(sha256_1.sha256),
45
- // Custom truncation routines for stark curve
46
- bits2int,
47
- bits2int_modN: (bytes) => {
48
- // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee11318 =>
49
- // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee113180
50
- const hex = (0, utils_js_1.bytesToNumberBE)(bytes).toString(16); // toHex unpadded
51
- if (hex.length === 63)
52
- bytes = hex0xToBytes(hex + '0'); // append trailing 0
53
- return (0, modular_js_1.mod)(bits2int(bytes), CURVE_ORDER);
54
- },
55
- });
56
- exports._starkCurve = curve;
57
- function ensureBytes(hex) {
58
- return (0, utils_js_1.ensureBytes)('', typeof hex === 'string' ? hex0xToBytes(hex) : hex);
59
- }
60
- function normPrivKey(privKey) {
61
- return (0, utils_js_1.bytesToHex)(ensureBytes(privKey)).padStart(64, '0');
62
- }
63
- function getPublicKey(privKey, isCompressed = false) {
64
- return curve.getPublicKey(normPrivKey(privKey), isCompressed);
65
- }
66
- exports.getPublicKey = getPublicKey;
67
- function getSharedSecret(privKeyA, pubKeyB) {
68
- return curve.getSharedSecret(normPrivKey(privKeyA), pubKeyB);
69
- }
70
- exports.getSharedSecret = getSharedSecret;
71
- function sign(msgHash, privKey, opts) {
72
- return curve.sign(ensureBytes(msgHash), normPrivKey(privKey), opts);
73
- }
74
- exports.sign = sign;
75
- function verify(signature, msgHash, pubKey) {
76
- const sig = signature instanceof Signature ? signature : ensureBytes(signature);
77
- return curve.verify(sig, ensureBytes(msgHash), ensureBytes(pubKey));
78
- }
79
- exports.verify = verify;
80
- const { CURVE, ProjectivePoint, Signature, utils } = curve;
81
- exports.CURVE = CURVE;
82
- exports.ProjectivePoint = ProjectivePoint;
83
- exports.Signature = Signature;
84
- exports.utils = utils;
85
- function extractX(bytes) {
86
- const hex = (0, utils_js_1.bytesToHex)(bytes.subarray(1));
87
- const stripped = hex.replace(/^0+/gm, ''); // strip leading 0s
88
- return `0x${stripped}`;
89
- }
90
- function strip0x(hex) {
91
- return hex.replace(/^0x/i, '');
92
- }
93
- function numberTo0x16(num) {
94
- // can't use utils.numberToHexUnpadded: adds leading 0 for even byte length
95
- return `0x${num.toString(16)}`;
96
- }
97
- // seed generation
98
- function grindKey(seed) {
99
- const _seed = ensureBytes(seed);
100
- const sha256mask = 2n ** 256n;
101
- const limit = sha256mask - (0, modular_js_1.mod)(sha256mask, CURVE_ORDER);
102
- for (let i = 0;; i++) {
103
- const key = sha256Num((0, utils_js_1.concatBytes)(_seed, (0, utils_js_1.numberToVarBytesBE)(BigInt(i))));
104
- if (key < limit)
105
- return (0, modular_js_1.mod)(key, CURVE_ORDER).toString(16); // key should be in [0, limit)
106
- if (i === 100000)
107
- throw new Error('grindKey is broken: tried 100k vals'); // prevent dos
108
- }
109
- }
110
- exports.grindKey = grindKey;
111
- function getStarkKey(privateKey) {
112
- return extractX(getPublicKey(privateKey, true));
113
- }
114
- exports.getStarkKey = getStarkKey;
115
- function ethSigToPrivate(signature) {
116
- signature = strip0x(signature);
117
- if (signature.length !== 130)
118
- throw new Error('Wrong ethereum signature');
119
- return grindKey(signature.substring(0, 64));
120
- }
121
- exports.ethSigToPrivate = ethSigToPrivate;
122
- const MASK_31 = 2n ** 31n - 1n;
123
- const int31 = (n) => Number(n & MASK_31);
124
- function getAccountPath(layer, application, ethereumAddress, index) {
125
- const layerNum = int31(sha256Num(layer));
126
- const applicationNum = int31(sha256Num(application));
127
- const eth = (0, utils_js_1.hexToNumber)(strip0x(ethereumAddress));
128
- return `m/2645'/${layerNum}'/${applicationNum}'/${int31(eth)}'/${int31(eth >> 31n)}'/${index}`;
129
- }
130
- exports.getAccountPath = getAccountPath;
131
- // https://docs.starkware.co/starkex/pedersen-hash-function.html
132
- const PEDERSEN_POINTS = [
133
- new ProjectivePoint(2089986280348253421170679821480865132823066470938446095505822317253594081284n, 1713931329540660377023406109199410414810705867260802078187082345529207694986n, 1n),
134
- new ProjectivePoint(996781205833008774514500082376783249102396023663454813447423147977397232763n, 1668503676786377725805489344771023921079126552019160156920634619255970485781n, 1n),
135
- new ProjectivePoint(2251563274489750535117886426533222435294046428347329203627021249169616184184n, 1798716007562728905295480679789526322175868328062420237419143593021674992973n, 1n),
136
- new ProjectivePoint(2138414695194151160943305727036575959195309218611738193261179310511854807447n, 113410276730064486255102093846540133784865286929052426931474106396135072156n, 1n),
137
- new ProjectivePoint(2379962749567351885752724891227938183011949129833673362440656643086021394946n, 776496453633298175483985398648758586525933812536653089401905292063708816422n, 1n),
138
- ];
139
- function pedersenPrecompute(p1, p2) {
140
- const out = [];
141
- let p = p1;
142
- for (let i = 0; i < 248; i++) {
143
- out.push(p);
144
- p = p.double();
145
- }
146
- // NOTE: we cannot use wNAF here, because last 4 bits will require full 248 bits multiplication
147
- // We can add support for this to wNAF, but it will complicate wNAF.
148
- p = p2;
149
- for (let i = 0; i < 4; i++) {
150
- out.push(p);
151
- p = p.double();
152
- }
153
- return out;
154
- }
155
- const PEDERSEN_POINTS1 = pedersenPrecompute(PEDERSEN_POINTS[1], PEDERSEN_POINTS[2]);
156
- const PEDERSEN_POINTS2 = pedersenPrecompute(PEDERSEN_POINTS[3], PEDERSEN_POINTS[4]);
157
- function pedersenArg(arg) {
158
- let value;
159
- if (typeof arg === 'bigint') {
160
- value = arg;
161
- }
162
- else if (typeof arg === 'number') {
163
- if (!Number.isSafeInteger(arg))
164
- throw new Error(`Invalid pedersenArg: ${arg}`);
165
- value = BigInt(arg);
166
- }
167
- else {
168
- value = (0, utils_js_1.bytesToNumberBE)(ensureBytes(arg));
169
- }
170
- if (!(0n <= value && value < curve.CURVE.Fp.ORDER))
171
- throw new Error(`PedersenArg should be 0 <= value < CURVE.P: ${value}`); // [0..Fp)
172
- return value;
173
- }
174
- function pedersenSingle(point, value, constants) {
175
- let x = pedersenArg(value);
176
- for (let j = 0; j < 252; j++) {
177
- const pt = constants[j];
178
- if (pt.px === point.px)
179
- throw new Error('Same point');
180
- if ((x & 1n) !== 0n)
181
- point = point.add(pt);
182
- x >>= 1n;
183
- }
184
- return point;
185
- }
186
- // shift_point + x_low * P_0 + x_high * P1 + y_low * P2 + y_high * P3
187
- function pedersen(x, y) {
188
- let point = PEDERSEN_POINTS[0];
189
- point = pedersenSingle(point, x, PEDERSEN_POINTS1);
190
- point = pedersenSingle(point, y, PEDERSEN_POINTS2);
191
- return extractX(point.toRawBytes(true));
192
- }
193
- exports.pedersen = pedersen;
194
- function hashChain(data, fn = pedersen) {
195
- if (!Array.isArray(data) || data.length < 1)
196
- throw new Error('data should be array of at least 1 element');
197
- if (data.length === 1)
198
- return numberTo0x16(pedersenArg(data[0]));
199
- return Array.from(data)
200
- .reverse()
201
- .reduce((acc, i) => fn(i, acc));
202
- }
203
- exports.hashChain = hashChain;
204
- // Same as hashChain, but computes hash even for single element and order is not revesed
205
- const computeHashOnElements = (data, fn = pedersen) => [0, ...data, data.length].reduce((x, y) => fn(x, y));
206
- exports.computeHashOnElements = computeHashOnElements;
207
- const MASK_250 = (0, utils_js_1.bitMask)(250);
208
- const keccak = (data) => (0, utils_js_1.bytesToNumberBE)((0, sha3_1.keccak_256)(data)) & MASK_250;
209
- exports.keccak = keccak;
210
- const sha256Num = (data) => (0, utils_js_1.bytesToNumberBE)((0, sha256_1.sha256)(data));
211
- // Poseidon hash
212
- exports.Fp253 = (0, modular_js_1.Fp)(BigInt('14474011154664525231415395255581126252639794253786371766033694892385558855681')); // 2^253 + 2^199 + 1
213
- exports.Fp251 = (0, modular_js_1.Fp)(BigInt('3618502788666131213697322783095070105623107215331596699973092056135872020481')); // 2^251 + 17 * 2^192 + 1
214
- function poseidonRoundConstant(Fp, name, idx) {
215
- const val = Fp.fromBytes((0, sha256_1.sha256)((0, utils_1.utf8ToBytes)(`${name}${idx}`)));
216
- return Fp.create(val);
217
- }
218
- // NOTE: doesn't check eiginvalues and possible can create unsafe matrix. But any filtration here will break compatibility with starknet
219
- // Please use only if you really know what you doing.
220
- // https://eprint.iacr.org/2019/458.pdf Section 2.3 (Avoiding Insecure Matrices)
221
- function _poseidonMDS(Fp, name, m, attempt = 0) {
222
- const x_values = [];
223
- const y_values = [];
224
- for (let i = 0; i < m; i++) {
225
- x_values.push(poseidonRoundConstant(Fp, `${name}x`, attempt * m + i));
226
- y_values.push(poseidonRoundConstant(Fp, `${name}y`, attempt * m + i));
227
- }
228
- if (new Set([...x_values, ...y_values]).size !== 2 * m)
229
- throw new Error('X and Y values are not distinct');
230
- return x_values.map((x) => y_values.map((y) => Fp.inv(Fp.sub(x, y))));
231
- }
232
- exports._poseidonMDS = _poseidonMDS;
233
- const MDS_SMALL = [
234
- [3, 1, 1],
235
- [1, -1, 1],
236
- [1, 1, -2],
237
- ].map((i) => i.map(BigInt));
238
- function poseidonBasic(opts, mds) {
239
- (0, modular_js_1.validateField)(opts.Fp);
240
- if (!Number.isSafeInteger(opts.rate) || !Number.isSafeInteger(opts.capacity))
241
- throw new Error(`Wrong poseidon opts: ${opts}`);
242
- const m = opts.rate + opts.capacity;
243
- const rounds = opts.roundsFull + opts.roundsPartial;
244
- const roundConstants = [];
245
- for (let i = 0; i < rounds; i++) {
246
- const row = [];
247
- for (let j = 0; j < m; j++)
248
- row.push(poseidonRoundConstant(opts.Fp, 'Hades', m * i + j));
249
- roundConstants.push(row);
250
- }
251
- return (0, poseidon_js_1.poseidon)({
252
- ...opts,
253
- t: m,
254
- sboxPower: 3,
255
- reversePartialPowIdx: true,
256
- mds,
257
- roundConstants,
258
- });
259
- }
260
- exports.poseidonBasic = poseidonBasic;
261
- function poseidonCreate(opts, mdsAttempt = 0) {
262
- const m = opts.rate + opts.capacity;
263
- if (!Number.isSafeInteger(mdsAttempt))
264
- throw new Error(`Wrong mdsAttempt=${mdsAttempt}`);
265
- return poseidonBasic(opts, _poseidonMDS(opts.Fp, 'HadesMDS', m, mdsAttempt));
266
- }
267
- exports.poseidonCreate = poseidonCreate;
268
- exports.poseidonSmall = poseidonBasic({ Fp: exports.Fp251, rate: 2, capacity: 1, roundsFull: 8, roundsPartial: 83 }, MDS_SMALL);
269
- function poseidonHash(x, y, fn = exports.poseidonSmall) {
270
- return fn([x, y, 2n])[0];
271
- }
272
- exports.poseidonHash = poseidonHash;
273
- //# sourceMappingURL=stark.js.map
package/stark.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"stark.js","sourceRoot":"","sources":["src/stark.ts"],"names":[],"mappings":"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"}