@nextera.one/axis-server-sdk 2.2.0 → 2.2.2

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 (53) hide show
  1. package/dist/axis-sensor-GBEI3Fab.d.mts +209 -0
  2. package/dist/axis-sensor-GBEI3Fab.d.ts +209 -0
  3. package/dist/cce/index.d.mts +162 -0
  4. package/dist/cce/index.d.ts +162 -0
  5. package/dist/cce/index.js +1502 -0
  6. package/dist/cce/index.js.map +1 -0
  7. package/dist/cce/index.mjs +1442 -0
  8. package/dist/cce/index.mjs.map +1 -0
  9. package/dist/cce-pipeline-B-zUBHo3.d.mts +294 -0
  10. package/dist/cce-pipeline-DbGBSsCG.d.ts +294 -0
  11. package/dist/core/index.d.mts +23 -2
  12. package/dist/core/index.d.ts +23 -2
  13. package/dist/idel/index.d.mts +24 -0
  14. package/dist/idel/index.d.ts +24 -0
  15. package/dist/idel/index.js +306 -0
  16. package/dist/idel/index.js.map +1 -0
  17. package/dist/idel/index.mjs +279 -0
  18. package/dist/idel/index.mjs.map +1 -0
  19. package/dist/idel.types-DuUAcOnQ.d.mts +83 -0
  20. package/dist/idel.types-DuUAcOnQ.d.ts +83 -0
  21. package/dist/index-B2G6cbRL.d.mts +824 -0
  22. package/dist/index-DbSxdR0f.d.ts +824 -0
  23. package/dist/index-_S4fmVUJ.d.mts +501 -0
  24. package/dist/index-l3Hhirqb.d.ts +501 -0
  25. package/dist/index.d.mts +91 -3501
  26. package/dist/index.d.ts +91 -3501
  27. package/dist/index.js +5052 -4618
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.mjs +5018 -4597
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/needle/index.d.mts +4 -0
  32. package/dist/needle/index.d.ts +4 -0
  33. package/dist/needle/index.js +3499 -0
  34. package/dist/needle/index.js.map +1 -0
  35. package/dist/needle/index.mjs +3528 -0
  36. package/dist/needle/index.mjs.map +1 -0
  37. package/dist/sensors/index.d.mts +5 -0
  38. package/dist/sensors/index.d.ts +5 -0
  39. package/dist/sensors/index.js +12860 -0
  40. package/dist/sensors/index.js.map +1 -0
  41. package/dist/sensors/index.mjs +12928 -0
  42. package/dist/sensors/index.mjs.map +1 -0
  43. package/dist/timeline/index.d.mts +54 -0
  44. package/dist/timeline/index.d.ts +54 -0
  45. package/dist/timeline/index.js +389 -0
  46. package/dist/timeline/index.js.map +1 -0
  47. package/dist/timeline/index.mjs +362 -0
  48. package/dist/timeline/index.mjs.map +1 -0
  49. package/dist/timeline.types-Cn0aqbUj.d.mts +125 -0
  50. package/dist/timeline.types-Cn0aqbUj.d.ts +125 -0
  51. package/package.json +28 -10
  52. package/dist/index-VxXqZPuH.d.mts +0 -51
  53. package/dist/index-VxXqZPuH.d.ts +0 -51
@@ -0,0 +1,3528 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __commonJS = (cb, mod) => function __require2() {
14
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
+ mod
31
+ ));
32
+
33
+ // node_modules/tweetnacl/nacl-fast.js
34
+ var require_nacl_fast = __commonJS({
35
+ "node_modules/tweetnacl/nacl-fast.js"(exports, module) {
36
+ (function(nacl) {
37
+ "use strict";
38
+ var gf = function(init) {
39
+ var i, r = new Float64Array(16);
40
+ if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
41
+ return r;
42
+ };
43
+ var randombytes = function() {
44
+ throw new Error("no PRNG");
45
+ };
46
+ var _0 = new Uint8Array(16);
47
+ var _9 = new Uint8Array(32);
48
+ _9[0] = 9;
49
+ var gf0 = gf(), gf1 = gf([1]), _121665 = gf([56129, 1]), D = gf([30883, 4953, 19914, 30187, 55467, 16705, 2637, 112, 59544, 30585, 16505, 36039, 65139, 11119, 27886, 20995]), D2 = gf([61785, 9906, 39828, 60374, 45398, 33411, 5274, 224, 53552, 61171, 33010, 6542, 64743, 22239, 55772, 9222]), X = gf([54554, 36645, 11616, 51542, 42930, 38181, 51040, 26924, 56412, 64982, 57905, 49316, 21502, 52590, 14035, 8553]), Y = gf([26200, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214]), I = gf([41136, 18958, 6951, 50414, 58488, 44335, 6150, 12099, 55207, 15867, 153, 11085, 57099, 20417, 9344, 11139]);
50
+ function ts64(x, i, h, l) {
51
+ x[i] = h >> 24 & 255;
52
+ x[i + 1] = h >> 16 & 255;
53
+ x[i + 2] = h >> 8 & 255;
54
+ x[i + 3] = h & 255;
55
+ x[i + 4] = l >> 24 & 255;
56
+ x[i + 5] = l >> 16 & 255;
57
+ x[i + 6] = l >> 8 & 255;
58
+ x[i + 7] = l & 255;
59
+ }
60
+ function vn(x, xi, y, yi, n) {
61
+ var i, d = 0;
62
+ for (i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i];
63
+ return (1 & d - 1 >>> 8) - 1;
64
+ }
65
+ function crypto_verify_16(x, xi, y, yi) {
66
+ return vn(x, xi, y, yi, 16);
67
+ }
68
+ function crypto_verify_32(x, xi, y, yi) {
69
+ return vn(x, xi, y, yi, 32);
70
+ }
71
+ function core_salsa20(o, p, k, c) {
72
+ var j0 = c[0] & 255 | (c[1] & 255) << 8 | (c[2] & 255) << 16 | (c[3] & 255) << 24, j1 = k[0] & 255 | (k[1] & 255) << 8 | (k[2] & 255) << 16 | (k[3] & 255) << 24, j2 = k[4] & 255 | (k[5] & 255) << 8 | (k[6] & 255) << 16 | (k[7] & 255) << 24, j3 = k[8] & 255 | (k[9] & 255) << 8 | (k[10] & 255) << 16 | (k[11] & 255) << 24, j4 = k[12] & 255 | (k[13] & 255) << 8 | (k[14] & 255) << 16 | (k[15] & 255) << 24, j5 = c[4] & 255 | (c[5] & 255) << 8 | (c[6] & 255) << 16 | (c[7] & 255) << 24, j6 = p[0] & 255 | (p[1] & 255) << 8 | (p[2] & 255) << 16 | (p[3] & 255) << 24, j7 = p[4] & 255 | (p[5] & 255) << 8 | (p[6] & 255) << 16 | (p[7] & 255) << 24, j8 = p[8] & 255 | (p[9] & 255) << 8 | (p[10] & 255) << 16 | (p[11] & 255) << 24, j9 = p[12] & 255 | (p[13] & 255) << 8 | (p[14] & 255) << 16 | (p[15] & 255) << 24, j10 = c[8] & 255 | (c[9] & 255) << 8 | (c[10] & 255) << 16 | (c[11] & 255) << 24, j11 = k[16] & 255 | (k[17] & 255) << 8 | (k[18] & 255) << 16 | (k[19] & 255) << 24, j12 = k[20] & 255 | (k[21] & 255) << 8 | (k[22] & 255) << 16 | (k[23] & 255) << 24, j13 = k[24] & 255 | (k[25] & 255) << 8 | (k[26] & 255) << 16 | (k[27] & 255) << 24, j14 = k[28] & 255 | (k[29] & 255) << 8 | (k[30] & 255) << 16 | (k[31] & 255) << 24, j15 = c[12] & 255 | (c[13] & 255) << 8 | (c[14] & 255) << 16 | (c[15] & 255) << 24;
73
+ var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u;
74
+ for (var i = 0; i < 20; i += 2) {
75
+ u = x0 + x12 | 0;
76
+ x4 ^= u << 7 | u >>> 32 - 7;
77
+ u = x4 + x0 | 0;
78
+ x8 ^= u << 9 | u >>> 32 - 9;
79
+ u = x8 + x4 | 0;
80
+ x12 ^= u << 13 | u >>> 32 - 13;
81
+ u = x12 + x8 | 0;
82
+ x0 ^= u << 18 | u >>> 32 - 18;
83
+ u = x5 + x1 | 0;
84
+ x9 ^= u << 7 | u >>> 32 - 7;
85
+ u = x9 + x5 | 0;
86
+ x13 ^= u << 9 | u >>> 32 - 9;
87
+ u = x13 + x9 | 0;
88
+ x1 ^= u << 13 | u >>> 32 - 13;
89
+ u = x1 + x13 | 0;
90
+ x5 ^= u << 18 | u >>> 32 - 18;
91
+ u = x10 + x6 | 0;
92
+ x14 ^= u << 7 | u >>> 32 - 7;
93
+ u = x14 + x10 | 0;
94
+ x2 ^= u << 9 | u >>> 32 - 9;
95
+ u = x2 + x14 | 0;
96
+ x6 ^= u << 13 | u >>> 32 - 13;
97
+ u = x6 + x2 | 0;
98
+ x10 ^= u << 18 | u >>> 32 - 18;
99
+ u = x15 + x11 | 0;
100
+ x3 ^= u << 7 | u >>> 32 - 7;
101
+ u = x3 + x15 | 0;
102
+ x7 ^= u << 9 | u >>> 32 - 9;
103
+ u = x7 + x3 | 0;
104
+ x11 ^= u << 13 | u >>> 32 - 13;
105
+ u = x11 + x7 | 0;
106
+ x15 ^= u << 18 | u >>> 32 - 18;
107
+ u = x0 + x3 | 0;
108
+ x1 ^= u << 7 | u >>> 32 - 7;
109
+ u = x1 + x0 | 0;
110
+ x2 ^= u << 9 | u >>> 32 - 9;
111
+ u = x2 + x1 | 0;
112
+ x3 ^= u << 13 | u >>> 32 - 13;
113
+ u = x3 + x2 | 0;
114
+ x0 ^= u << 18 | u >>> 32 - 18;
115
+ u = x5 + x4 | 0;
116
+ x6 ^= u << 7 | u >>> 32 - 7;
117
+ u = x6 + x5 | 0;
118
+ x7 ^= u << 9 | u >>> 32 - 9;
119
+ u = x7 + x6 | 0;
120
+ x4 ^= u << 13 | u >>> 32 - 13;
121
+ u = x4 + x7 | 0;
122
+ x5 ^= u << 18 | u >>> 32 - 18;
123
+ u = x10 + x9 | 0;
124
+ x11 ^= u << 7 | u >>> 32 - 7;
125
+ u = x11 + x10 | 0;
126
+ x8 ^= u << 9 | u >>> 32 - 9;
127
+ u = x8 + x11 | 0;
128
+ x9 ^= u << 13 | u >>> 32 - 13;
129
+ u = x9 + x8 | 0;
130
+ x10 ^= u << 18 | u >>> 32 - 18;
131
+ u = x15 + x14 | 0;
132
+ x12 ^= u << 7 | u >>> 32 - 7;
133
+ u = x12 + x15 | 0;
134
+ x13 ^= u << 9 | u >>> 32 - 9;
135
+ u = x13 + x12 | 0;
136
+ x14 ^= u << 13 | u >>> 32 - 13;
137
+ u = x14 + x13 | 0;
138
+ x15 ^= u << 18 | u >>> 32 - 18;
139
+ }
140
+ x0 = x0 + j0 | 0;
141
+ x1 = x1 + j1 | 0;
142
+ x2 = x2 + j2 | 0;
143
+ x3 = x3 + j3 | 0;
144
+ x4 = x4 + j4 | 0;
145
+ x5 = x5 + j5 | 0;
146
+ x6 = x6 + j6 | 0;
147
+ x7 = x7 + j7 | 0;
148
+ x8 = x8 + j8 | 0;
149
+ x9 = x9 + j9 | 0;
150
+ x10 = x10 + j10 | 0;
151
+ x11 = x11 + j11 | 0;
152
+ x12 = x12 + j12 | 0;
153
+ x13 = x13 + j13 | 0;
154
+ x14 = x14 + j14 | 0;
155
+ x15 = x15 + j15 | 0;
156
+ o[0] = x0 >>> 0 & 255;
157
+ o[1] = x0 >>> 8 & 255;
158
+ o[2] = x0 >>> 16 & 255;
159
+ o[3] = x0 >>> 24 & 255;
160
+ o[4] = x1 >>> 0 & 255;
161
+ o[5] = x1 >>> 8 & 255;
162
+ o[6] = x1 >>> 16 & 255;
163
+ o[7] = x1 >>> 24 & 255;
164
+ o[8] = x2 >>> 0 & 255;
165
+ o[9] = x2 >>> 8 & 255;
166
+ o[10] = x2 >>> 16 & 255;
167
+ o[11] = x2 >>> 24 & 255;
168
+ o[12] = x3 >>> 0 & 255;
169
+ o[13] = x3 >>> 8 & 255;
170
+ o[14] = x3 >>> 16 & 255;
171
+ o[15] = x3 >>> 24 & 255;
172
+ o[16] = x4 >>> 0 & 255;
173
+ o[17] = x4 >>> 8 & 255;
174
+ o[18] = x4 >>> 16 & 255;
175
+ o[19] = x4 >>> 24 & 255;
176
+ o[20] = x5 >>> 0 & 255;
177
+ o[21] = x5 >>> 8 & 255;
178
+ o[22] = x5 >>> 16 & 255;
179
+ o[23] = x5 >>> 24 & 255;
180
+ o[24] = x6 >>> 0 & 255;
181
+ o[25] = x6 >>> 8 & 255;
182
+ o[26] = x6 >>> 16 & 255;
183
+ o[27] = x6 >>> 24 & 255;
184
+ o[28] = x7 >>> 0 & 255;
185
+ o[29] = x7 >>> 8 & 255;
186
+ o[30] = x7 >>> 16 & 255;
187
+ o[31] = x7 >>> 24 & 255;
188
+ o[32] = x8 >>> 0 & 255;
189
+ o[33] = x8 >>> 8 & 255;
190
+ o[34] = x8 >>> 16 & 255;
191
+ o[35] = x8 >>> 24 & 255;
192
+ o[36] = x9 >>> 0 & 255;
193
+ o[37] = x9 >>> 8 & 255;
194
+ o[38] = x9 >>> 16 & 255;
195
+ o[39] = x9 >>> 24 & 255;
196
+ o[40] = x10 >>> 0 & 255;
197
+ o[41] = x10 >>> 8 & 255;
198
+ o[42] = x10 >>> 16 & 255;
199
+ o[43] = x10 >>> 24 & 255;
200
+ o[44] = x11 >>> 0 & 255;
201
+ o[45] = x11 >>> 8 & 255;
202
+ o[46] = x11 >>> 16 & 255;
203
+ o[47] = x11 >>> 24 & 255;
204
+ o[48] = x12 >>> 0 & 255;
205
+ o[49] = x12 >>> 8 & 255;
206
+ o[50] = x12 >>> 16 & 255;
207
+ o[51] = x12 >>> 24 & 255;
208
+ o[52] = x13 >>> 0 & 255;
209
+ o[53] = x13 >>> 8 & 255;
210
+ o[54] = x13 >>> 16 & 255;
211
+ o[55] = x13 >>> 24 & 255;
212
+ o[56] = x14 >>> 0 & 255;
213
+ o[57] = x14 >>> 8 & 255;
214
+ o[58] = x14 >>> 16 & 255;
215
+ o[59] = x14 >>> 24 & 255;
216
+ o[60] = x15 >>> 0 & 255;
217
+ o[61] = x15 >>> 8 & 255;
218
+ o[62] = x15 >>> 16 & 255;
219
+ o[63] = x15 >>> 24 & 255;
220
+ }
221
+ function core_hsalsa20(o, p, k, c) {
222
+ var j0 = c[0] & 255 | (c[1] & 255) << 8 | (c[2] & 255) << 16 | (c[3] & 255) << 24, j1 = k[0] & 255 | (k[1] & 255) << 8 | (k[2] & 255) << 16 | (k[3] & 255) << 24, j2 = k[4] & 255 | (k[5] & 255) << 8 | (k[6] & 255) << 16 | (k[7] & 255) << 24, j3 = k[8] & 255 | (k[9] & 255) << 8 | (k[10] & 255) << 16 | (k[11] & 255) << 24, j4 = k[12] & 255 | (k[13] & 255) << 8 | (k[14] & 255) << 16 | (k[15] & 255) << 24, j5 = c[4] & 255 | (c[5] & 255) << 8 | (c[6] & 255) << 16 | (c[7] & 255) << 24, j6 = p[0] & 255 | (p[1] & 255) << 8 | (p[2] & 255) << 16 | (p[3] & 255) << 24, j7 = p[4] & 255 | (p[5] & 255) << 8 | (p[6] & 255) << 16 | (p[7] & 255) << 24, j8 = p[8] & 255 | (p[9] & 255) << 8 | (p[10] & 255) << 16 | (p[11] & 255) << 24, j9 = p[12] & 255 | (p[13] & 255) << 8 | (p[14] & 255) << 16 | (p[15] & 255) << 24, j10 = c[8] & 255 | (c[9] & 255) << 8 | (c[10] & 255) << 16 | (c[11] & 255) << 24, j11 = k[16] & 255 | (k[17] & 255) << 8 | (k[18] & 255) << 16 | (k[19] & 255) << 24, j12 = k[20] & 255 | (k[21] & 255) << 8 | (k[22] & 255) << 16 | (k[23] & 255) << 24, j13 = k[24] & 255 | (k[25] & 255) << 8 | (k[26] & 255) << 16 | (k[27] & 255) << 24, j14 = k[28] & 255 | (k[29] & 255) << 8 | (k[30] & 255) << 16 | (k[31] & 255) << 24, j15 = c[12] & 255 | (c[13] & 255) << 8 | (c[14] & 255) << 16 | (c[15] & 255) << 24;
223
+ var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15, u;
224
+ for (var i = 0; i < 20; i += 2) {
225
+ u = x0 + x12 | 0;
226
+ x4 ^= u << 7 | u >>> 32 - 7;
227
+ u = x4 + x0 | 0;
228
+ x8 ^= u << 9 | u >>> 32 - 9;
229
+ u = x8 + x4 | 0;
230
+ x12 ^= u << 13 | u >>> 32 - 13;
231
+ u = x12 + x8 | 0;
232
+ x0 ^= u << 18 | u >>> 32 - 18;
233
+ u = x5 + x1 | 0;
234
+ x9 ^= u << 7 | u >>> 32 - 7;
235
+ u = x9 + x5 | 0;
236
+ x13 ^= u << 9 | u >>> 32 - 9;
237
+ u = x13 + x9 | 0;
238
+ x1 ^= u << 13 | u >>> 32 - 13;
239
+ u = x1 + x13 | 0;
240
+ x5 ^= u << 18 | u >>> 32 - 18;
241
+ u = x10 + x6 | 0;
242
+ x14 ^= u << 7 | u >>> 32 - 7;
243
+ u = x14 + x10 | 0;
244
+ x2 ^= u << 9 | u >>> 32 - 9;
245
+ u = x2 + x14 | 0;
246
+ x6 ^= u << 13 | u >>> 32 - 13;
247
+ u = x6 + x2 | 0;
248
+ x10 ^= u << 18 | u >>> 32 - 18;
249
+ u = x15 + x11 | 0;
250
+ x3 ^= u << 7 | u >>> 32 - 7;
251
+ u = x3 + x15 | 0;
252
+ x7 ^= u << 9 | u >>> 32 - 9;
253
+ u = x7 + x3 | 0;
254
+ x11 ^= u << 13 | u >>> 32 - 13;
255
+ u = x11 + x7 | 0;
256
+ x15 ^= u << 18 | u >>> 32 - 18;
257
+ u = x0 + x3 | 0;
258
+ x1 ^= u << 7 | u >>> 32 - 7;
259
+ u = x1 + x0 | 0;
260
+ x2 ^= u << 9 | u >>> 32 - 9;
261
+ u = x2 + x1 | 0;
262
+ x3 ^= u << 13 | u >>> 32 - 13;
263
+ u = x3 + x2 | 0;
264
+ x0 ^= u << 18 | u >>> 32 - 18;
265
+ u = x5 + x4 | 0;
266
+ x6 ^= u << 7 | u >>> 32 - 7;
267
+ u = x6 + x5 | 0;
268
+ x7 ^= u << 9 | u >>> 32 - 9;
269
+ u = x7 + x6 | 0;
270
+ x4 ^= u << 13 | u >>> 32 - 13;
271
+ u = x4 + x7 | 0;
272
+ x5 ^= u << 18 | u >>> 32 - 18;
273
+ u = x10 + x9 | 0;
274
+ x11 ^= u << 7 | u >>> 32 - 7;
275
+ u = x11 + x10 | 0;
276
+ x8 ^= u << 9 | u >>> 32 - 9;
277
+ u = x8 + x11 | 0;
278
+ x9 ^= u << 13 | u >>> 32 - 13;
279
+ u = x9 + x8 | 0;
280
+ x10 ^= u << 18 | u >>> 32 - 18;
281
+ u = x15 + x14 | 0;
282
+ x12 ^= u << 7 | u >>> 32 - 7;
283
+ u = x12 + x15 | 0;
284
+ x13 ^= u << 9 | u >>> 32 - 9;
285
+ u = x13 + x12 | 0;
286
+ x14 ^= u << 13 | u >>> 32 - 13;
287
+ u = x14 + x13 | 0;
288
+ x15 ^= u << 18 | u >>> 32 - 18;
289
+ }
290
+ o[0] = x0 >>> 0 & 255;
291
+ o[1] = x0 >>> 8 & 255;
292
+ o[2] = x0 >>> 16 & 255;
293
+ o[3] = x0 >>> 24 & 255;
294
+ o[4] = x5 >>> 0 & 255;
295
+ o[5] = x5 >>> 8 & 255;
296
+ o[6] = x5 >>> 16 & 255;
297
+ o[7] = x5 >>> 24 & 255;
298
+ o[8] = x10 >>> 0 & 255;
299
+ o[9] = x10 >>> 8 & 255;
300
+ o[10] = x10 >>> 16 & 255;
301
+ o[11] = x10 >>> 24 & 255;
302
+ o[12] = x15 >>> 0 & 255;
303
+ o[13] = x15 >>> 8 & 255;
304
+ o[14] = x15 >>> 16 & 255;
305
+ o[15] = x15 >>> 24 & 255;
306
+ o[16] = x6 >>> 0 & 255;
307
+ o[17] = x6 >>> 8 & 255;
308
+ o[18] = x6 >>> 16 & 255;
309
+ o[19] = x6 >>> 24 & 255;
310
+ o[20] = x7 >>> 0 & 255;
311
+ o[21] = x7 >>> 8 & 255;
312
+ o[22] = x7 >>> 16 & 255;
313
+ o[23] = x7 >>> 24 & 255;
314
+ o[24] = x8 >>> 0 & 255;
315
+ o[25] = x8 >>> 8 & 255;
316
+ o[26] = x8 >>> 16 & 255;
317
+ o[27] = x8 >>> 24 & 255;
318
+ o[28] = x9 >>> 0 & 255;
319
+ o[29] = x9 >>> 8 & 255;
320
+ o[30] = x9 >>> 16 & 255;
321
+ o[31] = x9 >>> 24 & 255;
322
+ }
323
+ function crypto_core_salsa20(out, inp, k, c) {
324
+ core_salsa20(out, inp, k, c);
325
+ }
326
+ function crypto_core_hsalsa20(out, inp, k, c) {
327
+ core_hsalsa20(out, inp, k, c);
328
+ }
329
+ var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
330
+ function crypto_stream_salsa20_xor(c, cpos, m, mpos, b, n, k) {
331
+ var z = new Uint8Array(16), x = new Uint8Array(64);
332
+ var u, i;
333
+ for (i = 0; i < 16; i++) z[i] = 0;
334
+ for (i = 0; i < 8; i++) z[i] = n[i];
335
+ while (b >= 64) {
336
+ crypto_core_salsa20(x, z, k, sigma);
337
+ for (i = 0; i < 64; i++) c[cpos + i] = m[mpos + i] ^ x[i];
338
+ u = 1;
339
+ for (i = 8; i < 16; i++) {
340
+ u = u + (z[i] & 255) | 0;
341
+ z[i] = u & 255;
342
+ u >>>= 8;
343
+ }
344
+ b -= 64;
345
+ cpos += 64;
346
+ mpos += 64;
347
+ }
348
+ if (b > 0) {
349
+ crypto_core_salsa20(x, z, k, sigma);
350
+ for (i = 0; i < b; i++) c[cpos + i] = m[mpos + i] ^ x[i];
351
+ }
352
+ return 0;
353
+ }
354
+ function crypto_stream_salsa20(c, cpos, b, n, k) {
355
+ var z = new Uint8Array(16), x = new Uint8Array(64);
356
+ var u, i;
357
+ for (i = 0; i < 16; i++) z[i] = 0;
358
+ for (i = 0; i < 8; i++) z[i] = n[i];
359
+ while (b >= 64) {
360
+ crypto_core_salsa20(x, z, k, sigma);
361
+ for (i = 0; i < 64; i++) c[cpos + i] = x[i];
362
+ u = 1;
363
+ for (i = 8; i < 16; i++) {
364
+ u = u + (z[i] & 255) | 0;
365
+ z[i] = u & 255;
366
+ u >>>= 8;
367
+ }
368
+ b -= 64;
369
+ cpos += 64;
370
+ }
371
+ if (b > 0) {
372
+ crypto_core_salsa20(x, z, k, sigma);
373
+ for (i = 0; i < b; i++) c[cpos + i] = x[i];
374
+ }
375
+ return 0;
376
+ }
377
+ function crypto_stream(c, cpos, d, n, k) {
378
+ var s = new Uint8Array(32);
379
+ crypto_core_hsalsa20(s, n, k, sigma);
380
+ var sn = new Uint8Array(8);
381
+ for (var i = 0; i < 8; i++) sn[i] = n[i + 16];
382
+ return crypto_stream_salsa20(c, cpos, d, sn, s);
383
+ }
384
+ function crypto_stream_xor(c, cpos, m, mpos, d, n, k) {
385
+ var s = new Uint8Array(32);
386
+ crypto_core_hsalsa20(s, n, k, sigma);
387
+ var sn = new Uint8Array(8);
388
+ for (var i = 0; i < 8; i++) sn[i] = n[i + 16];
389
+ return crypto_stream_salsa20_xor(c, cpos, m, mpos, d, sn, s);
390
+ }
391
+ var poly1305 = function(key) {
392
+ this.buffer = new Uint8Array(16);
393
+ this.r = new Uint16Array(10);
394
+ this.h = new Uint16Array(10);
395
+ this.pad = new Uint16Array(8);
396
+ this.leftover = 0;
397
+ this.fin = 0;
398
+ var t0, t1, t2, t3, t4, t5, t6, t7;
399
+ t0 = key[0] & 255 | (key[1] & 255) << 8;
400
+ this.r[0] = t0 & 8191;
401
+ t1 = key[2] & 255 | (key[3] & 255) << 8;
402
+ this.r[1] = (t0 >>> 13 | t1 << 3) & 8191;
403
+ t2 = key[4] & 255 | (key[5] & 255) << 8;
404
+ this.r[2] = (t1 >>> 10 | t2 << 6) & 7939;
405
+ t3 = key[6] & 255 | (key[7] & 255) << 8;
406
+ this.r[3] = (t2 >>> 7 | t3 << 9) & 8191;
407
+ t4 = key[8] & 255 | (key[9] & 255) << 8;
408
+ this.r[4] = (t3 >>> 4 | t4 << 12) & 255;
409
+ this.r[5] = t4 >>> 1 & 8190;
410
+ t5 = key[10] & 255 | (key[11] & 255) << 8;
411
+ this.r[6] = (t4 >>> 14 | t5 << 2) & 8191;
412
+ t6 = key[12] & 255 | (key[13] & 255) << 8;
413
+ this.r[7] = (t5 >>> 11 | t6 << 5) & 8065;
414
+ t7 = key[14] & 255 | (key[15] & 255) << 8;
415
+ this.r[8] = (t6 >>> 8 | t7 << 8) & 8191;
416
+ this.r[9] = t7 >>> 5 & 127;
417
+ this.pad[0] = key[16] & 255 | (key[17] & 255) << 8;
418
+ this.pad[1] = key[18] & 255 | (key[19] & 255) << 8;
419
+ this.pad[2] = key[20] & 255 | (key[21] & 255) << 8;
420
+ this.pad[3] = key[22] & 255 | (key[23] & 255) << 8;
421
+ this.pad[4] = key[24] & 255 | (key[25] & 255) << 8;
422
+ this.pad[5] = key[26] & 255 | (key[27] & 255) << 8;
423
+ this.pad[6] = key[28] & 255 | (key[29] & 255) << 8;
424
+ this.pad[7] = key[30] & 255 | (key[31] & 255) << 8;
425
+ };
426
+ poly1305.prototype.blocks = function(m, mpos, bytes) {
427
+ var hibit = this.fin ? 0 : 1 << 11;
428
+ var t0, t1, t2, t3, t4, t5, t6, t7, c;
429
+ var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
430
+ var h0 = this.h[0], h1 = this.h[1], h2 = this.h[2], h3 = this.h[3], h4 = this.h[4], h5 = this.h[5], h6 = this.h[6], h7 = this.h[7], h8 = this.h[8], h9 = this.h[9];
431
+ var r0 = this.r[0], r1 = this.r[1], r2 = this.r[2], r3 = this.r[3], r4 = this.r[4], r5 = this.r[5], r6 = this.r[6], r7 = this.r[7], r8 = this.r[8], r9 = this.r[9];
432
+ while (bytes >= 16) {
433
+ t0 = m[mpos + 0] & 255 | (m[mpos + 1] & 255) << 8;
434
+ h0 += t0 & 8191;
435
+ t1 = m[mpos + 2] & 255 | (m[mpos + 3] & 255) << 8;
436
+ h1 += (t0 >>> 13 | t1 << 3) & 8191;
437
+ t2 = m[mpos + 4] & 255 | (m[mpos + 5] & 255) << 8;
438
+ h2 += (t1 >>> 10 | t2 << 6) & 8191;
439
+ t3 = m[mpos + 6] & 255 | (m[mpos + 7] & 255) << 8;
440
+ h3 += (t2 >>> 7 | t3 << 9) & 8191;
441
+ t4 = m[mpos + 8] & 255 | (m[mpos + 9] & 255) << 8;
442
+ h4 += (t3 >>> 4 | t4 << 12) & 8191;
443
+ h5 += t4 >>> 1 & 8191;
444
+ t5 = m[mpos + 10] & 255 | (m[mpos + 11] & 255) << 8;
445
+ h6 += (t4 >>> 14 | t5 << 2) & 8191;
446
+ t6 = m[mpos + 12] & 255 | (m[mpos + 13] & 255) << 8;
447
+ h7 += (t5 >>> 11 | t6 << 5) & 8191;
448
+ t7 = m[mpos + 14] & 255 | (m[mpos + 15] & 255) << 8;
449
+ h8 += (t6 >>> 8 | t7 << 8) & 8191;
450
+ h9 += t7 >>> 5 | hibit;
451
+ c = 0;
452
+ d0 = c;
453
+ d0 += h0 * r0;
454
+ d0 += h1 * (5 * r9);
455
+ d0 += h2 * (5 * r8);
456
+ d0 += h3 * (5 * r7);
457
+ d0 += h4 * (5 * r6);
458
+ c = d0 >>> 13;
459
+ d0 &= 8191;
460
+ d0 += h5 * (5 * r5);
461
+ d0 += h6 * (5 * r4);
462
+ d0 += h7 * (5 * r3);
463
+ d0 += h8 * (5 * r2);
464
+ d0 += h9 * (5 * r1);
465
+ c += d0 >>> 13;
466
+ d0 &= 8191;
467
+ d1 = c;
468
+ d1 += h0 * r1;
469
+ d1 += h1 * r0;
470
+ d1 += h2 * (5 * r9);
471
+ d1 += h3 * (5 * r8);
472
+ d1 += h4 * (5 * r7);
473
+ c = d1 >>> 13;
474
+ d1 &= 8191;
475
+ d1 += h5 * (5 * r6);
476
+ d1 += h6 * (5 * r5);
477
+ d1 += h7 * (5 * r4);
478
+ d1 += h8 * (5 * r3);
479
+ d1 += h9 * (5 * r2);
480
+ c += d1 >>> 13;
481
+ d1 &= 8191;
482
+ d2 = c;
483
+ d2 += h0 * r2;
484
+ d2 += h1 * r1;
485
+ d2 += h2 * r0;
486
+ d2 += h3 * (5 * r9);
487
+ d2 += h4 * (5 * r8);
488
+ c = d2 >>> 13;
489
+ d2 &= 8191;
490
+ d2 += h5 * (5 * r7);
491
+ d2 += h6 * (5 * r6);
492
+ d2 += h7 * (5 * r5);
493
+ d2 += h8 * (5 * r4);
494
+ d2 += h9 * (5 * r3);
495
+ c += d2 >>> 13;
496
+ d2 &= 8191;
497
+ d3 = c;
498
+ d3 += h0 * r3;
499
+ d3 += h1 * r2;
500
+ d3 += h2 * r1;
501
+ d3 += h3 * r0;
502
+ d3 += h4 * (5 * r9);
503
+ c = d3 >>> 13;
504
+ d3 &= 8191;
505
+ d3 += h5 * (5 * r8);
506
+ d3 += h6 * (5 * r7);
507
+ d3 += h7 * (5 * r6);
508
+ d3 += h8 * (5 * r5);
509
+ d3 += h9 * (5 * r4);
510
+ c += d3 >>> 13;
511
+ d3 &= 8191;
512
+ d4 = c;
513
+ d4 += h0 * r4;
514
+ d4 += h1 * r3;
515
+ d4 += h2 * r2;
516
+ d4 += h3 * r1;
517
+ d4 += h4 * r0;
518
+ c = d4 >>> 13;
519
+ d4 &= 8191;
520
+ d4 += h5 * (5 * r9);
521
+ d4 += h6 * (5 * r8);
522
+ d4 += h7 * (5 * r7);
523
+ d4 += h8 * (5 * r6);
524
+ d4 += h9 * (5 * r5);
525
+ c += d4 >>> 13;
526
+ d4 &= 8191;
527
+ d5 = c;
528
+ d5 += h0 * r5;
529
+ d5 += h1 * r4;
530
+ d5 += h2 * r3;
531
+ d5 += h3 * r2;
532
+ d5 += h4 * r1;
533
+ c = d5 >>> 13;
534
+ d5 &= 8191;
535
+ d5 += h5 * r0;
536
+ d5 += h6 * (5 * r9);
537
+ d5 += h7 * (5 * r8);
538
+ d5 += h8 * (5 * r7);
539
+ d5 += h9 * (5 * r6);
540
+ c += d5 >>> 13;
541
+ d5 &= 8191;
542
+ d6 = c;
543
+ d6 += h0 * r6;
544
+ d6 += h1 * r5;
545
+ d6 += h2 * r4;
546
+ d6 += h3 * r3;
547
+ d6 += h4 * r2;
548
+ c = d6 >>> 13;
549
+ d6 &= 8191;
550
+ d6 += h5 * r1;
551
+ d6 += h6 * r0;
552
+ d6 += h7 * (5 * r9);
553
+ d6 += h8 * (5 * r8);
554
+ d6 += h9 * (5 * r7);
555
+ c += d6 >>> 13;
556
+ d6 &= 8191;
557
+ d7 = c;
558
+ d7 += h0 * r7;
559
+ d7 += h1 * r6;
560
+ d7 += h2 * r5;
561
+ d7 += h3 * r4;
562
+ d7 += h4 * r3;
563
+ c = d7 >>> 13;
564
+ d7 &= 8191;
565
+ d7 += h5 * r2;
566
+ d7 += h6 * r1;
567
+ d7 += h7 * r0;
568
+ d7 += h8 * (5 * r9);
569
+ d7 += h9 * (5 * r8);
570
+ c += d7 >>> 13;
571
+ d7 &= 8191;
572
+ d8 = c;
573
+ d8 += h0 * r8;
574
+ d8 += h1 * r7;
575
+ d8 += h2 * r6;
576
+ d8 += h3 * r5;
577
+ d8 += h4 * r4;
578
+ c = d8 >>> 13;
579
+ d8 &= 8191;
580
+ d8 += h5 * r3;
581
+ d8 += h6 * r2;
582
+ d8 += h7 * r1;
583
+ d8 += h8 * r0;
584
+ d8 += h9 * (5 * r9);
585
+ c += d8 >>> 13;
586
+ d8 &= 8191;
587
+ d9 = c;
588
+ d9 += h0 * r9;
589
+ d9 += h1 * r8;
590
+ d9 += h2 * r7;
591
+ d9 += h3 * r6;
592
+ d9 += h4 * r5;
593
+ c = d9 >>> 13;
594
+ d9 &= 8191;
595
+ d9 += h5 * r4;
596
+ d9 += h6 * r3;
597
+ d9 += h7 * r2;
598
+ d9 += h8 * r1;
599
+ d9 += h9 * r0;
600
+ c += d9 >>> 13;
601
+ d9 &= 8191;
602
+ c = (c << 2) + c | 0;
603
+ c = c + d0 | 0;
604
+ d0 = c & 8191;
605
+ c = c >>> 13;
606
+ d1 += c;
607
+ h0 = d0;
608
+ h1 = d1;
609
+ h2 = d2;
610
+ h3 = d3;
611
+ h4 = d4;
612
+ h5 = d5;
613
+ h6 = d6;
614
+ h7 = d7;
615
+ h8 = d8;
616
+ h9 = d9;
617
+ mpos += 16;
618
+ bytes -= 16;
619
+ }
620
+ this.h[0] = h0;
621
+ this.h[1] = h1;
622
+ this.h[2] = h2;
623
+ this.h[3] = h3;
624
+ this.h[4] = h4;
625
+ this.h[5] = h5;
626
+ this.h[6] = h6;
627
+ this.h[7] = h7;
628
+ this.h[8] = h8;
629
+ this.h[9] = h9;
630
+ };
631
+ poly1305.prototype.finish = function(mac, macpos) {
632
+ var g = new Uint16Array(10);
633
+ var c, mask, f, i;
634
+ if (this.leftover) {
635
+ i = this.leftover;
636
+ this.buffer[i++] = 1;
637
+ for (; i < 16; i++) this.buffer[i] = 0;
638
+ this.fin = 1;
639
+ this.blocks(this.buffer, 0, 16);
640
+ }
641
+ c = this.h[1] >>> 13;
642
+ this.h[1] &= 8191;
643
+ for (i = 2; i < 10; i++) {
644
+ this.h[i] += c;
645
+ c = this.h[i] >>> 13;
646
+ this.h[i] &= 8191;
647
+ }
648
+ this.h[0] += c * 5;
649
+ c = this.h[0] >>> 13;
650
+ this.h[0] &= 8191;
651
+ this.h[1] += c;
652
+ c = this.h[1] >>> 13;
653
+ this.h[1] &= 8191;
654
+ this.h[2] += c;
655
+ g[0] = this.h[0] + 5;
656
+ c = g[0] >>> 13;
657
+ g[0] &= 8191;
658
+ for (i = 1; i < 10; i++) {
659
+ g[i] = this.h[i] + c;
660
+ c = g[i] >>> 13;
661
+ g[i] &= 8191;
662
+ }
663
+ g[9] -= 1 << 13;
664
+ mask = (c ^ 1) - 1;
665
+ for (i = 0; i < 10; i++) g[i] &= mask;
666
+ mask = ~mask;
667
+ for (i = 0; i < 10; i++) this.h[i] = this.h[i] & mask | g[i];
668
+ this.h[0] = (this.h[0] | this.h[1] << 13) & 65535;
669
+ this.h[1] = (this.h[1] >>> 3 | this.h[2] << 10) & 65535;
670
+ this.h[2] = (this.h[2] >>> 6 | this.h[3] << 7) & 65535;
671
+ this.h[3] = (this.h[3] >>> 9 | this.h[4] << 4) & 65535;
672
+ this.h[4] = (this.h[4] >>> 12 | this.h[5] << 1 | this.h[6] << 14) & 65535;
673
+ this.h[5] = (this.h[6] >>> 2 | this.h[7] << 11) & 65535;
674
+ this.h[6] = (this.h[7] >>> 5 | this.h[8] << 8) & 65535;
675
+ this.h[7] = (this.h[8] >>> 8 | this.h[9] << 5) & 65535;
676
+ f = this.h[0] + this.pad[0];
677
+ this.h[0] = f & 65535;
678
+ for (i = 1; i < 8; i++) {
679
+ f = (this.h[i] + this.pad[i] | 0) + (f >>> 16) | 0;
680
+ this.h[i] = f & 65535;
681
+ }
682
+ mac[macpos + 0] = this.h[0] >>> 0 & 255;
683
+ mac[macpos + 1] = this.h[0] >>> 8 & 255;
684
+ mac[macpos + 2] = this.h[1] >>> 0 & 255;
685
+ mac[macpos + 3] = this.h[1] >>> 8 & 255;
686
+ mac[macpos + 4] = this.h[2] >>> 0 & 255;
687
+ mac[macpos + 5] = this.h[2] >>> 8 & 255;
688
+ mac[macpos + 6] = this.h[3] >>> 0 & 255;
689
+ mac[macpos + 7] = this.h[3] >>> 8 & 255;
690
+ mac[macpos + 8] = this.h[4] >>> 0 & 255;
691
+ mac[macpos + 9] = this.h[4] >>> 8 & 255;
692
+ mac[macpos + 10] = this.h[5] >>> 0 & 255;
693
+ mac[macpos + 11] = this.h[5] >>> 8 & 255;
694
+ mac[macpos + 12] = this.h[6] >>> 0 & 255;
695
+ mac[macpos + 13] = this.h[6] >>> 8 & 255;
696
+ mac[macpos + 14] = this.h[7] >>> 0 & 255;
697
+ mac[macpos + 15] = this.h[7] >>> 8 & 255;
698
+ };
699
+ poly1305.prototype.update = function(m, mpos, bytes) {
700
+ var i, want;
701
+ if (this.leftover) {
702
+ want = 16 - this.leftover;
703
+ if (want > bytes)
704
+ want = bytes;
705
+ for (i = 0; i < want; i++)
706
+ this.buffer[this.leftover + i] = m[mpos + i];
707
+ bytes -= want;
708
+ mpos += want;
709
+ this.leftover += want;
710
+ if (this.leftover < 16)
711
+ return;
712
+ this.blocks(this.buffer, 0, 16);
713
+ this.leftover = 0;
714
+ }
715
+ if (bytes >= 16) {
716
+ want = bytes - bytes % 16;
717
+ this.blocks(m, mpos, want);
718
+ mpos += want;
719
+ bytes -= want;
720
+ }
721
+ if (bytes) {
722
+ for (i = 0; i < bytes; i++)
723
+ this.buffer[this.leftover + i] = m[mpos + i];
724
+ this.leftover += bytes;
725
+ }
726
+ };
727
+ function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
728
+ var s = new poly1305(k);
729
+ s.update(m, mpos, n);
730
+ s.finish(out, outpos);
731
+ return 0;
732
+ }
733
+ function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
734
+ var x = new Uint8Array(16);
735
+ crypto_onetimeauth(x, 0, m, mpos, n, k);
736
+ return crypto_verify_16(h, hpos, x, 0);
737
+ }
738
+ function crypto_secretbox(c, m, d, n, k) {
739
+ var i;
740
+ if (d < 32) return -1;
741
+ crypto_stream_xor(c, 0, m, 0, d, n, k);
742
+ crypto_onetimeauth(c, 16, c, 32, d - 32, c);
743
+ for (i = 0; i < 16; i++) c[i] = 0;
744
+ return 0;
745
+ }
746
+ function crypto_secretbox_open(m, c, d, n, k) {
747
+ var i;
748
+ var x = new Uint8Array(32);
749
+ if (d < 32) return -1;
750
+ crypto_stream(x, 0, 32, n, k);
751
+ if (crypto_onetimeauth_verify(c, 16, c, 32, d - 32, x) !== 0) return -1;
752
+ crypto_stream_xor(m, 0, c, 0, d, n, k);
753
+ for (i = 0; i < 32; i++) m[i] = 0;
754
+ return 0;
755
+ }
756
+ function set25519(r, a) {
757
+ var i;
758
+ for (i = 0; i < 16; i++) r[i] = a[i] | 0;
759
+ }
760
+ function car25519(o) {
761
+ var i, v, c = 1;
762
+ for (i = 0; i < 16; i++) {
763
+ v = o[i] + c + 65535;
764
+ c = Math.floor(v / 65536);
765
+ o[i] = v - c * 65536;
766
+ }
767
+ o[0] += c - 1 + 37 * (c - 1);
768
+ }
769
+ function sel25519(p, q, b) {
770
+ var t, c = ~(b - 1);
771
+ for (var i = 0; i < 16; i++) {
772
+ t = c & (p[i] ^ q[i]);
773
+ p[i] ^= t;
774
+ q[i] ^= t;
775
+ }
776
+ }
777
+ function pack25519(o, n) {
778
+ var i, j, b;
779
+ var m = gf(), t = gf();
780
+ for (i = 0; i < 16; i++) t[i] = n[i];
781
+ car25519(t);
782
+ car25519(t);
783
+ car25519(t);
784
+ for (j = 0; j < 2; j++) {
785
+ m[0] = t[0] - 65517;
786
+ for (i = 1; i < 15; i++) {
787
+ m[i] = t[i] - 65535 - (m[i - 1] >> 16 & 1);
788
+ m[i - 1] &= 65535;
789
+ }
790
+ m[15] = t[15] - 32767 - (m[14] >> 16 & 1);
791
+ b = m[15] >> 16 & 1;
792
+ m[14] &= 65535;
793
+ sel25519(t, m, 1 - b);
794
+ }
795
+ for (i = 0; i < 16; i++) {
796
+ o[2 * i] = t[i] & 255;
797
+ o[2 * i + 1] = t[i] >> 8;
798
+ }
799
+ }
800
+ function neq25519(a, b) {
801
+ var c = new Uint8Array(32), d = new Uint8Array(32);
802
+ pack25519(c, a);
803
+ pack25519(d, b);
804
+ return crypto_verify_32(c, 0, d, 0);
805
+ }
806
+ function par25519(a) {
807
+ var d = new Uint8Array(32);
808
+ pack25519(d, a);
809
+ return d[0] & 1;
810
+ }
811
+ function unpack25519(o, n) {
812
+ var i;
813
+ for (i = 0; i < 16; i++) o[i] = n[2 * i] + (n[2 * i + 1] << 8);
814
+ o[15] &= 32767;
815
+ }
816
+ function A(o, a, b) {
817
+ for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
818
+ }
819
+ function Z(o, a, b) {
820
+ for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
821
+ }
822
+ function M(o, a, b) {
823
+ var v, c, t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];
824
+ v = a[0];
825
+ t0 += v * b0;
826
+ t1 += v * b1;
827
+ t2 += v * b2;
828
+ t3 += v * b3;
829
+ t4 += v * b4;
830
+ t5 += v * b5;
831
+ t6 += v * b6;
832
+ t7 += v * b7;
833
+ t8 += v * b8;
834
+ t9 += v * b9;
835
+ t10 += v * b10;
836
+ t11 += v * b11;
837
+ t12 += v * b12;
838
+ t13 += v * b13;
839
+ t14 += v * b14;
840
+ t15 += v * b15;
841
+ v = a[1];
842
+ t1 += v * b0;
843
+ t2 += v * b1;
844
+ t3 += v * b2;
845
+ t4 += v * b3;
846
+ t5 += v * b4;
847
+ t6 += v * b5;
848
+ t7 += v * b6;
849
+ t8 += v * b7;
850
+ t9 += v * b8;
851
+ t10 += v * b9;
852
+ t11 += v * b10;
853
+ t12 += v * b11;
854
+ t13 += v * b12;
855
+ t14 += v * b13;
856
+ t15 += v * b14;
857
+ t16 += v * b15;
858
+ v = a[2];
859
+ t2 += v * b0;
860
+ t3 += v * b1;
861
+ t4 += v * b2;
862
+ t5 += v * b3;
863
+ t6 += v * b4;
864
+ t7 += v * b5;
865
+ t8 += v * b6;
866
+ t9 += v * b7;
867
+ t10 += v * b8;
868
+ t11 += v * b9;
869
+ t12 += v * b10;
870
+ t13 += v * b11;
871
+ t14 += v * b12;
872
+ t15 += v * b13;
873
+ t16 += v * b14;
874
+ t17 += v * b15;
875
+ v = a[3];
876
+ t3 += v * b0;
877
+ t4 += v * b1;
878
+ t5 += v * b2;
879
+ t6 += v * b3;
880
+ t7 += v * b4;
881
+ t8 += v * b5;
882
+ t9 += v * b6;
883
+ t10 += v * b7;
884
+ t11 += v * b8;
885
+ t12 += v * b9;
886
+ t13 += v * b10;
887
+ t14 += v * b11;
888
+ t15 += v * b12;
889
+ t16 += v * b13;
890
+ t17 += v * b14;
891
+ t18 += v * b15;
892
+ v = a[4];
893
+ t4 += v * b0;
894
+ t5 += v * b1;
895
+ t6 += v * b2;
896
+ t7 += v * b3;
897
+ t8 += v * b4;
898
+ t9 += v * b5;
899
+ t10 += v * b6;
900
+ t11 += v * b7;
901
+ t12 += v * b8;
902
+ t13 += v * b9;
903
+ t14 += v * b10;
904
+ t15 += v * b11;
905
+ t16 += v * b12;
906
+ t17 += v * b13;
907
+ t18 += v * b14;
908
+ t19 += v * b15;
909
+ v = a[5];
910
+ t5 += v * b0;
911
+ t6 += v * b1;
912
+ t7 += v * b2;
913
+ t8 += v * b3;
914
+ t9 += v * b4;
915
+ t10 += v * b5;
916
+ t11 += v * b6;
917
+ t12 += v * b7;
918
+ t13 += v * b8;
919
+ t14 += v * b9;
920
+ t15 += v * b10;
921
+ t16 += v * b11;
922
+ t17 += v * b12;
923
+ t18 += v * b13;
924
+ t19 += v * b14;
925
+ t20 += v * b15;
926
+ v = a[6];
927
+ t6 += v * b0;
928
+ t7 += v * b1;
929
+ t8 += v * b2;
930
+ t9 += v * b3;
931
+ t10 += v * b4;
932
+ t11 += v * b5;
933
+ t12 += v * b6;
934
+ t13 += v * b7;
935
+ t14 += v * b8;
936
+ t15 += v * b9;
937
+ t16 += v * b10;
938
+ t17 += v * b11;
939
+ t18 += v * b12;
940
+ t19 += v * b13;
941
+ t20 += v * b14;
942
+ t21 += v * b15;
943
+ v = a[7];
944
+ t7 += v * b0;
945
+ t8 += v * b1;
946
+ t9 += v * b2;
947
+ t10 += v * b3;
948
+ t11 += v * b4;
949
+ t12 += v * b5;
950
+ t13 += v * b6;
951
+ t14 += v * b7;
952
+ t15 += v * b8;
953
+ t16 += v * b9;
954
+ t17 += v * b10;
955
+ t18 += v * b11;
956
+ t19 += v * b12;
957
+ t20 += v * b13;
958
+ t21 += v * b14;
959
+ t22 += v * b15;
960
+ v = a[8];
961
+ t8 += v * b0;
962
+ t9 += v * b1;
963
+ t10 += v * b2;
964
+ t11 += v * b3;
965
+ t12 += v * b4;
966
+ t13 += v * b5;
967
+ t14 += v * b6;
968
+ t15 += v * b7;
969
+ t16 += v * b8;
970
+ t17 += v * b9;
971
+ t18 += v * b10;
972
+ t19 += v * b11;
973
+ t20 += v * b12;
974
+ t21 += v * b13;
975
+ t22 += v * b14;
976
+ t23 += v * b15;
977
+ v = a[9];
978
+ t9 += v * b0;
979
+ t10 += v * b1;
980
+ t11 += v * b2;
981
+ t12 += v * b3;
982
+ t13 += v * b4;
983
+ t14 += v * b5;
984
+ t15 += v * b6;
985
+ t16 += v * b7;
986
+ t17 += v * b8;
987
+ t18 += v * b9;
988
+ t19 += v * b10;
989
+ t20 += v * b11;
990
+ t21 += v * b12;
991
+ t22 += v * b13;
992
+ t23 += v * b14;
993
+ t24 += v * b15;
994
+ v = a[10];
995
+ t10 += v * b0;
996
+ t11 += v * b1;
997
+ t12 += v * b2;
998
+ t13 += v * b3;
999
+ t14 += v * b4;
1000
+ t15 += v * b5;
1001
+ t16 += v * b6;
1002
+ t17 += v * b7;
1003
+ t18 += v * b8;
1004
+ t19 += v * b9;
1005
+ t20 += v * b10;
1006
+ t21 += v * b11;
1007
+ t22 += v * b12;
1008
+ t23 += v * b13;
1009
+ t24 += v * b14;
1010
+ t25 += v * b15;
1011
+ v = a[11];
1012
+ t11 += v * b0;
1013
+ t12 += v * b1;
1014
+ t13 += v * b2;
1015
+ t14 += v * b3;
1016
+ t15 += v * b4;
1017
+ t16 += v * b5;
1018
+ t17 += v * b6;
1019
+ t18 += v * b7;
1020
+ t19 += v * b8;
1021
+ t20 += v * b9;
1022
+ t21 += v * b10;
1023
+ t22 += v * b11;
1024
+ t23 += v * b12;
1025
+ t24 += v * b13;
1026
+ t25 += v * b14;
1027
+ t26 += v * b15;
1028
+ v = a[12];
1029
+ t12 += v * b0;
1030
+ t13 += v * b1;
1031
+ t14 += v * b2;
1032
+ t15 += v * b3;
1033
+ t16 += v * b4;
1034
+ t17 += v * b5;
1035
+ t18 += v * b6;
1036
+ t19 += v * b7;
1037
+ t20 += v * b8;
1038
+ t21 += v * b9;
1039
+ t22 += v * b10;
1040
+ t23 += v * b11;
1041
+ t24 += v * b12;
1042
+ t25 += v * b13;
1043
+ t26 += v * b14;
1044
+ t27 += v * b15;
1045
+ v = a[13];
1046
+ t13 += v * b0;
1047
+ t14 += v * b1;
1048
+ t15 += v * b2;
1049
+ t16 += v * b3;
1050
+ t17 += v * b4;
1051
+ t18 += v * b5;
1052
+ t19 += v * b6;
1053
+ t20 += v * b7;
1054
+ t21 += v * b8;
1055
+ t22 += v * b9;
1056
+ t23 += v * b10;
1057
+ t24 += v * b11;
1058
+ t25 += v * b12;
1059
+ t26 += v * b13;
1060
+ t27 += v * b14;
1061
+ t28 += v * b15;
1062
+ v = a[14];
1063
+ t14 += v * b0;
1064
+ t15 += v * b1;
1065
+ t16 += v * b2;
1066
+ t17 += v * b3;
1067
+ t18 += v * b4;
1068
+ t19 += v * b5;
1069
+ t20 += v * b6;
1070
+ t21 += v * b7;
1071
+ t22 += v * b8;
1072
+ t23 += v * b9;
1073
+ t24 += v * b10;
1074
+ t25 += v * b11;
1075
+ t26 += v * b12;
1076
+ t27 += v * b13;
1077
+ t28 += v * b14;
1078
+ t29 += v * b15;
1079
+ v = a[15];
1080
+ t15 += v * b0;
1081
+ t16 += v * b1;
1082
+ t17 += v * b2;
1083
+ t18 += v * b3;
1084
+ t19 += v * b4;
1085
+ t20 += v * b5;
1086
+ t21 += v * b6;
1087
+ t22 += v * b7;
1088
+ t23 += v * b8;
1089
+ t24 += v * b9;
1090
+ t25 += v * b10;
1091
+ t26 += v * b11;
1092
+ t27 += v * b12;
1093
+ t28 += v * b13;
1094
+ t29 += v * b14;
1095
+ t30 += v * b15;
1096
+ t0 += 38 * t16;
1097
+ t1 += 38 * t17;
1098
+ t2 += 38 * t18;
1099
+ t3 += 38 * t19;
1100
+ t4 += 38 * t20;
1101
+ t5 += 38 * t21;
1102
+ t6 += 38 * t22;
1103
+ t7 += 38 * t23;
1104
+ t8 += 38 * t24;
1105
+ t9 += 38 * t25;
1106
+ t10 += 38 * t26;
1107
+ t11 += 38 * t27;
1108
+ t12 += 38 * t28;
1109
+ t13 += 38 * t29;
1110
+ t14 += 38 * t30;
1111
+ c = 1;
1112
+ v = t0 + c + 65535;
1113
+ c = Math.floor(v / 65536);
1114
+ t0 = v - c * 65536;
1115
+ v = t1 + c + 65535;
1116
+ c = Math.floor(v / 65536);
1117
+ t1 = v - c * 65536;
1118
+ v = t2 + c + 65535;
1119
+ c = Math.floor(v / 65536);
1120
+ t2 = v - c * 65536;
1121
+ v = t3 + c + 65535;
1122
+ c = Math.floor(v / 65536);
1123
+ t3 = v - c * 65536;
1124
+ v = t4 + c + 65535;
1125
+ c = Math.floor(v / 65536);
1126
+ t4 = v - c * 65536;
1127
+ v = t5 + c + 65535;
1128
+ c = Math.floor(v / 65536);
1129
+ t5 = v - c * 65536;
1130
+ v = t6 + c + 65535;
1131
+ c = Math.floor(v / 65536);
1132
+ t6 = v - c * 65536;
1133
+ v = t7 + c + 65535;
1134
+ c = Math.floor(v / 65536);
1135
+ t7 = v - c * 65536;
1136
+ v = t8 + c + 65535;
1137
+ c = Math.floor(v / 65536);
1138
+ t8 = v - c * 65536;
1139
+ v = t9 + c + 65535;
1140
+ c = Math.floor(v / 65536);
1141
+ t9 = v - c * 65536;
1142
+ v = t10 + c + 65535;
1143
+ c = Math.floor(v / 65536);
1144
+ t10 = v - c * 65536;
1145
+ v = t11 + c + 65535;
1146
+ c = Math.floor(v / 65536);
1147
+ t11 = v - c * 65536;
1148
+ v = t12 + c + 65535;
1149
+ c = Math.floor(v / 65536);
1150
+ t12 = v - c * 65536;
1151
+ v = t13 + c + 65535;
1152
+ c = Math.floor(v / 65536);
1153
+ t13 = v - c * 65536;
1154
+ v = t14 + c + 65535;
1155
+ c = Math.floor(v / 65536);
1156
+ t14 = v - c * 65536;
1157
+ v = t15 + c + 65535;
1158
+ c = Math.floor(v / 65536);
1159
+ t15 = v - c * 65536;
1160
+ t0 += c - 1 + 37 * (c - 1);
1161
+ c = 1;
1162
+ v = t0 + c + 65535;
1163
+ c = Math.floor(v / 65536);
1164
+ t0 = v - c * 65536;
1165
+ v = t1 + c + 65535;
1166
+ c = Math.floor(v / 65536);
1167
+ t1 = v - c * 65536;
1168
+ v = t2 + c + 65535;
1169
+ c = Math.floor(v / 65536);
1170
+ t2 = v - c * 65536;
1171
+ v = t3 + c + 65535;
1172
+ c = Math.floor(v / 65536);
1173
+ t3 = v - c * 65536;
1174
+ v = t4 + c + 65535;
1175
+ c = Math.floor(v / 65536);
1176
+ t4 = v - c * 65536;
1177
+ v = t5 + c + 65535;
1178
+ c = Math.floor(v / 65536);
1179
+ t5 = v - c * 65536;
1180
+ v = t6 + c + 65535;
1181
+ c = Math.floor(v / 65536);
1182
+ t6 = v - c * 65536;
1183
+ v = t7 + c + 65535;
1184
+ c = Math.floor(v / 65536);
1185
+ t7 = v - c * 65536;
1186
+ v = t8 + c + 65535;
1187
+ c = Math.floor(v / 65536);
1188
+ t8 = v - c * 65536;
1189
+ v = t9 + c + 65535;
1190
+ c = Math.floor(v / 65536);
1191
+ t9 = v - c * 65536;
1192
+ v = t10 + c + 65535;
1193
+ c = Math.floor(v / 65536);
1194
+ t10 = v - c * 65536;
1195
+ v = t11 + c + 65535;
1196
+ c = Math.floor(v / 65536);
1197
+ t11 = v - c * 65536;
1198
+ v = t12 + c + 65535;
1199
+ c = Math.floor(v / 65536);
1200
+ t12 = v - c * 65536;
1201
+ v = t13 + c + 65535;
1202
+ c = Math.floor(v / 65536);
1203
+ t13 = v - c * 65536;
1204
+ v = t14 + c + 65535;
1205
+ c = Math.floor(v / 65536);
1206
+ t14 = v - c * 65536;
1207
+ v = t15 + c + 65535;
1208
+ c = Math.floor(v / 65536);
1209
+ t15 = v - c * 65536;
1210
+ t0 += c - 1 + 37 * (c - 1);
1211
+ o[0] = t0;
1212
+ o[1] = t1;
1213
+ o[2] = t2;
1214
+ o[3] = t3;
1215
+ o[4] = t4;
1216
+ o[5] = t5;
1217
+ o[6] = t6;
1218
+ o[7] = t7;
1219
+ o[8] = t8;
1220
+ o[9] = t9;
1221
+ o[10] = t10;
1222
+ o[11] = t11;
1223
+ o[12] = t12;
1224
+ o[13] = t13;
1225
+ o[14] = t14;
1226
+ o[15] = t15;
1227
+ }
1228
+ function S(o, a) {
1229
+ M(o, a, a);
1230
+ }
1231
+ function inv25519(o, i) {
1232
+ var c = gf();
1233
+ var a;
1234
+ for (a = 0; a < 16; a++) c[a] = i[a];
1235
+ for (a = 253; a >= 0; a--) {
1236
+ S(c, c);
1237
+ if (a !== 2 && a !== 4) M(c, c, i);
1238
+ }
1239
+ for (a = 0; a < 16; a++) o[a] = c[a];
1240
+ }
1241
+ function pow2523(o, i) {
1242
+ var c = gf();
1243
+ var a;
1244
+ for (a = 0; a < 16; a++) c[a] = i[a];
1245
+ for (a = 250; a >= 0; a--) {
1246
+ S(c, c);
1247
+ if (a !== 1) M(c, c, i);
1248
+ }
1249
+ for (a = 0; a < 16; a++) o[a] = c[a];
1250
+ }
1251
+ function crypto_scalarmult(q, n, p) {
1252
+ var z = new Uint8Array(32);
1253
+ var x = new Float64Array(80), r, i;
1254
+ var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf();
1255
+ for (i = 0; i < 31; i++) z[i] = n[i];
1256
+ z[31] = n[31] & 127 | 64;
1257
+ z[0] &= 248;
1258
+ unpack25519(x, p);
1259
+ for (i = 0; i < 16; i++) {
1260
+ b[i] = x[i];
1261
+ d[i] = a[i] = c[i] = 0;
1262
+ }
1263
+ a[0] = d[0] = 1;
1264
+ for (i = 254; i >= 0; --i) {
1265
+ r = z[i >>> 3] >>> (i & 7) & 1;
1266
+ sel25519(a, b, r);
1267
+ sel25519(c, d, r);
1268
+ A(e, a, c);
1269
+ Z(a, a, c);
1270
+ A(c, b, d);
1271
+ Z(b, b, d);
1272
+ S(d, e);
1273
+ S(f, a);
1274
+ M(a, c, a);
1275
+ M(c, b, e);
1276
+ A(e, a, c);
1277
+ Z(a, a, c);
1278
+ S(b, a);
1279
+ Z(c, d, f);
1280
+ M(a, c, _121665);
1281
+ A(a, a, d);
1282
+ M(c, c, a);
1283
+ M(a, d, f);
1284
+ M(d, b, x);
1285
+ S(b, e);
1286
+ sel25519(a, b, r);
1287
+ sel25519(c, d, r);
1288
+ }
1289
+ for (i = 0; i < 16; i++) {
1290
+ x[i + 16] = a[i];
1291
+ x[i + 32] = c[i];
1292
+ x[i + 48] = b[i];
1293
+ x[i + 64] = d[i];
1294
+ }
1295
+ var x32 = x.subarray(32);
1296
+ var x16 = x.subarray(16);
1297
+ inv25519(x32, x32);
1298
+ M(x16, x16, x32);
1299
+ pack25519(q, x16);
1300
+ return 0;
1301
+ }
1302
+ function crypto_scalarmult_base(q, n) {
1303
+ return crypto_scalarmult(q, n, _9);
1304
+ }
1305
+ function crypto_box_keypair(y, x) {
1306
+ randombytes(x, 32);
1307
+ return crypto_scalarmult_base(y, x);
1308
+ }
1309
+ function crypto_box_beforenm(k, y, x) {
1310
+ var s = new Uint8Array(32);
1311
+ crypto_scalarmult(s, x, y);
1312
+ return crypto_core_hsalsa20(k, _0, s, sigma);
1313
+ }
1314
+ var crypto_box_afternm = crypto_secretbox;
1315
+ var crypto_box_open_afternm = crypto_secretbox_open;
1316
+ function crypto_box(c, m, d, n, y, x) {
1317
+ var k = new Uint8Array(32);
1318
+ crypto_box_beforenm(k, y, x);
1319
+ return crypto_box_afternm(c, m, d, n, k);
1320
+ }
1321
+ function crypto_box_open(m, c, d, n, y, x) {
1322
+ var k = new Uint8Array(32);
1323
+ crypto_box_beforenm(k, y, x);
1324
+ return crypto_box_open_afternm(m, c, d, n, k);
1325
+ }
1326
+ var K = [
1327
+ 1116352408,
1328
+ 3609767458,
1329
+ 1899447441,
1330
+ 602891725,
1331
+ 3049323471,
1332
+ 3964484399,
1333
+ 3921009573,
1334
+ 2173295548,
1335
+ 961987163,
1336
+ 4081628472,
1337
+ 1508970993,
1338
+ 3053834265,
1339
+ 2453635748,
1340
+ 2937671579,
1341
+ 2870763221,
1342
+ 3664609560,
1343
+ 3624381080,
1344
+ 2734883394,
1345
+ 310598401,
1346
+ 1164996542,
1347
+ 607225278,
1348
+ 1323610764,
1349
+ 1426881987,
1350
+ 3590304994,
1351
+ 1925078388,
1352
+ 4068182383,
1353
+ 2162078206,
1354
+ 991336113,
1355
+ 2614888103,
1356
+ 633803317,
1357
+ 3248222580,
1358
+ 3479774868,
1359
+ 3835390401,
1360
+ 2666613458,
1361
+ 4022224774,
1362
+ 944711139,
1363
+ 264347078,
1364
+ 2341262773,
1365
+ 604807628,
1366
+ 2007800933,
1367
+ 770255983,
1368
+ 1495990901,
1369
+ 1249150122,
1370
+ 1856431235,
1371
+ 1555081692,
1372
+ 3175218132,
1373
+ 1996064986,
1374
+ 2198950837,
1375
+ 2554220882,
1376
+ 3999719339,
1377
+ 2821834349,
1378
+ 766784016,
1379
+ 2952996808,
1380
+ 2566594879,
1381
+ 3210313671,
1382
+ 3203337956,
1383
+ 3336571891,
1384
+ 1034457026,
1385
+ 3584528711,
1386
+ 2466948901,
1387
+ 113926993,
1388
+ 3758326383,
1389
+ 338241895,
1390
+ 168717936,
1391
+ 666307205,
1392
+ 1188179964,
1393
+ 773529912,
1394
+ 1546045734,
1395
+ 1294757372,
1396
+ 1522805485,
1397
+ 1396182291,
1398
+ 2643833823,
1399
+ 1695183700,
1400
+ 2343527390,
1401
+ 1986661051,
1402
+ 1014477480,
1403
+ 2177026350,
1404
+ 1206759142,
1405
+ 2456956037,
1406
+ 344077627,
1407
+ 2730485921,
1408
+ 1290863460,
1409
+ 2820302411,
1410
+ 3158454273,
1411
+ 3259730800,
1412
+ 3505952657,
1413
+ 3345764771,
1414
+ 106217008,
1415
+ 3516065817,
1416
+ 3606008344,
1417
+ 3600352804,
1418
+ 1432725776,
1419
+ 4094571909,
1420
+ 1467031594,
1421
+ 275423344,
1422
+ 851169720,
1423
+ 430227734,
1424
+ 3100823752,
1425
+ 506948616,
1426
+ 1363258195,
1427
+ 659060556,
1428
+ 3750685593,
1429
+ 883997877,
1430
+ 3785050280,
1431
+ 958139571,
1432
+ 3318307427,
1433
+ 1322822218,
1434
+ 3812723403,
1435
+ 1537002063,
1436
+ 2003034995,
1437
+ 1747873779,
1438
+ 3602036899,
1439
+ 1955562222,
1440
+ 1575990012,
1441
+ 2024104815,
1442
+ 1125592928,
1443
+ 2227730452,
1444
+ 2716904306,
1445
+ 2361852424,
1446
+ 442776044,
1447
+ 2428436474,
1448
+ 593698344,
1449
+ 2756734187,
1450
+ 3733110249,
1451
+ 3204031479,
1452
+ 2999351573,
1453
+ 3329325298,
1454
+ 3815920427,
1455
+ 3391569614,
1456
+ 3928383900,
1457
+ 3515267271,
1458
+ 566280711,
1459
+ 3940187606,
1460
+ 3454069534,
1461
+ 4118630271,
1462
+ 4000239992,
1463
+ 116418474,
1464
+ 1914138554,
1465
+ 174292421,
1466
+ 2731055270,
1467
+ 289380356,
1468
+ 3203993006,
1469
+ 460393269,
1470
+ 320620315,
1471
+ 685471733,
1472
+ 587496836,
1473
+ 852142971,
1474
+ 1086792851,
1475
+ 1017036298,
1476
+ 365543100,
1477
+ 1126000580,
1478
+ 2618297676,
1479
+ 1288033470,
1480
+ 3409855158,
1481
+ 1501505948,
1482
+ 4234509866,
1483
+ 1607167915,
1484
+ 987167468,
1485
+ 1816402316,
1486
+ 1246189591
1487
+ ];
1488
+ function crypto_hashblocks_hl(hh, hl, m, n) {
1489
+ var wh = new Int32Array(16), wl = new Int32Array(16), bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, th, tl, i, j, h, l, a, b, c, d;
1490
+ var ah0 = hh[0], ah1 = hh[1], ah2 = hh[2], ah3 = hh[3], ah4 = hh[4], ah5 = hh[5], ah6 = hh[6], ah7 = hh[7], al0 = hl[0], al1 = hl[1], al2 = hl[2], al3 = hl[3], al4 = hl[4], al5 = hl[5], al6 = hl[6], al7 = hl[7];
1491
+ var pos = 0;
1492
+ while (n >= 128) {
1493
+ for (i = 0; i < 16; i++) {
1494
+ j = 8 * i + pos;
1495
+ wh[i] = m[j + 0] << 24 | m[j + 1] << 16 | m[j + 2] << 8 | m[j + 3];
1496
+ wl[i] = m[j + 4] << 24 | m[j + 5] << 16 | m[j + 6] << 8 | m[j + 7];
1497
+ }
1498
+ for (i = 0; i < 80; i++) {
1499
+ bh0 = ah0;
1500
+ bh1 = ah1;
1501
+ bh2 = ah2;
1502
+ bh3 = ah3;
1503
+ bh4 = ah4;
1504
+ bh5 = ah5;
1505
+ bh6 = ah6;
1506
+ bh7 = ah7;
1507
+ bl0 = al0;
1508
+ bl1 = al1;
1509
+ bl2 = al2;
1510
+ bl3 = al3;
1511
+ bl4 = al4;
1512
+ bl5 = al5;
1513
+ bl6 = al6;
1514
+ bl7 = al7;
1515
+ h = ah7;
1516
+ l = al7;
1517
+ a = l & 65535;
1518
+ b = l >>> 16;
1519
+ c = h & 65535;
1520
+ d = h >>> 16;
1521
+ h = (ah4 >>> 14 | al4 << 32 - 14) ^ (ah4 >>> 18 | al4 << 32 - 18) ^ (al4 >>> 41 - 32 | ah4 << 32 - (41 - 32));
1522
+ l = (al4 >>> 14 | ah4 << 32 - 14) ^ (al4 >>> 18 | ah4 << 32 - 18) ^ (ah4 >>> 41 - 32 | al4 << 32 - (41 - 32));
1523
+ a += l & 65535;
1524
+ b += l >>> 16;
1525
+ c += h & 65535;
1526
+ d += h >>> 16;
1527
+ h = ah4 & ah5 ^ ~ah4 & ah6;
1528
+ l = al4 & al5 ^ ~al4 & al6;
1529
+ a += l & 65535;
1530
+ b += l >>> 16;
1531
+ c += h & 65535;
1532
+ d += h >>> 16;
1533
+ h = K[i * 2];
1534
+ l = K[i * 2 + 1];
1535
+ a += l & 65535;
1536
+ b += l >>> 16;
1537
+ c += h & 65535;
1538
+ d += h >>> 16;
1539
+ h = wh[i % 16];
1540
+ l = wl[i % 16];
1541
+ a += l & 65535;
1542
+ b += l >>> 16;
1543
+ c += h & 65535;
1544
+ d += h >>> 16;
1545
+ b += a >>> 16;
1546
+ c += b >>> 16;
1547
+ d += c >>> 16;
1548
+ th = c & 65535 | d << 16;
1549
+ tl = a & 65535 | b << 16;
1550
+ h = th;
1551
+ l = tl;
1552
+ a = l & 65535;
1553
+ b = l >>> 16;
1554
+ c = h & 65535;
1555
+ d = h >>> 16;
1556
+ h = (ah0 >>> 28 | al0 << 32 - 28) ^ (al0 >>> 34 - 32 | ah0 << 32 - (34 - 32)) ^ (al0 >>> 39 - 32 | ah0 << 32 - (39 - 32));
1557
+ l = (al0 >>> 28 | ah0 << 32 - 28) ^ (ah0 >>> 34 - 32 | al0 << 32 - (34 - 32)) ^ (ah0 >>> 39 - 32 | al0 << 32 - (39 - 32));
1558
+ a += l & 65535;
1559
+ b += l >>> 16;
1560
+ c += h & 65535;
1561
+ d += h >>> 16;
1562
+ h = ah0 & ah1 ^ ah0 & ah2 ^ ah1 & ah2;
1563
+ l = al0 & al1 ^ al0 & al2 ^ al1 & al2;
1564
+ a += l & 65535;
1565
+ b += l >>> 16;
1566
+ c += h & 65535;
1567
+ d += h >>> 16;
1568
+ b += a >>> 16;
1569
+ c += b >>> 16;
1570
+ d += c >>> 16;
1571
+ bh7 = c & 65535 | d << 16;
1572
+ bl7 = a & 65535 | b << 16;
1573
+ h = bh3;
1574
+ l = bl3;
1575
+ a = l & 65535;
1576
+ b = l >>> 16;
1577
+ c = h & 65535;
1578
+ d = h >>> 16;
1579
+ h = th;
1580
+ l = tl;
1581
+ a += l & 65535;
1582
+ b += l >>> 16;
1583
+ c += h & 65535;
1584
+ d += h >>> 16;
1585
+ b += a >>> 16;
1586
+ c += b >>> 16;
1587
+ d += c >>> 16;
1588
+ bh3 = c & 65535 | d << 16;
1589
+ bl3 = a & 65535 | b << 16;
1590
+ ah1 = bh0;
1591
+ ah2 = bh1;
1592
+ ah3 = bh2;
1593
+ ah4 = bh3;
1594
+ ah5 = bh4;
1595
+ ah6 = bh5;
1596
+ ah7 = bh6;
1597
+ ah0 = bh7;
1598
+ al1 = bl0;
1599
+ al2 = bl1;
1600
+ al3 = bl2;
1601
+ al4 = bl3;
1602
+ al5 = bl4;
1603
+ al6 = bl5;
1604
+ al7 = bl6;
1605
+ al0 = bl7;
1606
+ if (i % 16 === 15) {
1607
+ for (j = 0; j < 16; j++) {
1608
+ h = wh[j];
1609
+ l = wl[j];
1610
+ a = l & 65535;
1611
+ b = l >>> 16;
1612
+ c = h & 65535;
1613
+ d = h >>> 16;
1614
+ h = wh[(j + 9) % 16];
1615
+ l = wl[(j + 9) % 16];
1616
+ a += l & 65535;
1617
+ b += l >>> 16;
1618
+ c += h & 65535;
1619
+ d += h >>> 16;
1620
+ th = wh[(j + 1) % 16];
1621
+ tl = wl[(j + 1) % 16];
1622
+ h = (th >>> 1 | tl << 32 - 1) ^ (th >>> 8 | tl << 32 - 8) ^ th >>> 7;
1623
+ l = (tl >>> 1 | th << 32 - 1) ^ (tl >>> 8 | th << 32 - 8) ^ (tl >>> 7 | th << 32 - 7);
1624
+ a += l & 65535;
1625
+ b += l >>> 16;
1626
+ c += h & 65535;
1627
+ d += h >>> 16;
1628
+ th = wh[(j + 14) % 16];
1629
+ tl = wl[(j + 14) % 16];
1630
+ h = (th >>> 19 | tl << 32 - 19) ^ (tl >>> 61 - 32 | th << 32 - (61 - 32)) ^ th >>> 6;
1631
+ l = (tl >>> 19 | th << 32 - 19) ^ (th >>> 61 - 32 | tl << 32 - (61 - 32)) ^ (tl >>> 6 | th << 32 - 6);
1632
+ a += l & 65535;
1633
+ b += l >>> 16;
1634
+ c += h & 65535;
1635
+ d += h >>> 16;
1636
+ b += a >>> 16;
1637
+ c += b >>> 16;
1638
+ d += c >>> 16;
1639
+ wh[j] = c & 65535 | d << 16;
1640
+ wl[j] = a & 65535 | b << 16;
1641
+ }
1642
+ }
1643
+ }
1644
+ h = ah0;
1645
+ l = al0;
1646
+ a = l & 65535;
1647
+ b = l >>> 16;
1648
+ c = h & 65535;
1649
+ d = h >>> 16;
1650
+ h = hh[0];
1651
+ l = hl[0];
1652
+ a += l & 65535;
1653
+ b += l >>> 16;
1654
+ c += h & 65535;
1655
+ d += h >>> 16;
1656
+ b += a >>> 16;
1657
+ c += b >>> 16;
1658
+ d += c >>> 16;
1659
+ hh[0] = ah0 = c & 65535 | d << 16;
1660
+ hl[0] = al0 = a & 65535 | b << 16;
1661
+ h = ah1;
1662
+ l = al1;
1663
+ a = l & 65535;
1664
+ b = l >>> 16;
1665
+ c = h & 65535;
1666
+ d = h >>> 16;
1667
+ h = hh[1];
1668
+ l = hl[1];
1669
+ a += l & 65535;
1670
+ b += l >>> 16;
1671
+ c += h & 65535;
1672
+ d += h >>> 16;
1673
+ b += a >>> 16;
1674
+ c += b >>> 16;
1675
+ d += c >>> 16;
1676
+ hh[1] = ah1 = c & 65535 | d << 16;
1677
+ hl[1] = al1 = a & 65535 | b << 16;
1678
+ h = ah2;
1679
+ l = al2;
1680
+ a = l & 65535;
1681
+ b = l >>> 16;
1682
+ c = h & 65535;
1683
+ d = h >>> 16;
1684
+ h = hh[2];
1685
+ l = hl[2];
1686
+ a += l & 65535;
1687
+ b += l >>> 16;
1688
+ c += h & 65535;
1689
+ d += h >>> 16;
1690
+ b += a >>> 16;
1691
+ c += b >>> 16;
1692
+ d += c >>> 16;
1693
+ hh[2] = ah2 = c & 65535 | d << 16;
1694
+ hl[2] = al2 = a & 65535 | b << 16;
1695
+ h = ah3;
1696
+ l = al3;
1697
+ a = l & 65535;
1698
+ b = l >>> 16;
1699
+ c = h & 65535;
1700
+ d = h >>> 16;
1701
+ h = hh[3];
1702
+ l = hl[3];
1703
+ a += l & 65535;
1704
+ b += l >>> 16;
1705
+ c += h & 65535;
1706
+ d += h >>> 16;
1707
+ b += a >>> 16;
1708
+ c += b >>> 16;
1709
+ d += c >>> 16;
1710
+ hh[3] = ah3 = c & 65535 | d << 16;
1711
+ hl[3] = al3 = a & 65535 | b << 16;
1712
+ h = ah4;
1713
+ l = al4;
1714
+ a = l & 65535;
1715
+ b = l >>> 16;
1716
+ c = h & 65535;
1717
+ d = h >>> 16;
1718
+ h = hh[4];
1719
+ l = hl[4];
1720
+ a += l & 65535;
1721
+ b += l >>> 16;
1722
+ c += h & 65535;
1723
+ d += h >>> 16;
1724
+ b += a >>> 16;
1725
+ c += b >>> 16;
1726
+ d += c >>> 16;
1727
+ hh[4] = ah4 = c & 65535 | d << 16;
1728
+ hl[4] = al4 = a & 65535 | b << 16;
1729
+ h = ah5;
1730
+ l = al5;
1731
+ a = l & 65535;
1732
+ b = l >>> 16;
1733
+ c = h & 65535;
1734
+ d = h >>> 16;
1735
+ h = hh[5];
1736
+ l = hl[5];
1737
+ a += l & 65535;
1738
+ b += l >>> 16;
1739
+ c += h & 65535;
1740
+ d += h >>> 16;
1741
+ b += a >>> 16;
1742
+ c += b >>> 16;
1743
+ d += c >>> 16;
1744
+ hh[5] = ah5 = c & 65535 | d << 16;
1745
+ hl[5] = al5 = a & 65535 | b << 16;
1746
+ h = ah6;
1747
+ l = al6;
1748
+ a = l & 65535;
1749
+ b = l >>> 16;
1750
+ c = h & 65535;
1751
+ d = h >>> 16;
1752
+ h = hh[6];
1753
+ l = hl[6];
1754
+ a += l & 65535;
1755
+ b += l >>> 16;
1756
+ c += h & 65535;
1757
+ d += h >>> 16;
1758
+ b += a >>> 16;
1759
+ c += b >>> 16;
1760
+ d += c >>> 16;
1761
+ hh[6] = ah6 = c & 65535 | d << 16;
1762
+ hl[6] = al6 = a & 65535 | b << 16;
1763
+ h = ah7;
1764
+ l = al7;
1765
+ a = l & 65535;
1766
+ b = l >>> 16;
1767
+ c = h & 65535;
1768
+ d = h >>> 16;
1769
+ h = hh[7];
1770
+ l = hl[7];
1771
+ a += l & 65535;
1772
+ b += l >>> 16;
1773
+ c += h & 65535;
1774
+ d += h >>> 16;
1775
+ b += a >>> 16;
1776
+ c += b >>> 16;
1777
+ d += c >>> 16;
1778
+ hh[7] = ah7 = c & 65535 | d << 16;
1779
+ hl[7] = al7 = a & 65535 | b << 16;
1780
+ pos += 128;
1781
+ n -= 128;
1782
+ }
1783
+ return n;
1784
+ }
1785
+ function crypto_hash(out, m, n) {
1786
+ var hh = new Int32Array(8), hl = new Int32Array(8), x = new Uint8Array(256), i, b = n;
1787
+ hh[0] = 1779033703;
1788
+ hh[1] = 3144134277;
1789
+ hh[2] = 1013904242;
1790
+ hh[3] = 2773480762;
1791
+ hh[4] = 1359893119;
1792
+ hh[5] = 2600822924;
1793
+ hh[6] = 528734635;
1794
+ hh[7] = 1541459225;
1795
+ hl[0] = 4089235720;
1796
+ hl[1] = 2227873595;
1797
+ hl[2] = 4271175723;
1798
+ hl[3] = 1595750129;
1799
+ hl[4] = 2917565137;
1800
+ hl[5] = 725511199;
1801
+ hl[6] = 4215389547;
1802
+ hl[7] = 327033209;
1803
+ crypto_hashblocks_hl(hh, hl, m, n);
1804
+ n %= 128;
1805
+ for (i = 0; i < n; i++) x[i] = m[b - n + i];
1806
+ x[n] = 128;
1807
+ n = 256 - 128 * (n < 112 ? 1 : 0);
1808
+ x[n - 9] = 0;
1809
+ ts64(x, n - 8, b / 536870912 | 0, b << 3);
1810
+ crypto_hashblocks_hl(hh, hl, x, n);
1811
+ for (i = 0; i < 8; i++) ts64(out, 8 * i, hh[i], hl[i]);
1812
+ return 0;
1813
+ }
1814
+ function add(p, q) {
1815
+ var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf(), g = gf(), h = gf(), t = gf();
1816
+ Z(a, p[1], p[0]);
1817
+ Z(t, q[1], q[0]);
1818
+ M(a, a, t);
1819
+ A(b, p[0], p[1]);
1820
+ A(t, q[0], q[1]);
1821
+ M(b, b, t);
1822
+ M(c, p[3], q[3]);
1823
+ M(c, c, D2);
1824
+ M(d, p[2], q[2]);
1825
+ A(d, d, d);
1826
+ Z(e, b, a);
1827
+ Z(f, d, c);
1828
+ A(g, d, c);
1829
+ A(h, b, a);
1830
+ M(p[0], e, f);
1831
+ M(p[1], h, g);
1832
+ M(p[2], g, f);
1833
+ M(p[3], e, h);
1834
+ }
1835
+ function cswap(p, q, b) {
1836
+ var i;
1837
+ for (i = 0; i < 4; i++) {
1838
+ sel25519(p[i], q[i], b);
1839
+ }
1840
+ }
1841
+ function pack(r, p) {
1842
+ var tx = gf(), ty = gf(), zi = gf();
1843
+ inv25519(zi, p[2]);
1844
+ M(tx, p[0], zi);
1845
+ M(ty, p[1], zi);
1846
+ pack25519(r, ty);
1847
+ r[31] ^= par25519(tx) << 7;
1848
+ }
1849
+ function scalarmult(p, q, s) {
1850
+ var b, i;
1851
+ set25519(p[0], gf0);
1852
+ set25519(p[1], gf1);
1853
+ set25519(p[2], gf1);
1854
+ set25519(p[3], gf0);
1855
+ for (i = 255; i >= 0; --i) {
1856
+ b = s[i / 8 | 0] >> (i & 7) & 1;
1857
+ cswap(p, q, b);
1858
+ add(q, p);
1859
+ add(p, p);
1860
+ cswap(p, q, b);
1861
+ }
1862
+ }
1863
+ function scalarbase(p, s) {
1864
+ var q = [gf(), gf(), gf(), gf()];
1865
+ set25519(q[0], X);
1866
+ set25519(q[1], Y);
1867
+ set25519(q[2], gf1);
1868
+ M(q[3], X, Y);
1869
+ scalarmult(p, q, s);
1870
+ }
1871
+ function crypto_sign_keypair(pk, sk, seeded) {
1872
+ var d = new Uint8Array(64);
1873
+ var p = [gf(), gf(), gf(), gf()];
1874
+ var i;
1875
+ if (!seeded) randombytes(sk, 32);
1876
+ crypto_hash(d, sk, 32);
1877
+ d[0] &= 248;
1878
+ d[31] &= 127;
1879
+ d[31] |= 64;
1880
+ scalarbase(p, d);
1881
+ pack(pk, p);
1882
+ for (i = 0; i < 32; i++) sk[i + 32] = pk[i];
1883
+ return 0;
1884
+ }
1885
+ var L = new Float64Array([237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16]);
1886
+ function modL(r, x) {
1887
+ var carry, i, j, k;
1888
+ for (i = 63; i >= 32; --i) {
1889
+ carry = 0;
1890
+ for (j = i - 32, k = i - 12; j < k; ++j) {
1891
+ x[j] += carry - 16 * x[i] * L[j - (i - 32)];
1892
+ carry = Math.floor((x[j] + 128) / 256);
1893
+ x[j] -= carry * 256;
1894
+ }
1895
+ x[j] += carry;
1896
+ x[i] = 0;
1897
+ }
1898
+ carry = 0;
1899
+ for (j = 0; j < 32; j++) {
1900
+ x[j] += carry - (x[31] >> 4) * L[j];
1901
+ carry = x[j] >> 8;
1902
+ x[j] &= 255;
1903
+ }
1904
+ for (j = 0; j < 32; j++) x[j] -= carry * L[j];
1905
+ for (i = 0; i < 32; i++) {
1906
+ x[i + 1] += x[i] >> 8;
1907
+ r[i] = x[i] & 255;
1908
+ }
1909
+ }
1910
+ function reduce(r) {
1911
+ var x = new Float64Array(64), i;
1912
+ for (i = 0; i < 64; i++) x[i] = r[i];
1913
+ for (i = 0; i < 64; i++) r[i] = 0;
1914
+ modL(r, x);
1915
+ }
1916
+ function crypto_sign(sm, m, n, sk) {
1917
+ var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
1918
+ var i, j, x = new Float64Array(64);
1919
+ var p = [gf(), gf(), gf(), gf()];
1920
+ crypto_hash(d, sk, 32);
1921
+ d[0] &= 248;
1922
+ d[31] &= 127;
1923
+ d[31] |= 64;
1924
+ var smlen = n + 64;
1925
+ for (i = 0; i < n; i++) sm[64 + i] = m[i];
1926
+ for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
1927
+ crypto_hash(r, sm.subarray(32), n + 32);
1928
+ reduce(r);
1929
+ scalarbase(p, r);
1930
+ pack(sm, p);
1931
+ for (i = 32; i < 64; i++) sm[i] = sk[i];
1932
+ crypto_hash(h, sm, n + 64);
1933
+ reduce(h);
1934
+ for (i = 0; i < 64; i++) x[i] = 0;
1935
+ for (i = 0; i < 32; i++) x[i] = r[i];
1936
+ for (i = 0; i < 32; i++) {
1937
+ for (j = 0; j < 32; j++) {
1938
+ x[i + j] += h[i] * d[j];
1939
+ }
1940
+ }
1941
+ modL(sm.subarray(32), x);
1942
+ return smlen;
1943
+ }
1944
+ function unpackneg(r, p) {
1945
+ var t = gf(), chk = gf(), num = gf(), den = gf(), den2 = gf(), den4 = gf(), den6 = gf();
1946
+ set25519(r[2], gf1);
1947
+ unpack25519(r[1], p);
1948
+ S(num, r[1]);
1949
+ M(den, num, D);
1950
+ Z(num, num, r[2]);
1951
+ A(den, r[2], den);
1952
+ S(den2, den);
1953
+ S(den4, den2);
1954
+ M(den6, den4, den2);
1955
+ M(t, den6, num);
1956
+ M(t, t, den);
1957
+ pow2523(t, t);
1958
+ M(t, t, num);
1959
+ M(t, t, den);
1960
+ M(t, t, den);
1961
+ M(r[0], t, den);
1962
+ S(chk, r[0]);
1963
+ M(chk, chk, den);
1964
+ if (neq25519(chk, num)) M(r[0], r[0], I);
1965
+ S(chk, r[0]);
1966
+ M(chk, chk, den);
1967
+ if (neq25519(chk, num)) return -1;
1968
+ if (par25519(r[0]) === p[31] >> 7) Z(r[0], gf0, r[0]);
1969
+ M(r[3], r[0], r[1]);
1970
+ return 0;
1971
+ }
1972
+ function crypto_sign_open(m, sm, n, pk) {
1973
+ var i;
1974
+ var t = new Uint8Array(32), h = new Uint8Array(64);
1975
+ var p = [gf(), gf(), gf(), gf()], q = [gf(), gf(), gf(), gf()];
1976
+ if (n < 64) return -1;
1977
+ if (unpackneg(q, pk)) return -1;
1978
+ for (i = 0; i < n; i++) m[i] = sm[i];
1979
+ for (i = 0; i < 32; i++) m[i + 32] = pk[i];
1980
+ crypto_hash(h, m, n);
1981
+ reduce(h);
1982
+ scalarmult(p, q, h);
1983
+ scalarbase(q, sm.subarray(32));
1984
+ add(p, q);
1985
+ pack(t, p);
1986
+ n -= 64;
1987
+ if (crypto_verify_32(sm, 0, t, 0)) {
1988
+ for (i = 0; i < n; i++) m[i] = 0;
1989
+ return -1;
1990
+ }
1991
+ for (i = 0; i < n; i++) m[i] = sm[i + 64];
1992
+ return n;
1993
+ }
1994
+ var crypto_secretbox_KEYBYTES = 32, crypto_secretbox_NONCEBYTES = 24, crypto_secretbox_ZEROBYTES = 32, crypto_secretbox_BOXZEROBYTES = 16, crypto_scalarmult_BYTES = 32, crypto_scalarmult_SCALARBYTES = 32, crypto_box_PUBLICKEYBYTES = 32, crypto_box_SECRETKEYBYTES = 32, crypto_box_BEFORENMBYTES = 32, crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, crypto_sign_BYTES = 64, crypto_sign_PUBLICKEYBYTES = 32, crypto_sign_SECRETKEYBYTES = 64, crypto_sign_SEEDBYTES = 32, crypto_hash_BYTES = 64;
1995
+ nacl.lowlevel = {
1996
+ crypto_core_hsalsa20,
1997
+ crypto_stream_xor,
1998
+ crypto_stream,
1999
+ crypto_stream_salsa20_xor,
2000
+ crypto_stream_salsa20,
2001
+ crypto_onetimeauth,
2002
+ crypto_onetimeauth_verify,
2003
+ crypto_verify_16,
2004
+ crypto_verify_32,
2005
+ crypto_secretbox,
2006
+ crypto_secretbox_open,
2007
+ crypto_scalarmult,
2008
+ crypto_scalarmult_base,
2009
+ crypto_box_beforenm,
2010
+ crypto_box_afternm,
2011
+ crypto_box,
2012
+ crypto_box_open,
2013
+ crypto_box_keypair,
2014
+ crypto_hash,
2015
+ crypto_sign,
2016
+ crypto_sign_keypair,
2017
+ crypto_sign_open,
2018
+ crypto_secretbox_KEYBYTES,
2019
+ crypto_secretbox_NONCEBYTES,
2020
+ crypto_secretbox_ZEROBYTES,
2021
+ crypto_secretbox_BOXZEROBYTES,
2022
+ crypto_scalarmult_BYTES,
2023
+ crypto_scalarmult_SCALARBYTES,
2024
+ crypto_box_PUBLICKEYBYTES,
2025
+ crypto_box_SECRETKEYBYTES,
2026
+ crypto_box_BEFORENMBYTES,
2027
+ crypto_box_NONCEBYTES,
2028
+ crypto_box_ZEROBYTES,
2029
+ crypto_box_BOXZEROBYTES,
2030
+ crypto_sign_BYTES,
2031
+ crypto_sign_PUBLICKEYBYTES,
2032
+ crypto_sign_SECRETKEYBYTES,
2033
+ crypto_sign_SEEDBYTES,
2034
+ crypto_hash_BYTES,
2035
+ gf,
2036
+ D,
2037
+ L,
2038
+ pack25519,
2039
+ unpack25519,
2040
+ M,
2041
+ A,
2042
+ S,
2043
+ Z,
2044
+ pow2523,
2045
+ add,
2046
+ set25519,
2047
+ modL,
2048
+ scalarmult,
2049
+ scalarbase
2050
+ };
2051
+ function checkLengths(k, n) {
2052
+ if (k.length !== crypto_secretbox_KEYBYTES) throw new Error("bad key size");
2053
+ if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error("bad nonce size");
2054
+ }
2055
+ function checkBoxLengths(pk, sk) {
2056
+ if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error("bad public key size");
2057
+ if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error("bad secret key size");
2058
+ }
2059
+ function checkArrayTypes() {
2060
+ for (var i = 0; i < arguments.length; i++) {
2061
+ if (!(arguments[i] instanceof Uint8Array))
2062
+ throw new TypeError("unexpected type, use Uint8Array");
2063
+ }
2064
+ }
2065
+ function cleanup(arr) {
2066
+ for (var i = 0; i < arr.length; i++) arr[i] = 0;
2067
+ }
2068
+ nacl.randomBytes = function(n) {
2069
+ var b = new Uint8Array(n);
2070
+ randombytes(b, n);
2071
+ return b;
2072
+ };
2073
+ nacl.secretbox = function(msg, nonce, key) {
2074
+ checkArrayTypes(msg, nonce, key);
2075
+ checkLengths(key, nonce);
2076
+ var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
2077
+ var c = new Uint8Array(m.length);
2078
+ for (var i = 0; i < msg.length; i++) m[i + crypto_secretbox_ZEROBYTES] = msg[i];
2079
+ crypto_secretbox(c, m, m.length, nonce, key);
2080
+ return c.subarray(crypto_secretbox_BOXZEROBYTES);
2081
+ };
2082
+ nacl.secretbox.open = function(box, nonce, key) {
2083
+ checkArrayTypes(box, nonce, key);
2084
+ checkLengths(key, nonce);
2085
+ var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
2086
+ var m = new Uint8Array(c.length);
2087
+ for (var i = 0; i < box.length; i++) c[i + crypto_secretbox_BOXZEROBYTES] = box[i];
2088
+ if (c.length < 32) return null;
2089
+ if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;
2090
+ return m.subarray(crypto_secretbox_ZEROBYTES);
2091
+ };
2092
+ nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
2093
+ nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
2094
+ nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
2095
+ nacl.scalarMult = function(n, p) {
2096
+ checkArrayTypes(n, p);
2097
+ if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error("bad n size");
2098
+ if (p.length !== crypto_scalarmult_BYTES) throw new Error("bad p size");
2099
+ var q = new Uint8Array(crypto_scalarmult_BYTES);
2100
+ crypto_scalarmult(q, n, p);
2101
+ return q;
2102
+ };
2103
+ nacl.scalarMult.base = function(n) {
2104
+ checkArrayTypes(n);
2105
+ if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error("bad n size");
2106
+ var q = new Uint8Array(crypto_scalarmult_BYTES);
2107
+ crypto_scalarmult_base(q, n);
2108
+ return q;
2109
+ };
2110
+ nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
2111
+ nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
2112
+ nacl.box = function(msg, nonce, publicKey, secretKey) {
2113
+ var k = nacl.box.before(publicKey, secretKey);
2114
+ return nacl.secretbox(msg, nonce, k);
2115
+ };
2116
+ nacl.box.before = function(publicKey, secretKey) {
2117
+ checkArrayTypes(publicKey, secretKey);
2118
+ checkBoxLengths(publicKey, secretKey);
2119
+ var k = new Uint8Array(crypto_box_BEFORENMBYTES);
2120
+ crypto_box_beforenm(k, publicKey, secretKey);
2121
+ return k;
2122
+ };
2123
+ nacl.box.after = nacl.secretbox;
2124
+ nacl.box.open = function(msg, nonce, publicKey, secretKey) {
2125
+ var k = nacl.box.before(publicKey, secretKey);
2126
+ return nacl.secretbox.open(msg, nonce, k);
2127
+ };
2128
+ nacl.box.open.after = nacl.secretbox.open;
2129
+ nacl.box.keyPair = function() {
2130
+ var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
2131
+ var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
2132
+ crypto_box_keypair(pk, sk);
2133
+ return { publicKey: pk, secretKey: sk };
2134
+ };
2135
+ nacl.box.keyPair.fromSecretKey = function(secretKey) {
2136
+ checkArrayTypes(secretKey);
2137
+ if (secretKey.length !== crypto_box_SECRETKEYBYTES)
2138
+ throw new Error("bad secret key size");
2139
+ var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
2140
+ crypto_scalarmult_base(pk, secretKey);
2141
+ return { publicKey: pk, secretKey: new Uint8Array(secretKey) };
2142
+ };
2143
+ nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
2144
+ nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
2145
+ nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
2146
+ nacl.box.nonceLength = crypto_box_NONCEBYTES;
2147
+ nacl.box.overheadLength = nacl.secretbox.overheadLength;
2148
+ nacl.sign = function(msg, secretKey) {
2149
+ checkArrayTypes(msg, secretKey);
2150
+ if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
2151
+ throw new Error("bad secret key size");
2152
+ var signedMsg = new Uint8Array(crypto_sign_BYTES + msg.length);
2153
+ crypto_sign(signedMsg, msg, msg.length, secretKey);
2154
+ return signedMsg;
2155
+ };
2156
+ nacl.sign.open = function(signedMsg, publicKey) {
2157
+ checkArrayTypes(signedMsg, publicKey);
2158
+ if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
2159
+ throw new Error("bad public key size");
2160
+ var tmp = new Uint8Array(signedMsg.length);
2161
+ var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
2162
+ if (mlen < 0) return null;
2163
+ var m = new Uint8Array(mlen);
2164
+ for (var i = 0; i < m.length; i++) m[i] = tmp[i];
2165
+ return m;
2166
+ };
2167
+ nacl.sign.detached = function(msg, secretKey) {
2168
+ var signedMsg = nacl.sign(msg, secretKey);
2169
+ var sig = new Uint8Array(crypto_sign_BYTES);
2170
+ for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
2171
+ return sig;
2172
+ };
2173
+ nacl.sign.detached.verify = function(msg, sig, publicKey) {
2174
+ checkArrayTypes(msg, sig, publicKey);
2175
+ if (sig.length !== crypto_sign_BYTES)
2176
+ throw new Error("bad signature size");
2177
+ if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
2178
+ throw new Error("bad public key size");
2179
+ var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
2180
+ var m = new Uint8Array(crypto_sign_BYTES + msg.length);
2181
+ var i;
2182
+ for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
2183
+ for (i = 0; i < msg.length; i++) sm[i + crypto_sign_BYTES] = msg[i];
2184
+ return crypto_sign_open(m, sm, sm.length, publicKey) >= 0;
2185
+ };
2186
+ nacl.sign.keyPair = function() {
2187
+ var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
2188
+ var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
2189
+ crypto_sign_keypair(pk, sk);
2190
+ return { publicKey: pk, secretKey: sk };
2191
+ };
2192
+ nacl.sign.keyPair.fromSecretKey = function(secretKey) {
2193
+ checkArrayTypes(secretKey);
2194
+ if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
2195
+ throw new Error("bad secret key size");
2196
+ var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
2197
+ for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32 + i];
2198
+ return { publicKey: pk, secretKey: new Uint8Array(secretKey) };
2199
+ };
2200
+ nacl.sign.keyPair.fromSeed = function(seed) {
2201
+ checkArrayTypes(seed);
2202
+ if (seed.length !== crypto_sign_SEEDBYTES)
2203
+ throw new Error("bad seed size");
2204
+ var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
2205
+ var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
2206
+ for (var i = 0; i < 32; i++) sk[i] = seed[i];
2207
+ crypto_sign_keypair(pk, sk, true);
2208
+ return { publicKey: pk, secretKey: sk };
2209
+ };
2210
+ nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
2211
+ nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
2212
+ nacl.sign.seedLength = crypto_sign_SEEDBYTES;
2213
+ nacl.sign.signatureLength = crypto_sign_BYTES;
2214
+ nacl.hash = function(msg) {
2215
+ checkArrayTypes(msg);
2216
+ var h = new Uint8Array(crypto_hash_BYTES);
2217
+ crypto_hash(h, msg, msg.length);
2218
+ return h;
2219
+ };
2220
+ nacl.hash.hashLength = crypto_hash_BYTES;
2221
+ nacl.verify = function(x, y) {
2222
+ checkArrayTypes(x, y);
2223
+ if (x.length === 0 || y.length === 0) return false;
2224
+ if (x.length !== y.length) return false;
2225
+ return vn(x, 0, y, 0, x.length) === 0 ? true : false;
2226
+ };
2227
+ nacl.setPRNG = function(fn) {
2228
+ randombytes = fn;
2229
+ };
2230
+ (function() {
2231
+ var crypto = typeof self !== "undefined" ? self.crypto || self.msCrypto : null;
2232
+ if (crypto && crypto.getRandomValues) {
2233
+ var QUOTA = 65536;
2234
+ nacl.setPRNG(function(x, n) {
2235
+ var i, v = new Uint8Array(n);
2236
+ for (i = 0; i < n; i += QUOTA) {
2237
+ crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
2238
+ }
2239
+ for (i = 0; i < n; i++) x[i] = v[i];
2240
+ cleanup(v);
2241
+ });
2242
+ } else if (typeof __require !== "undefined") {
2243
+ crypto = __require("crypto");
2244
+ if (crypto && crypto.randomBytes) {
2245
+ nacl.setPRNG(function(x, n) {
2246
+ var i, v = crypto.randomBytes(n);
2247
+ for (i = 0; i < n; i++) x[i] = v[i];
2248
+ cleanup(v);
2249
+ });
2250
+ }
2251
+ }
2252
+ })();
2253
+ })(typeof module !== "undefined" && module.exports ? module.exports : self.nacl = self.nacl || {});
2254
+ }
2255
+ });
2256
+
2257
+ // src/needle/needle.engine.ts
2258
+ import { randomBytes as randomBytes3 } from "crypto";
2259
+
2260
+ // src/engine/axis-observation.ts
2261
+ import { randomBytes } from "crypto";
2262
+ function createObservation(transport, ip) {
2263
+ return {
2264
+ id: randomBytes(16).toString("hex"),
2265
+ startMs: Date.now(),
2266
+ transport,
2267
+ ip,
2268
+ stages: [],
2269
+ sensors: [],
2270
+ facts: {}
2271
+ };
2272
+ }
2273
+ function startStage(obs, name) {
2274
+ const stage = { name, status: "ok", startMs: Date.now() };
2275
+ obs.stages.push(stage);
2276
+ return stage;
2277
+ }
2278
+ function endStage(stage, status = "ok", reason, code) {
2279
+ stage.endMs = Date.now();
2280
+ stage.durationMs = stage.endMs - stage.startMs;
2281
+ stage.status = status;
2282
+ if (reason) stage.reason = reason;
2283
+ if (code) stage.code = code;
2284
+ }
2285
+ function recordSensor(obs, name, allowed, riskScore, durationMs, reasons, code) {
2286
+ obs.sensors.push({ name, allowed, riskScore, durationMs, reasons, code });
2287
+ }
2288
+ function finalizeObservation(obs, decision, statusCode, resultCode) {
2289
+ obs.endMs = Date.now();
2290
+ obs.durationMs = obs.endMs - obs.startMs;
2291
+ obs.decision = decision;
2292
+ obs.statusCode = statusCode;
2293
+ if (resultCode) obs.resultCode = resultCode;
2294
+ }
2295
+
2296
+ // src/engine/observation/truth-scoring.ts
2297
+ function scoreTruth(obs, expected) {
2298
+ const anomalies = [];
2299
+ let passedChecks = 0;
2300
+ let totalChecks = 0;
2301
+ totalChecks++;
2302
+ if (obs.endMs && obs.decision) {
2303
+ passedChecks++;
2304
+ } else {
2305
+ anomalies.push({
2306
+ code: "OBS_NOT_FINALIZED",
2307
+ level: "critical",
2308
+ message: "Observation was not finalized"
2309
+ });
2310
+ }
2311
+ totalChecks++;
2312
+ if (obs.stages.length > 0) {
2313
+ passedChecks++;
2314
+ } else {
2315
+ anomalies.push({
2316
+ code: "OBS_NO_STAGES",
2317
+ level: "warning",
2318
+ message: "Observation has no execution stages"
2319
+ });
2320
+ }
2321
+ totalChecks++;
2322
+ const failedStages = obs.stages.filter((s) => s.status === "fail");
2323
+ if (failedStages.length === 0 || obs.decision === "DENY") {
2324
+ passedChecks++;
2325
+ } else {
2326
+ for (const stage of failedStages) {
2327
+ anomalies.push({
2328
+ code: "STAGE_FAILED",
2329
+ level: "warning",
2330
+ message: `Stage '${stage.name}' failed: ${stage.reason ?? "unknown"}`,
2331
+ field: `stages.${stage.name}`
2332
+ });
2333
+ }
2334
+ }
2335
+ totalChecks++;
2336
+ const invalidSensors = obs.sensors.filter((s) => s.durationMs < 0);
2337
+ if (invalidSensors.length === 0) {
2338
+ passedChecks++;
2339
+ } else {
2340
+ anomalies.push({
2341
+ code: "SENSOR_INVALID_TIMING",
2342
+ level: "warning",
2343
+ message: `${invalidSensors.length} sensor(s) have negative duration`
2344
+ });
2345
+ }
2346
+ totalChecks++;
2347
+ if (obs.durationMs !== void 0 && obs.durationMs >= 0 && obs.durationMs < 3e5) {
2348
+ passedChecks++;
2349
+ } else {
2350
+ anomalies.push({
2351
+ code: "OBS_DURATION_ANOMALY",
2352
+ level: "warning",
2353
+ message: `Observation duration ${obs.durationMs}ms is suspicious`,
2354
+ actual: obs.durationMs
2355
+ });
2356
+ }
2357
+ if (expected) {
2358
+ if (expected.decision !== void 0) {
2359
+ totalChecks++;
2360
+ if (obs.decision === expected.decision) {
2361
+ passedChecks++;
2362
+ } else {
2363
+ anomalies.push({
2364
+ code: "DECISION_MISMATCH",
2365
+ level: "critical",
2366
+ message: `Expected decision '${expected.decision}', got '${obs.decision}'`,
2367
+ field: "decision",
2368
+ expected: expected.decision,
2369
+ actual: obs.decision
2370
+ });
2371
+ }
2372
+ }
2373
+ if (expected.statusCode !== void 0) {
2374
+ totalChecks++;
2375
+ if (obs.statusCode === expected.statusCode) {
2376
+ passedChecks++;
2377
+ } else {
2378
+ anomalies.push({
2379
+ code: "STATUS_MISMATCH",
2380
+ level: "warning",
2381
+ message: `Expected status ${expected.statusCode}, got ${obs.statusCode}`,
2382
+ field: "statusCode",
2383
+ expected: expected.statusCode,
2384
+ actual: obs.statusCode
2385
+ });
2386
+ }
2387
+ }
2388
+ if (expected.effect !== void 0) {
2389
+ totalChecks++;
2390
+ if (obs.resultCode === expected.effect || obs.facts?.effect === expected.effect) {
2391
+ passedChecks++;
2392
+ } else {
2393
+ anomalies.push({
2394
+ code: "EFFECT_MISMATCH",
2395
+ level: "warning",
2396
+ message: `Expected effect '${expected.effect}', got '${obs.resultCode}'`,
2397
+ field: "resultCode",
2398
+ expected: expected.effect,
2399
+ actual: obs.resultCode
2400
+ });
2401
+ }
2402
+ }
2403
+ if (expected.maxDurationMs !== void 0) {
2404
+ totalChecks++;
2405
+ if (obs.durationMs !== void 0 && obs.durationMs <= expected.maxDurationMs) {
2406
+ passedChecks++;
2407
+ } else {
2408
+ anomalies.push({
2409
+ code: "DURATION_EXCEEDED",
2410
+ level: "warning",
2411
+ message: `Execution took ${obs.durationMs}ms, max allowed ${expected.maxDurationMs}ms`,
2412
+ field: "durationMs",
2413
+ expected: expected.maxDurationMs,
2414
+ actual: obs.durationMs
2415
+ });
2416
+ }
2417
+ }
2418
+ if (expected.minSensorsPassed !== void 0) {
2419
+ totalChecks++;
2420
+ const passed = obs.sensors.filter((s) => s.allowed).length;
2421
+ if (passed >= expected.minSensorsPassed) {
2422
+ passedChecks++;
2423
+ } else {
2424
+ anomalies.push({
2425
+ code: "INSUFFICIENT_SENSORS",
2426
+ level: "warning",
2427
+ message: `Only ${passed} sensors passed, minimum required ${expected.minSensorsPassed}`,
2428
+ field: "sensors",
2429
+ expected: expected.minSensorsPassed,
2430
+ actual: passed
2431
+ });
2432
+ }
2433
+ }
2434
+ if (expected.assertions) {
2435
+ for (const [key, expectedValue] of Object.entries(expected.assertions)) {
2436
+ totalChecks++;
2437
+ const actualValue = obs.facts[key];
2438
+ if (deepEqual(actualValue, expectedValue)) {
2439
+ passedChecks++;
2440
+ } else {
2441
+ anomalies.push({
2442
+ code: "ASSERTION_FAILED",
2443
+ level: "warning",
2444
+ message: `Assertion failed for facts.${key}`,
2445
+ field: `facts.${key}`,
2446
+ expected: expectedValue,
2447
+ actual: actualValue
2448
+ });
2449
+ }
2450
+ }
2451
+ }
2452
+ }
2453
+ const confidence = totalChecks > 0 ? passedChecks / totalChecks : 0;
2454
+ const hasCritical = anomalies.some((a) => a.level === "critical");
2455
+ const status = computeTruthStatus(confidence, hasCritical, anomalies.length);
2456
+ const isDeed = status === "confirmed" || status === "partial" && !hasCritical;
2457
+ return {
2458
+ status,
2459
+ confidence,
2460
+ anomalies,
2461
+ passedChecks,
2462
+ totalChecks,
2463
+ verifiedAt: Date.now(),
2464
+ isDeed
2465
+ };
2466
+ }
2467
+ function computeTruthStatus(confidence, hasCritical, anomalyCount) {
2468
+ if (hasCritical) return "failed";
2469
+ if (confidence === 1) return "confirmed";
2470
+ if (confidence >= 0.8) return "partial";
2471
+ if (confidence >= 0.5) return "uncertain";
2472
+ return "disputed";
2473
+ }
2474
+ function deepEqual(a, b) {
2475
+ if (a === b) return true;
2476
+ if (a === null || b === null) return false;
2477
+ if (typeof a !== typeof b) return false;
2478
+ if (typeof a !== "object") return String(a) === String(b);
2479
+ if (Array.isArray(a) && Array.isArray(b)) {
2480
+ if (a.length !== b.length) return false;
2481
+ return a.every((v, i) => deepEqual(v, b[i]));
2482
+ }
2483
+ if (Array.isArray(a) !== Array.isArray(b)) return false;
2484
+ const aKeys = Object.keys(a);
2485
+ const bKeys = Object.keys(b);
2486
+ if (aKeys.length !== bKeys.length) return false;
2487
+ return aKeys.every(
2488
+ (key) => deepEqual(
2489
+ a[key],
2490
+ b[key]
2491
+ )
2492
+ );
2493
+ }
2494
+
2495
+ // src/loom/loom.engine.ts
2496
+ var import_tweetnacl = __toESM(require_nacl_fast());
2497
+ import { createHash, randomBytes as randomBytes2 } from "crypto";
2498
+
2499
+ // src/core/constants.ts
2500
+ import {
2501
+ AXIS_MAGIC,
2502
+ AXIS_VERSION,
2503
+ MAX_HDR_LEN,
2504
+ MAX_BODY_LEN,
2505
+ MAX_SIG_LEN,
2506
+ MAX_FRAME_LEN,
2507
+ FLAG_BODY_TLV,
2508
+ FLAG_CHAIN_REQ,
2509
+ FLAG_HAS_WITNESS,
2510
+ TLV_PID,
2511
+ TLV_TS,
2512
+ TLV_INTENT,
2513
+ TLV_ACTOR_ID,
2514
+ TLV_PROOF_TYPE,
2515
+ TLV_PROOF_REF,
2516
+ TLV_NONCE,
2517
+ TLV_AUD,
2518
+ TLV_REALM,
2519
+ TLV_NODE,
2520
+ TLV_TRACE_ID,
2521
+ TLV_KID,
2522
+ TLV_RID,
2523
+ TLV_OK,
2524
+ TLV_EFFECT,
2525
+ TLV_ERROR_CODE,
2526
+ TLV_ERROR_MSG,
2527
+ TLV_PREV_HASH,
2528
+ TLV_RECEIPT_HASH,
2529
+ TLV_NODE_KID,
2530
+ TLV_NODE_CERT_HASH,
2531
+ TLV_LOOM_PRESENCE_ID,
2532
+ TLV_LOOM_WRIT,
2533
+ TLV_LOOM_THREAD_HASH,
2534
+ TLV_UPLOAD_ID,
2535
+ TLV_INDEX,
2536
+ TLV_OFFSET,
2537
+ TLV_SHA256_CHUNK,
2538
+ TLV_CAPSULE,
2539
+ TLV_BODY_OBJ,
2540
+ TLV_BODY_ARR,
2541
+ NCERT_NODE_ID,
2542
+ NCERT_KID,
2543
+ NCERT_ALG,
2544
+ NCERT_PUB,
2545
+ NCERT_NBF,
2546
+ NCERT_EXP,
2547
+ NCERT_SCOPE,
2548
+ NCERT_ISSUER_KID,
2549
+ NCERT_PAYLOAD,
2550
+ NCERT_SIG,
2551
+ PROOF_NONE,
2552
+ PROOF_CAPSULE,
2553
+ PROOF_JWT,
2554
+ PROOF_MTLS,
2555
+ PROOF_LOOM,
2556
+ PROOF_WITNESS,
2557
+ ProofType,
2558
+ BodyProfile,
2559
+ ERR_INVALID_PACKET,
2560
+ ERR_BAD_SIGNATURE,
2561
+ ERR_REPLAY_DETECTED,
2562
+ ERR_CONTRACT_VIOLATION
2563
+ } from "@nextera.one/axis-protocol";
2564
+ var _AxisMediaTypes = class _AxisMediaTypes {
2565
+ static normalize(value) {
2566
+ if (!value) return void 0;
2567
+ return value.split(";", 1)[0].trim().toLowerCase();
2568
+ }
2569
+ static isAxisContentType(value) {
2570
+ const normalized = _AxisMediaTypes.normalize(value);
2571
+ return !!normalized && _AxisMediaTypes.VALID_AXIS_CONTENT_TYPES.some(
2572
+ (contentType) => contentType === normalized
2573
+ );
2574
+ }
2575
+ };
2576
+ _AxisMediaTypes.BINARY = "application/axis-bin";
2577
+ _AxisMediaTypes.OCTET_STREAM = "application/octet-stream";
2578
+ _AxisMediaTypes.LEGACY_BINARY = "application/x-axis";
2579
+ _AxisMediaTypes.VALID_AXIS_CONTENT_TYPES = [
2580
+ _AxisMediaTypes.BINARY,
2581
+ _AxisMediaTypes.OCTET_STREAM,
2582
+ _AxisMediaTypes.LEGACY_BINARY
2583
+ ];
2584
+ var AxisMediaTypes = _AxisMediaTypes;
2585
+
2586
+ // src/loom/loom.types.ts
2587
+ function canonicalizeWrit(writ) {
2588
+ const ordered = {
2589
+ head: { tid: writ.head.tid, seq: writ.head.seq },
2590
+ body: {
2591
+ who: writ.body.who,
2592
+ act: writ.body.act,
2593
+ res: writ.body.res,
2594
+ law: writ.body.law
2595
+ },
2596
+ meta: { iat: writ.meta.iat, exp: writ.meta.exp, prev: writ.meta.prev }
2597
+ };
2598
+ return JSON.stringify(ordered);
2599
+ }
2600
+
2601
+ // src/loom/loom.engine.ts
2602
+ function sha256(data) {
2603
+ return createHash("sha256").update(data).digest("hex");
2604
+ }
2605
+ function hexToUint8(hex) {
2606
+ const bytes = new Uint8Array(hex.length / 2);
2607
+ for (let i = 0; i < hex.length; i += 2) {
2608
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
2609
+ }
2610
+ return bytes;
2611
+ }
2612
+ function b64ToUint8(b64) {
2613
+ const bin = Buffer.from(b64, "base64");
2614
+ return new Uint8Array(bin.buffer, bin.byteOffset, bin.byteLength);
2615
+ }
2616
+ var DEFAULT_PRESENCE_DURATION_MS = 30 * 60 * 1e3;
2617
+ function validateWrit(writ, publicKeyHex, threadState, grants) {
2618
+ const now = Math.floor(Date.now() / 1e3);
2619
+ if (now < writ.meta.iat) {
2620
+ return {
2621
+ valid: false,
2622
+ error: "Writ not yet valid (iat in future)",
2623
+ code: "TEMPORAL_NOT_YET",
2624
+ gate_failed: "temporal"
2625
+ };
2626
+ }
2627
+ if (now > writ.meta.exp) {
2628
+ return {
2629
+ valid: false,
2630
+ error: "Writ expired",
2631
+ code: "TEMPORAL_EXPIRED",
2632
+ gate_failed: "temporal"
2633
+ };
2634
+ }
2635
+ if (threadState) {
2636
+ if (writ.head.tid !== threadState.thread_id) {
2637
+ return {
2638
+ valid: false,
2639
+ error: "Thread ID mismatch",
2640
+ code: "CAUSAL_TID",
2641
+ gate_failed: "causal"
2642
+ };
2643
+ }
2644
+ if (writ.head.seq !== threadState.sequence + 1) {
2645
+ return {
2646
+ valid: false,
2647
+ error: `Expected seq ${threadState.sequence + 1}, got ${writ.head.seq}`,
2648
+ code: "CAUSAL_SEQ",
2649
+ gate_failed: "causal"
2650
+ };
2651
+ }
2652
+ if (writ.meta.prev !== threadState.last_receipt_hash) {
2653
+ return {
2654
+ valid: false,
2655
+ error: "Previous receipt hash mismatch",
2656
+ code: "CAUSAL_PREV",
2657
+ gate_failed: "causal"
2658
+ };
2659
+ }
2660
+ } else {
2661
+ if (writ.head.seq !== 1) {
2662
+ return {
2663
+ valid: false,
2664
+ error: "First writ in thread must have seq=1",
2665
+ code: "CAUSAL_FIRST_SEQ",
2666
+ gate_failed: "causal"
2667
+ };
2668
+ }
2669
+ if (writ.meta.prev !== "") {
2670
+ return {
2671
+ valid: false,
2672
+ error: "First writ must have empty prev hash",
2673
+ code: "CAUSAL_FIRST_PREV",
2674
+ gate_failed: "causal"
2675
+ };
2676
+ }
2677
+ }
2678
+ if (writ.body.law !== "self") {
2679
+ const matchingGrant = grants.find(
2680
+ (g) => g.grant_id === writ.body.law && g.subject === writ.body.who && grantCoversAction(g, writ.body.act, writ.body.res, now)
2681
+ );
2682
+ if (!matchingGrant) {
2683
+ return {
2684
+ valid: false,
2685
+ error: `No valid grant found for law=${writ.body.law}`,
2686
+ code: "LEGAL_NO_GRANT",
2687
+ gate_failed: "legal"
2688
+ };
2689
+ }
2690
+ }
2691
+ const unsigned = {
2692
+ head: writ.head,
2693
+ body: writ.body,
2694
+ meta: writ.meta
2695
+ };
2696
+ const canonical = canonicalizeWrit(unsigned);
2697
+ const msgBytes = new TextEncoder().encode(canonical);
2698
+ const sigBytes = b64ToUint8(writ.sig.value);
2699
+ const pubBytes = hexToUint8(publicKeyHex);
2700
+ let sigValid;
2701
+ try {
2702
+ sigValid = import_tweetnacl.sign.detached.verify(msgBytes, sigBytes, pubBytes);
2703
+ } catch {
2704
+ return {
2705
+ valid: false,
2706
+ error: "Signature verification failed",
2707
+ code: "AUTH_SIG_FAIL",
2708
+ gate_failed: "authentic"
2709
+ };
2710
+ }
2711
+ if (!sigValid) {
2712
+ return {
2713
+ valid: false,
2714
+ error: "Invalid signature",
2715
+ code: "AUTH_SIG_INVALID",
2716
+ gate_failed: "authentic"
2717
+ };
2718
+ }
2719
+ return { valid: true, writ };
2720
+ }
2721
+ function grantCoversAction(grant, action, resource, nowUnix) {
2722
+ if (nowUnix < grant.meta.iat || nowUnix > grant.meta.exp) {
2723
+ return false;
2724
+ }
2725
+ return grant.caps.some(
2726
+ (cap) => matchOec(cap.oec, action) && matchScope(cap.scope, resource)
2727
+ );
2728
+ }
2729
+ function matchOec(pattern, action) {
2730
+ if (pattern === "*") return true;
2731
+ if (pattern === action) return true;
2732
+ if (pattern.endsWith(".*")) {
2733
+ const prefix = pattern.slice(0, -2);
2734
+ return action.startsWith(prefix + ".");
2735
+ }
2736
+ return false;
2737
+ }
2738
+ function matchScope(pattern, resource) {
2739
+ if (pattern === "*") return true;
2740
+ if (pattern === resource) return true;
2741
+ if (pattern.includes("*")) {
2742
+ const regex = new RegExp(
2743
+ "^" + pattern.replace(/\./g, "\\.").replace(/\*/g, "[^:]*") + "$"
2744
+ );
2745
+ return regex.test(resource);
2746
+ }
2747
+ return false;
2748
+ }
2749
+ function createReceipt(writ, effect, prevReceipt, metadata) {
2750
+ const now = Date.now();
2751
+ const sequence = prevReceipt ? prevReceipt.sequence + 1 : 1;
2752
+ const prevHash = prevReceipt?.hash ?? null;
2753
+ const writHash = sha256(canonicalizeWrit({
2754
+ head: writ.head,
2755
+ body: writ.body,
2756
+ meta: writ.meta
2757
+ }));
2758
+ const hashInput = [
2759
+ prevHash ?? "",
2760
+ writHash,
2761
+ writ.head.tid,
2762
+ String(sequence),
2763
+ effect,
2764
+ String(now)
2765
+ ].join(":");
2766
+ const receiptHash = sha256(hashInput);
2767
+ const receiptId = sha256(`receipt:${receiptHash}:${now}`);
2768
+ return {
2769
+ receipt_id: receiptId,
2770
+ writ_hash: writHash,
2771
+ thread_id: writ.head.tid,
2772
+ sequence,
2773
+ effect,
2774
+ hash: receiptHash,
2775
+ prev_hash: prevHash,
2776
+ executed_at: now,
2777
+ metadata
2778
+ };
2779
+ }
2780
+ function updateThreadState(receipt, softid) {
2781
+ return {
2782
+ thread_id: receipt.thread_id,
2783
+ softid,
2784
+ last_receipt_hash: receipt.hash,
2785
+ sequence: receipt.sequence,
2786
+ updated_at: receipt.executed_at
2787
+ };
2788
+ }
2789
+
2790
+ // src/sensor/axis-sensor.ts
2791
+ function normalizeSensorDecision(sensorDecision) {
2792
+ if ("action" in sensorDecision) {
2793
+ switch (sensorDecision.action) {
2794
+ case "ALLOW":
2795
+ return {
2796
+ allow: true,
2797
+ riskScore: 0,
2798
+ reasons: [],
2799
+ meta: sensorDecision.meta
2800
+ };
2801
+ case "DENY":
2802
+ return {
2803
+ allow: false,
2804
+ riskScore: 100,
2805
+ reasons: [sensorDecision.code, sensorDecision.reason].filter(
2806
+ Boolean
2807
+ ),
2808
+ meta: sensorDecision.meta,
2809
+ retryAfterMs: sensorDecision.retryAfterMs
2810
+ };
2811
+ case "THROTTLE":
2812
+ return {
2813
+ allow: false,
2814
+ riskScore: 50,
2815
+ reasons: ["RATE_LIMIT"],
2816
+ retryAfterMs: sensorDecision.retryAfterMs,
2817
+ meta: sensorDecision.meta
2818
+ };
2819
+ case "FLAG":
2820
+ return {
2821
+ allow: true,
2822
+ riskScore: sensorDecision.scoreDelta,
2823
+ reasons: sensorDecision.reasons,
2824
+ meta: sensorDecision.meta
2825
+ };
2826
+ }
2827
+ }
2828
+ return {
2829
+ allow: sensorDecision.allow,
2830
+ riskScore: sensorDecision.riskScore,
2831
+ reasons: sensorDecision.reasons,
2832
+ tags: sensorDecision.tags,
2833
+ meta: sensorDecision.meta,
2834
+ tighten: sensorDecision.tighten,
2835
+ retryAfterMs: sensorDecision.retryAfterMs
2836
+ };
2837
+ }
2838
+
2839
+ // src/needle/needle.engine.ts
2840
+ function assembleNeedle(params) {
2841
+ return {
2842
+ needle_id: randomBytes3(16).toString("hex"),
2843
+ phase: "created",
2844
+ tps_coordinate: params.tps_coordinate,
2845
+ intent: params.intent,
2846
+ presence: params.presence,
2847
+ writ: params.writ,
2848
+ grants: params.grants,
2849
+ created_at: Date.now()
2850
+ };
2851
+ }
2852
+ function classifyStitch(observation, verdict) {
2853
+ if (verdict.status === "failed" || verdict.status === "disputed") {
2854
+ return "torn";
2855
+ }
2856
+ if (observation.decision === "DENY") {
2857
+ return "silent";
2858
+ }
2859
+ if (verdict.isDeed) {
2860
+ return "deed";
2861
+ }
2862
+ return "silent";
2863
+ }
2864
+ function formStitch(needle, observation, verdict, receipt) {
2865
+ return {
2866
+ stitch_id: needle.needle_id,
2867
+ kind: classifyStitch(observation, verdict),
2868
+ intent: needle.intent.intent,
2869
+ actor_id: needle.intent.actor_id,
2870
+ tps_coordinate: needle.tps_coordinate,
2871
+ observation,
2872
+ verdict,
2873
+ receipt,
2874
+ thread_id: receipt.thread_id,
2875
+ sequence: receipt.sequence,
2876
+ stitched_at: Date.now()
2877
+ };
2878
+ }
2879
+ async function runNeedlePipeline(needle, config, threadState, prevReceipt, expectedOutcome) {
2880
+ const obs = createObservation("http");
2881
+ obs.intent = needle.intent.intent;
2882
+ obs.actorId = needle.intent.actor_id;
2883
+ needle.phase = "validated";
2884
+ let stage = startStage(obs, "loom.validate");
2885
+ const validation = validateWrit(
2886
+ needle.writ,
2887
+ config.public_key,
2888
+ threadState,
2889
+ needle.grants
2890
+ );
2891
+ if (!validation.valid) {
2892
+ endStage(stage, "fail", validation.error);
2893
+ return failNeedle(needle, obs, "validated", "LOOM_VALIDATION_FAILED", validation.error ?? "Writ validation failed");
2894
+ }
2895
+ endStage(stage, "ok");
2896
+ if (config.sensors && config.sensors.length > 0) {
2897
+ stage = startStage(obs, "sensors.evaluate");
2898
+ const sensorInput = {
2899
+ intent: needle.intent.intent,
2900
+ actorId: needle.intent.actor_id,
2901
+ metadata: {
2902
+ observation: obs,
2903
+ needle_id: needle.needle_id,
2904
+ tps_coordinate: needle.tps_coordinate,
2905
+ writ: needle.writ,
2906
+ grants: needle.grants,
2907
+ params: needle.intent.params
2908
+ }
2909
+ };
2910
+ for (const sensor of config.sensors) {
2911
+ if (sensor.supports && !sensor.supports(sensorInput)) continue;
2912
+ const t0 = Date.now();
2913
+ let decision;
2914
+ try {
2915
+ const rawDecision = await sensor.run(sensorInput);
2916
+ decision = normalizeSensorDecision(rawDecision);
2917
+ } catch (err) {
2918
+ const msg = err instanceof Error ? err.message : String(err);
2919
+ recordSensor(obs, sensor.name, false, 100, Date.now() - t0, [`sensor_error:${msg}`]);
2920
+ endStage(stage, "fail", `Sensor ${sensor.name} threw: ${msg}`);
2921
+ return failNeedle(needle, obs, "validated", "SENSOR_ERROR", `Sensor ${sensor.name} failed: ${msg}`);
2922
+ }
2923
+ recordSensor(obs, sensor.name, decision.allow, decision.riskScore, Date.now() - t0, decision.reasons);
2924
+ if (!decision.allow) {
2925
+ endStage(stage, "fail", `Sensor ${sensor.name} denied`);
2926
+ return failNeedle(needle, obs, "validated", "SENSOR_DENY", decision.reasons[0] ?? `Denied by ${sensor.name}`);
2927
+ }
2928
+ }
2929
+ endStage(stage, "ok");
2930
+ }
2931
+ needle.phase = "executing";
2932
+ stage = startStage(obs, "handler.execute");
2933
+ const handler = config.handlers.get(needle.intent.intent);
2934
+ if (!handler) {
2935
+ endStage(stage, "fail", `No handler for intent '${needle.intent.intent}'`);
2936
+ return failNeedle(needle, obs, "executing", "NO_HANDLER", `No handler registered for intent '${needle.intent.intent}'`);
2937
+ }
2938
+ const handlerCtx = {
2939
+ needle_id: needle.needle_id,
2940
+ actor_id: needle.intent.actor_id,
2941
+ presence_id: needle.presence.presence_id,
2942
+ writ: needle.writ,
2943
+ grants: needle.grants,
2944
+ tps_coordinate: needle.tps_coordinate
2945
+ };
2946
+ let handlerResult;
2947
+ try {
2948
+ handlerResult = await handler(needle.intent, handlerCtx);
2949
+ } catch (err) {
2950
+ const msg = err instanceof Error ? err.message : String(err);
2951
+ endStage(stage, "fail", msg);
2952
+ return failNeedle(needle, obs, "executing", "HANDLER_ERROR", msg);
2953
+ }
2954
+ if (!handlerResult.ok) {
2955
+ endStage(stage, "fail", handlerResult.effect);
2956
+ obs.decision = "DENY";
2957
+ obs.resultCode = handlerResult.effect;
2958
+ obs.statusCode = handlerResult.status_code ?? 400;
2959
+ } else {
2960
+ endStage(stage, "ok");
2961
+ obs.decision = "ALLOW";
2962
+ obs.resultCode = handlerResult.effect;
2963
+ obs.statusCode = handlerResult.status_code ?? 200;
2964
+ }
2965
+ if (handlerResult.data) {
2966
+ obs.facts = { ...obs.facts, ...handlerResult.data };
2967
+ }
2968
+ needle.phase = "observed";
2969
+ finalizeObservation(obs, obs.decision ?? "DENY", obs.statusCode ?? 500, obs.resultCode);
2970
+ needle.observation = obs;
2971
+ const verdict = scoreTruth(obs, expectedOutcome);
2972
+ needle.verdict = verdict;
2973
+ needle.phase = "stitched";
2974
+ stage = startStage(obs, "stitch.form");
2975
+ const receipt = createReceipt(
2976
+ needle.writ,
2977
+ obs.decision ?? "DENY",
2978
+ prevReceipt
2979
+ );
2980
+ needle.receipt = receipt;
2981
+ const newThreadState = updateThreadState(
2982
+ receipt,
2983
+ needle.intent.actor_id
2984
+ );
2985
+ const stitch = formStitch(needle, obs, verdict, receipt);
2986
+ needle.completed_at = Date.now();
2987
+ endStage(stage, "ok");
2988
+ return {
2989
+ ok: handlerResult.ok,
2990
+ needle,
2991
+ stitch,
2992
+ thread_state: newThreadState
2993
+ };
2994
+ }
2995
+ function failNeedle(needle, obs, phase, code, message) {
2996
+ needle.phase = "failed";
2997
+ needle.error = { phase, code, message };
2998
+ needle.completed_at = Date.now();
2999
+ obs.decision = obs.decision ?? "DENY";
3000
+ obs.statusCode = obs.statusCode ?? 500;
3001
+ finalizeObservation(obs, obs.decision, obs.statusCode, obs.resultCode);
3002
+ needle.observation = obs;
3003
+ const verdict = scoreTruth(obs);
3004
+ needle.verdict = verdict;
3005
+ return {
3006
+ ok: false,
3007
+ needle
3008
+ };
3009
+ }
3010
+
3011
+ // src/needle/knot.engine.ts
3012
+ import { createHash as createHash3, randomBytes as randomBytes4 } from "crypto";
3013
+ function openKnot(params) {
3014
+ const isIrreversible = params.type === "irreversible";
3015
+ return {
3016
+ knot_id: `knot_${randomBytes4(16).toString("hex")}`,
3017
+ type: params.type,
3018
+ status: "open",
3019
+ stitch_ids: [],
3020
+ thread_id: params.thread_id,
3021
+ tps_anchor: params.tps_anchor,
3022
+ irreversible: isIrreversible,
3023
+ capsule_id: params.capsule_id,
3024
+ law_ref: params.law_ref,
3025
+ branch_ids: [],
3026
+ required_count: params.required_count,
3027
+ all_or_nothing: params.all_or_nothing ?? (params.type === "authority" || isIrreversible),
3028
+ actor_id: params.actor_id,
3029
+ created_at: Date.now()
3030
+ };
3031
+ }
3032
+ function addStitchToKnot(knot, stitch) {
3033
+ if (knot.status !== "open") {
3034
+ return `Knot ${knot.knot_id} is ${knot.status}, cannot add stitches`;
3035
+ }
3036
+ if (stitch.thread_id !== knot.thread_id) {
3037
+ return `Stitch thread ${stitch.thread_id} does not match knot thread ${knot.thread_id}`;
3038
+ }
3039
+ if (knot.stitch_ids.includes(stitch.stitch_id)) {
3040
+ return `Stitch ${stitch.stitch_id} already in knot`;
3041
+ }
3042
+ if (knot.type === "authority" && knot.capsule_id) {
3043
+ if (stitch.observation.capsuleId && stitch.observation.capsuleId !== knot.capsule_id) {
3044
+ return `Stitch capsule ${stitch.observation.capsuleId} does not match knot capsule ${knot.capsule_id}`;
3045
+ }
3046
+ }
3047
+ knot.stitch_ids.push(stitch.stitch_id);
3048
+ return null;
3049
+ }
3050
+ function validateKnot(knot, stitches) {
3051
+ const errors = [];
3052
+ const passedIds = [];
3053
+ const failedIds = [];
3054
+ const stitchMap = new Map(stitches.map((s) => [s.stitch_id, s]));
3055
+ for (const sid of knot.stitch_ids) {
3056
+ const stitch = stitchMap.get(sid);
3057
+ if (!stitch) {
3058
+ failedIds.push(sid);
3059
+ errors.push({
3060
+ code: "KNOT_MISSING_STITCH",
3061
+ message: `Stitch ${sid} not found`,
3062
+ stitch_id: sid
3063
+ });
3064
+ continue;
3065
+ }
3066
+ if (stitch.kind === "torn") {
3067
+ failedIds.push(sid);
3068
+ errors.push({
3069
+ code: "KNOT_TORN_STITCH",
3070
+ message: `Stitch ${sid} is torn (failed/disputed)`,
3071
+ stitch_id: sid
3072
+ });
3073
+ continue;
3074
+ }
3075
+ if (knot.type === "irreversible" && stitch.kind !== "deed") {
3076
+ failedIds.push(sid);
3077
+ errors.push({
3078
+ code: "KNOT_REQUIRES_DEED",
3079
+ message: `Irreversible knot requires deed stitch, got '${stitch.kind}'`,
3080
+ stitch_id: sid
3081
+ });
3082
+ continue;
3083
+ }
3084
+ passedIds.push(sid);
3085
+ }
3086
+ if (knot.required_count !== void 0 && knot.stitch_ids.length < knot.required_count) {
3087
+ errors.push({
3088
+ code: "KNOT_INSUFFICIENT_STITCHES",
3089
+ message: `Knot requires ${knot.required_count} stitches, has ${knot.stitch_ids.length}`
3090
+ });
3091
+ }
3092
+ const allPassed = failedIds.length === 0;
3093
+ const canTie = knot.all_or_nothing ? allPassed && (knot.required_count === void 0 || knot.stitch_ids.length >= knot.required_count) : passedIds.length > 0 && (knot.required_count === void 0 || passedIds.length >= knot.required_count);
3094
+ return {
3095
+ valid: allPassed && errors.length === 0,
3096
+ passed_stitch_ids: passedIds,
3097
+ failed_stitch_ids: failedIds,
3098
+ can_tie: canTie,
3099
+ errors
3100
+ };
3101
+ }
3102
+ function tieKnot(knot, stitches) {
3103
+ const validation = validateKnot(knot, stitches);
3104
+ if (!validation.can_tie) {
3105
+ return { ...validation, knot };
3106
+ }
3107
+ const receiptHashes = validation.passed_stitch_ids.map((sid) => stitches.find((s) => s.stitch_id === sid)).sort((a, b) => a.sequence - b.sequence).map((s) => s.receipt.hash);
3108
+ const witnessPayload = receiptHashes.join(":");
3109
+ knot.witness_hash = createHash3("sha256").update(witnessPayload).digest("hex");
3110
+ knot.status = "tied";
3111
+ knot.tied_at = Date.now();
3112
+ return { ...validation, knot };
3113
+ }
3114
+ function breakKnot(knot, request) {
3115
+ if (knot.status === "broken") {
3116
+ return { ok: false, error: "Knot is already broken" };
3117
+ }
3118
+ if (knot.status === "open") {
3119
+ knot.status = "broken";
3120
+ knot.broken_at = Date.now();
3121
+ knot.break_reason = request.reason;
3122
+ return { ok: true };
3123
+ }
3124
+ if (knot.status === "tied") {
3125
+ if (!request.reason) {
3126
+ return { ok: false, error: "Breaking a tied knot requires a reason" };
3127
+ }
3128
+ if ((knot.irreversible || knot.type === "law") && !request.override_grant_id) {
3129
+ return {
3130
+ ok: false,
3131
+ error: `Breaking ${knot.type} knot requires override_grant_id from higher authority`
3132
+ };
3133
+ }
3134
+ knot.status = "broken";
3135
+ knot.broken_at = Date.now();
3136
+ knot.break_reason = request.reason;
3137
+ return { ok: true };
3138
+ }
3139
+ return { ok: false, error: `Cannot break knot in status '${knot.status}'` };
3140
+ }
3141
+ function forkFromKnot(knot, branchId, decisionStitchId) {
3142
+ if (knot.status !== "tied" && knot.status !== "open") {
3143
+ return { ok: false, error: `Cannot fork from knot in status '${knot.status}'` };
3144
+ }
3145
+ if (decisionStitchId) {
3146
+ if (!knot.stitch_ids.includes(decisionStitchId)) {
3147
+ return { ok: false, error: `Decision stitch ${decisionStitchId} is not part of this knot` };
3148
+ }
3149
+ knot.decision_stitch_id = decisionStitchId;
3150
+ }
3151
+ knot.branch_ids.push(branchId);
3152
+ knot.status = "forked";
3153
+ return { ok: true };
3154
+ }
3155
+ function isKnotOpen(knot) {
3156
+ return knot.status === "open";
3157
+ }
3158
+ function isPointOfNoReturn(knot) {
3159
+ return knot.irreversible && knot.status === "tied";
3160
+ }
3161
+ function findKnotsForStitch(stitchId, knots) {
3162
+ return knots.filter((k) => k.stitch_ids.includes(stitchId));
3163
+ }
3164
+ function getIrreversibleKnots(knots) {
3165
+ return knots.filter((k) => k.irreversible && k.status === "tied");
3166
+ }
3167
+ function getDecisionPoints(knots) {
3168
+ return knots.filter((k) => k.type === "decision" || k.status === "forked");
3169
+ }
3170
+
3171
+ // src/needle/fabric.engine.ts
3172
+ import { createHash as createHash4, randomBytes as randomBytes5 } from "crypto";
3173
+ function createFabric() {
3174
+ return {
3175
+ fabric_id: `fab_${randomBytes5(16).toString("hex")}`,
3176
+ state_hash: hashState(/* @__PURE__ */ new Map()),
3177
+ cells: /* @__PURE__ */ new Map(),
3178
+ thread_ids: [],
3179
+ stitch_count: 0,
3180
+ knot_count: 0,
3181
+ computed_at: Date.now(),
3182
+ version: 0
3183
+ };
3184
+ }
3185
+ function applyStitch(fabric, stitch, effect) {
3186
+ for (const [key, value] of Object.entries(effect.mutations)) {
3187
+ if (value === null) {
3188
+ fabric.cells.delete(key);
3189
+ } else {
3190
+ const existing = fabric.cells.get(key);
3191
+ if (existing?.locked) {
3192
+ continue;
3193
+ }
3194
+ fabric.cells.set(key, {
3195
+ key,
3196
+ value,
3197
+ last_stitch_id: stitch.stitch_id,
3198
+ last_tps: stitch.tps_coordinate,
3199
+ write_count: (existing?.write_count ?? 0) + 1,
3200
+ locked: false
3201
+ });
3202
+ }
3203
+ }
3204
+ if (!fabric.thread_ids.includes(stitch.thread_id)) {
3205
+ fabric.thread_ids.push(stitch.thread_id);
3206
+ }
3207
+ fabric.stitch_count++;
3208
+ fabric.version++;
3209
+ fabric.projected_at_tps = stitch.tps_coordinate ?? fabric.projected_at_tps;
3210
+ fabric.computed_at = Date.now();
3211
+ fabric.state_hash = hashState(fabric.cells);
3212
+ }
3213
+ function weave(stitches, resolver, knots) {
3214
+ const fabric = createFabric();
3215
+ const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);
3216
+ for (const stitch of sorted) {
3217
+ if (stitch.kind === "torn") continue;
3218
+ const effect = resolver(stitch);
3219
+ applyStitch(fabric, stitch, effect);
3220
+ }
3221
+ if (knots) {
3222
+ for (const knot of knots) {
3223
+ if (knot.irreversible && knot.status === "tied") {
3224
+ lockCellsByKnot(fabric, knot, stitches, resolver);
3225
+ fabric.knot_count++;
3226
+ }
3227
+ }
3228
+ }
3229
+ return fabric;
3230
+ }
3231
+ function projectAt(stitches, resolver, tpsFilter, knots) {
3232
+ const filtered = stitches.filter((s) => tpsFilter(s.tps_coordinate));
3233
+ return weave(filtered, resolver, knots);
3234
+ }
3235
+ function lockCellsByKnot(fabric, knot, stitches, resolver) {
3236
+ const knotStitchIds = new Set(knot.stitch_ids);
3237
+ const knotStitches = stitches.filter((s) => knotStitchIds.has(s.stitch_id));
3238
+ for (const stitch of knotStitches) {
3239
+ const effect = resolver(stitch);
3240
+ for (const key of Object.keys(effect.mutations)) {
3241
+ const cell = fabric.cells.get(key);
3242
+ if (cell) {
3243
+ cell.locked = true;
3244
+ cell.locked_by_knot = knot.knot_id;
3245
+ }
3246
+ }
3247
+ }
3248
+ }
3249
+ function lockCells(fabric, keys, knotId) {
3250
+ for (const key of keys) {
3251
+ const cell = fabric.cells.get(key);
3252
+ if (cell) {
3253
+ cell.locked = true;
3254
+ cell.locked_by_knot = knotId;
3255
+ }
3256
+ }
3257
+ }
3258
+ function queryFabric(fabric, query) {
3259
+ let results = [...fabric.cells.values()];
3260
+ if (query.keys) {
3261
+ const keySet = new Set(query.keys);
3262
+ results = results.filter((c) => keySet.has(c.key));
3263
+ }
3264
+ if (query.prefix) {
3265
+ const prefix = query.prefix;
3266
+ results = results.filter((c) => c.key.startsWith(prefix));
3267
+ }
3268
+ if (query.locked_only) {
3269
+ results = results.filter((c) => c.locked);
3270
+ }
3271
+ return results;
3272
+ }
3273
+ function getFabricValue(fabric, key) {
3274
+ return fabric.cells.get(key)?.value;
3275
+ }
3276
+ function diffFabrics(a, b) {
3277
+ const entries = [];
3278
+ let added = 0;
3279
+ let modified = 0;
3280
+ let deleted = 0;
3281
+ for (const [key, cellB] of b.cells) {
3282
+ const cellA = a.cells.get(key);
3283
+ if (!cellA) {
3284
+ entries.push({
3285
+ key,
3286
+ kind: "added",
3287
+ after: cellB.value,
3288
+ caused_by_stitch: cellB.last_stitch_id
3289
+ });
3290
+ added++;
3291
+ } else if (JSON.stringify(cellA.value) !== JSON.stringify(cellB.value)) {
3292
+ entries.push({
3293
+ key,
3294
+ kind: "modified",
3295
+ before: cellA.value,
3296
+ after: cellB.value,
3297
+ caused_by_stitch: cellB.last_stitch_id
3298
+ });
3299
+ modified++;
3300
+ }
3301
+ }
3302
+ for (const [key, cellA] of a.cells) {
3303
+ if (!b.cells.has(key)) {
3304
+ entries.push({
3305
+ key,
3306
+ kind: "deleted",
3307
+ before: cellA.value
3308
+ });
3309
+ deleted++;
3310
+ }
3311
+ }
3312
+ return {
3313
+ from_fabric_id: a.fabric_id,
3314
+ to_fabric_id: b.fabric_id,
3315
+ entries,
3316
+ added_count: added,
3317
+ modified_count: modified,
3318
+ deleted_count: deleted
3319
+ };
3320
+ }
3321
+ function hashState(cells) {
3322
+ const keys = [...cells.keys()].sort();
3323
+ const payload = keys.map((k) => `${k}=${JSON.stringify(cells.get(k).value)}`).join("\n");
3324
+ return createHash4("sha256").update(payload).digest("hex");
3325
+ }
3326
+
3327
+ // src/needle/pattern.engine.ts
3328
+ import { randomBytes as randomBytes6 } from "crypto";
3329
+ var InMemoryPatternStore = class {
3330
+ constructor() {
3331
+ this.patterns = /* @__PURE__ */ new Map();
3332
+ }
3333
+ save(pattern) {
3334
+ this.patterns.set(pattern.pattern_id, pattern);
3335
+ }
3336
+ get(patternId) {
3337
+ return this.patterns.get(patternId);
3338
+ }
3339
+ findByKind(kind) {
3340
+ return [...this.patterns.values()].filter((p) => p.kind === kind);
3341
+ }
3342
+ findByIntent(intent) {
3343
+ return [...this.patterns.values()].filter(
3344
+ (p) => p.signature.intent_sequence?.includes(intent)
3345
+ );
3346
+ }
3347
+ all() {
3348
+ return [...this.patterns.values()];
3349
+ }
3350
+ };
3351
+ function detectSequencePatterns(stitches, windowSize, minOccurrences) {
3352
+ if (stitches.length < windowSize || windowSize < 2) return [];
3353
+ const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);
3354
+ const sequenceCounts = /* @__PURE__ */ new Map();
3355
+ for (let i = 0; i <= sorted.length - windowSize; i++) {
3356
+ const window = sorted.slice(i, i + windowSize);
3357
+ const key = window.map((s) => s.intent).join("\u2192");
3358
+ const ids = window.map((s) => s.stitch_id);
3359
+ const existing = sequenceCounts.get(key);
3360
+ if (existing) {
3361
+ existing.count++;
3362
+ existing.stitch_ids.push(ids);
3363
+ } else {
3364
+ sequenceCounts.set(key, { count: 1, stitch_ids: [ids] });
3365
+ }
3366
+ }
3367
+ const patterns = [];
3368
+ const now = Date.now();
3369
+ for (const [key, data] of sequenceCounts) {
3370
+ if (data.count < minOccurrences) continue;
3371
+ const intents = key.split("\u2192");
3372
+ const confidence = Math.min(data.count / (minOccurrences * 2), 1);
3373
+ patterns.push({
3374
+ pattern_id: `pat_seq_${randomBytes6(8).toString("hex")}`,
3375
+ kind: "sequence",
3376
+ name: `Sequence: ${intents.join(" \u2192 ")}`,
3377
+ signature: {
3378
+ intent_sequence: intents,
3379
+ min_length: windowSize,
3380
+ max_length: windowSize
3381
+ },
3382
+ confidence,
3383
+ occurrence_count: data.count,
3384
+ first_seen_at: now,
3385
+ last_seen_at: now,
3386
+ seen_in_threads: [...new Set(
3387
+ data.stitch_ids.flatMap(
3388
+ (ids) => ids.map((id) => sorted.find((s) => s.stitch_id === id)?.thread_id).filter(Boolean)
3389
+ )
3390
+ )],
3391
+ classification: "unclassified"
3392
+ });
3393
+ }
3394
+ return patterns;
3395
+ }
3396
+ function detectKnotPatterns(knots, minOccurrences) {
3397
+ const groups = /* @__PURE__ */ new Map();
3398
+ for (const knot of knots) {
3399
+ if (knot.status !== "tied") continue;
3400
+ const key = `${knot.type}:${knot.stitch_ids.length}`;
3401
+ const group = groups.get(key) ?? [];
3402
+ group.push(knot);
3403
+ groups.set(key, group);
3404
+ }
3405
+ const patterns = [];
3406
+ const now = Date.now();
3407
+ for (const [key, group] of groups) {
3408
+ if (group.length < minOccurrences) continue;
3409
+ const [type, sizeStr] = key.split(":");
3410
+ const size = parseInt(sizeStr, 10);
3411
+ const confidence = Math.min(group.length / (minOccurrences * 2), 1);
3412
+ patterns.push({
3413
+ pattern_id: `pat_knot_${randomBytes6(8).toString("hex")}`,
3414
+ kind: "knot",
3415
+ name: `Knot: ${type} (${size} stitches)`,
3416
+ signature: {
3417
+ knot_type: type,
3418
+ knot_size: size
3419
+ },
3420
+ confidence,
3421
+ occurrence_count: group.length,
3422
+ first_seen_at: now,
3423
+ last_seen_at: now,
3424
+ seen_in_threads: [...new Set(group.map((k) => k.thread_id))],
3425
+ classification: "unclassified"
3426
+ });
3427
+ }
3428
+ return patterns;
3429
+ }
3430
+ function matchPatterns(stitches, patterns) {
3431
+ const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);
3432
+ const matches = [];
3433
+ const now = Date.now();
3434
+ for (const pattern of patterns) {
3435
+ if (pattern.kind === "sequence" && pattern.signature.intent_sequence) {
3436
+ const seq = pattern.signature.intent_sequence;
3437
+ const seqLen = seq.length;
3438
+ for (let i = 0; i <= sorted.length - seqLen; i++) {
3439
+ const window = sorted.slice(i, i + seqLen);
3440
+ const windowIntents = window.map((s) => s.intent);
3441
+ if (windowIntents.every((intent, idx) => intent === seq[idx])) {
3442
+ matches.push({
3443
+ pattern_id: pattern.pattern_id,
3444
+ matched_stitch_ids: window.map((s) => s.stitch_id),
3445
+ match_score: 1,
3446
+ thread_id: window[0].thread_id,
3447
+ detected_at: now
3448
+ });
3449
+ }
3450
+ }
3451
+ }
3452
+ }
3453
+ return matches;
3454
+ }
3455
+ function recordOccurrence(pattern, threadId) {
3456
+ pattern.occurrence_count++;
3457
+ pattern.last_seen_at = Date.now();
3458
+ pattern.confidence = 1 - 1 / (1 + pattern.occurrence_count * 0.5);
3459
+ if (!pattern.seen_in_threads.includes(threadId)) {
3460
+ pattern.seen_in_threads.push(threadId);
3461
+ }
3462
+ }
3463
+ function detectAnomalies(recentStitches, knownPatterns, threshold = 0.7) {
3464
+ const anomalies = [];
3465
+ const sorted = [...recentStitches].sort((a, b) => a.sequence - b.sequence);
3466
+ const now = Date.now();
3467
+ for (const pattern of knownPatterns) {
3468
+ if (pattern.kind !== "sequence" || !pattern.signature.intent_sequence) continue;
3469
+ if (pattern.confidence < threshold) continue;
3470
+ const seq = pattern.signature.intent_sequence;
3471
+ if (sorted.length >= 1 && sorted.length < seq.length) {
3472
+ const partialMatch = sorted.every(
3473
+ (s, i) => i < seq.length && s.intent === seq[i]
3474
+ );
3475
+ if (partialMatch) {
3476
+ const expectedNext = seq[sorted.length];
3477
+ const lastStitch = sorted[sorted.length - 1];
3478
+ if (pattern.occurrence_count >= 3) {
3479
+ anomalies.push({
3480
+ pattern_id: `pat_anom_${randomBytes6(8).toString("hex")}`,
3481
+ kind: "anomaly",
3482
+ name: `Incomplete: ${pattern.name}`,
3483
+ description: `Expected '${expectedNext}' after '${lastStitch.intent}' based on pattern '${pattern.name}'`,
3484
+ signature: pattern.signature,
3485
+ confidence: pattern.confidence * 0.8,
3486
+ occurrence_count: 1,
3487
+ first_seen_at: now,
3488
+ last_seen_at: now,
3489
+ seen_in_threads: [lastStitch.thread_id],
3490
+ classification: "anomalous"
3491
+ });
3492
+ }
3493
+ }
3494
+ }
3495
+ }
3496
+ return anomalies;
3497
+ }
3498
+ export {
3499
+ InMemoryPatternStore,
3500
+ addStitchToKnot,
3501
+ applyStitch,
3502
+ assembleNeedle,
3503
+ breakKnot,
3504
+ createFabric,
3505
+ detectAnomalies,
3506
+ detectKnotPatterns,
3507
+ detectSequencePatterns,
3508
+ diffFabrics,
3509
+ findKnotsForStitch,
3510
+ forkFromKnot,
3511
+ formStitch,
3512
+ getDecisionPoints,
3513
+ getFabricValue,
3514
+ getIrreversibleKnots,
3515
+ isKnotOpen,
3516
+ isPointOfNoReturn,
3517
+ lockCells,
3518
+ matchPatterns,
3519
+ openKnot,
3520
+ projectAt,
3521
+ queryFabric,
3522
+ recordOccurrence,
3523
+ runNeedlePipeline,
3524
+ tieKnot,
3525
+ validateKnot,
3526
+ weave
3527
+ };
3528
+ //# sourceMappingURL=index.mjs.map