@noble/curves 0.7.1 → 0.7.3

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 (49) hide show
  1. package/README.md +40 -20
  2. package/abstract/hash-to-curve.d.ts +13 -4
  3. package/abstract/hash-to-curve.d.ts.map +1 -1
  4. package/abstract/hash-to-curve.js +28 -25
  5. package/abstract/hash-to-curve.js.map +1 -1
  6. package/abstract/montgomery.d.ts +4 -0
  7. package/abstract/montgomery.d.ts.map +1 -1
  8. package/abstract/montgomery.js +1 -0
  9. package/abstract/montgomery.js.map +1 -1
  10. package/ed25519.d.ts.map +1 -1
  11. package/ed25519.js +1 -0
  12. package/ed25519.js.map +1 -1
  13. package/ed448.d.ts.map +1 -1
  14. package/ed448.js +1 -0
  15. package/ed448.js.map +1 -1
  16. package/esm/abstract/hash-to-curve.js +29 -26
  17. package/esm/abstract/hash-to-curve.js.map +1 -1
  18. package/esm/abstract/montgomery.js +1 -0
  19. package/esm/abstract/montgomery.js.map +1 -1
  20. package/esm/ed25519.js +1 -0
  21. package/esm/ed25519.js.map +1 -1
  22. package/esm/ed448.js +1 -0
  23. package/esm/ed448.js.map +1 -1
  24. package/esm/stark.js +75 -114
  25. package/esm/stark.js.map +1 -1
  26. package/package.json +2 -12
  27. package/src/abstract/hash-to-curve.ts +39 -38
  28. package/src/abstract/montgomery.ts +3 -0
  29. package/src/ed25519.ts +1 -0
  30. package/src/ed448.ts +1 -0
  31. package/src/stark.ts +92 -130
  32. package/stark.d.ts +12 -17
  33. package/stark.d.ts.map +1 -1
  34. package/stark.js +81 -122
  35. package/stark.js.map +1 -1
  36. package/esm/p192.js +0 -22
  37. package/esm/p192.js.map +0 -1
  38. package/esm/p224.js +0 -22
  39. package/esm/p224.js.map +0 -1
  40. package/p192.d.ts +0 -101
  41. package/p192.d.ts.map +0 -1
  42. package/p192.js +0 -25
  43. package/p192.js.map +0 -1
  44. package/p224.d.ts +0 -101
  45. package/p224.d.ts.map +0 -1
  46. package/p224.js +0 -25
  47. package/p224.js.map +0 -1
  48. package/src/p192.ts +0 -25
  49. package/src/p224.ts +0 -25
package/esm/stark.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stark.js","sourceRoot":"","sources":["../src/stark.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stark.js","sourceRoot":"","sources":["../src/stark.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noble/curves",
3
- "version": "0.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "Minimal, auditable JS implementation of elliptic curve cryptography",
5
5
  "files": [
6
6
  "abstract",
@@ -12,7 +12,7 @@
12
12
  "*.d.ts.map"
13
13
  ],
14
14
  "scripts": {
15
- "bench": "cd benchmark; node secp256k1.js; node curves.js; node stark.js; node bls.js",
15
+ "bench": "cd benchmark; node secp256k1.js; node curves.js; node ecdh.js; node stark.js; node bls.js",
16
16
  "build": "tsc && tsc -p tsconfig.esm.json",
17
17
  "build:release": "rollup -c rollup.config.js",
18
18
  "lint": "prettier --check 'src/**/*.{js,ts}' 'test/*.js'",
@@ -126,16 +126,6 @@
126
126
  "import": "./esm/jubjub.js",
127
127
  "default": "./jubjub.js"
128
128
  },
129
- "./p192": {
130
- "types": "./p192.d.ts",
131
- "import": "./esm/p192.js",
132
- "default": "./p192.js"
133
- },
134
- "./p224": {
135
- "types": "./p224.d.ts",
136
- "import": "./esm/p224.js",
137
- "default": "./p224.js"
138
- },
139
129
  "./p256": {
140
130
  "types": "./p256.d.ts",
141
131
  "import": "./esm/p256.js",
@@ -1,33 +1,35 @@
1
1
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
2
2
  import type { Group, GroupConstructor, AffinePoint } from './curve.js';
3
3
  import { mod, Field } from './modular.js';
4
- import { CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';
4
+ import { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';
5
5
 
6
+ /**
7
+ * * `DST` is a domain separation tag, defined in section 2.2.5
8
+ * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m
9
+ * * `m` is extension degree (1 for prime fields)
10
+ * * `k` is the target security target in bits (e.g. 128), from section 5.1
11
+ * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)
12
+ * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props
13
+ */
6
14
  export type Opts = {
7
- DST: string; // DST: a domain separation tag, defined in section 2.2.5
8
- encodeDST: string;
9
- p: bigint; // characteristic of F, where F is a finite field of characteristic p and order q = p^m
10
- m: number; // extension degree of F, m >= 1
11
- k: number; // k: the target security level for the suite in bits, defined in section 5.1
12
- expand?: 'xmd' | 'xof'; // use a message that has already been processed by expand_message_xmd
13
- // Hash functions for: expand_message_xmd is appropriate for use with a
14
- // wide range of hash functions, including SHA-2, SHA-3, BLAKE2, and others.
15
- // BBS+ uses blake2: https://github.com/hyperledger/aries-framework-go/issues/2247
16
- // TODO: verify that hash is shake if expand==='xof' via types
15
+ DST: string | Uint8Array;
16
+ p: bigint;
17
+ m: number;
18
+ k: number;
19
+ expand?: 'xmd' | 'xof';
17
20
  hash: CHash;
18
21
  };
19
22
 
20
- // Octet Stream to Integer (bytesToNumberBE)
21
- function os2ip(bytes: Uint8Array): bigint {
22
- let result = 0n;
23
- for (let i = 0; i < bytes.length; i++) {
24
- result <<= 8n;
25
- result += BigInt(bytes[i]);
26
- }
27
- return result;
23
+ function validateDST(dst: string | Uint8Array): Uint8Array {
24
+ if (dst instanceof Uint8Array) return dst;
25
+ if (typeof dst === 'string') return utf8ToBytes(dst);
26
+ throw new Error('DST must be Uint8Array or string');
28
27
  }
29
28
 
30
- // Integer to Octet Stream
29
+ // Octet Stream to Integer. "spec" implementation of os2ip is 2.5x slower vs bytesToNumberBE.
30
+ const os2ip = bytesToNumberBE;
31
+
32
+ // Integer to Octet Stream (numberToBytesBE)
31
33
  function i2osp(value: number, length: number): Uint8Array {
32
34
  if (value < 0 || value >= 1 << (8 * length)) {
33
35
  throw new Error(`bad I2OSP call: value=${value} length=${length}`);
@@ -68,13 +70,12 @@ export function expand_message_xmd(
68
70
  isNum(lenInBytes);
69
71
  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3
70
72
  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
71
- const b_in_bytes = H.outputLen;
72
- const r_in_bytes = H.blockLen;
73
+ const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
73
74
  const ell = Math.ceil(lenInBytes / b_in_bytes);
74
75
  if (ell > 255) throw new Error('Invalid xmd length');
75
76
  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));
76
77
  const Z_pad = i2osp(0, r_in_bytes);
77
- const l_i_b_str = i2osp(lenInBytes, 2);
78
+ const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str
78
79
  const b = new Array<Uint8Array>(ell);
79
80
  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));
80
81
  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));
@@ -120,30 +121,33 @@ export function expand_message_xof(
120
121
  * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3
121
122
  * @param msg a byte string containing the message to hash
122
123
  * @param count the number of elements of F to output
123
- * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`
124
+ * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above
124
125
  * @returns [u_0, ..., u_(count - 1)], a list of field elements.
125
126
  */
126
127
  export function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {
127
128
  const { p, k, m, hash, expand, DST: _DST } = options;
128
129
  isBytes(msg);
129
130
  isNum(count);
130
- if (typeof _DST !== 'string') throw new Error('DST must be valid');
131
+ const DST = validateDST(_DST);
131
132
  const log2p = p.toString(2).length;
132
133
  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above
133
134
  const len_in_bytes = count * m * L;
134
- const DST = utf8ToBytes(_DST);
135
- const pseudo_random_bytes =
136
- expand === 'xmd'
137
- ? expand_message_xmd(msg, DST, len_in_bytes, hash)
138
- : expand === 'xof'
139
- ? expand_message_xof(msg, DST, len_in_bytes, k, hash)
140
- : msg;
135
+ let prb; // pseudo_random_bytes
136
+ if (expand === 'xmd') {
137
+ prb = expand_message_xmd(msg, DST, len_in_bytes, hash);
138
+ } else if (expand === 'xof') {
139
+ prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);
140
+ } else if (expand === undefined) {
141
+ prb = msg;
142
+ } else {
143
+ throw new Error('expand must be "xmd", "xof" or undefined');
144
+ }
141
145
  const u = new Array(count);
142
146
  for (let i = 0; i < count; i++) {
143
147
  const e = new Array(m);
144
148
  for (let j = 0; j < m; j++) {
145
149
  const elm_offset = L * (j + i * m);
146
- const tv = pseudo_random_bytes.subarray(elm_offset, elm_offset + L);
150
+ const tv = prb.subarray(elm_offset, elm_offset + L);
147
151
  e[j] = mod(os2ip(tv), p);
148
152
  }
149
153
  u[i] = e;
@@ -184,7 +188,7 @@ export type htfBasicOpts = { DST: string };
184
188
  export function createHasher<T>(
185
189
  Point: H2CPointConstructor<T>,
186
190
  mapToCurve: MapToCurve<T>,
187
- def: Opts
191
+ def: Opts & { encodeDST?: string }
188
192
  ) {
189
193
  validateObject(def, {
190
194
  DST: 'string',
@@ -193,10 +197,7 @@ export function createHasher<T>(
193
197
  k: 'isSafeInteger',
194
198
  hash: 'hash',
195
199
  });
196
- if (def.expand !== 'xmd' && def.expand !== 'xof' && def.expand !== undefined)
197
- throw new Error('Invalid htf/expand');
198
- if (typeof mapToCurve !== 'function')
199
- throw new Error('hashToCurve: mapToCurve() has not been defined');
200
+ if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');
200
201
  return {
201
202
  // Encodes byte string to elliptic curve
202
203
  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-3
@@ -16,12 +16,14 @@ export type CurveType = {
16
16
  powPminus2?: (x: bigint) => bigint;
17
17
  xyToU?: (x: bigint, y: bigint) => bigint;
18
18
  Gu: bigint;
19
+ randomBytes?: (bytesLength?: number) => Uint8Array;
19
20
  };
20
21
  export type CurveFn = {
21
22
  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;
22
23
  scalarMultBase: (scalar: Hex) => Uint8Array;
23
24
  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;
24
25
  getPublicKey: (privateKey: Hex) => Uint8Array;
26
+ utils: { randomPrivateKey: () => Uint8Array };
25
27
  GuBytes: Uint8Array;
26
28
  };
27
29
 
@@ -181,6 +183,7 @@ export function montgomery(curveDef: CurveType): CurveFn {
181
183
  scalarMultBase,
182
184
  getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),
183
185
  getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),
186
+ utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },
184
187
  GuBytes: GuBytes,
185
188
  };
186
189
  }
package/src/ed25519.ts CHANGED
@@ -149,6 +149,7 @@ export const x25519 = montgomery({
149
149
  return mod(pow2(pow_p_5_8, BigInt(3), P) * b2, P);
150
150
  },
151
151
  adjustScalarBytes,
152
+ randomBytes,
152
153
  });
153
154
 
154
155
  // Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)
package/src/ed448.ts CHANGED
@@ -134,6 +134,7 @@ export const x448 = montgomery({
134
134
  return mod(Pminus3 * x, P); // Pminus3 * x = Pminus2
135
135
  },
136
136
  adjustScalarBytes,
137
+ randomBytes,
137
138
  // The 4-isogeny maps between the Montgomery curve and this Edwards
138
139
  // curve are:
139
140
  // (u, v) = (y^2/x^2, (2 - x^2 - y^2)*y/x^3)
package/src/stark.ts CHANGED
@@ -1,164 +1,126 @@
1
1
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
2
2
  import { keccak_256 } from '@noble/hashes/sha3';
3
3
  import { sha256 } from '@noble/hashes/sha256';
4
- import { weierstrass, ProjPointType } from './abstract/weierstrass.js';
5
- import * as cutils from './abstract/utils.js';
4
+ import { utf8ToBytes } from '@noble/hashes/utils';
6
5
  import { Fp, mod, Field, validateField } from './abstract/modular.js';
6
+ import { poseidon } from './abstract/poseidon.js';
7
+ import { weierstrass, ProjPointType, SignatureType } from './abstract/weierstrass.js';
8
+ import {
9
+ Hex,
10
+ bitMask,
11
+ bytesToHex,
12
+ bytesToNumberBE,
13
+ concatBytes,
14
+ ensureBytes as ensureBytesOrig,
15
+ hexToBytes,
16
+ hexToNumber,
17
+ numberToVarBytesBE,
18
+ } from './abstract/utils.js';
7
19
  import { getHash } from './_shortw_utils.js';
8
- import * as poseidon from './abstract/poseidon.js';
9
- import { utf8ToBytes } from '@noble/hashes/utils';
10
20
 
11
- type ProjectivePoint = ProjPointType<bigint>;
12
21
  // Stark-friendly elliptic curve
13
22
  // https://docs.starkware.co/starkex/stark-curve.html
14
23
 
15
- const CURVE_N = BigInt(
24
+ type ProjectivePoint = ProjPointType<bigint>;
25
+ const CURVE_ORDER = BigInt(
16
26
  '3618502788666131213697322783095070105526743751716087489154079457884512865583'
17
27
  );
18
28
  const nBitLength = 252;
19
- // Copy-pasted from weierstrass.ts
20
29
  function bits2int(bytes: Uint8Array): bigint {
30
+ while (bytes[0] === 0) bytes = bytes.subarray(1); // strip leading 0s
31
+ // Copy-pasted from weierstrass.ts
21
32
  const delta = bytes.length * 8 - nBitLength;
22
- const num = cutils.bytesToNumberBE(bytes);
33
+ const num = bytesToNumberBE(bytes);
23
34
  return delta > 0 ? num >> BigInt(delta) : num;
24
35
  }
25
- function bits2int_modN(bytes: Uint8Array): bigint {
26
- return mod(bits2int(bytes), CURVE_N);
36
+ function hex0xToBytes(hex: string): Uint8Array {
37
+ if (typeof hex === 'string') {
38
+ hex = strip0x(hex); // allow 0x prefix
39
+ if (hex.length & 1) hex = '0' + hex; // allow unpadded hex
40
+ }
41
+ return hexToBytes(hex);
27
42
  }
28
- export const starkCurve = weierstrass({
29
- // Params: a, b
30
- a: BigInt(1),
43
+ const curve = weierstrass({
44
+ a: BigInt(1), // Params: a, b
31
45
  b: BigInt('3141592653589793238462643383279502884197169399375105820974944592307816406665'),
32
46
  // Field over which we'll do calculations; 2n**251n + 17n * 2n**192n + 1n
33
47
  // There is no efficient sqrt for field (P%4==1)
34
48
  Fp: Fp(BigInt('0x800000000000011000000000000000000000000000000000000000000000001')),
35
- // Curve order, total count of valid points in the field.
36
- n: CURVE_N,
37
- nBitLength: nBitLength, // len(bin(N).replace('0b',''))
49
+ n: CURVE_ORDER, // Curve order, total count of valid points in the field.
50
+ nBitLength, // len(bin(N).replace('0b',''))
38
51
  // Base point (x, y) aka generator point
39
52
  Gx: BigInt('874739451078007766457464989774322083649278607533249481151382481072868806602'),
40
53
  Gy: BigInt('152666792071518830868575557812948353041420400780739481342941381225525861407'),
41
- h: BigInt(1),
42
- // Default options
43
- lowS: false,
54
+ h: BigInt(1), // cofactor
55
+ lowS: false, // Allow high-s signatures
44
56
  ...getHash(sha256),
45
57
  // Custom truncation routines for stark curve
46
- bits2int: (bytes: Uint8Array): bigint => {
47
- while (bytes[0] === 0) bytes = bytes.subarray(1);
48
- return bits2int(bytes);
49
- },
58
+ bits2int,
50
59
  bits2int_modN: (bytes: Uint8Array): bigint => {
51
- let hashS = cutils.bytesToNumberBE(bytes).toString(16);
52
- if (hashS.length === 63) {
53
- hashS += '0';
54
- bytes = hexToBytes0x(hashS);
55
- }
56
- // Truncate zero bytes on left (compat with elliptic)
57
- while (bytes[0] === 0) bytes = bytes.subarray(1);
58
- return bits2int_modN(bytes);
60
+ // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee11318 =>
61
+ // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee113180
62
+ const hex = bytesToNumberBE(bytes).toString(16); // toHex unpadded
63
+ if (hex.length === 63) bytes = hex0xToBytes(hex + '0'); // append trailing 0
64
+ return mod(bits2int(bytes), CURVE_ORDER);
59
65
  },
60
66
  });
67
+ export const _starkCurve = curve;
61
68
 
62
- // Custom Starknet type conversion functions that can handle 0x and unpadded hex
63
- function hexToBytes0x(hex: string): Uint8Array {
64
- if (typeof hex !== 'string') {
65
- throw new Error('hexToBytes: expected string, got ' + typeof hex);
66
- }
67
- hex = strip0x(hex);
68
- if (hex.length & 1) hex = '0' + hex; // padding
69
- if (hex.length % 2) throw new Error('hexToBytes: received invalid unpadded hex ' + hex.length);
70
- const array = new Uint8Array(hex.length / 2);
71
- for (let i = 0; i < array.length; i++) {
72
- const j = i * 2;
73
- const hexByte = hex.slice(j, j + 2);
74
- const byte = Number.parseInt(hexByte, 16);
75
- if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');
76
- array[i] = byte;
77
- }
78
- return array;
79
- }
80
- function hexToNumber0x(hex: string): bigint {
81
- if (typeof hex !== 'string') {
82
- throw new Error('hexToNumber: expected string, got ' + typeof hex);
83
- }
84
- // Big Endian
85
- // TODO: strip vs no strip?
86
- return BigInt(`0x${strip0x(hex)}`);
87
- }
88
- function bytesToNumber0x(bytes: Uint8Array): bigint {
89
- return hexToNumber0x(cutils.bytesToHex(bytes));
90
- }
91
- function ensureBytes0x(hex: Hex): Uint8Array {
92
- // Uint8Array.from() instead of hash.slice() because node.js Buffer
93
- // is instance of Uint8Array, and its slice() creates **mutable** copy
94
- return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes0x(hex);
69
+ function ensureBytes(hex: Hex): Uint8Array {
70
+ return ensureBytesOrig('', typeof hex === 'string' ? hex0xToBytes(hex) : hex);
95
71
  }
96
72
 
97
- function normPrivKey(privKey: Hex) {
98
- return cutils.bytesToHex(ensureBytes0x(privKey)).padStart(64, '0');
73
+ function normPrivKey(privKey: Hex): string {
74
+ return bytesToHex(ensureBytes(privKey)).padStart(64, '0');
99
75
  }
100
- function getPublicKey0x(privKey: Hex, isCompressed = false) {
101
- return starkCurve.getPublicKey(normPrivKey(privKey), isCompressed);
76
+ export function getPublicKey(privKey: Hex, isCompressed = false): Uint8Array {
77
+ return curve.getPublicKey(normPrivKey(privKey), isCompressed);
102
78
  }
103
- function getSharedSecret0x(privKeyA: Hex, pubKeyB: Hex) {
104
- return starkCurve.getSharedSecret(normPrivKey(privKeyA), pubKeyB);
79
+ export function getSharedSecret(privKeyA: Hex, pubKeyB: Hex): Uint8Array {
80
+ return curve.getSharedSecret(normPrivKey(privKeyA), pubKeyB);
105
81
  }
106
-
107
- function sign0x(msgHash: Hex, privKey: Hex, opts?: any) {
108
- if (typeof privKey === 'string') privKey = strip0x(privKey).padStart(64, '0');
109
- return starkCurve.sign(ensureBytes0x(msgHash), normPrivKey(privKey), opts);
82
+ export function sign(msgHash: Hex, privKey: Hex, opts?: any): SignatureType {
83
+ return curve.sign(ensureBytes(msgHash), normPrivKey(privKey), opts);
110
84
  }
111
- function verify0x(signature: Hex, msgHash: Hex, pubKey: Hex) {
112
- const sig = signature instanceof Signature ? signature : ensureBytes0x(signature);
113
- return starkCurve.verify(sig, ensureBytes0x(msgHash), ensureBytes0x(pubKey));
85
+ export function verify(signature: SignatureType | Hex, msgHash: Hex, pubKey: Hex) {
86
+ const sig = signature instanceof Signature ? signature : ensureBytes(signature);
87
+ return curve.verify(sig, ensureBytes(msgHash), ensureBytes(pubKey));
114
88
  }
115
89
 
116
- const { CURVE, ProjectivePoint, Signature } = starkCurve;
117
- export const utils = starkCurve.utils;
118
- export {
119
- CURVE,
120
- Signature,
121
- ProjectivePoint,
122
- getPublicKey0x as getPublicKey,
123
- getSharedSecret0x as getSharedSecret,
124
- sign0x as sign,
125
- verify0x as verify,
126
- };
127
-
128
- const stripLeadingZeros = (s: string) => s.replace(/^0+/gm, '');
129
- export const bytesToHexEth = (uint8a: Uint8Array): string =>
130
- `0x${stripLeadingZeros(cutils.bytesToHex(uint8a))}`;
131
- export const strip0x = (hex: string) => hex.replace(/^0x/i, '');
132
- export const numberToHexEth = (num: bigint | number) => `0x${num.toString(16)}`;
90
+ const { CURVE, ProjectivePoint, Signature, utils } = curve;
91
+ export { CURVE, ProjectivePoint, Signature, utils };
133
92
 
134
- // We accept hex strings besides Uint8Array for simplicity
135
- type Hex = Uint8Array | string;
136
-
137
- // 1. seed generation
138
- function hashKeyWithIndex(key: Uint8Array, index: number) {
139
- let indexHex = cutils.numberToHexUnpadded(index);
140
- if (indexHex.length & 1) indexHex = '0' + indexHex;
141
- return sha256Num(cutils.concatBytes(key, hexToBytes0x(indexHex)));
93
+ function extractX(bytes: Uint8Array): string {
94
+ const hex = bytesToHex(bytes.subarray(1));
95
+ const stripped = hex.replace(/^0+/gm, ''); // strip leading 0s
96
+ return `0x${stripped}`;
97
+ }
98
+ function strip0x(hex: string) {
99
+ return hex.replace(/^0x/i, '');
100
+ }
101
+ function numberTo0x16(num: bigint) {
102
+ // can't use utils.numberToHexUnpadded: adds leading 0 for even byte length
103
+ return `0x${num.toString(16)}`;
142
104
  }
143
105
 
106
+ // seed generation
144
107
  export function grindKey(seed: Hex) {
145
- const _seed = ensureBytes0x(seed);
108
+ const _seed = ensureBytes(seed);
146
109
  const sha256mask = 2n ** 256n;
147
-
148
- const limit = sha256mask - mod(sha256mask, CURVE_N);
110
+ const limit = sha256mask - mod(sha256mask, CURVE_ORDER);
149
111
  for (let i = 0; ; i++) {
150
- const key = hashKeyWithIndex(_seed, i);
151
- // key should be in [0, limit)
152
- if (key < limit) return mod(key, CURVE_N).toString(16);
112
+ const key = sha256Num(concatBytes(_seed, numberToVarBytesBE(BigInt(i))));
113
+ if (key < limit) return mod(key, CURVE_ORDER).toString(16); // key should be in [0, limit)
114
+ if (i === 100000) throw new Error('grindKey is broken: tried 100k vals'); // prevent dos
153
115
  }
154
116
  }
155
117
 
156
- export function getStarkKey(privateKey: Hex) {
157
- return bytesToHexEth(getPublicKey0x(privateKey, true).slice(1));
118
+ export function getStarkKey(privateKey: Hex): string {
119
+ return extractX(getPublicKey(privateKey, true));
158
120
  }
159
121
 
160
- export function ethSigToPrivate(signature: string) {
161
- signature = strip0x(signature.replace(/^0x/, ''));
122
+ export function ethSigToPrivate(signature: string): string {
123
+ signature = strip0x(signature);
162
124
  if (signature.length !== 130) throw new Error('Wrong ethereum signature');
163
125
  return grindKey(signature.substring(0, 64));
164
126
  }
@@ -170,15 +132,15 @@ export function getAccountPath(
170
132
  application: string,
171
133
  ethereumAddress: string,
172
134
  index: number
173
- ) {
135
+ ): string {
174
136
  const layerNum = int31(sha256Num(layer));
175
137
  const applicationNum = int31(sha256Num(application));
176
- const eth = hexToNumber0x(ethereumAddress);
138
+ const eth = hexToNumber(strip0x(ethereumAddress));
177
139
  return `m/2645'/${layerNum}'/${applicationNum}'/${int31(eth)}'/${int31(eth >> 31n)}'/${index}`;
178
140
  }
179
141
 
180
142
  // https://docs.starkware.co/starkex/pedersen-hash-function.html
181
- const PEDERSEN_POINTS_AFFINE = [
143
+ const PEDERSEN_POINTS = [
182
144
  new ProjectivePoint(
183
145
  2089986280348253421170679821480865132823066470938446095505822317253594081284n,
184
146
  1713931329540660377023406109199410414810705867260802078187082345529207694986n,
@@ -205,8 +167,6 @@ const PEDERSEN_POINTS_AFFINE = [
205
167
  1n
206
168
  ),
207
169
  ];
208
- // for (const p of PEDERSEN_POINTS) p._setWindowSize(8);
209
- const PEDERSEN_POINTS = PEDERSEN_POINTS_AFFINE;
210
170
 
211
171
  function pedersenPrecompute(p1: ProjectivePoint, p2: ProjectivePoint): ProjectivePoint[] {
212
172
  const out: ProjectivePoint[] = [];
@@ -230,14 +190,16 @@ const PEDERSEN_POINTS2 = pedersenPrecompute(PEDERSEN_POINTS[3], PEDERSEN_POINTS[
230
190
  type PedersenArg = Hex | bigint | number;
231
191
  function pedersenArg(arg: PedersenArg): bigint {
232
192
  let value: bigint;
233
- if (typeof arg === 'bigint') value = arg;
234
- else if (typeof arg === 'number') {
193
+ if (typeof arg === 'bigint') {
194
+ value = arg;
195
+ } else if (typeof arg === 'number') {
235
196
  if (!Number.isSafeInteger(arg)) throw new Error(`Invalid pedersenArg: ${arg}`);
236
197
  value = BigInt(arg);
237
- } else value = bytesToNumber0x(ensureBytes0x(arg));
238
- // [0..Fp)
239
- if (!(0n <= value && value < starkCurve.CURVE.Fp.ORDER))
240
- throw new Error(`PedersenArg should be 0 <= value < CURVE.P: ${value}`);
198
+ } else {
199
+ value = bytesToNumberBE(ensureBytes(arg));
200
+ }
201
+ if (!(0n <= value && value < curve.CURVE.Fp.ORDER))
202
+ throw new Error(`PedersenArg should be 0 <= value < CURVE.P: ${value}`); // [0..Fp)
241
203
  return value;
242
204
  }
243
205
 
@@ -253,17 +215,17 @@ function pedersenSingle(point: ProjectivePoint, value: PedersenArg, constants: P
253
215
  }
254
216
 
255
217
  // shift_point + x_low * P_0 + x_high * P1 + y_low * P2 + y_high * P3
256
- export function pedersen(x: PedersenArg, y: PedersenArg) {
218
+ export function pedersen(x: PedersenArg, y: PedersenArg): string {
257
219
  let point: ProjectivePoint = PEDERSEN_POINTS[0];
258
220
  point = pedersenSingle(point, x, PEDERSEN_POINTS1);
259
221
  point = pedersenSingle(point, y, PEDERSEN_POINTS2);
260
- return bytesToHexEth(point.toRawBytes(true).slice(1));
222
+ return extractX(point.toRawBytes(true));
261
223
  }
262
224
 
263
225
  export function hashChain(data: PedersenArg[], fn = pedersen) {
264
226
  if (!Array.isArray(data) || data.length < 1)
265
227
  throw new Error('data should be array of at least 1 element');
266
- if (data.length === 1) return numberToHexEth(pedersenArg(data[0]));
228
+ if (data.length === 1) return numberTo0x16(pedersenArg(data[0]));
267
229
  return Array.from(data)
268
230
  .reverse()
269
231
  .reduce((acc, i) => fn(i, acc));
@@ -272,9 +234,9 @@ export function hashChain(data: PedersenArg[], fn = pedersen) {
272
234
  export const computeHashOnElements = (data: PedersenArg[], fn = pedersen) =>
273
235
  [0, ...data, data.length].reduce((x, y) => fn(x, y));
274
236
 
275
- const MASK_250 = cutils.bitMask(250);
276
- export const keccak = (data: Uint8Array): bigint => bytesToNumber0x(keccak_256(data)) & MASK_250;
277
- const sha256Num = (data: Uint8Array | string): bigint => cutils.bytesToNumberBE(sha256(data));
237
+ const MASK_250 = bitMask(250);
238
+ export const keccak = (data: Uint8Array): bigint => bytesToNumberBE(keccak_256(data)) & MASK_250;
239
+ const sha256Num = (data: Uint8Array | string): bigint => bytesToNumberBE(sha256(data));
278
240
 
279
241
  // Poseidon hash
280
242
  export const Fp253 = Fp(
@@ -330,7 +292,7 @@ export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]) {
330
292
  for (let j = 0; j < m; j++) row.push(poseidonRoundConstant(opts.Fp, 'Hades', m * i + j));
331
293
  roundConstants.push(row);
332
294
  }
333
- return poseidon.poseidon({
295
+ return poseidon({
334
296
  ...opts,
335
297
  t: m,
336
298
  sboxPower: 3,