@interest-protocol/vortex-sdk 0.0.1-alpha.0 → 1.1.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 (121) hide show
  1. package/.eslingignore +1 -0
  2. package/dist/__tests__/entities/keypair.spec.d.ts +2 -0
  3. package/dist/__tests__/entities/keypair.spec.d.ts.map +1 -0
  4. package/dist/__tests__/test-utils.d.ts +25 -0
  5. package/dist/__tests__/test-utils.d.ts.map +1 -0
  6. package/dist/__tests__/types.d.ts +3 -0
  7. package/dist/__tests__/types.d.ts.map +1 -0
  8. package/dist/__tests__/vortex.test.d.ts +2 -0
  9. package/dist/__tests__/vortex.test.d.ts.map +1 -0
  10. package/dist/constants.d.ts +44 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/crypto/ff/f1field.d.ts +76 -0
  13. package/dist/crypto/ff/f1field.d.ts.map +1 -0
  14. package/dist/crypto/ff/index.d.ts +6 -0
  15. package/dist/crypto/ff/index.d.ts.map +1 -0
  16. package/dist/crypto/ff/random.d.ts +2 -0
  17. package/dist/crypto/ff/random.d.ts.map +1 -0
  18. package/dist/crypto/ff/scalar.d.ts +45 -0
  19. package/dist/crypto/ff/scalar.d.ts.map +1 -0
  20. package/dist/crypto/ff/utils.d.ts +6 -0
  21. package/dist/crypto/ff/utils.d.ts.map +1 -0
  22. package/dist/crypto/index.d.ts +6 -0
  23. package/dist/crypto/index.d.ts.map +1 -0
  24. package/dist/crypto/poseidon/index.d.ts +2 -0
  25. package/dist/crypto/poseidon/index.d.ts.map +1 -0
  26. package/dist/crypto/poseidon/poseidon-constants-opt.d.ts +7 -0
  27. package/dist/crypto/poseidon/poseidon-constants-opt.d.ts.map +1 -0
  28. package/dist/crypto/poseidon/poseidon-opt.d.ts +16 -0
  29. package/dist/crypto/poseidon/poseidon-opt.d.ts.map +1 -0
  30. package/dist/deposit.d.ts +4 -0
  31. package/dist/deposit.d.ts.map +1 -0
  32. package/dist/entities/index.d.ts +4 -0
  33. package/dist/entities/index.d.ts.map +1 -0
  34. package/dist/entities/keypair.d.ts +29 -0
  35. package/dist/entities/keypair.d.ts.map +1 -0
  36. package/dist/entities/merkle-tree.d.ts +81 -0
  37. package/dist/entities/merkle-tree.d.ts.map +1 -0
  38. package/dist/entities/utxo.d.ts +24 -0
  39. package/dist/entities/utxo.d.ts.map +1 -0
  40. package/dist/index.d.ts +6 -2
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +38280 -4459
  43. package/dist/index.js.map +1 -1
  44. package/dist/index.mjs +38244 -4453
  45. package/dist/index.mjs.map +1 -1
  46. package/dist/jest-setup.d.ts +2 -0
  47. package/dist/jest-setup.d.ts.map +1 -0
  48. package/dist/keys/index.d.ts +3 -0
  49. package/dist/keys/index.d.ts.map +1 -0
  50. package/dist/pkg/nodejs/vortex.d.ts +11 -0
  51. package/dist/pkg/nodejs/vortex.d.ts.map +1 -0
  52. package/dist/pkg/web/vortex.d.ts +44 -0
  53. package/dist/pkg/web/vortex.d.ts.map +1 -0
  54. package/dist/utils/decrypt.d.ts +12 -0
  55. package/dist/utils/decrypt.d.ts.map +1 -0
  56. package/dist/utils/env.d.ts +2 -0
  57. package/dist/utils/env.d.ts.map +1 -0
  58. package/dist/utils/events.d.ts +7 -0
  59. package/dist/utils/events.d.ts.map +1 -0
  60. package/dist/utils/ext-data.d.ts +3 -0
  61. package/dist/utils/ext-data.d.ts.map +1 -0
  62. package/dist/utils/index.d.ts +50 -0
  63. package/dist/utils/index.d.ts.map +1 -0
  64. package/dist/utils/prove.d.ts +3 -0
  65. package/dist/utils/prove.d.ts.map +1 -0
  66. package/dist/vortex.d.ts +51 -21
  67. package/dist/vortex.d.ts.map +1 -1
  68. package/dist/vortex.types.d.ts +74 -50
  69. package/dist/vortex.types.d.ts.map +1 -1
  70. package/dist/vortex_bg.wasm +0 -0
  71. package/dist/withdraw.d.ts +4 -0
  72. package/dist/withdraw.d.ts.map +1 -0
  73. package/jest.config.js +31 -0
  74. package/package.json +22 -7
  75. package/src/__tests__/entities/keypair.spec.ts +191 -0
  76. package/src/__tests__/test-utils.ts +76 -0
  77. package/src/__tests__/types.ts +3 -0
  78. package/src/__tests__/vortex.test.ts +25 -0
  79. package/src/constants.ts +104 -0
  80. package/src/crypto/ff/f1field.ts +464 -0
  81. package/src/crypto/ff/index.ts +6 -0
  82. package/src/crypto/ff/random.ts +32 -0
  83. package/src/crypto/ff/readme.md +8 -0
  84. package/src/crypto/ff/scalar.ts +264 -0
  85. package/src/crypto/ff/utils.ts +121 -0
  86. package/src/crypto/index.ts +8 -0
  87. package/src/crypto/poseidon/index.ts +1 -0
  88. package/src/crypto/poseidon/poseidon-constants-opt.ts +24806 -0
  89. package/src/crypto/poseidon/poseidon-opt.ts +184 -0
  90. package/src/deposit.ts +168 -0
  91. package/src/entities/index.ts +3 -0
  92. package/src/entities/keypair.ts +262 -0
  93. package/src/entities/merkle-tree.ts +256 -0
  94. package/src/entities/utxo.ts +52 -0
  95. package/src/index.ts +6 -2
  96. package/src/jest-setup.ts +2 -0
  97. package/src/keys/index.ts +5 -0
  98. package/src/pkg/nodejs/vortex.d.ts +36 -0
  99. package/src/pkg/nodejs/vortex.js +332 -0
  100. package/src/pkg/nodejs/vortex_bg.wasm +0 -0
  101. package/src/pkg/nodejs/vortex_bg.wasm.d.ts +12 -0
  102. package/src/pkg/web/vortex.d.ts +72 -0
  103. package/src/pkg/web/vortex.js +442 -0
  104. package/src/pkg/web/vortex_bg.wasm +0 -0
  105. package/src/pkg/web/vortex_bg.wasm.d.ts +12 -0
  106. package/src/utils/decrypt.ts +46 -0
  107. package/src/utils/env.ts +18 -0
  108. package/src/utils/events.ts +16 -0
  109. package/src/utils/ext-data.ts +43 -0
  110. package/src/utils/index.ts +152 -0
  111. package/src/utils/prove.ts +18 -0
  112. package/src/vortex.ts +235 -111
  113. package/src/vortex.types.ts +74 -54
  114. package/src/withdraw.ts +159 -0
  115. package/tsconfig.json +4 -2
  116. package/dist/admin.d.ts +0 -17
  117. package/dist/admin.d.ts.map +0 -1
  118. package/dist/utils.d.ts +0 -11
  119. package/dist/utils.d.ts.map +0 -1
  120. package/src/admin.ts +0 -124
  121. package/src/utils.ts +0 -66
@@ -0,0 +1,464 @@
1
+ import * as Scalar from './scalar';
2
+ import { getRandomBytes } from './random';
3
+
4
+ export class F1Field {
5
+ type: string;
6
+ one: bigint;
7
+ zero: bigint;
8
+ p: bigint;
9
+ m: bigint;
10
+ negOne: bigint;
11
+ two: bigint;
12
+ half: bigint;
13
+ bitLength: number;
14
+ mask: bigint;
15
+ n64: number;
16
+ n32: number;
17
+ n8: number;
18
+ R: bigint;
19
+ s: number;
20
+ shift: bigint;
21
+ Ri: bigint;
22
+ nqr: bigint;
23
+ t: bigint;
24
+ nqr_to_t: bigint;
25
+ k: bigint;
26
+
27
+ constructor(p: bigint) {
28
+ this.type = 'F1';
29
+ this.one = BigInt(1);
30
+ this.zero = BigInt(0);
31
+ this.p = BigInt(p);
32
+ this.m = Scalar.one;
33
+ this.negOne = this.p - this.one;
34
+ this.two = BigInt(2);
35
+ this.half = this.p >> this.one;
36
+ this.bitLength = Scalar.bitLength(this.p);
37
+ this.mask = (this.one << BigInt(this.bitLength)) - this.one;
38
+
39
+ this.n64 = Math.floor((this.bitLength - 1) / 64) + 1;
40
+ this.n32 = this.n64 * 2;
41
+ this.n8 = this.n64 * 8;
42
+ this.R = this.e(this.one << BigInt(this.n64 * 64));
43
+ this.Ri = this.inv(this.R);
44
+
45
+ const e = this.negOne >> this.one;
46
+ this.nqr = this.two;
47
+ let r = this.pow(this.nqr, e);
48
+ while (!this.eq(r, this.negOne)) {
49
+ this.nqr = this.nqr + this.one;
50
+ r = this.pow(this.nqr, e);
51
+ }
52
+
53
+ this.s = 0;
54
+ this.t = this.negOne;
55
+
56
+ while ((this.t & this.one) == this.zero) {
57
+ this.s = this.s + 1;
58
+ this.t = this.t >> this.one;
59
+ }
60
+
61
+ this.nqr_to_t = this.pow(this.nqr, this.t);
62
+
63
+ // eslint-disable-next-line @cspell/spellchecker
64
+ tonelliShanks(this);
65
+
66
+ this.shift = this.square(this.nqr);
67
+ this.k = this.exp(this.nqr, BigInt(2 ** this.s));
68
+ }
69
+
70
+ e(a: string | bigint, b: bigint | undefined = undefined): bigint {
71
+ let res!: bigint;
72
+ if (!b) {
73
+ res = BigInt(a);
74
+ } else if (b == BigInt(16)) {
75
+ res = BigInt('0x' + a);
76
+ }
77
+ if (res < 0) {
78
+ let nRes = -res;
79
+ if (nRes >= this.p) nRes = nRes % this.p;
80
+ return this.p - nRes;
81
+ } else {
82
+ return res >= this.p ? res % this.p : res;
83
+ }
84
+ }
85
+
86
+ add(a: bigint, b: bigint): bigint {
87
+ const res = a + b;
88
+ return res >= this.p ? res - this.p : res;
89
+ }
90
+
91
+ sub(a: bigint, b: bigint): bigint {
92
+ return a >= b ? a - b : this.p - b + a;
93
+ }
94
+
95
+ neg(a: bigint): bigint {
96
+ return a ? this.p - a : a;
97
+ }
98
+
99
+ double(a: bigint): bigint {
100
+ return this.add(a, a);
101
+ }
102
+
103
+ mul(a: bigint, b: bigint): bigint {
104
+ return (a * b) % this.p;
105
+ }
106
+
107
+ mulScalar(base: bigint, s: bigint) {
108
+ return (base * this.e(s)) % this.p;
109
+ }
110
+
111
+ square(a: bigint): bigint {
112
+ return (a * a) % this.p;
113
+ }
114
+
115
+ eq(a: bigint, b: bigint): boolean {
116
+ return a == b;
117
+ }
118
+
119
+ neq(a: bigint, b: bigint): boolean {
120
+ return a != b;
121
+ }
122
+
123
+ lt(a: bigint, b: bigint): boolean {
124
+ const aa = a > this.half ? a - this.p : a;
125
+ const bb = b > this.half ? b - this.p : b;
126
+ return aa < bb;
127
+ }
128
+
129
+ gt(a: bigint, b: bigint): boolean {
130
+ const aa = a > this.half ? a - this.p : a;
131
+ const bb = b > this.half ? b - this.p : b;
132
+ return aa > bb;
133
+ }
134
+
135
+ leq(a: bigint, b: bigint): boolean {
136
+ const aa = a > this.half ? a - this.p : a;
137
+ const bb = b > this.half ? b - this.p : b;
138
+ return aa <= bb;
139
+ }
140
+
141
+ geq(a: bigint, b: bigint): boolean {
142
+ const aa = a > this.half ? a - this.p : a;
143
+ const bb = b > this.half ? b - this.p : b;
144
+ return aa >= bb;
145
+ }
146
+
147
+ div(a: bigint, b: bigint): bigint {
148
+ return this.mul(a, this.inv(b));
149
+ }
150
+
151
+ iDiv(a: bigint, b: bigint): bigint {
152
+ if (!b) throw new Error('Division by zero');
153
+ return a / b;
154
+ }
155
+
156
+ inv(a: bigint) {
157
+ if (!a) throw new Error('Division by zero');
158
+
159
+ let t = this.zero;
160
+ let r = this.p;
161
+ let newt = this.one;
162
+ let newR = a % this.p;
163
+ while (newR) {
164
+ const q = r / newR;
165
+ [t, newt] = [newt, t - q * newt];
166
+ [r, newR] = [newR, r - q * newR];
167
+ }
168
+ if (t < this.zero) t += this.p;
169
+ return t;
170
+ }
171
+
172
+ mod(a: bigint, b: bigint): bigint {
173
+ return a % b;
174
+ }
175
+
176
+ pow(b: bigint, e: bigint): bigint {
177
+ return exp(this, b, e);
178
+ }
179
+
180
+ exp(b: bigint, e: bigint): bigint {
181
+ return exp(this, b, BigInt(e));
182
+ }
183
+
184
+ band(a: bigint, b: bigint): bigint {
185
+ const res = a & b & this.mask;
186
+ return res >= this.p ? res - this.p : res;
187
+ }
188
+
189
+ bor(a: bigint, b: bigint): bigint {
190
+ const res = (a | b) & this.mask;
191
+ return res >= this.p ? res - this.p : res;
192
+ }
193
+
194
+ bXor(a: bigint, b: bigint): bigint {
195
+ const res = (a ^ b) & this.mask;
196
+ return res >= this.p ? res - this.p : res;
197
+ }
198
+
199
+ bNot(a: bigint): bigint {
200
+ const res = a ^ this.mask;
201
+ return res >= this.p ? res - this.p : res;
202
+ }
203
+
204
+ shl(a: bigint, b: bigint): bigint {
205
+ if (Number(b) < this.bitLength) {
206
+ const res = (a << b) & this.mask;
207
+ return res >= this.p ? res - this.p : res;
208
+ } else {
209
+ const nb = this.p - b;
210
+ if (Number(nb) < this.bitLength) {
211
+ return a >> nb;
212
+ } else {
213
+ return this.zero;
214
+ }
215
+ }
216
+ }
217
+
218
+ shr(a: bigint, b: bigint): bigint {
219
+ if (Number(b) < this.bitLength) {
220
+ return a >> b;
221
+ } else {
222
+ const nb = this.p - b;
223
+ if (Number(nb) < this.bitLength) {
224
+ const res = (a << nb) & this.mask;
225
+ return res >= this.p ? res - this.p : res;
226
+ } else {
227
+ return Scalar.zero;
228
+ }
229
+ }
230
+ }
231
+
232
+ land(a: bigint, b: bigint): bigint {
233
+ return a && b ? this.one : this.zero;
234
+ }
235
+
236
+ lor(a: bigint, b: bigint): bigint {
237
+ return a || b ? this.one : this.zero;
238
+ }
239
+
240
+ sqrt_old(n: bigint): bigint | null {
241
+ if (n == this.zero) return this.zero;
242
+
243
+ // Test that have solution
244
+ const res = this.pow(n, this.negOne >> this.one);
245
+ if (res != this.one) return null;
246
+
247
+ let m = this.s;
248
+ let c = this.nqr_to_t;
249
+ let t = this.pow(n, this.t);
250
+ let r = this.pow(n, this.add(this.t, this.one) >> this.one);
251
+
252
+ while (t != this.one) {
253
+ let sq = this.square(t);
254
+ let i = 1;
255
+ while (sq != this.one) {
256
+ i++;
257
+ sq = this.square(sq);
258
+ }
259
+
260
+ // b = c ^ m-i-1
261
+ let b = c;
262
+ for (let j = 0; j < m - i - 1; j++) b = this.square(b);
263
+
264
+ m = i;
265
+ c = this.square(b);
266
+ t = this.mul(t, c);
267
+ r = this.mul(r, b);
268
+ }
269
+
270
+ if (r > this.p >> this.one) {
271
+ r = this.neg(r);
272
+ }
273
+
274
+ return r;
275
+ }
276
+
277
+ normalize(a: bigint): bigint {
278
+ if (a < 0) {
279
+ let na = -a;
280
+ if (na >= this.p) na = na % this.p;
281
+ return this.p - na;
282
+ } else {
283
+ return a >= this.p ? a % this.p : a;
284
+ }
285
+ }
286
+
287
+ random(): bigint {
288
+ const nBytes = (this.bitLength * 2) / 8;
289
+ let res = this.zero;
290
+ for (let i = 0; i < nBytes; i++) {
291
+ res = (res << BigInt(8)) + BigInt(getRandomBytes(1)[0]!);
292
+ }
293
+ return res % this.p;
294
+ }
295
+
296
+ toString(a: bigint, base = 10) {
297
+ base = base || 10;
298
+ let vs;
299
+ if (a > this.half && base == 10) {
300
+ const v = this.p - a;
301
+ vs = '-' + v.toString(base);
302
+ } else {
303
+ vs = a.toString(base);
304
+ }
305
+ return vs;
306
+ }
307
+
308
+ isZero(a: bigint) {
309
+ return a == this.zero;
310
+ }
311
+
312
+ // Returns a buffer with Little Endian Representation
313
+ toRprLE(buff: Uint8Array, o: number, e: bigint) {
314
+ Scalar.toRprLE(buff, o, e, this.n64 * 8);
315
+ }
316
+
317
+ // Returns a buffer with Big Endian Representation
318
+ toRprBE(buff: Uint8Array, o: number, e: bigint) {
319
+ Scalar.toRprBE(buff, o, e, this.n64 * 8);
320
+ }
321
+
322
+ // Returns a buffer with Big Endian Montgomery Representation
323
+ toRprBEM(buff: Uint8Array, o: number, e: bigint) {
324
+ return this.toRprBE(buff, o, this.mul(this.R, e));
325
+ }
326
+
327
+ toRprLEM(buff: Uint8Array, o: number, e: bigint) {
328
+ return this.toRprLE(buff, o, this.mul(this.R, e));
329
+ }
330
+
331
+ // Passes a buffer with Little Endian Representation
332
+ fromRprLE(buff: Uint8Array, o: number) {
333
+ return Scalar.fromRprLE(buff, o, this.n8);
334
+ }
335
+
336
+ // Passes a buffer with Big Endian Representation
337
+ fromRprBE(buff: Uint8Array, o: number) {
338
+ return Scalar.fromRprBE(buff, o, this.n8);
339
+ }
340
+
341
+ fromRprLEM(buff: Uint8Array, o: number) {
342
+ return this.mul(this.fromRprLE(buff, o), this.Ri);
343
+ }
344
+
345
+ fromRprBEM(buff: Uint8Array, o: number) {
346
+ return this.mul(this.fromRprBE(buff, o), this.Ri);
347
+ }
348
+
349
+ toObject(a: bigint): bigint {
350
+ return a;
351
+ }
352
+
353
+ sqrt(a: bigint): bigint | null {
354
+ throw new Error('Not implemented sqrt for F1' + a);
355
+ }
356
+
357
+ sqrt_e1!: bigint;
358
+ sqrt_q!: bigint;
359
+ sqrt_s!: bigint;
360
+ sqrt_t!: bigint;
361
+ sqrt_z!: bigint;
362
+ sqrt_tm1d2!: bigint;
363
+ }
364
+
365
+ // eslint-disable-next-line @cspell/spellchecker
366
+ function tonelliShanks(F: F1Field) {
367
+ F.sqrt_q = Scalar.pow(F.p, F.m);
368
+
369
+ F.sqrt_s = Scalar.zero;
370
+ F.sqrt_t = Scalar.sub(F.sqrt_q, Scalar.one);
371
+
372
+ while (!Scalar.isOdd(F.sqrt_t)) {
373
+ F.sqrt_s = F.sqrt_s + Scalar.one;
374
+ F.sqrt_t = Scalar.div(F.sqrt_t, 2n);
375
+ }
376
+
377
+ let c0 = F.one;
378
+
379
+ while (F.eq(c0, F.one)) {
380
+ const c = F.random();
381
+ F.sqrt_z = F.pow(c, F.sqrt_t);
382
+ c0 = F.pow(F.sqrt_z, 2n ** (F.sqrt_s - Scalar.one));
383
+ }
384
+
385
+ F.sqrt_tm1d2 = Scalar.div(Scalar.sub(F.sqrt_t, Scalar.one), 2n);
386
+
387
+ F.sqrt = (a: bigint): bigint | null => {
388
+ if (F.isZero(a)) return F.zero;
389
+ let w = F.pow(a, F.sqrt_tm1d2);
390
+ const a0 = F.pow(F.mul(F.square(w), a), 2n ** (F.sqrt_s - Scalar.one));
391
+ if (F.eq(a0, F.negOne)) return null;
392
+
393
+ let v = F.sqrt_s;
394
+ let x = F.mul(a, w);
395
+ let b = F.mul(x, w);
396
+ let z = F.sqrt_z;
397
+ while (!F.eq(b, F.one)) {
398
+ let b2k = F.square(b);
399
+ let k = Scalar.one;
400
+ while (!F.eq(b2k, F.one)) {
401
+ b2k = F.square(b2k);
402
+ k++;
403
+ }
404
+
405
+ w = z;
406
+ for (let i = 0; i < v - k - Scalar.one; i++) {
407
+ w = F.square(w);
408
+ }
409
+ z = F.square(w);
410
+ b = F.mul(b, z);
411
+ x = F.mul(x, w);
412
+ v = k;
413
+ }
414
+ return F.geq(x, F.zero) ? x : F.neg(x);
415
+ };
416
+ }
417
+
418
+ export function mulScalar(F: F1Field, base: bigint, e: bigint): bigint {
419
+ let res;
420
+
421
+ if (Scalar.isZero(e)) return F.zero;
422
+
423
+ const n = Scalar.naf(e);
424
+
425
+ if (n[n.length - 1] == 1) {
426
+ res = base;
427
+ } else if (n[n.length - 1] == -1) {
428
+ res = F.neg(base);
429
+ } else {
430
+ throw new Error('invalid NAF');
431
+ }
432
+
433
+ for (let i = n.length - 2; i >= 0; i--) {
434
+ res = F.double(res);
435
+
436
+ if (n[i] == 1) {
437
+ res = F.add(res, base);
438
+ } else if (n[i] == -1) {
439
+ res = F.sub(res, base);
440
+ }
441
+ }
442
+
443
+ return res;
444
+ }
445
+
446
+ export function exp(F: F1Field, base: bigint, e: bigint) {
447
+ if (Scalar.isZero(e)) return F.one;
448
+
449
+ const n = Scalar.bits(e);
450
+
451
+ if (n.length == 0) return F.one;
452
+
453
+ let res = base;
454
+
455
+ for (let i = n.length - 2; i >= 0; i--) {
456
+ res = F.square(res);
457
+
458
+ if (n[i]) {
459
+ res = F.mul(res, base);
460
+ }
461
+ }
462
+
463
+ return res;
464
+ }
@@ -0,0 +1,6 @@
1
+ import * as utils from './utils';
2
+ import * as Scalar from './scalar';
3
+ import { F1Field } from './f1field';
4
+ import { getRandomBytes } from './random';
5
+
6
+ export { utils, Scalar, F1Field, getRandomBytes };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Type definition for the browser crypto object.
3
+ */
4
+ type BrowserCrypto = {
5
+ crypto?: { getRandomValues?: (arg0: Uint8Array) => void };
6
+ };
7
+
8
+ // Type declaration for Node.js require (used in Node.js environment fallback)
9
+ declare const require: (module: string) => any;
10
+
11
+ export function getRandomBytes(length: number): Uint8Array {
12
+ if (length <= 0) {
13
+ throw new Error('Length must be greater than 0');
14
+ }
15
+ const global = globalThis as BrowserCrypto;
16
+ if (global.crypto?.getRandomValues) {
17
+ const randomValues = new Uint8Array(length);
18
+ global.crypto.getRandomValues(randomValues);
19
+ return randomValues;
20
+ }
21
+ // eslint-disable-next-line no-unused-labels
22
+ NODE: {
23
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
24
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
25
+ const crypto = require('crypto');
26
+ return crypto.randomBytes(length);
27
+ }
28
+
29
+ throw new Error(
30
+ 'Random byte generation is not supported in this environment'
31
+ );
32
+ }
@@ -0,0 +1,8 @@
1
+ # Copyright
2
+
3
+ ```
4
+ Copyright 2018 0kims association.
5
+
6
+ Files in this folder is a part of ffjavascript library rewritten by Typescript.
7
+ Original implementation is written here https://github.com/iden3/ffjavascript.
8
+ ```