salty-crypto 0.2.0 → 0.3.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 (77) hide show
  1. package/dist/salty-crypto.d.ts +3 -0
  2. package/dist/salty-crypto.js +1 -1
  3. package/lib/aead/chacha20poly1305.d.ts +2 -0
  4. package/lib/aead/chacha20poly1305.js +53 -0
  5. package/lib/aead/chacha20poly1305.js.map +1 -0
  6. package/lib/aead.d.ts +16 -0
  7. package/lib/aead.js +18 -0
  8. package/lib/aead.js.map +1 -0
  9. package/lib/bytes.d.ts +4 -0
  10. package/lib/bytes.js +27 -0
  11. package/lib/bytes.js.map +1 -0
  12. package/lib/cipher/chacha20.d.ts +4 -0
  13. package/lib/cipher/chacha20.js +84 -0
  14. package/lib/cipher/chacha20.js.map +1 -0
  15. package/lib/cipher.d.ts +9 -0
  16. package/lib/cipher.js +4 -0
  17. package/lib/cipher.js.map +1 -0
  18. package/lib/dh/x25519.d.ts +10 -0
  19. package/lib/dh/x25519.js +624 -0
  20. package/lib/dh/x25519.js.map +1 -0
  21. package/lib/dh.d.ts +11 -0
  22. package/lib/dh.js +17 -0
  23. package/lib/dh.js.map +1 -0
  24. package/lib/hash/blake2s.d.ts +18 -0
  25. package/lib/hash/blake2s.js +120 -0
  26. package/lib/hash/blake2s.js.map +1 -0
  27. package/lib/hash/poly1305.d.ts +18 -0
  28. package/lib/hash/poly1305.js +376 -0
  29. package/lib/hash/poly1305.js.map +1 -0
  30. package/lib/hash.d.ts +14 -0
  31. package/lib/hash.js +5 -0
  32. package/lib/hash.js.map +1 -0
  33. package/lib/hkdf.d.ts +6 -0
  34. package/lib/hkdf.js +17 -0
  35. package/lib/hkdf.js.map +1 -0
  36. package/lib/hmac.d.ts +6 -0
  37. package/lib/hmac.js +17 -0
  38. package/lib/hmac.js.map +1 -0
  39. package/lib/index.d.ts +45 -0
  40. package/lib/index.js +48 -0
  41. package/lib/index.js.map +1 -0
  42. package/lib/io.d.ts +4 -0
  43. package/lib/io.js +35 -0
  44. package/lib/io.js.map +1 -0
  45. package/lib/noise/algorithms.d.ts +15 -0
  46. package/lib/noise/algorithms.js +10 -0
  47. package/lib/noise/algorithms.js.map +1 -0
  48. package/lib/noise/cipherstate.d.ts +14 -0
  49. package/lib/noise/cipherstate.js +62 -0
  50. package/lib/noise/cipherstate.js.map +1 -0
  51. package/lib/noise/handshake.d.ts +52 -0
  52. package/lib/noise/handshake.js +191 -0
  53. package/lib/noise/handshake.js.map +1 -0
  54. package/lib/noise/patterns.d.ts +16 -0
  55. package/lib/noise/patterns.js +73 -0
  56. package/lib/noise/patterns.js.map +1 -0
  57. package/lib/noise/profiles.d.ts +2 -0
  58. package/lib/noise/profiles.js +11 -0
  59. package/lib/noise/profiles.js.map +1 -0
  60. package/lib/noise/rekey.d.ts +3 -0
  61. package/lib/noise/rekey.js +9 -0
  62. package/lib/noise/rekey.js.map +1 -0
  63. package/lib/noise.d.ts +6 -0
  64. package/lib/noise.js +8 -0
  65. package/lib/noise.js.map +1 -0
  66. package/lib/nonce.d.ts +9 -0
  67. package/lib/nonce.js +25 -0
  68. package/lib/nonce.js.map +1 -0
  69. package/lib/random.d.ts +2 -0
  70. package/lib/random.js +35 -0
  71. package/lib/random.js.map +1 -0
  72. package/package.json +13 -3
  73. package/src/noise/cipherstate.ts +31 -0
  74. package/speed.ts +0 -22
  75. package/test-vectors/noise-c-basic.txt +0 -19684
  76. package/test-vectors/snow.txt +0 -10348
  77. package/watchall +0 -22
@@ -0,0 +1,624 @@
1
+ /// SPDX-License-Identifier: MIT
2
+ /// SPDX-FileCopyrightText: Copyright © 2023 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
3
+ // TypeScript port of the X25519 code from nacl-fast.js from tweetnacl.
4
+ //
5
+ // The comment in that file reads as follows:
6
+ //
7
+ // // Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
8
+ // // Public domain.
9
+ // //
10
+ // // Implementation derived from TweetNaCl version 20140427.
11
+ // // See for details: http://tweetnacl.cr.yp.to/
12
+ export const crypto_scalarmult_BYTES = 32;
13
+ export const crypto_scalarmult_SCALARBYTES = 32;
14
+ function gf() {
15
+ return new Float64Array(16);
16
+ }
17
+ const _9 = new Uint8Array(32);
18
+ _9[0] = 9;
19
+ const _121665 = gf();
20
+ _121665[0] = 0xdb41;
21
+ _121665[1] = 1;
22
+ function car25519(o) {
23
+ let c = 1;
24
+ for (let i = 0; i < 16; i++) {
25
+ const v = o[i] + c + 65535;
26
+ c = Math.floor(v / 65536);
27
+ o[i] = v - c * 65536;
28
+ }
29
+ o[0] += c - 1 + 37 * (c - 1);
30
+ }
31
+ function sel25519(p, q, b) {
32
+ const c = ~(b - 1);
33
+ for (let i = 0; i < 16; i++) {
34
+ const t = c & (p[i] ^ q[i]);
35
+ p[i] ^= t;
36
+ q[i] ^= t;
37
+ }
38
+ }
39
+ function pack25519(o, n) {
40
+ const m = gf();
41
+ const t = gf();
42
+ for (let i = 0; i < 16; i++)
43
+ t[i] = n[i];
44
+ car25519(t);
45
+ car25519(t);
46
+ car25519(t);
47
+ for (let j = 0; j < 2; j++) {
48
+ m[0] = t[0] - 0xffed;
49
+ for (let i = 1; i < 15; i++) {
50
+ m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);
51
+ m[i - 1] &= 0xffff;
52
+ }
53
+ m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);
54
+ const b = (m[15] >> 16) & 1;
55
+ m[14] &= 0xffff;
56
+ sel25519(t, m, 1 - b);
57
+ }
58
+ for (let i = 0; i < 16; i++) {
59
+ o[2 * i] = t[i] & 0xff;
60
+ o[2 * i + 1] = t[i] >> 8;
61
+ }
62
+ }
63
+ function unpack25519(o, n) {
64
+ for (let i = 0; i < 16; i++)
65
+ o[i] = n[2 * i] + (n[2 * i + 1] << 8);
66
+ o[15] &= 0x7fff;
67
+ }
68
+ function A(o, a, b) {
69
+ for (let i = 0; i < 16; i++)
70
+ o[i] = a[i] + b[i];
71
+ }
72
+ function Z(o, a, b) {
73
+ for (let i = 0; i < 16; i++)
74
+ o[i] = a[i] - b[i];
75
+ }
76
+ function M(o, a, b) {
77
+ let t0 = 0;
78
+ let t1 = 0;
79
+ let t2 = 0;
80
+ let t3 = 0;
81
+ let t4 = 0;
82
+ let t5 = 0;
83
+ let t6 = 0;
84
+ let t7 = 0;
85
+ let t8 = 0;
86
+ let t9 = 0;
87
+ let t10 = 0;
88
+ let t11 = 0;
89
+ let t12 = 0;
90
+ let t13 = 0;
91
+ let t14 = 0;
92
+ let t15 = 0;
93
+ let t16 = 0;
94
+ let t17 = 0;
95
+ let t18 = 0;
96
+ let t19 = 0;
97
+ let t20 = 0;
98
+ let t21 = 0;
99
+ let t22 = 0;
100
+ let t23 = 0;
101
+ let t24 = 0;
102
+ let t25 = 0;
103
+ let t26 = 0;
104
+ let t27 = 0;
105
+ let t28 = 0;
106
+ let t29 = 0;
107
+ let t30 = 0;
108
+ const b0 = b[0];
109
+ const b1 = b[1];
110
+ const b2 = b[2];
111
+ const b3 = b[3];
112
+ const b4 = b[4];
113
+ const b5 = b[5];
114
+ const b6 = b[6];
115
+ const b7 = b[7];
116
+ const b8 = b[8];
117
+ const b9 = b[9];
118
+ const b10 = b[10];
119
+ const b11 = b[11];
120
+ const b12 = b[12];
121
+ const b13 = b[13];
122
+ const b14 = b[14];
123
+ const b15 = b[15];
124
+ let v = a[0];
125
+ t0 += v * b0;
126
+ t1 += v * b1;
127
+ t2 += v * b2;
128
+ t3 += v * b3;
129
+ t4 += v * b4;
130
+ t5 += v * b5;
131
+ t6 += v * b6;
132
+ t7 += v * b7;
133
+ t8 += v * b8;
134
+ t9 += v * b9;
135
+ t10 += v * b10;
136
+ t11 += v * b11;
137
+ t12 += v * b12;
138
+ t13 += v * b13;
139
+ t14 += v * b14;
140
+ t15 += v * b15;
141
+ v = a[1];
142
+ t1 += v * b0;
143
+ t2 += v * b1;
144
+ t3 += v * b2;
145
+ t4 += v * b3;
146
+ t5 += v * b4;
147
+ t6 += v * b5;
148
+ t7 += v * b6;
149
+ t8 += v * b7;
150
+ t9 += v * b8;
151
+ t10 += v * b9;
152
+ t11 += v * b10;
153
+ t12 += v * b11;
154
+ t13 += v * b12;
155
+ t14 += v * b13;
156
+ t15 += v * b14;
157
+ t16 += v * b15;
158
+ v = a[2];
159
+ t2 += v * b0;
160
+ t3 += v * b1;
161
+ t4 += v * b2;
162
+ t5 += v * b3;
163
+ t6 += v * b4;
164
+ t7 += v * b5;
165
+ t8 += v * b6;
166
+ t9 += v * b7;
167
+ t10 += v * b8;
168
+ t11 += v * b9;
169
+ t12 += v * b10;
170
+ t13 += v * b11;
171
+ t14 += v * b12;
172
+ t15 += v * b13;
173
+ t16 += v * b14;
174
+ t17 += v * b15;
175
+ v = a[3];
176
+ t3 += v * b0;
177
+ t4 += v * b1;
178
+ t5 += v * b2;
179
+ t6 += v * b3;
180
+ t7 += v * b4;
181
+ t8 += v * b5;
182
+ t9 += v * b6;
183
+ t10 += v * b7;
184
+ t11 += v * b8;
185
+ t12 += v * b9;
186
+ t13 += v * b10;
187
+ t14 += v * b11;
188
+ t15 += v * b12;
189
+ t16 += v * b13;
190
+ t17 += v * b14;
191
+ t18 += v * b15;
192
+ v = a[4];
193
+ t4 += v * b0;
194
+ t5 += v * b1;
195
+ t6 += v * b2;
196
+ t7 += v * b3;
197
+ t8 += v * b4;
198
+ t9 += v * b5;
199
+ t10 += v * b6;
200
+ t11 += v * b7;
201
+ t12 += v * b8;
202
+ t13 += v * b9;
203
+ t14 += v * b10;
204
+ t15 += v * b11;
205
+ t16 += v * b12;
206
+ t17 += v * b13;
207
+ t18 += v * b14;
208
+ t19 += v * b15;
209
+ v = a[5];
210
+ t5 += v * b0;
211
+ t6 += v * b1;
212
+ t7 += v * b2;
213
+ t8 += v * b3;
214
+ t9 += v * b4;
215
+ t10 += v * b5;
216
+ t11 += v * b6;
217
+ t12 += v * b7;
218
+ t13 += v * b8;
219
+ t14 += v * b9;
220
+ t15 += v * b10;
221
+ t16 += v * b11;
222
+ t17 += v * b12;
223
+ t18 += v * b13;
224
+ t19 += v * b14;
225
+ t20 += v * b15;
226
+ v = a[6];
227
+ t6 += v * b0;
228
+ t7 += v * b1;
229
+ t8 += v * b2;
230
+ t9 += v * b3;
231
+ t10 += v * b4;
232
+ t11 += v * b5;
233
+ t12 += v * b6;
234
+ t13 += v * b7;
235
+ t14 += v * b8;
236
+ t15 += v * b9;
237
+ t16 += v * b10;
238
+ t17 += v * b11;
239
+ t18 += v * b12;
240
+ t19 += v * b13;
241
+ t20 += v * b14;
242
+ t21 += v * b15;
243
+ v = a[7];
244
+ t7 += v * b0;
245
+ t8 += v * b1;
246
+ t9 += v * b2;
247
+ t10 += v * b3;
248
+ t11 += v * b4;
249
+ t12 += v * b5;
250
+ t13 += v * b6;
251
+ t14 += v * b7;
252
+ t15 += v * b8;
253
+ t16 += v * b9;
254
+ t17 += v * b10;
255
+ t18 += v * b11;
256
+ t19 += v * b12;
257
+ t20 += v * b13;
258
+ t21 += v * b14;
259
+ t22 += v * b15;
260
+ v = a[8];
261
+ t8 += v * b0;
262
+ t9 += v * b1;
263
+ t10 += v * b2;
264
+ t11 += v * b3;
265
+ t12 += v * b4;
266
+ t13 += v * b5;
267
+ t14 += v * b6;
268
+ t15 += v * b7;
269
+ t16 += v * b8;
270
+ t17 += v * b9;
271
+ t18 += v * b10;
272
+ t19 += v * b11;
273
+ t20 += v * b12;
274
+ t21 += v * b13;
275
+ t22 += v * b14;
276
+ t23 += v * b15;
277
+ v = a[9];
278
+ t9 += v * b0;
279
+ t10 += v * b1;
280
+ t11 += v * b2;
281
+ t12 += v * b3;
282
+ t13 += v * b4;
283
+ t14 += v * b5;
284
+ t15 += v * b6;
285
+ t16 += v * b7;
286
+ t17 += v * b8;
287
+ t18 += v * b9;
288
+ t19 += v * b10;
289
+ t20 += v * b11;
290
+ t21 += v * b12;
291
+ t22 += v * b13;
292
+ t23 += v * b14;
293
+ t24 += v * b15;
294
+ v = a[10];
295
+ t10 += v * b0;
296
+ t11 += v * b1;
297
+ t12 += v * b2;
298
+ t13 += v * b3;
299
+ t14 += v * b4;
300
+ t15 += v * b5;
301
+ t16 += v * b6;
302
+ t17 += v * b7;
303
+ t18 += v * b8;
304
+ t19 += v * b9;
305
+ t20 += v * b10;
306
+ t21 += v * b11;
307
+ t22 += v * b12;
308
+ t23 += v * b13;
309
+ t24 += v * b14;
310
+ t25 += v * b15;
311
+ v = a[11];
312
+ t11 += v * b0;
313
+ t12 += v * b1;
314
+ t13 += v * b2;
315
+ t14 += v * b3;
316
+ t15 += v * b4;
317
+ t16 += v * b5;
318
+ t17 += v * b6;
319
+ t18 += v * b7;
320
+ t19 += v * b8;
321
+ t20 += v * b9;
322
+ t21 += v * b10;
323
+ t22 += v * b11;
324
+ t23 += v * b12;
325
+ t24 += v * b13;
326
+ t25 += v * b14;
327
+ t26 += v * b15;
328
+ v = a[12];
329
+ t12 += v * b0;
330
+ t13 += v * b1;
331
+ t14 += v * b2;
332
+ t15 += v * b3;
333
+ t16 += v * b4;
334
+ t17 += v * b5;
335
+ t18 += v * b6;
336
+ t19 += v * b7;
337
+ t20 += v * b8;
338
+ t21 += v * b9;
339
+ t22 += v * b10;
340
+ t23 += v * b11;
341
+ t24 += v * b12;
342
+ t25 += v * b13;
343
+ t26 += v * b14;
344
+ t27 += v * b15;
345
+ v = a[13];
346
+ t13 += v * b0;
347
+ t14 += v * b1;
348
+ t15 += v * b2;
349
+ t16 += v * b3;
350
+ t17 += v * b4;
351
+ t18 += v * b5;
352
+ t19 += v * b6;
353
+ t20 += v * b7;
354
+ t21 += v * b8;
355
+ t22 += v * b9;
356
+ t23 += v * b10;
357
+ t24 += v * b11;
358
+ t25 += v * b12;
359
+ t26 += v * b13;
360
+ t27 += v * b14;
361
+ t28 += v * b15;
362
+ v = a[14];
363
+ t14 += v * b0;
364
+ t15 += v * b1;
365
+ t16 += v * b2;
366
+ t17 += v * b3;
367
+ t18 += v * b4;
368
+ t19 += v * b5;
369
+ t20 += v * b6;
370
+ t21 += v * b7;
371
+ t22 += v * b8;
372
+ t23 += v * b9;
373
+ t24 += v * b10;
374
+ t25 += v * b11;
375
+ t26 += v * b12;
376
+ t27 += v * b13;
377
+ t28 += v * b14;
378
+ t29 += v * b15;
379
+ v = a[15];
380
+ t15 += v * b0;
381
+ t16 += v * b1;
382
+ t17 += v * b2;
383
+ t18 += v * b3;
384
+ t19 += v * b4;
385
+ t20 += v * b5;
386
+ t21 += v * b6;
387
+ t22 += v * b7;
388
+ t23 += v * b8;
389
+ t24 += v * b9;
390
+ t25 += v * b10;
391
+ t26 += v * b11;
392
+ t27 += v * b12;
393
+ t28 += v * b13;
394
+ t29 += v * b14;
395
+ t30 += v * b15;
396
+ t0 += 38 * t16;
397
+ t1 += 38 * t17;
398
+ t2 += 38 * t18;
399
+ t3 += 38 * t19;
400
+ t4 += 38 * t20;
401
+ t5 += 38 * t21;
402
+ t6 += 38 * t22;
403
+ t7 += 38 * t23;
404
+ t8 += 38 * t24;
405
+ t9 += 38 * t25;
406
+ t10 += 38 * t26;
407
+ t11 += 38 * t27;
408
+ t12 += 38 * t28;
409
+ t13 += 38 * t29;
410
+ t14 += 38 * t30;
411
+ // t15 left as is
412
+ // first car
413
+ let c = 1;
414
+ v = t0 + c + 65535;
415
+ c = Math.floor(v / 65536);
416
+ t0 = v - c * 65536;
417
+ v = t1 + c + 65535;
418
+ c = Math.floor(v / 65536);
419
+ t1 = v - c * 65536;
420
+ v = t2 + c + 65535;
421
+ c = Math.floor(v / 65536);
422
+ t2 = v - c * 65536;
423
+ v = t3 + c + 65535;
424
+ c = Math.floor(v / 65536);
425
+ t3 = v - c * 65536;
426
+ v = t4 + c + 65535;
427
+ c = Math.floor(v / 65536);
428
+ t4 = v - c * 65536;
429
+ v = t5 + c + 65535;
430
+ c = Math.floor(v / 65536);
431
+ t5 = v - c * 65536;
432
+ v = t6 + c + 65535;
433
+ c = Math.floor(v / 65536);
434
+ t6 = v - c * 65536;
435
+ v = t7 + c + 65535;
436
+ c = Math.floor(v / 65536);
437
+ t7 = v - c * 65536;
438
+ v = t8 + c + 65535;
439
+ c = Math.floor(v / 65536);
440
+ t8 = v - c * 65536;
441
+ v = t9 + c + 65535;
442
+ c = Math.floor(v / 65536);
443
+ t9 = v - c * 65536;
444
+ v = t10 + c + 65535;
445
+ c = Math.floor(v / 65536);
446
+ t10 = v - c * 65536;
447
+ v = t11 + c + 65535;
448
+ c = Math.floor(v / 65536);
449
+ t11 = v - c * 65536;
450
+ v = t12 + c + 65535;
451
+ c = Math.floor(v / 65536);
452
+ t12 = v - c * 65536;
453
+ v = t13 + c + 65535;
454
+ c = Math.floor(v / 65536);
455
+ t13 = v - c * 65536;
456
+ v = t14 + c + 65535;
457
+ c = Math.floor(v / 65536);
458
+ t14 = v - c * 65536;
459
+ v = t15 + c + 65535;
460
+ c = Math.floor(v / 65536);
461
+ t15 = v - c * 65536;
462
+ t0 += c - 1 + 37 * (c - 1);
463
+ // second car
464
+ c = 1;
465
+ v = t0 + c + 65535;
466
+ c = Math.floor(v / 65536);
467
+ t0 = v - c * 65536;
468
+ v = t1 + c + 65535;
469
+ c = Math.floor(v / 65536);
470
+ t1 = v - c * 65536;
471
+ v = t2 + c + 65535;
472
+ c = Math.floor(v / 65536);
473
+ t2 = v - c * 65536;
474
+ v = t3 + c + 65535;
475
+ c = Math.floor(v / 65536);
476
+ t3 = v - c * 65536;
477
+ v = t4 + c + 65535;
478
+ c = Math.floor(v / 65536);
479
+ t4 = v - c * 65536;
480
+ v = t5 + c + 65535;
481
+ c = Math.floor(v / 65536);
482
+ t5 = v - c * 65536;
483
+ v = t6 + c + 65535;
484
+ c = Math.floor(v / 65536);
485
+ t6 = v - c * 65536;
486
+ v = t7 + c + 65535;
487
+ c = Math.floor(v / 65536);
488
+ t7 = v - c * 65536;
489
+ v = t8 + c + 65535;
490
+ c = Math.floor(v / 65536);
491
+ t8 = v - c * 65536;
492
+ v = t9 + c + 65535;
493
+ c = Math.floor(v / 65536);
494
+ t9 = v - c * 65536;
495
+ v = t10 + c + 65535;
496
+ c = Math.floor(v / 65536);
497
+ t10 = v - c * 65536;
498
+ v = t11 + c + 65535;
499
+ c = Math.floor(v / 65536);
500
+ t11 = v - c * 65536;
501
+ v = t12 + c + 65535;
502
+ c = Math.floor(v / 65536);
503
+ t12 = v - c * 65536;
504
+ v = t13 + c + 65535;
505
+ c = Math.floor(v / 65536);
506
+ t13 = v - c * 65536;
507
+ v = t14 + c + 65535;
508
+ c = Math.floor(v / 65536);
509
+ t14 = v - c * 65536;
510
+ v = t15 + c + 65535;
511
+ c = Math.floor(v / 65536);
512
+ t15 = v - c * 65536;
513
+ t0 += c - 1 + 37 * (c - 1);
514
+ o[0] = t0;
515
+ o[1] = t1;
516
+ o[2] = t2;
517
+ o[3] = t3;
518
+ o[4] = t4;
519
+ o[5] = t5;
520
+ o[6] = t6;
521
+ o[7] = t7;
522
+ o[8] = t8;
523
+ o[9] = t9;
524
+ o[10] = t10;
525
+ o[11] = t11;
526
+ o[12] = t12;
527
+ o[13] = t13;
528
+ o[14] = t14;
529
+ o[15] = t15;
530
+ }
531
+ function S(o, a) {
532
+ M(o, a, a);
533
+ }
534
+ function inv25519(o, i) {
535
+ const c = gf();
536
+ for (let a = 0; a < 16; a++)
537
+ c[a] = i[a];
538
+ for (let a = 253; a >= 0; a--) {
539
+ S(c, c);
540
+ if (a !== 2 && a !== 4)
541
+ M(c, c, i);
542
+ }
543
+ for (let a = 0; a < 16; a++)
544
+ o[a] = c[a];
545
+ }
546
+ export function crypto_scalarmult(q, n, p) {
547
+ const z = new Uint8Array(32);
548
+ const x = new Float64Array(80);
549
+ const a = gf();
550
+ const b = gf();
551
+ const c = gf();
552
+ const d = gf();
553
+ const e = gf();
554
+ const f = gf();
555
+ for (let i = 0; i < 31; i++)
556
+ z[i] = n[i];
557
+ z[31] = (n[31] & 127) | 64;
558
+ z[0] &= 248;
559
+ unpack25519(x, p);
560
+ for (let i = 0; i < 16; i++) {
561
+ b[i] = x[i];
562
+ d[i] = a[i] = c[i] = 0;
563
+ }
564
+ a[0] = d[0] = 1;
565
+ for (let i = 254; i >= 0; --i) {
566
+ const r = (z[i >>> 3] >>> (i & 7)) & 1;
567
+ sel25519(a, b, r);
568
+ sel25519(c, d, r);
569
+ A(e, a, c);
570
+ Z(a, a, c);
571
+ A(c, b, d);
572
+ Z(b, b, d);
573
+ S(d, e);
574
+ S(f, a);
575
+ M(a, c, a);
576
+ M(c, b, e);
577
+ A(e, a, c);
578
+ Z(a, a, c);
579
+ S(b, a);
580
+ Z(c, d, f);
581
+ M(a, c, _121665);
582
+ A(a, a, d);
583
+ M(c, c, a);
584
+ M(a, d, f);
585
+ M(d, b, x);
586
+ S(b, e);
587
+ sel25519(a, b, r);
588
+ sel25519(c, d, r);
589
+ }
590
+ for (let i = 0; i < 16; i++) {
591
+ x[i + 16] = a[i];
592
+ x[i + 32] = c[i];
593
+ x[i + 48] = b[i];
594
+ x[i + 64] = d[i];
595
+ }
596
+ const x32 = x.subarray(32);
597
+ const x16 = x.subarray(16);
598
+ inv25519(x32, x32);
599
+ M(x16, x16, x32);
600
+ pack25519(q, x16);
601
+ }
602
+ export function crypto_scalarmult_base(q, n) {
603
+ crypto_scalarmult(q, n, _9);
604
+ }
605
+ /* High-level API */
606
+ export function scalarMult(n, p) {
607
+ if (n.length !== crypto_scalarmult_SCALARBYTES)
608
+ throw new Error('bad n size');
609
+ if (p.length !== crypto_scalarmult_BYTES)
610
+ throw new Error('bad p size');
611
+ const q = new Uint8Array(crypto_scalarmult_BYTES);
612
+ crypto_scalarmult(q, n, p);
613
+ return q;
614
+ }
615
+ export function scalarMultBase(n) {
616
+ if (n.length !== crypto_scalarmult_SCALARBYTES)
617
+ throw new Error('bad n size');
618
+ const q = new Uint8Array(crypto_scalarmult_BYTES);
619
+ crypto_scalarmult_base(q, n);
620
+ return q;
621
+ }
622
+ scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
623
+ scalarMult.groupElementLength = crypto_scalarmult_BYTES;
624
+ //# sourceMappingURL=x25519.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x25519.js","sourceRoot":"","sources":["../../src/dh/x25519.ts"],"names":[],"mappings":"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,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAElB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACf,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEf,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,EAAE,IAAK,EAAE,GAAG,GAAG,CAAC;IAChB,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChB,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChB,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChB,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChB,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChB,iBAAiB;IAEjB,YAAY;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,EAAE,IAAI,CAAC,GAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;IAEvB,aAAa;IACb,CAAC,GAAG,CAAC,CAAC;IACN,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC,GAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,CAA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"}
package/lib/dh.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export type DHKeyPair = {
2
+ public: Uint8Array;
3
+ secret: Uint8Array;
4
+ };
5
+ export interface DH {
6
+ readonly NAME: string;
7
+ readonly DHLEN: number;
8
+ generateKeypair(): DHKeyPair;
9
+ dh(kp: DHKeyPair, pk: Uint8Array): Uint8Array;
10
+ }
11
+ export declare const X25519: DH;
package/lib/dh.js ADDED
@@ -0,0 +1,17 @@
1
+ /// SPDX-License-Identifier: MIT
2
+ /// SPDX-FileCopyrightText: Copyright © 2023 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
3
+ import { randomBytes } from "./random";
4
+ import { scalarMult, scalarMultBase } from "./dh/x25519";
5
+ export const X25519 = {
6
+ NAME: "25519",
7
+ DHLEN: scalarMult.groupElementLength,
8
+ generateKeypair() {
9
+ const sk = randomBytes(scalarMult.scalarLength);
10
+ const pk = scalarMultBase(sk);
11
+ return { public: pk, secret: sk };
12
+ },
13
+ dh(kp, pk) {
14
+ return scalarMult(kp.secret, pk);
15
+ }
16
+ };
17
+ //# sourceMappingURL=dh.js.map
package/lib/dh.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dh.js","sourceRoot":"","sources":["../src/dh.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2FAA2F;AAE3F,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAYzD,MAAM,CAAC,MAAM,MAAM,GAAO;IACtB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,UAAU,CAAC,kBAAkB;IAEpC,eAAe;QACX,MAAM,EAAE,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAED,EAAE,CAAC,EAAa,EAAE,EAAc;QAC5B,OAAO,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;CACJ,CAAC"}