@zubari/sdk 0.1.5 → 0.1.7
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.
- package/dist/{WalletManager-CYJNiww6.d.ts → WalletManager-YnFArqAt.d.ts} +22 -17
- package/dist/{WalletManager-Dmmcbtiw.d.mts → WalletManager-zKc_xew_.d.mts} +22 -17
- package/dist/{index-OxzgPoRG.d.ts → index-CLssrNf2.d.ts} +1 -1
- package/dist/{index-poGbMJzn.d.mts → index-DXTHGOnP.d.mts} +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +720 -2924
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +716 -2927
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +513 -2789
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +514 -2790
- package/dist/react/index.mjs.map +1 -1
- package/dist/services/index.d.mts +288 -54
- package/dist/services/index.d.ts +288 -54
- package/dist/services/index.js +377 -2683
- package/dist/services/index.js.map +1 -1
- package/dist/services/index.mjs +374 -2681
- package/dist/services/index.mjs.map +1 -1
- package/dist/wallet/index.d.mts +2 -2
- package/dist/wallet/index.d.ts +2 -2
- package/dist/wallet/index.js +582 -2860
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +583 -2861
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +9 -5
- package/dist/TransactionService-CxwB1kpN.d.mts +0 -205
- package/dist/TransactionService-DdL6H6M-.d.ts +0 -205
package/dist/react/index.js
CHANGED
|
@@ -5,2409 +5,13 @@ var ethers = require('ethers');
|
|
|
5
5
|
var viem = require('viem');
|
|
6
6
|
var chains = require('viem/chains');
|
|
7
7
|
var bip39 = require('@scure/bip39');
|
|
8
|
-
require('@scure/bip39/wordlists/english');
|
|
8
|
+
var english = require('@scure/bip39/wordlists/english');
|
|
9
9
|
var bip32 = require('@scure/bip32');
|
|
10
10
|
var base = require('@scure/base');
|
|
11
11
|
var sha256 = require('@noble/hashes/sha256');
|
|
12
12
|
var ripemd160 = require('@noble/hashes/ripemd160');
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
var __defProp = Object.defineProperty;
|
|
16
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
17
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
18
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
19
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
20
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
21
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
22
|
-
}) : x)(function(x) {
|
|
23
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
24
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
25
|
-
});
|
|
26
|
-
var __commonJS = (cb, mod) => function __require2() {
|
|
27
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
28
|
-
};
|
|
29
|
-
var __copyProps = (to, from, except, desc) => {
|
|
30
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
31
|
-
for (let key of __getOwnPropNames(from))
|
|
32
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
33
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
34
|
-
}
|
|
35
|
-
return to;
|
|
36
|
-
};
|
|
37
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
38
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
39
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
40
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
41
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
42
|
-
!mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
43
|
-
mod
|
|
44
|
-
));
|
|
45
|
-
|
|
46
|
-
// ../../node_modules/tweetnacl/nacl-fast.js
|
|
47
|
-
var require_nacl_fast = __commonJS({
|
|
48
|
-
"../../node_modules/tweetnacl/nacl-fast.js"(exports$1, module) {
|
|
49
|
-
(function(nacl) {
|
|
50
|
-
var gf = function(init) {
|
|
51
|
-
var i, r = new Float64Array(16);
|
|
52
|
-
if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
|
|
53
|
-
return r;
|
|
54
|
-
};
|
|
55
|
-
var randombytes = function() {
|
|
56
|
-
throw new Error("no PRNG");
|
|
57
|
-
};
|
|
58
|
-
var _0 = new Uint8Array(16);
|
|
59
|
-
var _9 = new Uint8Array(32);
|
|
60
|
-
_9[0] = 9;
|
|
61
|
-
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]);
|
|
62
|
-
function ts64(x, i, h, l) {
|
|
63
|
-
x[i] = h >> 24 & 255;
|
|
64
|
-
x[i + 1] = h >> 16 & 255;
|
|
65
|
-
x[i + 2] = h >> 8 & 255;
|
|
66
|
-
x[i + 3] = h & 255;
|
|
67
|
-
x[i + 4] = l >> 24 & 255;
|
|
68
|
-
x[i + 5] = l >> 16 & 255;
|
|
69
|
-
x[i + 6] = l >> 8 & 255;
|
|
70
|
-
x[i + 7] = l & 255;
|
|
71
|
-
}
|
|
72
|
-
function vn(x, xi, y, yi, n) {
|
|
73
|
-
var i, d = 0;
|
|
74
|
-
for (i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i];
|
|
75
|
-
return (1 & d - 1 >>> 8) - 1;
|
|
76
|
-
}
|
|
77
|
-
function crypto_verify_16(x, xi, y, yi) {
|
|
78
|
-
return vn(x, xi, y, yi, 16);
|
|
79
|
-
}
|
|
80
|
-
function crypto_verify_32(x, xi, y, yi) {
|
|
81
|
-
return vn(x, xi, y, yi, 32);
|
|
82
|
-
}
|
|
83
|
-
function core_salsa20(o, p, k, c) {
|
|
84
|
-
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;
|
|
85
|
-
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;
|
|
86
|
-
for (var i = 0; i < 20; i += 2) {
|
|
87
|
-
u = x0 + x12 | 0;
|
|
88
|
-
x4 ^= u << 7 | u >>> 32 - 7;
|
|
89
|
-
u = x4 + x0 | 0;
|
|
90
|
-
x8 ^= u << 9 | u >>> 32 - 9;
|
|
91
|
-
u = x8 + x4 | 0;
|
|
92
|
-
x12 ^= u << 13 | u >>> 32 - 13;
|
|
93
|
-
u = x12 + x8 | 0;
|
|
94
|
-
x0 ^= u << 18 | u >>> 32 - 18;
|
|
95
|
-
u = x5 + x1 | 0;
|
|
96
|
-
x9 ^= u << 7 | u >>> 32 - 7;
|
|
97
|
-
u = x9 + x5 | 0;
|
|
98
|
-
x13 ^= u << 9 | u >>> 32 - 9;
|
|
99
|
-
u = x13 + x9 | 0;
|
|
100
|
-
x1 ^= u << 13 | u >>> 32 - 13;
|
|
101
|
-
u = x1 + x13 | 0;
|
|
102
|
-
x5 ^= u << 18 | u >>> 32 - 18;
|
|
103
|
-
u = x10 + x6 | 0;
|
|
104
|
-
x14 ^= u << 7 | u >>> 32 - 7;
|
|
105
|
-
u = x14 + x10 | 0;
|
|
106
|
-
x2 ^= u << 9 | u >>> 32 - 9;
|
|
107
|
-
u = x2 + x14 | 0;
|
|
108
|
-
x6 ^= u << 13 | u >>> 32 - 13;
|
|
109
|
-
u = x6 + x2 | 0;
|
|
110
|
-
x10 ^= u << 18 | u >>> 32 - 18;
|
|
111
|
-
u = x15 + x11 | 0;
|
|
112
|
-
x3 ^= u << 7 | u >>> 32 - 7;
|
|
113
|
-
u = x3 + x15 | 0;
|
|
114
|
-
x7 ^= u << 9 | u >>> 32 - 9;
|
|
115
|
-
u = x7 + x3 | 0;
|
|
116
|
-
x11 ^= u << 13 | u >>> 32 - 13;
|
|
117
|
-
u = x11 + x7 | 0;
|
|
118
|
-
x15 ^= u << 18 | u >>> 32 - 18;
|
|
119
|
-
u = x0 + x3 | 0;
|
|
120
|
-
x1 ^= u << 7 | u >>> 32 - 7;
|
|
121
|
-
u = x1 + x0 | 0;
|
|
122
|
-
x2 ^= u << 9 | u >>> 32 - 9;
|
|
123
|
-
u = x2 + x1 | 0;
|
|
124
|
-
x3 ^= u << 13 | u >>> 32 - 13;
|
|
125
|
-
u = x3 + x2 | 0;
|
|
126
|
-
x0 ^= u << 18 | u >>> 32 - 18;
|
|
127
|
-
u = x5 + x4 | 0;
|
|
128
|
-
x6 ^= u << 7 | u >>> 32 - 7;
|
|
129
|
-
u = x6 + x5 | 0;
|
|
130
|
-
x7 ^= u << 9 | u >>> 32 - 9;
|
|
131
|
-
u = x7 + x6 | 0;
|
|
132
|
-
x4 ^= u << 13 | u >>> 32 - 13;
|
|
133
|
-
u = x4 + x7 | 0;
|
|
134
|
-
x5 ^= u << 18 | u >>> 32 - 18;
|
|
135
|
-
u = x10 + x9 | 0;
|
|
136
|
-
x11 ^= u << 7 | u >>> 32 - 7;
|
|
137
|
-
u = x11 + x10 | 0;
|
|
138
|
-
x8 ^= u << 9 | u >>> 32 - 9;
|
|
139
|
-
u = x8 + x11 | 0;
|
|
140
|
-
x9 ^= u << 13 | u >>> 32 - 13;
|
|
141
|
-
u = x9 + x8 | 0;
|
|
142
|
-
x10 ^= u << 18 | u >>> 32 - 18;
|
|
143
|
-
u = x15 + x14 | 0;
|
|
144
|
-
x12 ^= u << 7 | u >>> 32 - 7;
|
|
145
|
-
u = x12 + x15 | 0;
|
|
146
|
-
x13 ^= u << 9 | u >>> 32 - 9;
|
|
147
|
-
u = x13 + x12 | 0;
|
|
148
|
-
x14 ^= u << 13 | u >>> 32 - 13;
|
|
149
|
-
u = x14 + x13 | 0;
|
|
150
|
-
x15 ^= u << 18 | u >>> 32 - 18;
|
|
151
|
-
}
|
|
152
|
-
x0 = x0 + j0 | 0;
|
|
153
|
-
x1 = x1 + j1 | 0;
|
|
154
|
-
x2 = x2 + j2 | 0;
|
|
155
|
-
x3 = x3 + j3 | 0;
|
|
156
|
-
x4 = x4 + j4 | 0;
|
|
157
|
-
x5 = x5 + j5 | 0;
|
|
158
|
-
x6 = x6 + j6 | 0;
|
|
159
|
-
x7 = x7 + j7 | 0;
|
|
160
|
-
x8 = x8 + j8 | 0;
|
|
161
|
-
x9 = x9 + j9 | 0;
|
|
162
|
-
x10 = x10 + j10 | 0;
|
|
163
|
-
x11 = x11 + j11 | 0;
|
|
164
|
-
x12 = x12 + j12 | 0;
|
|
165
|
-
x13 = x13 + j13 | 0;
|
|
166
|
-
x14 = x14 + j14 | 0;
|
|
167
|
-
x15 = x15 + j15 | 0;
|
|
168
|
-
o[0] = x0 >>> 0 & 255;
|
|
169
|
-
o[1] = x0 >>> 8 & 255;
|
|
170
|
-
o[2] = x0 >>> 16 & 255;
|
|
171
|
-
o[3] = x0 >>> 24 & 255;
|
|
172
|
-
o[4] = x1 >>> 0 & 255;
|
|
173
|
-
o[5] = x1 >>> 8 & 255;
|
|
174
|
-
o[6] = x1 >>> 16 & 255;
|
|
175
|
-
o[7] = x1 >>> 24 & 255;
|
|
176
|
-
o[8] = x2 >>> 0 & 255;
|
|
177
|
-
o[9] = x2 >>> 8 & 255;
|
|
178
|
-
o[10] = x2 >>> 16 & 255;
|
|
179
|
-
o[11] = x2 >>> 24 & 255;
|
|
180
|
-
o[12] = x3 >>> 0 & 255;
|
|
181
|
-
o[13] = x3 >>> 8 & 255;
|
|
182
|
-
o[14] = x3 >>> 16 & 255;
|
|
183
|
-
o[15] = x3 >>> 24 & 255;
|
|
184
|
-
o[16] = x4 >>> 0 & 255;
|
|
185
|
-
o[17] = x4 >>> 8 & 255;
|
|
186
|
-
o[18] = x4 >>> 16 & 255;
|
|
187
|
-
o[19] = x4 >>> 24 & 255;
|
|
188
|
-
o[20] = x5 >>> 0 & 255;
|
|
189
|
-
o[21] = x5 >>> 8 & 255;
|
|
190
|
-
o[22] = x5 >>> 16 & 255;
|
|
191
|
-
o[23] = x5 >>> 24 & 255;
|
|
192
|
-
o[24] = x6 >>> 0 & 255;
|
|
193
|
-
o[25] = x6 >>> 8 & 255;
|
|
194
|
-
o[26] = x6 >>> 16 & 255;
|
|
195
|
-
o[27] = x6 >>> 24 & 255;
|
|
196
|
-
o[28] = x7 >>> 0 & 255;
|
|
197
|
-
o[29] = x7 >>> 8 & 255;
|
|
198
|
-
o[30] = x7 >>> 16 & 255;
|
|
199
|
-
o[31] = x7 >>> 24 & 255;
|
|
200
|
-
o[32] = x8 >>> 0 & 255;
|
|
201
|
-
o[33] = x8 >>> 8 & 255;
|
|
202
|
-
o[34] = x8 >>> 16 & 255;
|
|
203
|
-
o[35] = x8 >>> 24 & 255;
|
|
204
|
-
o[36] = x9 >>> 0 & 255;
|
|
205
|
-
o[37] = x9 >>> 8 & 255;
|
|
206
|
-
o[38] = x9 >>> 16 & 255;
|
|
207
|
-
o[39] = x9 >>> 24 & 255;
|
|
208
|
-
o[40] = x10 >>> 0 & 255;
|
|
209
|
-
o[41] = x10 >>> 8 & 255;
|
|
210
|
-
o[42] = x10 >>> 16 & 255;
|
|
211
|
-
o[43] = x10 >>> 24 & 255;
|
|
212
|
-
o[44] = x11 >>> 0 & 255;
|
|
213
|
-
o[45] = x11 >>> 8 & 255;
|
|
214
|
-
o[46] = x11 >>> 16 & 255;
|
|
215
|
-
o[47] = x11 >>> 24 & 255;
|
|
216
|
-
o[48] = x12 >>> 0 & 255;
|
|
217
|
-
o[49] = x12 >>> 8 & 255;
|
|
218
|
-
o[50] = x12 >>> 16 & 255;
|
|
219
|
-
o[51] = x12 >>> 24 & 255;
|
|
220
|
-
o[52] = x13 >>> 0 & 255;
|
|
221
|
-
o[53] = x13 >>> 8 & 255;
|
|
222
|
-
o[54] = x13 >>> 16 & 255;
|
|
223
|
-
o[55] = x13 >>> 24 & 255;
|
|
224
|
-
o[56] = x14 >>> 0 & 255;
|
|
225
|
-
o[57] = x14 >>> 8 & 255;
|
|
226
|
-
o[58] = x14 >>> 16 & 255;
|
|
227
|
-
o[59] = x14 >>> 24 & 255;
|
|
228
|
-
o[60] = x15 >>> 0 & 255;
|
|
229
|
-
o[61] = x15 >>> 8 & 255;
|
|
230
|
-
o[62] = x15 >>> 16 & 255;
|
|
231
|
-
o[63] = x15 >>> 24 & 255;
|
|
232
|
-
}
|
|
233
|
-
function core_hsalsa20(o, p, k, c) {
|
|
234
|
-
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;
|
|
235
|
-
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;
|
|
236
|
-
for (var i = 0; i < 20; i += 2) {
|
|
237
|
-
u = x0 + x12 | 0;
|
|
238
|
-
x4 ^= u << 7 | u >>> 32 - 7;
|
|
239
|
-
u = x4 + x0 | 0;
|
|
240
|
-
x8 ^= u << 9 | u >>> 32 - 9;
|
|
241
|
-
u = x8 + x4 | 0;
|
|
242
|
-
x12 ^= u << 13 | u >>> 32 - 13;
|
|
243
|
-
u = x12 + x8 | 0;
|
|
244
|
-
x0 ^= u << 18 | u >>> 32 - 18;
|
|
245
|
-
u = x5 + x1 | 0;
|
|
246
|
-
x9 ^= u << 7 | u >>> 32 - 7;
|
|
247
|
-
u = x9 + x5 | 0;
|
|
248
|
-
x13 ^= u << 9 | u >>> 32 - 9;
|
|
249
|
-
u = x13 + x9 | 0;
|
|
250
|
-
x1 ^= u << 13 | u >>> 32 - 13;
|
|
251
|
-
u = x1 + x13 | 0;
|
|
252
|
-
x5 ^= u << 18 | u >>> 32 - 18;
|
|
253
|
-
u = x10 + x6 | 0;
|
|
254
|
-
x14 ^= u << 7 | u >>> 32 - 7;
|
|
255
|
-
u = x14 + x10 | 0;
|
|
256
|
-
x2 ^= u << 9 | u >>> 32 - 9;
|
|
257
|
-
u = x2 + x14 | 0;
|
|
258
|
-
x6 ^= u << 13 | u >>> 32 - 13;
|
|
259
|
-
u = x6 + x2 | 0;
|
|
260
|
-
x10 ^= u << 18 | u >>> 32 - 18;
|
|
261
|
-
u = x15 + x11 | 0;
|
|
262
|
-
x3 ^= u << 7 | u >>> 32 - 7;
|
|
263
|
-
u = x3 + x15 | 0;
|
|
264
|
-
x7 ^= u << 9 | u >>> 32 - 9;
|
|
265
|
-
u = x7 + x3 | 0;
|
|
266
|
-
x11 ^= u << 13 | u >>> 32 - 13;
|
|
267
|
-
u = x11 + x7 | 0;
|
|
268
|
-
x15 ^= u << 18 | u >>> 32 - 18;
|
|
269
|
-
u = x0 + x3 | 0;
|
|
270
|
-
x1 ^= u << 7 | u >>> 32 - 7;
|
|
271
|
-
u = x1 + x0 | 0;
|
|
272
|
-
x2 ^= u << 9 | u >>> 32 - 9;
|
|
273
|
-
u = x2 + x1 | 0;
|
|
274
|
-
x3 ^= u << 13 | u >>> 32 - 13;
|
|
275
|
-
u = x3 + x2 | 0;
|
|
276
|
-
x0 ^= u << 18 | u >>> 32 - 18;
|
|
277
|
-
u = x5 + x4 | 0;
|
|
278
|
-
x6 ^= u << 7 | u >>> 32 - 7;
|
|
279
|
-
u = x6 + x5 | 0;
|
|
280
|
-
x7 ^= u << 9 | u >>> 32 - 9;
|
|
281
|
-
u = x7 + x6 | 0;
|
|
282
|
-
x4 ^= u << 13 | u >>> 32 - 13;
|
|
283
|
-
u = x4 + x7 | 0;
|
|
284
|
-
x5 ^= u << 18 | u >>> 32 - 18;
|
|
285
|
-
u = x10 + x9 | 0;
|
|
286
|
-
x11 ^= u << 7 | u >>> 32 - 7;
|
|
287
|
-
u = x11 + x10 | 0;
|
|
288
|
-
x8 ^= u << 9 | u >>> 32 - 9;
|
|
289
|
-
u = x8 + x11 | 0;
|
|
290
|
-
x9 ^= u << 13 | u >>> 32 - 13;
|
|
291
|
-
u = x9 + x8 | 0;
|
|
292
|
-
x10 ^= u << 18 | u >>> 32 - 18;
|
|
293
|
-
u = x15 + x14 | 0;
|
|
294
|
-
x12 ^= u << 7 | u >>> 32 - 7;
|
|
295
|
-
u = x12 + x15 | 0;
|
|
296
|
-
x13 ^= u << 9 | u >>> 32 - 9;
|
|
297
|
-
u = x13 + x12 | 0;
|
|
298
|
-
x14 ^= u << 13 | u >>> 32 - 13;
|
|
299
|
-
u = x14 + x13 | 0;
|
|
300
|
-
x15 ^= u << 18 | u >>> 32 - 18;
|
|
301
|
-
}
|
|
302
|
-
o[0] = x0 >>> 0 & 255;
|
|
303
|
-
o[1] = x0 >>> 8 & 255;
|
|
304
|
-
o[2] = x0 >>> 16 & 255;
|
|
305
|
-
o[3] = x0 >>> 24 & 255;
|
|
306
|
-
o[4] = x5 >>> 0 & 255;
|
|
307
|
-
o[5] = x5 >>> 8 & 255;
|
|
308
|
-
o[6] = x5 >>> 16 & 255;
|
|
309
|
-
o[7] = x5 >>> 24 & 255;
|
|
310
|
-
o[8] = x10 >>> 0 & 255;
|
|
311
|
-
o[9] = x10 >>> 8 & 255;
|
|
312
|
-
o[10] = x10 >>> 16 & 255;
|
|
313
|
-
o[11] = x10 >>> 24 & 255;
|
|
314
|
-
o[12] = x15 >>> 0 & 255;
|
|
315
|
-
o[13] = x15 >>> 8 & 255;
|
|
316
|
-
o[14] = x15 >>> 16 & 255;
|
|
317
|
-
o[15] = x15 >>> 24 & 255;
|
|
318
|
-
o[16] = x6 >>> 0 & 255;
|
|
319
|
-
o[17] = x6 >>> 8 & 255;
|
|
320
|
-
o[18] = x6 >>> 16 & 255;
|
|
321
|
-
o[19] = x6 >>> 24 & 255;
|
|
322
|
-
o[20] = x7 >>> 0 & 255;
|
|
323
|
-
o[21] = x7 >>> 8 & 255;
|
|
324
|
-
o[22] = x7 >>> 16 & 255;
|
|
325
|
-
o[23] = x7 >>> 24 & 255;
|
|
326
|
-
o[24] = x8 >>> 0 & 255;
|
|
327
|
-
o[25] = x8 >>> 8 & 255;
|
|
328
|
-
o[26] = x8 >>> 16 & 255;
|
|
329
|
-
o[27] = x8 >>> 24 & 255;
|
|
330
|
-
o[28] = x9 >>> 0 & 255;
|
|
331
|
-
o[29] = x9 >>> 8 & 255;
|
|
332
|
-
o[30] = x9 >>> 16 & 255;
|
|
333
|
-
o[31] = x9 >>> 24 & 255;
|
|
334
|
-
}
|
|
335
|
-
function crypto_core_salsa20(out, inp, k, c) {
|
|
336
|
-
core_salsa20(out, inp, k, c);
|
|
337
|
-
}
|
|
338
|
-
function crypto_core_hsalsa20(out, inp, k, c) {
|
|
339
|
-
core_hsalsa20(out, inp, k, c);
|
|
340
|
-
}
|
|
341
|
-
var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
|
|
342
|
-
function crypto_stream_salsa20_xor(c, cpos, m, mpos, b, n, k) {
|
|
343
|
-
var z = new Uint8Array(16), x = new Uint8Array(64);
|
|
344
|
-
var u, i;
|
|
345
|
-
for (i = 0; i < 16; i++) z[i] = 0;
|
|
346
|
-
for (i = 0; i < 8; i++) z[i] = n[i];
|
|
347
|
-
while (b >= 64) {
|
|
348
|
-
crypto_core_salsa20(x, z, k, sigma);
|
|
349
|
-
for (i = 0; i < 64; i++) c[cpos + i] = m[mpos + i] ^ x[i];
|
|
350
|
-
u = 1;
|
|
351
|
-
for (i = 8; i < 16; i++) {
|
|
352
|
-
u = u + (z[i] & 255) | 0;
|
|
353
|
-
z[i] = u & 255;
|
|
354
|
-
u >>>= 8;
|
|
355
|
-
}
|
|
356
|
-
b -= 64;
|
|
357
|
-
cpos += 64;
|
|
358
|
-
mpos += 64;
|
|
359
|
-
}
|
|
360
|
-
if (b > 0) {
|
|
361
|
-
crypto_core_salsa20(x, z, k, sigma);
|
|
362
|
-
for (i = 0; i < b; i++) c[cpos + i] = m[mpos + i] ^ x[i];
|
|
363
|
-
}
|
|
364
|
-
return 0;
|
|
365
|
-
}
|
|
366
|
-
function crypto_stream_salsa20(c, cpos, b, n, k) {
|
|
367
|
-
var z = new Uint8Array(16), x = new Uint8Array(64);
|
|
368
|
-
var u, i;
|
|
369
|
-
for (i = 0; i < 16; i++) z[i] = 0;
|
|
370
|
-
for (i = 0; i < 8; i++) z[i] = n[i];
|
|
371
|
-
while (b >= 64) {
|
|
372
|
-
crypto_core_salsa20(x, z, k, sigma);
|
|
373
|
-
for (i = 0; i < 64; i++) c[cpos + i] = x[i];
|
|
374
|
-
u = 1;
|
|
375
|
-
for (i = 8; i < 16; i++) {
|
|
376
|
-
u = u + (z[i] & 255) | 0;
|
|
377
|
-
z[i] = u & 255;
|
|
378
|
-
u >>>= 8;
|
|
379
|
-
}
|
|
380
|
-
b -= 64;
|
|
381
|
-
cpos += 64;
|
|
382
|
-
}
|
|
383
|
-
if (b > 0) {
|
|
384
|
-
crypto_core_salsa20(x, z, k, sigma);
|
|
385
|
-
for (i = 0; i < b; i++) c[cpos + i] = x[i];
|
|
386
|
-
}
|
|
387
|
-
return 0;
|
|
388
|
-
}
|
|
389
|
-
function crypto_stream(c, cpos, d, n, k) {
|
|
390
|
-
var s = new Uint8Array(32);
|
|
391
|
-
crypto_core_hsalsa20(s, n, k, sigma);
|
|
392
|
-
var sn = new Uint8Array(8);
|
|
393
|
-
for (var i = 0; i < 8; i++) sn[i] = n[i + 16];
|
|
394
|
-
return crypto_stream_salsa20(c, cpos, d, sn, s);
|
|
395
|
-
}
|
|
396
|
-
function crypto_stream_xor(c, cpos, m, mpos, d, n, k) {
|
|
397
|
-
var s = new Uint8Array(32);
|
|
398
|
-
crypto_core_hsalsa20(s, n, k, sigma);
|
|
399
|
-
var sn = new Uint8Array(8);
|
|
400
|
-
for (var i = 0; i < 8; i++) sn[i] = n[i + 16];
|
|
401
|
-
return crypto_stream_salsa20_xor(c, cpos, m, mpos, d, sn, s);
|
|
402
|
-
}
|
|
403
|
-
var poly1305 = function(key) {
|
|
404
|
-
this.buffer = new Uint8Array(16);
|
|
405
|
-
this.r = new Uint16Array(10);
|
|
406
|
-
this.h = new Uint16Array(10);
|
|
407
|
-
this.pad = new Uint16Array(8);
|
|
408
|
-
this.leftover = 0;
|
|
409
|
-
this.fin = 0;
|
|
410
|
-
var t0, t1, t2, t3, t4, t5, t6, t7;
|
|
411
|
-
t0 = key[0] & 255 | (key[1] & 255) << 8;
|
|
412
|
-
this.r[0] = t0 & 8191;
|
|
413
|
-
t1 = key[2] & 255 | (key[3] & 255) << 8;
|
|
414
|
-
this.r[1] = (t0 >>> 13 | t1 << 3) & 8191;
|
|
415
|
-
t2 = key[4] & 255 | (key[5] & 255) << 8;
|
|
416
|
-
this.r[2] = (t1 >>> 10 | t2 << 6) & 7939;
|
|
417
|
-
t3 = key[6] & 255 | (key[7] & 255) << 8;
|
|
418
|
-
this.r[3] = (t2 >>> 7 | t3 << 9) & 8191;
|
|
419
|
-
t4 = key[8] & 255 | (key[9] & 255) << 8;
|
|
420
|
-
this.r[4] = (t3 >>> 4 | t4 << 12) & 255;
|
|
421
|
-
this.r[5] = t4 >>> 1 & 8190;
|
|
422
|
-
t5 = key[10] & 255 | (key[11] & 255) << 8;
|
|
423
|
-
this.r[6] = (t4 >>> 14 | t5 << 2) & 8191;
|
|
424
|
-
t6 = key[12] & 255 | (key[13] & 255) << 8;
|
|
425
|
-
this.r[7] = (t5 >>> 11 | t6 << 5) & 8065;
|
|
426
|
-
t7 = key[14] & 255 | (key[15] & 255) << 8;
|
|
427
|
-
this.r[8] = (t6 >>> 8 | t7 << 8) & 8191;
|
|
428
|
-
this.r[9] = t7 >>> 5 & 127;
|
|
429
|
-
this.pad[0] = key[16] & 255 | (key[17] & 255) << 8;
|
|
430
|
-
this.pad[1] = key[18] & 255 | (key[19] & 255) << 8;
|
|
431
|
-
this.pad[2] = key[20] & 255 | (key[21] & 255) << 8;
|
|
432
|
-
this.pad[3] = key[22] & 255 | (key[23] & 255) << 8;
|
|
433
|
-
this.pad[4] = key[24] & 255 | (key[25] & 255) << 8;
|
|
434
|
-
this.pad[5] = key[26] & 255 | (key[27] & 255) << 8;
|
|
435
|
-
this.pad[6] = key[28] & 255 | (key[29] & 255) << 8;
|
|
436
|
-
this.pad[7] = key[30] & 255 | (key[31] & 255) << 8;
|
|
437
|
-
};
|
|
438
|
-
poly1305.prototype.blocks = function(m, mpos, bytes) {
|
|
439
|
-
var hibit = this.fin ? 0 : 1 << 11;
|
|
440
|
-
var t0, t1, t2, t3, t4, t5, t6, t7, c;
|
|
441
|
-
var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
|
|
442
|
-
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];
|
|
443
|
-
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];
|
|
444
|
-
while (bytes >= 16) {
|
|
445
|
-
t0 = m[mpos + 0] & 255 | (m[mpos + 1] & 255) << 8;
|
|
446
|
-
h0 += t0 & 8191;
|
|
447
|
-
t1 = m[mpos + 2] & 255 | (m[mpos + 3] & 255) << 8;
|
|
448
|
-
h1 += (t0 >>> 13 | t1 << 3) & 8191;
|
|
449
|
-
t2 = m[mpos + 4] & 255 | (m[mpos + 5] & 255) << 8;
|
|
450
|
-
h2 += (t1 >>> 10 | t2 << 6) & 8191;
|
|
451
|
-
t3 = m[mpos + 6] & 255 | (m[mpos + 7] & 255) << 8;
|
|
452
|
-
h3 += (t2 >>> 7 | t3 << 9) & 8191;
|
|
453
|
-
t4 = m[mpos + 8] & 255 | (m[mpos + 9] & 255) << 8;
|
|
454
|
-
h4 += (t3 >>> 4 | t4 << 12) & 8191;
|
|
455
|
-
h5 += t4 >>> 1 & 8191;
|
|
456
|
-
t5 = m[mpos + 10] & 255 | (m[mpos + 11] & 255) << 8;
|
|
457
|
-
h6 += (t4 >>> 14 | t5 << 2) & 8191;
|
|
458
|
-
t6 = m[mpos + 12] & 255 | (m[mpos + 13] & 255) << 8;
|
|
459
|
-
h7 += (t5 >>> 11 | t6 << 5) & 8191;
|
|
460
|
-
t7 = m[mpos + 14] & 255 | (m[mpos + 15] & 255) << 8;
|
|
461
|
-
h8 += (t6 >>> 8 | t7 << 8) & 8191;
|
|
462
|
-
h9 += t7 >>> 5 | hibit;
|
|
463
|
-
c = 0;
|
|
464
|
-
d0 = c;
|
|
465
|
-
d0 += h0 * r0;
|
|
466
|
-
d0 += h1 * (5 * r9);
|
|
467
|
-
d0 += h2 * (5 * r8);
|
|
468
|
-
d0 += h3 * (5 * r7);
|
|
469
|
-
d0 += h4 * (5 * r6);
|
|
470
|
-
c = d0 >>> 13;
|
|
471
|
-
d0 &= 8191;
|
|
472
|
-
d0 += h5 * (5 * r5);
|
|
473
|
-
d0 += h6 * (5 * r4);
|
|
474
|
-
d0 += h7 * (5 * r3);
|
|
475
|
-
d0 += h8 * (5 * r2);
|
|
476
|
-
d0 += h9 * (5 * r1);
|
|
477
|
-
c += d0 >>> 13;
|
|
478
|
-
d0 &= 8191;
|
|
479
|
-
d1 = c;
|
|
480
|
-
d1 += h0 * r1;
|
|
481
|
-
d1 += h1 * r0;
|
|
482
|
-
d1 += h2 * (5 * r9);
|
|
483
|
-
d1 += h3 * (5 * r8);
|
|
484
|
-
d1 += h4 * (5 * r7);
|
|
485
|
-
c = d1 >>> 13;
|
|
486
|
-
d1 &= 8191;
|
|
487
|
-
d1 += h5 * (5 * r6);
|
|
488
|
-
d1 += h6 * (5 * r5);
|
|
489
|
-
d1 += h7 * (5 * r4);
|
|
490
|
-
d1 += h8 * (5 * r3);
|
|
491
|
-
d1 += h9 * (5 * r2);
|
|
492
|
-
c += d1 >>> 13;
|
|
493
|
-
d1 &= 8191;
|
|
494
|
-
d2 = c;
|
|
495
|
-
d2 += h0 * r2;
|
|
496
|
-
d2 += h1 * r1;
|
|
497
|
-
d2 += h2 * r0;
|
|
498
|
-
d2 += h3 * (5 * r9);
|
|
499
|
-
d2 += h4 * (5 * r8);
|
|
500
|
-
c = d2 >>> 13;
|
|
501
|
-
d2 &= 8191;
|
|
502
|
-
d2 += h5 * (5 * r7);
|
|
503
|
-
d2 += h6 * (5 * r6);
|
|
504
|
-
d2 += h7 * (5 * r5);
|
|
505
|
-
d2 += h8 * (5 * r4);
|
|
506
|
-
d2 += h9 * (5 * r3);
|
|
507
|
-
c += d2 >>> 13;
|
|
508
|
-
d2 &= 8191;
|
|
509
|
-
d3 = c;
|
|
510
|
-
d3 += h0 * r3;
|
|
511
|
-
d3 += h1 * r2;
|
|
512
|
-
d3 += h2 * r1;
|
|
513
|
-
d3 += h3 * r0;
|
|
514
|
-
d3 += h4 * (5 * r9);
|
|
515
|
-
c = d3 >>> 13;
|
|
516
|
-
d3 &= 8191;
|
|
517
|
-
d3 += h5 * (5 * r8);
|
|
518
|
-
d3 += h6 * (5 * r7);
|
|
519
|
-
d3 += h7 * (5 * r6);
|
|
520
|
-
d3 += h8 * (5 * r5);
|
|
521
|
-
d3 += h9 * (5 * r4);
|
|
522
|
-
c += d3 >>> 13;
|
|
523
|
-
d3 &= 8191;
|
|
524
|
-
d4 = c;
|
|
525
|
-
d4 += h0 * r4;
|
|
526
|
-
d4 += h1 * r3;
|
|
527
|
-
d4 += h2 * r2;
|
|
528
|
-
d4 += h3 * r1;
|
|
529
|
-
d4 += h4 * r0;
|
|
530
|
-
c = d4 >>> 13;
|
|
531
|
-
d4 &= 8191;
|
|
532
|
-
d4 += h5 * (5 * r9);
|
|
533
|
-
d4 += h6 * (5 * r8);
|
|
534
|
-
d4 += h7 * (5 * r7);
|
|
535
|
-
d4 += h8 * (5 * r6);
|
|
536
|
-
d4 += h9 * (5 * r5);
|
|
537
|
-
c += d4 >>> 13;
|
|
538
|
-
d4 &= 8191;
|
|
539
|
-
d5 = c;
|
|
540
|
-
d5 += h0 * r5;
|
|
541
|
-
d5 += h1 * r4;
|
|
542
|
-
d5 += h2 * r3;
|
|
543
|
-
d5 += h3 * r2;
|
|
544
|
-
d5 += h4 * r1;
|
|
545
|
-
c = d5 >>> 13;
|
|
546
|
-
d5 &= 8191;
|
|
547
|
-
d5 += h5 * r0;
|
|
548
|
-
d5 += h6 * (5 * r9);
|
|
549
|
-
d5 += h7 * (5 * r8);
|
|
550
|
-
d5 += h8 * (5 * r7);
|
|
551
|
-
d5 += h9 * (5 * r6);
|
|
552
|
-
c += d5 >>> 13;
|
|
553
|
-
d5 &= 8191;
|
|
554
|
-
d6 = c;
|
|
555
|
-
d6 += h0 * r6;
|
|
556
|
-
d6 += h1 * r5;
|
|
557
|
-
d6 += h2 * r4;
|
|
558
|
-
d6 += h3 * r3;
|
|
559
|
-
d6 += h4 * r2;
|
|
560
|
-
c = d6 >>> 13;
|
|
561
|
-
d6 &= 8191;
|
|
562
|
-
d6 += h5 * r1;
|
|
563
|
-
d6 += h6 * r0;
|
|
564
|
-
d6 += h7 * (5 * r9);
|
|
565
|
-
d6 += h8 * (5 * r8);
|
|
566
|
-
d6 += h9 * (5 * r7);
|
|
567
|
-
c += d6 >>> 13;
|
|
568
|
-
d6 &= 8191;
|
|
569
|
-
d7 = c;
|
|
570
|
-
d7 += h0 * r7;
|
|
571
|
-
d7 += h1 * r6;
|
|
572
|
-
d7 += h2 * r5;
|
|
573
|
-
d7 += h3 * r4;
|
|
574
|
-
d7 += h4 * r3;
|
|
575
|
-
c = d7 >>> 13;
|
|
576
|
-
d7 &= 8191;
|
|
577
|
-
d7 += h5 * r2;
|
|
578
|
-
d7 += h6 * r1;
|
|
579
|
-
d7 += h7 * r0;
|
|
580
|
-
d7 += h8 * (5 * r9);
|
|
581
|
-
d7 += h9 * (5 * r8);
|
|
582
|
-
c += d7 >>> 13;
|
|
583
|
-
d7 &= 8191;
|
|
584
|
-
d8 = c;
|
|
585
|
-
d8 += h0 * r8;
|
|
586
|
-
d8 += h1 * r7;
|
|
587
|
-
d8 += h2 * r6;
|
|
588
|
-
d8 += h3 * r5;
|
|
589
|
-
d8 += h4 * r4;
|
|
590
|
-
c = d8 >>> 13;
|
|
591
|
-
d8 &= 8191;
|
|
592
|
-
d8 += h5 * r3;
|
|
593
|
-
d8 += h6 * r2;
|
|
594
|
-
d8 += h7 * r1;
|
|
595
|
-
d8 += h8 * r0;
|
|
596
|
-
d8 += h9 * (5 * r9);
|
|
597
|
-
c += d8 >>> 13;
|
|
598
|
-
d8 &= 8191;
|
|
599
|
-
d9 = c;
|
|
600
|
-
d9 += h0 * r9;
|
|
601
|
-
d9 += h1 * r8;
|
|
602
|
-
d9 += h2 * r7;
|
|
603
|
-
d9 += h3 * r6;
|
|
604
|
-
d9 += h4 * r5;
|
|
605
|
-
c = d9 >>> 13;
|
|
606
|
-
d9 &= 8191;
|
|
607
|
-
d9 += h5 * r4;
|
|
608
|
-
d9 += h6 * r3;
|
|
609
|
-
d9 += h7 * r2;
|
|
610
|
-
d9 += h8 * r1;
|
|
611
|
-
d9 += h9 * r0;
|
|
612
|
-
c += d9 >>> 13;
|
|
613
|
-
d9 &= 8191;
|
|
614
|
-
c = (c << 2) + c | 0;
|
|
615
|
-
c = c + d0 | 0;
|
|
616
|
-
d0 = c & 8191;
|
|
617
|
-
c = c >>> 13;
|
|
618
|
-
d1 += c;
|
|
619
|
-
h0 = d0;
|
|
620
|
-
h1 = d1;
|
|
621
|
-
h2 = d2;
|
|
622
|
-
h3 = d3;
|
|
623
|
-
h4 = d4;
|
|
624
|
-
h5 = d5;
|
|
625
|
-
h6 = d6;
|
|
626
|
-
h7 = d7;
|
|
627
|
-
h8 = d8;
|
|
628
|
-
h9 = d9;
|
|
629
|
-
mpos += 16;
|
|
630
|
-
bytes -= 16;
|
|
631
|
-
}
|
|
632
|
-
this.h[0] = h0;
|
|
633
|
-
this.h[1] = h1;
|
|
634
|
-
this.h[2] = h2;
|
|
635
|
-
this.h[3] = h3;
|
|
636
|
-
this.h[4] = h4;
|
|
637
|
-
this.h[5] = h5;
|
|
638
|
-
this.h[6] = h6;
|
|
639
|
-
this.h[7] = h7;
|
|
640
|
-
this.h[8] = h8;
|
|
641
|
-
this.h[9] = h9;
|
|
642
|
-
};
|
|
643
|
-
poly1305.prototype.finish = function(mac, macpos) {
|
|
644
|
-
var g = new Uint16Array(10);
|
|
645
|
-
var c, mask, f, i;
|
|
646
|
-
if (this.leftover) {
|
|
647
|
-
i = this.leftover;
|
|
648
|
-
this.buffer[i++] = 1;
|
|
649
|
-
for (; i < 16; i++) this.buffer[i] = 0;
|
|
650
|
-
this.fin = 1;
|
|
651
|
-
this.blocks(this.buffer, 0, 16);
|
|
652
|
-
}
|
|
653
|
-
c = this.h[1] >>> 13;
|
|
654
|
-
this.h[1] &= 8191;
|
|
655
|
-
for (i = 2; i < 10; i++) {
|
|
656
|
-
this.h[i] += c;
|
|
657
|
-
c = this.h[i] >>> 13;
|
|
658
|
-
this.h[i] &= 8191;
|
|
659
|
-
}
|
|
660
|
-
this.h[0] += c * 5;
|
|
661
|
-
c = this.h[0] >>> 13;
|
|
662
|
-
this.h[0] &= 8191;
|
|
663
|
-
this.h[1] += c;
|
|
664
|
-
c = this.h[1] >>> 13;
|
|
665
|
-
this.h[1] &= 8191;
|
|
666
|
-
this.h[2] += c;
|
|
667
|
-
g[0] = this.h[0] + 5;
|
|
668
|
-
c = g[0] >>> 13;
|
|
669
|
-
g[0] &= 8191;
|
|
670
|
-
for (i = 1; i < 10; i++) {
|
|
671
|
-
g[i] = this.h[i] + c;
|
|
672
|
-
c = g[i] >>> 13;
|
|
673
|
-
g[i] &= 8191;
|
|
674
|
-
}
|
|
675
|
-
g[9] -= 1 << 13;
|
|
676
|
-
mask = (c ^ 1) - 1;
|
|
677
|
-
for (i = 0; i < 10; i++) g[i] &= mask;
|
|
678
|
-
mask = ~mask;
|
|
679
|
-
for (i = 0; i < 10; i++) this.h[i] = this.h[i] & mask | g[i];
|
|
680
|
-
this.h[0] = (this.h[0] | this.h[1] << 13) & 65535;
|
|
681
|
-
this.h[1] = (this.h[1] >>> 3 | this.h[2] << 10) & 65535;
|
|
682
|
-
this.h[2] = (this.h[2] >>> 6 | this.h[3] << 7) & 65535;
|
|
683
|
-
this.h[3] = (this.h[3] >>> 9 | this.h[4] << 4) & 65535;
|
|
684
|
-
this.h[4] = (this.h[4] >>> 12 | this.h[5] << 1 | this.h[6] << 14) & 65535;
|
|
685
|
-
this.h[5] = (this.h[6] >>> 2 | this.h[7] << 11) & 65535;
|
|
686
|
-
this.h[6] = (this.h[7] >>> 5 | this.h[8] << 8) & 65535;
|
|
687
|
-
this.h[7] = (this.h[8] >>> 8 | this.h[9] << 5) & 65535;
|
|
688
|
-
f = this.h[0] + this.pad[0];
|
|
689
|
-
this.h[0] = f & 65535;
|
|
690
|
-
for (i = 1; i < 8; i++) {
|
|
691
|
-
f = (this.h[i] + this.pad[i] | 0) + (f >>> 16) | 0;
|
|
692
|
-
this.h[i] = f & 65535;
|
|
693
|
-
}
|
|
694
|
-
mac[macpos + 0] = this.h[0] >>> 0 & 255;
|
|
695
|
-
mac[macpos + 1] = this.h[0] >>> 8 & 255;
|
|
696
|
-
mac[macpos + 2] = this.h[1] >>> 0 & 255;
|
|
697
|
-
mac[macpos + 3] = this.h[1] >>> 8 & 255;
|
|
698
|
-
mac[macpos + 4] = this.h[2] >>> 0 & 255;
|
|
699
|
-
mac[macpos + 5] = this.h[2] >>> 8 & 255;
|
|
700
|
-
mac[macpos + 6] = this.h[3] >>> 0 & 255;
|
|
701
|
-
mac[macpos + 7] = this.h[3] >>> 8 & 255;
|
|
702
|
-
mac[macpos + 8] = this.h[4] >>> 0 & 255;
|
|
703
|
-
mac[macpos + 9] = this.h[4] >>> 8 & 255;
|
|
704
|
-
mac[macpos + 10] = this.h[5] >>> 0 & 255;
|
|
705
|
-
mac[macpos + 11] = this.h[5] >>> 8 & 255;
|
|
706
|
-
mac[macpos + 12] = this.h[6] >>> 0 & 255;
|
|
707
|
-
mac[macpos + 13] = this.h[6] >>> 8 & 255;
|
|
708
|
-
mac[macpos + 14] = this.h[7] >>> 0 & 255;
|
|
709
|
-
mac[macpos + 15] = this.h[7] >>> 8 & 255;
|
|
710
|
-
};
|
|
711
|
-
poly1305.prototype.update = function(m, mpos, bytes) {
|
|
712
|
-
var i, want;
|
|
713
|
-
if (this.leftover) {
|
|
714
|
-
want = 16 - this.leftover;
|
|
715
|
-
if (want > bytes)
|
|
716
|
-
want = bytes;
|
|
717
|
-
for (i = 0; i < want; i++)
|
|
718
|
-
this.buffer[this.leftover + i] = m[mpos + i];
|
|
719
|
-
bytes -= want;
|
|
720
|
-
mpos += want;
|
|
721
|
-
this.leftover += want;
|
|
722
|
-
if (this.leftover < 16)
|
|
723
|
-
return;
|
|
724
|
-
this.blocks(this.buffer, 0, 16);
|
|
725
|
-
this.leftover = 0;
|
|
726
|
-
}
|
|
727
|
-
if (bytes >= 16) {
|
|
728
|
-
want = bytes - bytes % 16;
|
|
729
|
-
this.blocks(m, mpos, want);
|
|
730
|
-
mpos += want;
|
|
731
|
-
bytes -= want;
|
|
732
|
-
}
|
|
733
|
-
if (bytes) {
|
|
734
|
-
for (i = 0; i < bytes; i++)
|
|
735
|
-
this.buffer[this.leftover + i] = m[mpos + i];
|
|
736
|
-
this.leftover += bytes;
|
|
737
|
-
}
|
|
738
|
-
};
|
|
739
|
-
function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
|
|
740
|
-
var s = new poly1305(k);
|
|
741
|
-
s.update(m, mpos, n);
|
|
742
|
-
s.finish(out, outpos);
|
|
743
|
-
return 0;
|
|
744
|
-
}
|
|
745
|
-
function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
|
|
746
|
-
var x = new Uint8Array(16);
|
|
747
|
-
crypto_onetimeauth(x, 0, m, mpos, n, k);
|
|
748
|
-
return crypto_verify_16(h, hpos, x, 0);
|
|
749
|
-
}
|
|
750
|
-
function crypto_secretbox(c, m, d, n, k) {
|
|
751
|
-
var i;
|
|
752
|
-
if (d < 32) return -1;
|
|
753
|
-
crypto_stream_xor(c, 0, m, 0, d, n, k);
|
|
754
|
-
crypto_onetimeauth(c, 16, c, 32, d - 32, c);
|
|
755
|
-
for (i = 0; i < 16; i++) c[i] = 0;
|
|
756
|
-
return 0;
|
|
757
|
-
}
|
|
758
|
-
function crypto_secretbox_open(m, c, d, n, k) {
|
|
759
|
-
var i;
|
|
760
|
-
var x = new Uint8Array(32);
|
|
761
|
-
if (d < 32) return -1;
|
|
762
|
-
crypto_stream(x, 0, 32, n, k);
|
|
763
|
-
if (crypto_onetimeauth_verify(c, 16, c, 32, d - 32, x) !== 0) return -1;
|
|
764
|
-
crypto_stream_xor(m, 0, c, 0, d, n, k);
|
|
765
|
-
for (i = 0; i < 32; i++) m[i] = 0;
|
|
766
|
-
return 0;
|
|
767
|
-
}
|
|
768
|
-
function set25519(r, a) {
|
|
769
|
-
var i;
|
|
770
|
-
for (i = 0; i < 16; i++) r[i] = a[i] | 0;
|
|
771
|
-
}
|
|
772
|
-
function car25519(o) {
|
|
773
|
-
var i, v, c = 1;
|
|
774
|
-
for (i = 0; i < 16; i++) {
|
|
775
|
-
v = o[i] + c + 65535;
|
|
776
|
-
c = Math.floor(v / 65536);
|
|
777
|
-
o[i] = v - c * 65536;
|
|
778
|
-
}
|
|
779
|
-
o[0] += c - 1 + 37 * (c - 1);
|
|
780
|
-
}
|
|
781
|
-
function sel25519(p, q, b) {
|
|
782
|
-
var t, c = ~(b - 1);
|
|
783
|
-
for (var i = 0; i < 16; i++) {
|
|
784
|
-
t = c & (p[i] ^ q[i]);
|
|
785
|
-
p[i] ^= t;
|
|
786
|
-
q[i] ^= t;
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
function pack25519(o, n) {
|
|
790
|
-
var i, j, b;
|
|
791
|
-
var m = gf(), t = gf();
|
|
792
|
-
for (i = 0; i < 16; i++) t[i] = n[i];
|
|
793
|
-
car25519(t);
|
|
794
|
-
car25519(t);
|
|
795
|
-
car25519(t);
|
|
796
|
-
for (j = 0; j < 2; j++) {
|
|
797
|
-
m[0] = t[0] - 65517;
|
|
798
|
-
for (i = 1; i < 15; i++) {
|
|
799
|
-
m[i] = t[i] - 65535 - (m[i - 1] >> 16 & 1);
|
|
800
|
-
m[i - 1] &= 65535;
|
|
801
|
-
}
|
|
802
|
-
m[15] = t[15] - 32767 - (m[14] >> 16 & 1);
|
|
803
|
-
b = m[15] >> 16 & 1;
|
|
804
|
-
m[14] &= 65535;
|
|
805
|
-
sel25519(t, m, 1 - b);
|
|
806
|
-
}
|
|
807
|
-
for (i = 0; i < 16; i++) {
|
|
808
|
-
o[2 * i] = t[i] & 255;
|
|
809
|
-
o[2 * i + 1] = t[i] >> 8;
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
function neq25519(a, b) {
|
|
813
|
-
var c = new Uint8Array(32), d = new Uint8Array(32);
|
|
814
|
-
pack25519(c, a);
|
|
815
|
-
pack25519(d, b);
|
|
816
|
-
return crypto_verify_32(c, 0, d, 0);
|
|
817
|
-
}
|
|
818
|
-
function par25519(a) {
|
|
819
|
-
var d = new Uint8Array(32);
|
|
820
|
-
pack25519(d, a);
|
|
821
|
-
return d[0] & 1;
|
|
822
|
-
}
|
|
823
|
-
function unpack25519(o, n) {
|
|
824
|
-
var i;
|
|
825
|
-
for (i = 0; i < 16; i++) o[i] = n[2 * i] + (n[2 * i + 1] << 8);
|
|
826
|
-
o[15] &= 32767;
|
|
827
|
-
}
|
|
828
|
-
function A(o, a, b) {
|
|
829
|
-
for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
|
|
830
|
-
}
|
|
831
|
-
function Z(o, a, b) {
|
|
832
|
-
for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
|
|
833
|
-
}
|
|
834
|
-
function M(o, a, b) {
|
|
835
|
-
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];
|
|
836
|
-
v = a[0];
|
|
837
|
-
t0 += v * b0;
|
|
838
|
-
t1 += v * b1;
|
|
839
|
-
t2 += v * b2;
|
|
840
|
-
t3 += v * b3;
|
|
841
|
-
t4 += v * b4;
|
|
842
|
-
t5 += v * b5;
|
|
843
|
-
t6 += v * b6;
|
|
844
|
-
t7 += v * b7;
|
|
845
|
-
t8 += v * b8;
|
|
846
|
-
t9 += v * b9;
|
|
847
|
-
t10 += v * b10;
|
|
848
|
-
t11 += v * b11;
|
|
849
|
-
t12 += v * b12;
|
|
850
|
-
t13 += v * b13;
|
|
851
|
-
t14 += v * b14;
|
|
852
|
-
t15 += v * b15;
|
|
853
|
-
v = a[1];
|
|
854
|
-
t1 += v * b0;
|
|
855
|
-
t2 += v * b1;
|
|
856
|
-
t3 += v * b2;
|
|
857
|
-
t4 += v * b3;
|
|
858
|
-
t5 += v * b4;
|
|
859
|
-
t6 += v * b5;
|
|
860
|
-
t7 += v * b6;
|
|
861
|
-
t8 += v * b7;
|
|
862
|
-
t9 += v * b8;
|
|
863
|
-
t10 += v * b9;
|
|
864
|
-
t11 += v * b10;
|
|
865
|
-
t12 += v * b11;
|
|
866
|
-
t13 += v * b12;
|
|
867
|
-
t14 += v * b13;
|
|
868
|
-
t15 += v * b14;
|
|
869
|
-
t16 += v * b15;
|
|
870
|
-
v = a[2];
|
|
871
|
-
t2 += v * b0;
|
|
872
|
-
t3 += v * b1;
|
|
873
|
-
t4 += v * b2;
|
|
874
|
-
t5 += v * b3;
|
|
875
|
-
t6 += v * b4;
|
|
876
|
-
t7 += v * b5;
|
|
877
|
-
t8 += v * b6;
|
|
878
|
-
t9 += v * b7;
|
|
879
|
-
t10 += v * b8;
|
|
880
|
-
t11 += v * b9;
|
|
881
|
-
t12 += v * b10;
|
|
882
|
-
t13 += v * b11;
|
|
883
|
-
t14 += v * b12;
|
|
884
|
-
t15 += v * b13;
|
|
885
|
-
t16 += v * b14;
|
|
886
|
-
t17 += v * b15;
|
|
887
|
-
v = a[3];
|
|
888
|
-
t3 += v * b0;
|
|
889
|
-
t4 += v * b1;
|
|
890
|
-
t5 += v * b2;
|
|
891
|
-
t6 += v * b3;
|
|
892
|
-
t7 += v * b4;
|
|
893
|
-
t8 += v * b5;
|
|
894
|
-
t9 += v * b6;
|
|
895
|
-
t10 += v * b7;
|
|
896
|
-
t11 += v * b8;
|
|
897
|
-
t12 += v * b9;
|
|
898
|
-
t13 += v * b10;
|
|
899
|
-
t14 += v * b11;
|
|
900
|
-
t15 += v * b12;
|
|
901
|
-
t16 += v * b13;
|
|
902
|
-
t17 += v * b14;
|
|
903
|
-
t18 += v * b15;
|
|
904
|
-
v = a[4];
|
|
905
|
-
t4 += v * b0;
|
|
906
|
-
t5 += v * b1;
|
|
907
|
-
t6 += v * b2;
|
|
908
|
-
t7 += v * b3;
|
|
909
|
-
t8 += v * b4;
|
|
910
|
-
t9 += v * b5;
|
|
911
|
-
t10 += v * b6;
|
|
912
|
-
t11 += v * b7;
|
|
913
|
-
t12 += v * b8;
|
|
914
|
-
t13 += v * b9;
|
|
915
|
-
t14 += v * b10;
|
|
916
|
-
t15 += v * b11;
|
|
917
|
-
t16 += v * b12;
|
|
918
|
-
t17 += v * b13;
|
|
919
|
-
t18 += v * b14;
|
|
920
|
-
t19 += v * b15;
|
|
921
|
-
v = a[5];
|
|
922
|
-
t5 += v * b0;
|
|
923
|
-
t6 += v * b1;
|
|
924
|
-
t7 += v * b2;
|
|
925
|
-
t8 += v * b3;
|
|
926
|
-
t9 += v * b4;
|
|
927
|
-
t10 += v * b5;
|
|
928
|
-
t11 += v * b6;
|
|
929
|
-
t12 += v * b7;
|
|
930
|
-
t13 += v * b8;
|
|
931
|
-
t14 += v * b9;
|
|
932
|
-
t15 += v * b10;
|
|
933
|
-
t16 += v * b11;
|
|
934
|
-
t17 += v * b12;
|
|
935
|
-
t18 += v * b13;
|
|
936
|
-
t19 += v * b14;
|
|
937
|
-
t20 += v * b15;
|
|
938
|
-
v = a[6];
|
|
939
|
-
t6 += v * b0;
|
|
940
|
-
t7 += v * b1;
|
|
941
|
-
t8 += v * b2;
|
|
942
|
-
t9 += v * b3;
|
|
943
|
-
t10 += v * b4;
|
|
944
|
-
t11 += v * b5;
|
|
945
|
-
t12 += v * b6;
|
|
946
|
-
t13 += v * b7;
|
|
947
|
-
t14 += v * b8;
|
|
948
|
-
t15 += v * b9;
|
|
949
|
-
t16 += v * b10;
|
|
950
|
-
t17 += v * b11;
|
|
951
|
-
t18 += v * b12;
|
|
952
|
-
t19 += v * b13;
|
|
953
|
-
t20 += v * b14;
|
|
954
|
-
t21 += v * b15;
|
|
955
|
-
v = a[7];
|
|
956
|
-
t7 += v * b0;
|
|
957
|
-
t8 += v * b1;
|
|
958
|
-
t9 += v * b2;
|
|
959
|
-
t10 += v * b3;
|
|
960
|
-
t11 += v * b4;
|
|
961
|
-
t12 += v * b5;
|
|
962
|
-
t13 += v * b6;
|
|
963
|
-
t14 += v * b7;
|
|
964
|
-
t15 += v * b8;
|
|
965
|
-
t16 += v * b9;
|
|
966
|
-
t17 += v * b10;
|
|
967
|
-
t18 += v * b11;
|
|
968
|
-
t19 += v * b12;
|
|
969
|
-
t20 += v * b13;
|
|
970
|
-
t21 += v * b14;
|
|
971
|
-
t22 += v * b15;
|
|
972
|
-
v = a[8];
|
|
973
|
-
t8 += v * b0;
|
|
974
|
-
t9 += v * b1;
|
|
975
|
-
t10 += v * b2;
|
|
976
|
-
t11 += v * b3;
|
|
977
|
-
t12 += v * b4;
|
|
978
|
-
t13 += v * b5;
|
|
979
|
-
t14 += v * b6;
|
|
980
|
-
t15 += v * b7;
|
|
981
|
-
t16 += v * b8;
|
|
982
|
-
t17 += v * b9;
|
|
983
|
-
t18 += v * b10;
|
|
984
|
-
t19 += v * b11;
|
|
985
|
-
t20 += v * b12;
|
|
986
|
-
t21 += v * b13;
|
|
987
|
-
t22 += v * b14;
|
|
988
|
-
t23 += v * b15;
|
|
989
|
-
v = a[9];
|
|
990
|
-
t9 += v * b0;
|
|
991
|
-
t10 += v * b1;
|
|
992
|
-
t11 += v * b2;
|
|
993
|
-
t12 += v * b3;
|
|
994
|
-
t13 += v * b4;
|
|
995
|
-
t14 += v * b5;
|
|
996
|
-
t15 += v * b6;
|
|
997
|
-
t16 += v * b7;
|
|
998
|
-
t17 += v * b8;
|
|
999
|
-
t18 += v * b9;
|
|
1000
|
-
t19 += v * b10;
|
|
1001
|
-
t20 += v * b11;
|
|
1002
|
-
t21 += v * b12;
|
|
1003
|
-
t22 += v * b13;
|
|
1004
|
-
t23 += v * b14;
|
|
1005
|
-
t24 += v * b15;
|
|
1006
|
-
v = a[10];
|
|
1007
|
-
t10 += v * b0;
|
|
1008
|
-
t11 += v * b1;
|
|
1009
|
-
t12 += v * b2;
|
|
1010
|
-
t13 += v * b3;
|
|
1011
|
-
t14 += v * b4;
|
|
1012
|
-
t15 += v * b5;
|
|
1013
|
-
t16 += v * b6;
|
|
1014
|
-
t17 += v * b7;
|
|
1015
|
-
t18 += v * b8;
|
|
1016
|
-
t19 += v * b9;
|
|
1017
|
-
t20 += v * b10;
|
|
1018
|
-
t21 += v * b11;
|
|
1019
|
-
t22 += v * b12;
|
|
1020
|
-
t23 += v * b13;
|
|
1021
|
-
t24 += v * b14;
|
|
1022
|
-
t25 += v * b15;
|
|
1023
|
-
v = a[11];
|
|
1024
|
-
t11 += v * b0;
|
|
1025
|
-
t12 += v * b1;
|
|
1026
|
-
t13 += v * b2;
|
|
1027
|
-
t14 += v * b3;
|
|
1028
|
-
t15 += v * b4;
|
|
1029
|
-
t16 += v * b5;
|
|
1030
|
-
t17 += v * b6;
|
|
1031
|
-
t18 += v * b7;
|
|
1032
|
-
t19 += v * b8;
|
|
1033
|
-
t20 += v * b9;
|
|
1034
|
-
t21 += v * b10;
|
|
1035
|
-
t22 += v * b11;
|
|
1036
|
-
t23 += v * b12;
|
|
1037
|
-
t24 += v * b13;
|
|
1038
|
-
t25 += v * b14;
|
|
1039
|
-
t26 += v * b15;
|
|
1040
|
-
v = a[12];
|
|
1041
|
-
t12 += v * b0;
|
|
1042
|
-
t13 += v * b1;
|
|
1043
|
-
t14 += v * b2;
|
|
1044
|
-
t15 += v * b3;
|
|
1045
|
-
t16 += v * b4;
|
|
1046
|
-
t17 += v * b5;
|
|
1047
|
-
t18 += v * b6;
|
|
1048
|
-
t19 += v * b7;
|
|
1049
|
-
t20 += v * b8;
|
|
1050
|
-
t21 += v * b9;
|
|
1051
|
-
t22 += v * b10;
|
|
1052
|
-
t23 += v * b11;
|
|
1053
|
-
t24 += v * b12;
|
|
1054
|
-
t25 += v * b13;
|
|
1055
|
-
t26 += v * b14;
|
|
1056
|
-
t27 += v * b15;
|
|
1057
|
-
v = a[13];
|
|
1058
|
-
t13 += v * b0;
|
|
1059
|
-
t14 += v * b1;
|
|
1060
|
-
t15 += v * b2;
|
|
1061
|
-
t16 += v * b3;
|
|
1062
|
-
t17 += v * b4;
|
|
1063
|
-
t18 += v * b5;
|
|
1064
|
-
t19 += v * b6;
|
|
1065
|
-
t20 += v * b7;
|
|
1066
|
-
t21 += v * b8;
|
|
1067
|
-
t22 += v * b9;
|
|
1068
|
-
t23 += v * b10;
|
|
1069
|
-
t24 += v * b11;
|
|
1070
|
-
t25 += v * b12;
|
|
1071
|
-
t26 += v * b13;
|
|
1072
|
-
t27 += v * b14;
|
|
1073
|
-
t28 += v * b15;
|
|
1074
|
-
v = a[14];
|
|
1075
|
-
t14 += v * b0;
|
|
1076
|
-
t15 += v * b1;
|
|
1077
|
-
t16 += v * b2;
|
|
1078
|
-
t17 += v * b3;
|
|
1079
|
-
t18 += v * b4;
|
|
1080
|
-
t19 += v * b5;
|
|
1081
|
-
t20 += v * b6;
|
|
1082
|
-
t21 += v * b7;
|
|
1083
|
-
t22 += v * b8;
|
|
1084
|
-
t23 += v * b9;
|
|
1085
|
-
t24 += v * b10;
|
|
1086
|
-
t25 += v * b11;
|
|
1087
|
-
t26 += v * b12;
|
|
1088
|
-
t27 += v * b13;
|
|
1089
|
-
t28 += v * b14;
|
|
1090
|
-
t29 += v * b15;
|
|
1091
|
-
v = a[15];
|
|
1092
|
-
t15 += v * b0;
|
|
1093
|
-
t16 += v * b1;
|
|
1094
|
-
t17 += v * b2;
|
|
1095
|
-
t18 += v * b3;
|
|
1096
|
-
t19 += v * b4;
|
|
1097
|
-
t20 += v * b5;
|
|
1098
|
-
t21 += v * b6;
|
|
1099
|
-
t22 += v * b7;
|
|
1100
|
-
t23 += v * b8;
|
|
1101
|
-
t24 += v * b9;
|
|
1102
|
-
t25 += v * b10;
|
|
1103
|
-
t26 += v * b11;
|
|
1104
|
-
t27 += v * b12;
|
|
1105
|
-
t28 += v * b13;
|
|
1106
|
-
t29 += v * b14;
|
|
1107
|
-
t30 += v * b15;
|
|
1108
|
-
t0 += 38 * t16;
|
|
1109
|
-
t1 += 38 * t17;
|
|
1110
|
-
t2 += 38 * t18;
|
|
1111
|
-
t3 += 38 * t19;
|
|
1112
|
-
t4 += 38 * t20;
|
|
1113
|
-
t5 += 38 * t21;
|
|
1114
|
-
t6 += 38 * t22;
|
|
1115
|
-
t7 += 38 * t23;
|
|
1116
|
-
t8 += 38 * t24;
|
|
1117
|
-
t9 += 38 * t25;
|
|
1118
|
-
t10 += 38 * t26;
|
|
1119
|
-
t11 += 38 * t27;
|
|
1120
|
-
t12 += 38 * t28;
|
|
1121
|
-
t13 += 38 * t29;
|
|
1122
|
-
t14 += 38 * t30;
|
|
1123
|
-
c = 1;
|
|
1124
|
-
v = t0 + c + 65535;
|
|
1125
|
-
c = Math.floor(v / 65536);
|
|
1126
|
-
t0 = v - c * 65536;
|
|
1127
|
-
v = t1 + c + 65535;
|
|
1128
|
-
c = Math.floor(v / 65536);
|
|
1129
|
-
t1 = v - c * 65536;
|
|
1130
|
-
v = t2 + c + 65535;
|
|
1131
|
-
c = Math.floor(v / 65536);
|
|
1132
|
-
t2 = v - c * 65536;
|
|
1133
|
-
v = t3 + c + 65535;
|
|
1134
|
-
c = Math.floor(v / 65536);
|
|
1135
|
-
t3 = v - c * 65536;
|
|
1136
|
-
v = t4 + c + 65535;
|
|
1137
|
-
c = Math.floor(v / 65536);
|
|
1138
|
-
t4 = v - c * 65536;
|
|
1139
|
-
v = t5 + c + 65535;
|
|
1140
|
-
c = Math.floor(v / 65536);
|
|
1141
|
-
t5 = v - c * 65536;
|
|
1142
|
-
v = t6 + c + 65535;
|
|
1143
|
-
c = Math.floor(v / 65536);
|
|
1144
|
-
t6 = v - c * 65536;
|
|
1145
|
-
v = t7 + c + 65535;
|
|
1146
|
-
c = Math.floor(v / 65536);
|
|
1147
|
-
t7 = v - c * 65536;
|
|
1148
|
-
v = t8 + c + 65535;
|
|
1149
|
-
c = Math.floor(v / 65536);
|
|
1150
|
-
t8 = v - c * 65536;
|
|
1151
|
-
v = t9 + c + 65535;
|
|
1152
|
-
c = Math.floor(v / 65536);
|
|
1153
|
-
t9 = v - c * 65536;
|
|
1154
|
-
v = t10 + c + 65535;
|
|
1155
|
-
c = Math.floor(v / 65536);
|
|
1156
|
-
t10 = v - c * 65536;
|
|
1157
|
-
v = t11 + c + 65535;
|
|
1158
|
-
c = Math.floor(v / 65536);
|
|
1159
|
-
t11 = v - c * 65536;
|
|
1160
|
-
v = t12 + c + 65535;
|
|
1161
|
-
c = Math.floor(v / 65536);
|
|
1162
|
-
t12 = v - c * 65536;
|
|
1163
|
-
v = t13 + c + 65535;
|
|
1164
|
-
c = Math.floor(v / 65536);
|
|
1165
|
-
t13 = v - c * 65536;
|
|
1166
|
-
v = t14 + c + 65535;
|
|
1167
|
-
c = Math.floor(v / 65536);
|
|
1168
|
-
t14 = v - c * 65536;
|
|
1169
|
-
v = t15 + c + 65535;
|
|
1170
|
-
c = Math.floor(v / 65536);
|
|
1171
|
-
t15 = v - c * 65536;
|
|
1172
|
-
t0 += c - 1 + 37 * (c - 1);
|
|
1173
|
-
c = 1;
|
|
1174
|
-
v = t0 + c + 65535;
|
|
1175
|
-
c = Math.floor(v / 65536);
|
|
1176
|
-
t0 = v - c * 65536;
|
|
1177
|
-
v = t1 + c + 65535;
|
|
1178
|
-
c = Math.floor(v / 65536);
|
|
1179
|
-
t1 = v - c * 65536;
|
|
1180
|
-
v = t2 + c + 65535;
|
|
1181
|
-
c = Math.floor(v / 65536);
|
|
1182
|
-
t2 = v - c * 65536;
|
|
1183
|
-
v = t3 + c + 65535;
|
|
1184
|
-
c = Math.floor(v / 65536);
|
|
1185
|
-
t3 = v - c * 65536;
|
|
1186
|
-
v = t4 + c + 65535;
|
|
1187
|
-
c = Math.floor(v / 65536);
|
|
1188
|
-
t4 = v - c * 65536;
|
|
1189
|
-
v = t5 + c + 65535;
|
|
1190
|
-
c = Math.floor(v / 65536);
|
|
1191
|
-
t5 = v - c * 65536;
|
|
1192
|
-
v = t6 + c + 65535;
|
|
1193
|
-
c = Math.floor(v / 65536);
|
|
1194
|
-
t6 = v - c * 65536;
|
|
1195
|
-
v = t7 + c + 65535;
|
|
1196
|
-
c = Math.floor(v / 65536);
|
|
1197
|
-
t7 = v - c * 65536;
|
|
1198
|
-
v = t8 + c + 65535;
|
|
1199
|
-
c = Math.floor(v / 65536);
|
|
1200
|
-
t8 = v - c * 65536;
|
|
1201
|
-
v = t9 + c + 65535;
|
|
1202
|
-
c = Math.floor(v / 65536);
|
|
1203
|
-
t9 = v - c * 65536;
|
|
1204
|
-
v = t10 + c + 65535;
|
|
1205
|
-
c = Math.floor(v / 65536);
|
|
1206
|
-
t10 = v - c * 65536;
|
|
1207
|
-
v = t11 + c + 65535;
|
|
1208
|
-
c = Math.floor(v / 65536);
|
|
1209
|
-
t11 = v - c * 65536;
|
|
1210
|
-
v = t12 + c + 65535;
|
|
1211
|
-
c = Math.floor(v / 65536);
|
|
1212
|
-
t12 = v - c * 65536;
|
|
1213
|
-
v = t13 + c + 65535;
|
|
1214
|
-
c = Math.floor(v / 65536);
|
|
1215
|
-
t13 = v - c * 65536;
|
|
1216
|
-
v = t14 + c + 65535;
|
|
1217
|
-
c = Math.floor(v / 65536);
|
|
1218
|
-
t14 = v - c * 65536;
|
|
1219
|
-
v = t15 + c + 65535;
|
|
1220
|
-
c = Math.floor(v / 65536);
|
|
1221
|
-
t15 = v - c * 65536;
|
|
1222
|
-
t0 += c - 1 + 37 * (c - 1);
|
|
1223
|
-
o[0] = t0;
|
|
1224
|
-
o[1] = t1;
|
|
1225
|
-
o[2] = t2;
|
|
1226
|
-
o[3] = t3;
|
|
1227
|
-
o[4] = t4;
|
|
1228
|
-
o[5] = t5;
|
|
1229
|
-
o[6] = t6;
|
|
1230
|
-
o[7] = t7;
|
|
1231
|
-
o[8] = t8;
|
|
1232
|
-
o[9] = t9;
|
|
1233
|
-
o[10] = t10;
|
|
1234
|
-
o[11] = t11;
|
|
1235
|
-
o[12] = t12;
|
|
1236
|
-
o[13] = t13;
|
|
1237
|
-
o[14] = t14;
|
|
1238
|
-
o[15] = t15;
|
|
1239
|
-
}
|
|
1240
|
-
function S(o, a) {
|
|
1241
|
-
M(o, a, a);
|
|
1242
|
-
}
|
|
1243
|
-
function inv25519(o, i) {
|
|
1244
|
-
var c = gf();
|
|
1245
|
-
var a;
|
|
1246
|
-
for (a = 0; a < 16; a++) c[a] = i[a];
|
|
1247
|
-
for (a = 253; a >= 0; a--) {
|
|
1248
|
-
S(c, c);
|
|
1249
|
-
if (a !== 2 && a !== 4) M(c, c, i);
|
|
1250
|
-
}
|
|
1251
|
-
for (a = 0; a < 16; a++) o[a] = c[a];
|
|
1252
|
-
}
|
|
1253
|
-
function pow2523(o, i) {
|
|
1254
|
-
var c = gf();
|
|
1255
|
-
var a;
|
|
1256
|
-
for (a = 0; a < 16; a++) c[a] = i[a];
|
|
1257
|
-
for (a = 250; a >= 0; a--) {
|
|
1258
|
-
S(c, c);
|
|
1259
|
-
if (a !== 1) M(c, c, i);
|
|
1260
|
-
}
|
|
1261
|
-
for (a = 0; a < 16; a++) o[a] = c[a];
|
|
1262
|
-
}
|
|
1263
|
-
function crypto_scalarmult(q, n, p) {
|
|
1264
|
-
var z = new Uint8Array(32);
|
|
1265
|
-
var x = new Float64Array(80), r, i;
|
|
1266
|
-
var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf();
|
|
1267
|
-
for (i = 0; i < 31; i++) z[i] = n[i];
|
|
1268
|
-
z[31] = n[31] & 127 | 64;
|
|
1269
|
-
z[0] &= 248;
|
|
1270
|
-
unpack25519(x, p);
|
|
1271
|
-
for (i = 0; i < 16; i++) {
|
|
1272
|
-
b[i] = x[i];
|
|
1273
|
-
d[i] = a[i] = c[i] = 0;
|
|
1274
|
-
}
|
|
1275
|
-
a[0] = d[0] = 1;
|
|
1276
|
-
for (i = 254; i >= 0; --i) {
|
|
1277
|
-
r = z[i >>> 3] >>> (i & 7) & 1;
|
|
1278
|
-
sel25519(a, b, r);
|
|
1279
|
-
sel25519(c, d, r);
|
|
1280
|
-
A(e, a, c);
|
|
1281
|
-
Z(a, a, c);
|
|
1282
|
-
A(c, b, d);
|
|
1283
|
-
Z(b, b, d);
|
|
1284
|
-
S(d, e);
|
|
1285
|
-
S(f, a);
|
|
1286
|
-
M(a, c, a);
|
|
1287
|
-
M(c, b, e);
|
|
1288
|
-
A(e, a, c);
|
|
1289
|
-
Z(a, a, c);
|
|
1290
|
-
S(b, a);
|
|
1291
|
-
Z(c, d, f);
|
|
1292
|
-
M(a, c, _121665);
|
|
1293
|
-
A(a, a, d);
|
|
1294
|
-
M(c, c, a);
|
|
1295
|
-
M(a, d, f);
|
|
1296
|
-
M(d, b, x);
|
|
1297
|
-
S(b, e);
|
|
1298
|
-
sel25519(a, b, r);
|
|
1299
|
-
sel25519(c, d, r);
|
|
1300
|
-
}
|
|
1301
|
-
for (i = 0; i < 16; i++) {
|
|
1302
|
-
x[i + 16] = a[i];
|
|
1303
|
-
x[i + 32] = c[i];
|
|
1304
|
-
x[i + 48] = b[i];
|
|
1305
|
-
x[i + 64] = d[i];
|
|
1306
|
-
}
|
|
1307
|
-
var x32 = x.subarray(32);
|
|
1308
|
-
var x16 = x.subarray(16);
|
|
1309
|
-
inv25519(x32, x32);
|
|
1310
|
-
M(x16, x16, x32);
|
|
1311
|
-
pack25519(q, x16);
|
|
1312
|
-
return 0;
|
|
1313
|
-
}
|
|
1314
|
-
function crypto_scalarmult_base(q, n) {
|
|
1315
|
-
return crypto_scalarmult(q, n, _9);
|
|
1316
|
-
}
|
|
1317
|
-
function crypto_box_keypair(y, x) {
|
|
1318
|
-
randombytes(x, 32);
|
|
1319
|
-
return crypto_scalarmult_base(y, x);
|
|
1320
|
-
}
|
|
1321
|
-
function crypto_box_beforenm(k, y, x) {
|
|
1322
|
-
var s = new Uint8Array(32);
|
|
1323
|
-
crypto_scalarmult(s, x, y);
|
|
1324
|
-
return crypto_core_hsalsa20(k, _0, s, sigma);
|
|
1325
|
-
}
|
|
1326
|
-
var crypto_box_afternm = crypto_secretbox;
|
|
1327
|
-
var crypto_box_open_afternm = crypto_secretbox_open;
|
|
1328
|
-
function crypto_box(c, m, d, n, y, x) {
|
|
1329
|
-
var k = new Uint8Array(32);
|
|
1330
|
-
crypto_box_beforenm(k, y, x);
|
|
1331
|
-
return crypto_box_afternm(c, m, d, n, k);
|
|
1332
|
-
}
|
|
1333
|
-
function crypto_box_open(m, c, d, n, y, x) {
|
|
1334
|
-
var k = new Uint8Array(32);
|
|
1335
|
-
crypto_box_beforenm(k, y, x);
|
|
1336
|
-
return crypto_box_open_afternm(m, c, d, n, k);
|
|
1337
|
-
}
|
|
1338
|
-
var K = [
|
|
1339
|
-
1116352408,
|
|
1340
|
-
3609767458,
|
|
1341
|
-
1899447441,
|
|
1342
|
-
602891725,
|
|
1343
|
-
3049323471,
|
|
1344
|
-
3964484399,
|
|
1345
|
-
3921009573,
|
|
1346
|
-
2173295548,
|
|
1347
|
-
961987163,
|
|
1348
|
-
4081628472,
|
|
1349
|
-
1508970993,
|
|
1350
|
-
3053834265,
|
|
1351
|
-
2453635748,
|
|
1352
|
-
2937671579,
|
|
1353
|
-
2870763221,
|
|
1354
|
-
3664609560,
|
|
1355
|
-
3624381080,
|
|
1356
|
-
2734883394,
|
|
1357
|
-
310598401,
|
|
1358
|
-
1164996542,
|
|
1359
|
-
607225278,
|
|
1360
|
-
1323610764,
|
|
1361
|
-
1426881987,
|
|
1362
|
-
3590304994,
|
|
1363
|
-
1925078388,
|
|
1364
|
-
4068182383,
|
|
1365
|
-
2162078206,
|
|
1366
|
-
991336113,
|
|
1367
|
-
2614888103,
|
|
1368
|
-
633803317,
|
|
1369
|
-
3248222580,
|
|
1370
|
-
3479774868,
|
|
1371
|
-
3835390401,
|
|
1372
|
-
2666613458,
|
|
1373
|
-
4022224774,
|
|
1374
|
-
944711139,
|
|
1375
|
-
264347078,
|
|
1376
|
-
2341262773,
|
|
1377
|
-
604807628,
|
|
1378
|
-
2007800933,
|
|
1379
|
-
770255983,
|
|
1380
|
-
1495990901,
|
|
1381
|
-
1249150122,
|
|
1382
|
-
1856431235,
|
|
1383
|
-
1555081692,
|
|
1384
|
-
3175218132,
|
|
1385
|
-
1996064986,
|
|
1386
|
-
2198950837,
|
|
1387
|
-
2554220882,
|
|
1388
|
-
3999719339,
|
|
1389
|
-
2821834349,
|
|
1390
|
-
766784016,
|
|
1391
|
-
2952996808,
|
|
1392
|
-
2566594879,
|
|
1393
|
-
3210313671,
|
|
1394
|
-
3203337956,
|
|
1395
|
-
3336571891,
|
|
1396
|
-
1034457026,
|
|
1397
|
-
3584528711,
|
|
1398
|
-
2466948901,
|
|
1399
|
-
113926993,
|
|
1400
|
-
3758326383,
|
|
1401
|
-
338241895,
|
|
1402
|
-
168717936,
|
|
1403
|
-
666307205,
|
|
1404
|
-
1188179964,
|
|
1405
|
-
773529912,
|
|
1406
|
-
1546045734,
|
|
1407
|
-
1294757372,
|
|
1408
|
-
1522805485,
|
|
1409
|
-
1396182291,
|
|
1410
|
-
2643833823,
|
|
1411
|
-
1695183700,
|
|
1412
|
-
2343527390,
|
|
1413
|
-
1986661051,
|
|
1414
|
-
1014477480,
|
|
1415
|
-
2177026350,
|
|
1416
|
-
1206759142,
|
|
1417
|
-
2456956037,
|
|
1418
|
-
344077627,
|
|
1419
|
-
2730485921,
|
|
1420
|
-
1290863460,
|
|
1421
|
-
2820302411,
|
|
1422
|
-
3158454273,
|
|
1423
|
-
3259730800,
|
|
1424
|
-
3505952657,
|
|
1425
|
-
3345764771,
|
|
1426
|
-
106217008,
|
|
1427
|
-
3516065817,
|
|
1428
|
-
3606008344,
|
|
1429
|
-
3600352804,
|
|
1430
|
-
1432725776,
|
|
1431
|
-
4094571909,
|
|
1432
|
-
1467031594,
|
|
1433
|
-
275423344,
|
|
1434
|
-
851169720,
|
|
1435
|
-
430227734,
|
|
1436
|
-
3100823752,
|
|
1437
|
-
506948616,
|
|
1438
|
-
1363258195,
|
|
1439
|
-
659060556,
|
|
1440
|
-
3750685593,
|
|
1441
|
-
883997877,
|
|
1442
|
-
3785050280,
|
|
1443
|
-
958139571,
|
|
1444
|
-
3318307427,
|
|
1445
|
-
1322822218,
|
|
1446
|
-
3812723403,
|
|
1447
|
-
1537002063,
|
|
1448
|
-
2003034995,
|
|
1449
|
-
1747873779,
|
|
1450
|
-
3602036899,
|
|
1451
|
-
1955562222,
|
|
1452
|
-
1575990012,
|
|
1453
|
-
2024104815,
|
|
1454
|
-
1125592928,
|
|
1455
|
-
2227730452,
|
|
1456
|
-
2716904306,
|
|
1457
|
-
2361852424,
|
|
1458
|
-
442776044,
|
|
1459
|
-
2428436474,
|
|
1460
|
-
593698344,
|
|
1461
|
-
2756734187,
|
|
1462
|
-
3733110249,
|
|
1463
|
-
3204031479,
|
|
1464
|
-
2999351573,
|
|
1465
|
-
3329325298,
|
|
1466
|
-
3815920427,
|
|
1467
|
-
3391569614,
|
|
1468
|
-
3928383900,
|
|
1469
|
-
3515267271,
|
|
1470
|
-
566280711,
|
|
1471
|
-
3940187606,
|
|
1472
|
-
3454069534,
|
|
1473
|
-
4118630271,
|
|
1474
|
-
4000239992,
|
|
1475
|
-
116418474,
|
|
1476
|
-
1914138554,
|
|
1477
|
-
174292421,
|
|
1478
|
-
2731055270,
|
|
1479
|
-
289380356,
|
|
1480
|
-
3203993006,
|
|
1481
|
-
460393269,
|
|
1482
|
-
320620315,
|
|
1483
|
-
685471733,
|
|
1484
|
-
587496836,
|
|
1485
|
-
852142971,
|
|
1486
|
-
1086792851,
|
|
1487
|
-
1017036298,
|
|
1488
|
-
365543100,
|
|
1489
|
-
1126000580,
|
|
1490
|
-
2618297676,
|
|
1491
|
-
1288033470,
|
|
1492
|
-
3409855158,
|
|
1493
|
-
1501505948,
|
|
1494
|
-
4234509866,
|
|
1495
|
-
1607167915,
|
|
1496
|
-
987167468,
|
|
1497
|
-
1816402316,
|
|
1498
|
-
1246189591
|
|
1499
|
-
];
|
|
1500
|
-
function crypto_hashblocks_hl(hh, hl, m, n) {
|
|
1501
|
-
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;
|
|
1502
|
-
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];
|
|
1503
|
-
var pos = 0;
|
|
1504
|
-
while (n >= 128) {
|
|
1505
|
-
for (i = 0; i < 16; i++) {
|
|
1506
|
-
j = 8 * i + pos;
|
|
1507
|
-
wh[i] = m[j + 0] << 24 | m[j + 1] << 16 | m[j + 2] << 8 | m[j + 3];
|
|
1508
|
-
wl[i] = m[j + 4] << 24 | m[j + 5] << 16 | m[j + 6] << 8 | m[j + 7];
|
|
1509
|
-
}
|
|
1510
|
-
for (i = 0; i < 80; i++) {
|
|
1511
|
-
bh0 = ah0;
|
|
1512
|
-
bh1 = ah1;
|
|
1513
|
-
bh2 = ah2;
|
|
1514
|
-
bh3 = ah3;
|
|
1515
|
-
bh4 = ah4;
|
|
1516
|
-
bh5 = ah5;
|
|
1517
|
-
bh6 = ah6;
|
|
1518
|
-
bh7 = ah7;
|
|
1519
|
-
bl0 = al0;
|
|
1520
|
-
bl1 = al1;
|
|
1521
|
-
bl2 = al2;
|
|
1522
|
-
bl3 = al3;
|
|
1523
|
-
bl4 = al4;
|
|
1524
|
-
bl5 = al5;
|
|
1525
|
-
bl6 = al6;
|
|
1526
|
-
bl7 = al7;
|
|
1527
|
-
h = ah7;
|
|
1528
|
-
l = al7;
|
|
1529
|
-
a = l & 65535;
|
|
1530
|
-
b = l >>> 16;
|
|
1531
|
-
c = h & 65535;
|
|
1532
|
-
d = h >>> 16;
|
|
1533
|
-
h = (ah4 >>> 14 | al4 << 32 - 14) ^ (ah4 >>> 18 | al4 << 32 - 18) ^ (al4 >>> 41 - 32 | ah4 << 32 - (41 - 32));
|
|
1534
|
-
l = (al4 >>> 14 | ah4 << 32 - 14) ^ (al4 >>> 18 | ah4 << 32 - 18) ^ (ah4 >>> 41 - 32 | al4 << 32 - (41 - 32));
|
|
1535
|
-
a += l & 65535;
|
|
1536
|
-
b += l >>> 16;
|
|
1537
|
-
c += h & 65535;
|
|
1538
|
-
d += h >>> 16;
|
|
1539
|
-
h = ah4 & ah5 ^ ~ah4 & ah6;
|
|
1540
|
-
l = al4 & al5 ^ ~al4 & al6;
|
|
1541
|
-
a += l & 65535;
|
|
1542
|
-
b += l >>> 16;
|
|
1543
|
-
c += h & 65535;
|
|
1544
|
-
d += h >>> 16;
|
|
1545
|
-
h = K[i * 2];
|
|
1546
|
-
l = K[i * 2 + 1];
|
|
1547
|
-
a += l & 65535;
|
|
1548
|
-
b += l >>> 16;
|
|
1549
|
-
c += h & 65535;
|
|
1550
|
-
d += h >>> 16;
|
|
1551
|
-
h = wh[i % 16];
|
|
1552
|
-
l = wl[i % 16];
|
|
1553
|
-
a += l & 65535;
|
|
1554
|
-
b += l >>> 16;
|
|
1555
|
-
c += h & 65535;
|
|
1556
|
-
d += h >>> 16;
|
|
1557
|
-
b += a >>> 16;
|
|
1558
|
-
c += b >>> 16;
|
|
1559
|
-
d += c >>> 16;
|
|
1560
|
-
th = c & 65535 | d << 16;
|
|
1561
|
-
tl = a & 65535 | b << 16;
|
|
1562
|
-
h = th;
|
|
1563
|
-
l = tl;
|
|
1564
|
-
a = l & 65535;
|
|
1565
|
-
b = l >>> 16;
|
|
1566
|
-
c = h & 65535;
|
|
1567
|
-
d = h >>> 16;
|
|
1568
|
-
h = (ah0 >>> 28 | al0 << 32 - 28) ^ (al0 >>> 34 - 32 | ah0 << 32 - (34 - 32)) ^ (al0 >>> 39 - 32 | ah0 << 32 - (39 - 32));
|
|
1569
|
-
l = (al0 >>> 28 | ah0 << 32 - 28) ^ (ah0 >>> 34 - 32 | al0 << 32 - (34 - 32)) ^ (ah0 >>> 39 - 32 | al0 << 32 - (39 - 32));
|
|
1570
|
-
a += l & 65535;
|
|
1571
|
-
b += l >>> 16;
|
|
1572
|
-
c += h & 65535;
|
|
1573
|
-
d += h >>> 16;
|
|
1574
|
-
h = ah0 & ah1 ^ ah0 & ah2 ^ ah1 & ah2;
|
|
1575
|
-
l = al0 & al1 ^ al0 & al2 ^ al1 & al2;
|
|
1576
|
-
a += l & 65535;
|
|
1577
|
-
b += l >>> 16;
|
|
1578
|
-
c += h & 65535;
|
|
1579
|
-
d += h >>> 16;
|
|
1580
|
-
b += a >>> 16;
|
|
1581
|
-
c += b >>> 16;
|
|
1582
|
-
d += c >>> 16;
|
|
1583
|
-
bh7 = c & 65535 | d << 16;
|
|
1584
|
-
bl7 = a & 65535 | b << 16;
|
|
1585
|
-
h = bh3;
|
|
1586
|
-
l = bl3;
|
|
1587
|
-
a = l & 65535;
|
|
1588
|
-
b = l >>> 16;
|
|
1589
|
-
c = h & 65535;
|
|
1590
|
-
d = h >>> 16;
|
|
1591
|
-
h = th;
|
|
1592
|
-
l = tl;
|
|
1593
|
-
a += l & 65535;
|
|
1594
|
-
b += l >>> 16;
|
|
1595
|
-
c += h & 65535;
|
|
1596
|
-
d += h >>> 16;
|
|
1597
|
-
b += a >>> 16;
|
|
1598
|
-
c += b >>> 16;
|
|
1599
|
-
d += c >>> 16;
|
|
1600
|
-
bh3 = c & 65535 | d << 16;
|
|
1601
|
-
bl3 = a & 65535 | b << 16;
|
|
1602
|
-
ah1 = bh0;
|
|
1603
|
-
ah2 = bh1;
|
|
1604
|
-
ah3 = bh2;
|
|
1605
|
-
ah4 = bh3;
|
|
1606
|
-
ah5 = bh4;
|
|
1607
|
-
ah6 = bh5;
|
|
1608
|
-
ah7 = bh6;
|
|
1609
|
-
ah0 = bh7;
|
|
1610
|
-
al1 = bl0;
|
|
1611
|
-
al2 = bl1;
|
|
1612
|
-
al3 = bl2;
|
|
1613
|
-
al4 = bl3;
|
|
1614
|
-
al5 = bl4;
|
|
1615
|
-
al6 = bl5;
|
|
1616
|
-
al7 = bl6;
|
|
1617
|
-
al0 = bl7;
|
|
1618
|
-
if (i % 16 === 15) {
|
|
1619
|
-
for (j = 0; j < 16; j++) {
|
|
1620
|
-
h = wh[j];
|
|
1621
|
-
l = wl[j];
|
|
1622
|
-
a = l & 65535;
|
|
1623
|
-
b = l >>> 16;
|
|
1624
|
-
c = h & 65535;
|
|
1625
|
-
d = h >>> 16;
|
|
1626
|
-
h = wh[(j + 9) % 16];
|
|
1627
|
-
l = wl[(j + 9) % 16];
|
|
1628
|
-
a += l & 65535;
|
|
1629
|
-
b += l >>> 16;
|
|
1630
|
-
c += h & 65535;
|
|
1631
|
-
d += h >>> 16;
|
|
1632
|
-
th = wh[(j + 1) % 16];
|
|
1633
|
-
tl = wl[(j + 1) % 16];
|
|
1634
|
-
h = (th >>> 1 | tl << 32 - 1) ^ (th >>> 8 | tl << 32 - 8) ^ th >>> 7;
|
|
1635
|
-
l = (tl >>> 1 | th << 32 - 1) ^ (tl >>> 8 | th << 32 - 8) ^ (tl >>> 7 | th << 32 - 7);
|
|
1636
|
-
a += l & 65535;
|
|
1637
|
-
b += l >>> 16;
|
|
1638
|
-
c += h & 65535;
|
|
1639
|
-
d += h >>> 16;
|
|
1640
|
-
th = wh[(j + 14) % 16];
|
|
1641
|
-
tl = wl[(j + 14) % 16];
|
|
1642
|
-
h = (th >>> 19 | tl << 32 - 19) ^ (tl >>> 61 - 32 | th << 32 - (61 - 32)) ^ th >>> 6;
|
|
1643
|
-
l = (tl >>> 19 | th << 32 - 19) ^ (th >>> 61 - 32 | tl << 32 - (61 - 32)) ^ (tl >>> 6 | th << 32 - 6);
|
|
1644
|
-
a += l & 65535;
|
|
1645
|
-
b += l >>> 16;
|
|
1646
|
-
c += h & 65535;
|
|
1647
|
-
d += h >>> 16;
|
|
1648
|
-
b += a >>> 16;
|
|
1649
|
-
c += b >>> 16;
|
|
1650
|
-
d += c >>> 16;
|
|
1651
|
-
wh[j] = c & 65535 | d << 16;
|
|
1652
|
-
wl[j] = a & 65535 | b << 16;
|
|
1653
|
-
}
|
|
1654
|
-
}
|
|
1655
|
-
}
|
|
1656
|
-
h = ah0;
|
|
1657
|
-
l = al0;
|
|
1658
|
-
a = l & 65535;
|
|
1659
|
-
b = l >>> 16;
|
|
1660
|
-
c = h & 65535;
|
|
1661
|
-
d = h >>> 16;
|
|
1662
|
-
h = hh[0];
|
|
1663
|
-
l = hl[0];
|
|
1664
|
-
a += l & 65535;
|
|
1665
|
-
b += l >>> 16;
|
|
1666
|
-
c += h & 65535;
|
|
1667
|
-
d += h >>> 16;
|
|
1668
|
-
b += a >>> 16;
|
|
1669
|
-
c += b >>> 16;
|
|
1670
|
-
d += c >>> 16;
|
|
1671
|
-
hh[0] = ah0 = c & 65535 | d << 16;
|
|
1672
|
-
hl[0] = al0 = a & 65535 | b << 16;
|
|
1673
|
-
h = ah1;
|
|
1674
|
-
l = al1;
|
|
1675
|
-
a = l & 65535;
|
|
1676
|
-
b = l >>> 16;
|
|
1677
|
-
c = h & 65535;
|
|
1678
|
-
d = h >>> 16;
|
|
1679
|
-
h = hh[1];
|
|
1680
|
-
l = hl[1];
|
|
1681
|
-
a += l & 65535;
|
|
1682
|
-
b += l >>> 16;
|
|
1683
|
-
c += h & 65535;
|
|
1684
|
-
d += h >>> 16;
|
|
1685
|
-
b += a >>> 16;
|
|
1686
|
-
c += b >>> 16;
|
|
1687
|
-
d += c >>> 16;
|
|
1688
|
-
hh[1] = ah1 = c & 65535 | d << 16;
|
|
1689
|
-
hl[1] = al1 = a & 65535 | b << 16;
|
|
1690
|
-
h = ah2;
|
|
1691
|
-
l = al2;
|
|
1692
|
-
a = l & 65535;
|
|
1693
|
-
b = l >>> 16;
|
|
1694
|
-
c = h & 65535;
|
|
1695
|
-
d = h >>> 16;
|
|
1696
|
-
h = hh[2];
|
|
1697
|
-
l = hl[2];
|
|
1698
|
-
a += l & 65535;
|
|
1699
|
-
b += l >>> 16;
|
|
1700
|
-
c += h & 65535;
|
|
1701
|
-
d += h >>> 16;
|
|
1702
|
-
b += a >>> 16;
|
|
1703
|
-
c += b >>> 16;
|
|
1704
|
-
d += c >>> 16;
|
|
1705
|
-
hh[2] = ah2 = c & 65535 | d << 16;
|
|
1706
|
-
hl[2] = al2 = a & 65535 | b << 16;
|
|
1707
|
-
h = ah3;
|
|
1708
|
-
l = al3;
|
|
1709
|
-
a = l & 65535;
|
|
1710
|
-
b = l >>> 16;
|
|
1711
|
-
c = h & 65535;
|
|
1712
|
-
d = h >>> 16;
|
|
1713
|
-
h = hh[3];
|
|
1714
|
-
l = hl[3];
|
|
1715
|
-
a += l & 65535;
|
|
1716
|
-
b += l >>> 16;
|
|
1717
|
-
c += h & 65535;
|
|
1718
|
-
d += h >>> 16;
|
|
1719
|
-
b += a >>> 16;
|
|
1720
|
-
c += b >>> 16;
|
|
1721
|
-
d += c >>> 16;
|
|
1722
|
-
hh[3] = ah3 = c & 65535 | d << 16;
|
|
1723
|
-
hl[3] = al3 = a & 65535 | b << 16;
|
|
1724
|
-
h = ah4;
|
|
1725
|
-
l = al4;
|
|
1726
|
-
a = l & 65535;
|
|
1727
|
-
b = l >>> 16;
|
|
1728
|
-
c = h & 65535;
|
|
1729
|
-
d = h >>> 16;
|
|
1730
|
-
h = hh[4];
|
|
1731
|
-
l = hl[4];
|
|
1732
|
-
a += l & 65535;
|
|
1733
|
-
b += l >>> 16;
|
|
1734
|
-
c += h & 65535;
|
|
1735
|
-
d += h >>> 16;
|
|
1736
|
-
b += a >>> 16;
|
|
1737
|
-
c += b >>> 16;
|
|
1738
|
-
d += c >>> 16;
|
|
1739
|
-
hh[4] = ah4 = c & 65535 | d << 16;
|
|
1740
|
-
hl[4] = al4 = a & 65535 | b << 16;
|
|
1741
|
-
h = ah5;
|
|
1742
|
-
l = al5;
|
|
1743
|
-
a = l & 65535;
|
|
1744
|
-
b = l >>> 16;
|
|
1745
|
-
c = h & 65535;
|
|
1746
|
-
d = h >>> 16;
|
|
1747
|
-
h = hh[5];
|
|
1748
|
-
l = hl[5];
|
|
1749
|
-
a += l & 65535;
|
|
1750
|
-
b += l >>> 16;
|
|
1751
|
-
c += h & 65535;
|
|
1752
|
-
d += h >>> 16;
|
|
1753
|
-
b += a >>> 16;
|
|
1754
|
-
c += b >>> 16;
|
|
1755
|
-
d += c >>> 16;
|
|
1756
|
-
hh[5] = ah5 = c & 65535 | d << 16;
|
|
1757
|
-
hl[5] = al5 = a & 65535 | b << 16;
|
|
1758
|
-
h = ah6;
|
|
1759
|
-
l = al6;
|
|
1760
|
-
a = l & 65535;
|
|
1761
|
-
b = l >>> 16;
|
|
1762
|
-
c = h & 65535;
|
|
1763
|
-
d = h >>> 16;
|
|
1764
|
-
h = hh[6];
|
|
1765
|
-
l = hl[6];
|
|
1766
|
-
a += l & 65535;
|
|
1767
|
-
b += l >>> 16;
|
|
1768
|
-
c += h & 65535;
|
|
1769
|
-
d += h >>> 16;
|
|
1770
|
-
b += a >>> 16;
|
|
1771
|
-
c += b >>> 16;
|
|
1772
|
-
d += c >>> 16;
|
|
1773
|
-
hh[6] = ah6 = c & 65535 | d << 16;
|
|
1774
|
-
hl[6] = al6 = a & 65535 | b << 16;
|
|
1775
|
-
h = ah7;
|
|
1776
|
-
l = al7;
|
|
1777
|
-
a = l & 65535;
|
|
1778
|
-
b = l >>> 16;
|
|
1779
|
-
c = h & 65535;
|
|
1780
|
-
d = h >>> 16;
|
|
1781
|
-
h = hh[7];
|
|
1782
|
-
l = hl[7];
|
|
1783
|
-
a += l & 65535;
|
|
1784
|
-
b += l >>> 16;
|
|
1785
|
-
c += h & 65535;
|
|
1786
|
-
d += h >>> 16;
|
|
1787
|
-
b += a >>> 16;
|
|
1788
|
-
c += b >>> 16;
|
|
1789
|
-
d += c >>> 16;
|
|
1790
|
-
hh[7] = ah7 = c & 65535 | d << 16;
|
|
1791
|
-
hl[7] = al7 = a & 65535 | b << 16;
|
|
1792
|
-
pos += 128;
|
|
1793
|
-
n -= 128;
|
|
1794
|
-
}
|
|
1795
|
-
return n;
|
|
1796
|
-
}
|
|
1797
|
-
function crypto_hash(out, m, n) {
|
|
1798
|
-
var hh = new Int32Array(8), hl = new Int32Array(8), x = new Uint8Array(256), i, b = n;
|
|
1799
|
-
hh[0] = 1779033703;
|
|
1800
|
-
hh[1] = 3144134277;
|
|
1801
|
-
hh[2] = 1013904242;
|
|
1802
|
-
hh[3] = 2773480762;
|
|
1803
|
-
hh[4] = 1359893119;
|
|
1804
|
-
hh[5] = 2600822924;
|
|
1805
|
-
hh[6] = 528734635;
|
|
1806
|
-
hh[7] = 1541459225;
|
|
1807
|
-
hl[0] = 4089235720;
|
|
1808
|
-
hl[1] = 2227873595;
|
|
1809
|
-
hl[2] = 4271175723;
|
|
1810
|
-
hl[3] = 1595750129;
|
|
1811
|
-
hl[4] = 2917565137;
|
|
1812
|
-
hl[5] = 725511199;
|
|
1813
|
-
hl[6] = 4215389547;
|
|
1814
|
-
hl[7] = 327033209;
|
|
1815
|
-
crypto_hashblocks_hl(hh, hl, m, n);
|
|
1816
|
-
n %= 128;
|
|
1817
|
-
for (i = 0; i < n; i++) x[i] = m[b - n + i];
|
|
1818
|
-
x[n] = 128;
|
|
1819
|
-
n = 256 - 128 * (n < 112 ? 1 : 0);
|
|
1820
|
-
x[n - 9] = 0;
|
|
1821
|
-
ts64(x, n - 8, b / 536870912 | 0, b << 3);
|
|
1822
|
-
crypto_hashblocks_hl(hh, hl, x, n);
|
|
1823
|
-
for (i = 0; i < 8; i++) ts64(out, 8 * i, hh[i], hl[i]);
|
|
1824
|
-
return 0;
|
|
1825
|
-
}
|
|
1826
|
-
function add(p, q) {
|
|
1827
|
-
var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf(), g = gf(), h = gf(), t = gf();
|
|
1828
|
-
Z(a, p[1], p[0]);
|
|
1829
|
-
Z(t, q[1], q[0]);
|
|
1830
|
-
M(a, a, t);
|
|
1831
|
-
A(b, p[0], p[1]);
|
|
1832
|
-
A(t, q[0], q[1]);
|
|
1833
|
-
M(b, b, t);
|
|
1834
|
-
M(c, p[3], q[3]);
|
|
1835
|
-
M(c, c, D2);
|
|
1836
|
-
M(d, p[2], q[2]);
|
|
1837
|
-
A(d, d, d);
|
|
1838
|
-
Z(e, b, a);
|
|
1839
|
-
Z(f, d, c);
|
|
1840
|
-
A(g, d, c);
|
|
1841
|
-
A(h, b, a);
|
|
1842
|
-
M(p[0], e, f);
|
|
1843
|
-
M(p[1], h, g);
|
|
1844
|
-
M(p[2], g, f);
|
|
1845
|
-
M(p[3], e, h);
|
|
1846
|
-
}
|
|
1847
|
-
function cswap(p, q, b) {
|
|
1848
|
-
var i;
|
|
1849
|
-
for (i = 0; i < 4; i++) {
|
|
1850
|
-
sel25519(p[i], q[i], b);
|
|
1851
|
-
}
|
|
1852
|
-
}
|
|
1853
|
-
function pack(r, p) {
|
|
1854
|
-
var tx = gf(), ty = gf(), zi = gf();
|
|
1855
|
-
inv25519(zi, p[2]);
|
|
1856
|
-
M(tx, p[0], zi);
|
|
1857
|
-
M(ty, p[1], zi);
|
|
1858
|
-
pack25519(r, ty);
|
|
1859
|
-
r[31] ^= par25519(tx) << 7;
|
|
1860
|
-
}
|
|
1861
|
-
function scalarmult(p, q, s) {
|
|
1862
|
-
var b, i;
|
|
1863
|
-
set25519(p[0], gf0);
|
|
1864
|
-
set25519(p[1], gf1);
|
|
1865
|
-
set25519(p[2], gf1);
|
|
1866
|
-
set25519(p[3], gf0);
|
|
1867
|
-
for (i = 255; i >= 0; --i) {
|
|
1868
|
-
b = s[i / 8 | 0] >> (i & 7) & 1;
|
|
1869
|
-
cswap(p, q, b);
|
|
1870
|
-
add(q, p);
|
|
1871
|
-
add(p, p);
|
|
1872
|
-
cswap(p, q, b);
|
|
1873
|
-
}
|
|
1874
|
-
}
|
|
1875
|
-
function scalarbase(p, s) {
|
|
1876
|
-
var q = [gf(), gf(), gf(), gf()];
|
|
1877
|
-
set25519(q[0], X);
|
|
1878
|
-
set25519(q[1], Y);
|
|
1879
|
-
set25519(q[2], gf1);
|
|
1880
|
-
M(q[3], X, Y);
|
|
1881
|
-
scalarmult(p, q, s);
|
|
1882
|
-
}
|
|
1883
|
-
function crypto_sign_keypair(pk, sk, seeded) {
|
|
1884
|
-
var d = new Uint8Array(64);
|
|
1885
|
-
var p = [gf(), gf(), gf(), gf()];
|
|
1886
|
-
var i;
|
|
1887
|
-
if (!seeded) randombytes(sk, 32);
|
|
1888
|
-
crypto_hash(d, sk, 32);
|
|
1889
|
-
d[0] &= 248;
|
|
1890
|
-
d[31] &= 127;
|
|
1891
|
-
d[31] |= 64;
|
|
1892
|
-
scalarbase(p, d);
|
|
1893
|
-
pack(pk, p);
|
|
1894
|
-
for (i = 0; i < 32; i++) sk[i + 32] = pk[i];
|
|
1895
|
-
return 0;
|
|
1896
|
-
}
|
|
1897
|
-
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]);
|
|
1898
|
-
function modL(r, x) {
|
|
1899
|
-
var carry, i, j, k;
|
|
1900
|
-
for (i = 63; i >= 32; --i) {
|
|
1901
|
-
carry = 0;
|
|
1902
|
-
for (j = i - 32, k = i - 12; j < k; ++j) {
|
|
1903
|
-
x[j] += carry - 16 * x[i] * L[j - (i - 32)];
|
|
1904
|
-
carry = Math.floor((x[j] + 128) / 256);
|
|
1905
|
-
x[j] -= carry * 256;
|
|
1906
|
-
}
|
|
1907
|
-
x[j] += carry;
|
|
1908
|
-
x[i] = 0;
|
|
1909
|
-
}
|
|
1910
|
-
carry = 0;
|
|
1911
|
-
for (j = 0; j < 32; j++) {
|
|
1912
|
-
x[j] += carry - (x[31] >> 4) * L[j];
|
|
1913
|
-
carry = x[j] >> 8;
|
|
1914
|
-
x[j] &= 255;
|
|
1915
|
-
}
|
|
1916
|
-
for (j = 0; j < 32; j++) x[j] -= carry * L[j];
|
|
1917
|
-
for (i = 0; i < 32; i++) {
|
|
1918
|
-
x[i + 1] += x[i] >> 8;
|
|
1919
|
-
r[i] = x[i] & 255;
|
|
1920
|
-
}
|
|
1921
|
-
}
|
|
1922
|
-
function reduce(r) {
|
|
1923
|
-
var x = new Float64Array(64), i;
|
|
1924
|
-
for (i = 0; i < 64; i++) x[i] = r[i];
|
|
1925
|
-
for (i = 0; i < 64; i++) r[i] = 0;
|
|
1926
|
-
modL(r, x);
|
|
1927
|
-
}
|
|
1928
|
-
function crypto_sign(sm, m, n, sk) {
|
|
1929
|
-
var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
|
|
1930
|
-
var i, j, x = new Float64Array(64);
|
|
1931
|
-
var p = [gf(), gf(), gf(), gf()];
|
|
1932
|
-
crypto_hash(d, sk, 32);
|
|
1933
|
-
d[0] &= 248;
|
|
1934
|
-
d[31] &= 127;
|
|
1935
|
-
d[31] |= 64;
|
|
1936
|
-
var smlen = n + 64;
|
|
1937
|
-
for (i = 0; i < n; i++) sm[64 + i] = m[i];
|
|
1938
|
-
for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
|
|
1939
|
-
crypto_hash(r, sm.subarray(32), n + 32);
|
|
1940
|
-
reduce(r);
|
|
1941
|
-
scalarbase(p, r);
|
|
1942
|
-
pack(sm, p);
|
|
1943
|
-
for (i = 32; i < 64; i++) sm[i] = sk[i];
|
|
1944
|
-
crypto_hash(h, sm, n + 64);
|
|
1945
|
-
reduce(h);
|
|
1946
|
-
for (i = 0; i < 64; i++) x[i] = 0;
|
|
1947
|
-
for (i = 0; i < 32; i++) x[i] = r[i];
|
|
1948
|
-
for (i = 0; i < 32; i++) {
|
|
1949
|
-
for (j = 0; j < 32; j++) {
|
|
1950
|
-
x[i + j] += h[i] * d[j];
|
|
1951
|
-
}
|
|
1952
|
-
}
|
|
1953
|
-
modL(sm.subarray(32), x);
|
|
1954
|
-
return smlen;
|
|
1955
|
-
}
|
|
1956
|
-
function unpackneg(r, p) {
|
|
1957
|
-
var t = gf(), chk = gf(), num = gf(), den = gf(), den2 = gf(), den4 = gf(), den6 = gf();
|
|
1958
|
-
set25519(r[2], gf1);
|
|
1959
|
-
unpack25519(r[1], p);
|
|
1960
|
-
S(num, r[1]);
|
|
1961
|
-
M(den, num, D);
|
|
1962
|
-
Z(num, num, r[2]);
|
|
1963
|
-
A(den, r[2], den);
|
|
1964
|
-
S(den2, den);
|
|
1965
|
-
S(den4, den2);
|
|
1966
|
-
M(den6, den4, den2);
|
|
1967
|
-
M(t, den6, num);
|
|
1968
|
-
M(t, t, den);
|
|
1969
|
-
pow2523(t, t);
|
|
1970
|
-
M(t, t, num);
|
|
1971
|
-
M(t, t, den);
|
|
1972
|
-
M(t, t, den);
|
|
1973
|
-
M(r[0], t, den);
|
|
1974
|
-
S(chk, r[0]);
|
|
1975
|
-
M(chk, chk, den);
|
|
1976
|
-
if (neq25519(chk, num)) M(r[0], r[0], I);
|
|
1977
|
-
S(chk, r[0]);
|
|
1978
|
-
M(chk, chk, den);
|
|
1979
|
-
if (neq25519(chk, num)) return -1;
|
|
1980
|
-
if (par25519(r[0]) === p[31] >> 7) Z(r[0], gf0, r[0]);
|
|
1981
|
-
M(r[3], r[0], r[1]);
|
|
1982
|
-
return 0;
|
|
1983
|
-
}
|
|
1984
|
-
function crypto_sign_open(m, sm, n, pk) {
|
|
1985
|
-
var i;
|
|
1986
|
-
var t = new Uint8Array(32), h = new Uint8Array(64);
|
|
1987
|
-
var p = [gf(), gf(), gf(), gf()], q = [gf(), gf(), gf(), gf()];
|
|
1988
|
-
if (n < 64) return -1;
|
|
1989
|
-
if (unpackneg(q, pk)) return -1;
|
|
1990
|
-
for (i = 0; i < n; i++) m[i] = sm[i];
|
|
1991
|
-
for (i = 0; i < 32; i++) m[i + 32] = pk[i];
|
|
1992
|
-
crypto_hash(h, m, n);
|
|
1993
|
-
reduce(h);
|
|
1994
|
-
scalarmult(p, q, h);
|
|
1995
|
-
scalarbase(q, sm.subarray(32));
|
|
1996
|
-
add(p, q);
|
|
1997
|
-
pack(t, p);
|
|
1998
|
-
n -= 64;
|
|
1999
|
-
if (crypto_verify_32(sm, 0, t, 0)) {
|
|
2000
|
-
for (i = 0; i < n; i++) m[i] = 0;
|
|
2001
|
-
return -1;
|
|
2002
|
-
}
|
|
2003
|
-
for (i = 0; i < n; i++) m[i] = sm[i + 64];
|
|
2004
|
-
return n;
|
|
2005
|
-
}
|
|
2006
|
-
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;
|
|
2007
|
-
nacl.lowlevel = {
|
|
2008
|
-
crypto_core_hsalsa20,
|
|
2009
|
-
crypto_stream_xor,
|
|
2010
|
-
crypto_stream,
|
|
2011
|
-
crypto_stream_salsa20_xor,
|
|
2012
|
-
crypto_stream_salsa20,
|
|
2013
|
-
crypto_onetimeauth,
|
|
2014
|
-
crypto_onetimeauth_verify,
|
|
2015
|
-
crypto_verify_16,
|
|
2016
|
-
crypto_verify_32,
|
|
2017
|
-
crypto_secretbox,
|
|
2018
|
-
crypto_secretbox_open,
|
|
2019
|
-
crypto_scalarmult,
|
|
2020
|
-
crypto_scalarmult_base,
|
|
2021
|
-
crypto_box_beforenm,
|
|
2022
|
-
crypto_box_afternm,
|
|
2023
|
-
crypto_box,
|
|
2024
|
-
crypto_box_open,
|
|
2025
|
-
crypto_box_keypair,
|
|
2026
|
-
crypto_hash,
|
|
2027
|
-
crypto_sign,
|
|
2028
|
-
crypto_sign_keypair,
|
|
2029
|
-
crypto_sign_open,
|
|
2030
|
-
crypto_secretbox_KEYBYTES,
|
|
2031
|
-
crypto_secretbox_NONCEBYTES,
|
|
2032
|
-
crypto_secretbox_ZEROBYTES,
|
|
2033
|
-
crypto_secretbox_BOXZEROBYTES,
|
|
2034
|
-
crypto_scalarmult_BYTES,
|
|
2035
|
-
crypto_scalarmult_SCALARBYTES,
|
|
2036
|
-
crypto_box_PUBLICKEYBYTES,
|
|
2037
|
-
crypto_box_SECRETKEYBYTES,
|
|
2038
|
-
crypto_box_BEFORENMBYTES,
|
|
2039
|
-
crypto_box_NONCEBYTES,
|
|
2040
|
-
crypto_box_ZEROBYTES,
|
|
2041
|
-
crypto_box_BOXZEROBYTES,
|
|
2042
|
-
crypto_sign_BYTES,
|
|
2043
|
-
crypto_sign_PUBLICKEYBYTES,
|
|
2044
|
-
crypto_sign_SECRETKEYBYTES,
|
|
2045
|
-
crypto_sign_SEEDBYTES,
|
|
2046
|
-
crypto_hash_BYTES,
|
|
2047
|
-
gf,
|
|
2048
|
-
D,
|
|
2049
|
-
L,
|
|
2050
|
-
pack25519,
|
|
2051
|
-
unpack25519,
|
|
2052
|
-
M,
|
|
2053
|
-
A,
|
|
2054
|
-
S,
|
|
2055
|
-
Z,
|
|
2056
|
-
pow2523,
|
|
2057
|
-
add,
|
|
2058
|
-
set25519,
|
|
2059
|
-
modL,
|
|
2060
|
-
scalarmult,
|
|
2061
|
-
scalarbase
|
|
2062
|
-
};
|
|
2063
|
-
function checkLengths(k, n) {
|
|
2064
|
-
if (k.length !== crypto_secretbox_KEYBYTES) throw new Error("bad key size");
|
|
2065
|
-
if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error("bad nonce size");
|
|
2066
|
-
}
|
|
2067
|
-
function checkBoxLengths(pk, sk) {
|
|
2068
|
-
if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error("bad public key size");
|
|
2069
|
-
if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error("bad secret key size");
|
|
2070
|
-
}
|
|
2071
|
-
function checkArrayTypes() {
|
|
2072
|
-
for (var i = 0; i < arguments.length; i++) {
|
|
2073
|
-
if (!(arguments[i] instanceof Uint8Array))
|
|
2074
|
-
throw new TypeError("unexpected type, use Uint8Array");
|
|
2075
|
-
}
|
|
2076
|
-
}
|
|
2077
|
-
function cleanup(arr) {
|
|
2078
|
-
for (var i = 0; i < arr.length; i++) arr[i] = 0;
|
|
2079
|
-
}
|
|
2080
|
-
nacl.randomBytes = function(n) {
|
|
2081
|
-
var b = new Uint8Array(n);
|
|
2082
|
-
randombytes(b, n);
|
|
2083
|
-
return b;
|
|
2084
|
-
};
|
|
2085
|
-
nacl.secretbox = function(msg, nonce, key) {
|
|
2086
|
-
checkArrayTypes(msg, nonce, key);
|
|
2087
|
-
checkLengths(key, nonce);
|
|
2088
|
-
var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
|
|
2089
|
-
var c = new Uint8Array(m.length);
|
|
2090
|
-
for (var i = 0; i < msg.length; i++) m[i + crypto_secretbox_ZEROBYTES] = msg[i];
|
|
2091
|
-
crypto_secretbox(c, m, m.length, nonce, key);
|
|
2092
|
-
return c.subarray(crypto_secretbox_BOXZEROBYTES);
|
|
2093
|
-
};
|
|
2094
|
-
nacl.secretbox.open = function(box, nonce, key) {
|
|
2095
|
-
checkArrayTypes(box, nonce, key);
|
|
2096
|
-
checkLengths(key, nonce);
|
|
2097
|
-
var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
|
|
2098
|
-
var m = new Uint8Array(c.length);
|
|
2099
|
-
for (var i = 0; i < box.length; i++) c[i + crypto_secretbox_BOXZEROBYTES] = box[i];
|
|
2100
|
-
if (c.length < 32) return null;
|
|
2101
|
-
if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;
|
|
2102
|
-
return m.subarray(crypto_secretbox_ZEROBYTES);
|
|
2103
|
-
};
|
|
2104
|
-
nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
|
|
2105
|
-
nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
|
|
2106
|
-
nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
|
|
2107
|
-
nacl.scalarMult = function(n, p) {
|
|
2108
|
-
checkArrayTypes(n, p);
|
|
2109
|
-
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error("bad n size");
|
|
2110
|
-
if (p.length !== crypto_scalarmult_BYTES) throw new Error("bad p size");
|
|
2111
|
-
var q = new Uint8Array(crypto_scalarmult_BYTES);
|
|
2112
|
-
crypto_scalarmult(q, n, p);
|
|
2113
|
-
return q;
|
|
2114
|
-
};
|
|
2115
|
-
nacl.scalarMult.base = function(n) {
|
|
2116
|
-
checkArrayTypes(n);
|
|
2117
|
-
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error("bad n size");
|
|
2118
|
-
var q = new Uint8Array(crypto_scalarmult_BYTES);
|
|
2119
|
-
crypto_scalarmult_base(q, n);
|
|
2120
|
-
return q;
|
|
2121
|
-
};
|
|
2122
|
-
nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
|
|
2123
|
-
nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
|
|
2124
|
-
nacl.box = function(msg, nonce, publicKey, secretKey) {
|
|
2125
|
-
var k = nacl.box.before(publicKey, secretKey);
|
|
2126
|
-
return nacl.secretbox(msg, nonce, k);
|
|
2127
|
-
};
|
|
2128
|
-
nacl.box.before = function(publicKey, secretKey) {
|
|
2129
|
-
checkArrayTypes(publicKey, secretKey);
|
|
2130
|
-
checkBoxLengths(publicKey, secretKey);
|
|
2131
|
-
var k = new Uint8Array(crypto_box_BEFORENMBYTES);
|
|
2132
|
-
crypto_box_beforenm(k, publicKey, secretKey);
|
|
2133
|
-
return k;
|
|
2134
|
-
};
|
|
2135
|
-
nacl.box.after = nacl.secretbox;
|
|
2136
|
-
nacl.box.open = function(msg, nonce, publicKey, secretKey) {
|
|
2137
|
-
var k = nacl.box.before(publicKey, secretKey);
|
|
2138
|
-
return nacl.secretbox.open(msg, nonce, k);
|
|
2139
|
-
};
|
|
2140
|
-
nacl.box.open.after = nacl.secretbox.open;
|
|
2141
|
-
nacl.box.keyPair = function() {
|
|
2142
|
-
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
|
|
2143
|
-
var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
|
|
2144
|
-
crypto_box_keypair(pk, sk);
|
|
2145
|
-
return { publicKey: pk, secretKey: sk };
|
|
2146
|
-
};
|
|
2147
|
-
nacl.box.keyPair.fromSecretKey = function(secretKey) {
|
|
2148
|
-
checkArrayTypes(secretKey);
|
|
2149
|
-
if (secretKey.length !== crypto_box_SECRETKEYBYTES)
|
|
2150
|
-
throw new Error("bad secret key size");
|
|
2151
|
-
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
|
|
2152
|
-
crypto_scalarmult_base(pk, secretKey);
|
|
2153
|
-
return { publicKey: pk, secretKey: new Uint8Array(secretKey) };
|
|
2154
|
-
};
|
|
2155
|
-
nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
|
|
2156
|
-
nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
|
|
2157
|
-
nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
|
|
2158
|
-
nacl.box.nonceLength = crypto_box_NONCEBYTES;
|
|
2159
|
-
nacl.box.overheadLength = nacl.secretbox.overheadLength;
|
|
2160
|
-
nacl.sign = function(msg, secretKey) {
|
|
2161
|
-
checkArrayTypes(msg, secretKey);
|
|
2162
|
-
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
|
|
2163
|
-
throw new Error("bad secret key size");
|
|
2164
|
-
var signedMsg = new Uint8Array(crypto_sign_BYTES + msg.length);
|
|
2165
|
-
crypto_sign(signedMsg, msg, msg.length, secretKey);
|
|
2166
|
-
return signedMsg;
|
|
2167
|
-
};
|
|
2168
|
-
nacl.sign.open = function(signedMsg, publicKey) {
|
|
2169
|
-
checkArrayTypes(signedMsg, publicKey);
|
|
2170
|
-
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
|
|
2171
|
-
throw new Error("bad public key size");
|
|
2172
|
-
var tmp = new Uint8Array(signedMsg.length);
|
|
2173
|
-
var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
|
|
2174
|
-
if (mlen < 0) return null;
|
|
2175
|
-
var m = new Uint8Array(mlen);
|
|
2176
|
-
for (var i = 0; i < m.length; i++) m[i] = tmp[i];
|
|
2177
|
-
return m;
|
|
2178
|
-
};
|
|
2179
|
-
nacl.sign.detached = function(msg, secretKey) {
|
|
2180
|
-
var signedMsg = nacl.sign(msg, secretKey);
|
|
2181
|
-
var sig = new Uint8Array(crypto_sign_BYTES);
|
|
2182
|
-
for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
|
|
2183
|
-
return sig;
|
|
2184
|
-
};
|
|
2185
|
-
nacl.sign.detached.verify = function(msg, sig, publicKey) {
|
|
2186
|
-
checkArrayTypes(msg, sig, publicKey);
|
|
2187
|
-
if (sig.length !== crypto_sign_BYTES)
|
|
2188
|
-
throw new Error("bad signature size");
|
|
2189
|
-
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
|
|
2190
|
-
throw new Error("bad public key size");
|
|
2191
|
-
var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
|
|
2192
|
-
var m = new Uint8Array(crypto_sign_BYTES + msg.length);
|
|
2193
|
-
var i;
|
|
2194
|
-
for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
|
|
2195
|
-
for (i = 0; i < msg.length; i++) sm[i + crypto_sign_BYTES] = msg[i];
|
|
2196
|
-
return crypto_sign_open(m, sm, sm.length, publicKey) >= 0;
|
|
2197
|
-
};
|
|
2198
|
-
nacl.sign.keyPair = function() {
|
|
2199
|
-
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
|
2200
|
-
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
|
|
2201
|
-
crypto_sign_keypair(pk, sk);
|
|
2202
|
-
return { publicKey: pk, secretKey: sk };
|
|
2203
|
-
};
|
|
2204
|
-
nacl.sign.keyPair.fromSecretKey = function(secretKey) {
|
|
2205
|
-
checkArrayTypes(secretKey);
|
|
2206
|
-
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
|
|
2207
|
-
throw new Error("bad secret key size");
|
|
2208
|
-
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
|
2209
|
-
for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32 + i];
|
|
2210
|
-
return { publicKey: pk, secretKey: new Uint8Array(secretKey) };
|
|
2211
|
-
};
|
|
2212
|
-
nacl.sign.keyPair.fromSeed = function(seed) {
|
|
2213
|
-
checkArrayTypes(seed);
|
|
2214
|
-
if (seed.length !== crypto_sign_SEEDBYTES)
|
|
2215
|
-
throw new Error("bad seed size");
|
|
2216
|
-
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
|
2217
|
-
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
|
|
2218
|
-
for (var i = 0; i < 32; i++) sk[i] = seed[i];
|
|
2219
|
-
crypto_sign_keypair(pk, sk, true);
|
|
2220
|
-
return { publicKey: pk, secretKey: sk };
|
|
2221
|
-
};
|
|
2222
|
-
nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
|
|
2223
|
-
nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
|
|
2224
|
-
nacl.sign.seedLength = crypto_sign_SEEDBYTES;
|
|
2225
|
-
nacl.sign.signatureLength = crypto_sign_BYTES;
|
|
2226
|
-
nacl.hash = function(msg) {
|
|
2227
|
-
checkArrayTypes(msg);
|
|
2228
|
-
var h = new Uint8Array(crypto_hash_BYTES);
|
|
2229
|
-
crypto_hash(h, msg, msg.length);
|
|
2230
|
-
return h;
|
|
2231
|
-
};
|
|
2232
|
-
nacl.hash.hashLength = crypto_hash_BYTES;
|
|
2233
|
-
nacl.verify = function(x, y) {
|
|
2234
|
-
checkArrayTypes(x, y);
|
|
2235
|
-
if (x.length === 0 || y.length === 0) return false;
|
|
2236
|
-
if (x.length !== y.length) return false;
|
|
2237
|
-
return vn(x, 0, y, 0, x.length) === 0 ? true : false;
|
|
2238
|
-
};
|
|
2239
|
-
nacl.setPRNG = function(fn) {
|
|
2240
|
-
randombytes = fn;
|
|
2241
|
-
};
|
|
2242
|
-
(function() {
|
|
2243
|
-
var crypto2 = typeof self !== "undefined" ? self.crypto || self.msCrypto : null;
|
|
2244
|
-
if (crypto2 && crypto2.getRandomValues) {
|
|
2245
|
-
var QUOTA = 65536;
|
|
2246
|
-
nacl.setPRNG(function(x, n) {
|
|
2247
|
-
var i, v = new Uint8Array(n);
|
|
2248
|
-
for (i = 0; i < n; i += QUOTA) {
|
|
2249
|
-
crypto2.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
|
|
2250
|
-
}
|
|
2251
|
-
for (i = 0; i < n; i++) x[i] = v[i];
|
|
2252
|
-
cleanup(v);
|
|
2253
|
-
});
|
|
2254
|
-
} else if (typeof __require !== "undefined") {
|
|
2255
|
-
crypto2 = __require("crypto");
|
|
2256
|
-
if (crypto2 && crypto2.randomBytes) {
|
|
2257
|
-
nacl.setPRNG(function(x, n) {
|
|
2258
|
-
var i, v = crypto2.randomBytes(n);
|
|
2259
|
-
for (i = 0; i < n; i++) x[i] = v[i];
|
|
2260
|
-
cleanup(v);
|
|
2261
|
-
});
|
|
2262
|
-
}
|
|
2263
|
-
}
|
|
2264
|
-
})();
|
|
2265
|
-
})(typeof module !== "undefined" && module.exports ? module.exports : self.nacl = self.nacl || {});
|
|
2266
|
-
}
|
|
2267
|
-
});
|
|
2268
|
-
|
|
2269
|
-
// ../../node_modules/base-x/src/index.js
|
|
2270
|
-
var require_src = __commonJS({
|
|
2271
|
-
"../../node_modules/base-x/src/index.js"(exports$1, module) {
|
|
2272
|
-
function base(ALPHABET) {
|
|
2273
|
-
if (ALPHABET.length >= 255) {
|
|
2274
|
-
throw new TypeError("Alphabet too long");
|
|
2275
|
-
}
|
|
2276
|
-
var BASE_MAP = new Uint8Array(256);
|
|
2277
|
-
for (var j = 0; j < BASE_MAP.length; j++) {
|
|
2278
|
-
BASE_MAP[j] = 255;
|
|
2279
|
-
}
|
|
2280
|
-
for (var i = 0; i < ALPHABET.length; i++) {
|
|
2281
|
-
var x = ALPHABET.charAt(i);
|
|
2282
|
-
var xc = x.charCodeAt(0);
|
|
2283
|
-
if (BASE_MAP[xc] !== 255) {
|
|
2284
|
-
throw new TypeError(x + " is ambiguous");
|
|
2285
|
-
}
|
|
2286
|
-
BASE_MAP[xc] = i;
|
|
2287
|
-
}
|
|
2288
|
-
var BASE = ALPHABET.length;
|
|
2289
|
-
var LEADER = ALPHABET.charAt(0);
|
|
2290
|
-
var FACTOR = Math.log(BASE) / Math.log(256);
|
|
2291
|
-
var iFACTOR = Math.log(256) / Math.log(BASE);
|
|
2292
|
-
function encode(source) {
|
|
2293
|
-
if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {
|
|
2294
|
-
source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
|
|
2295
|
-
} else if (Array.isArray(source)) {
|
|
2296
|
-
source = Uint8Array.from(source);
|
|
2297
|
-
}
|
|
2298
|
-
if (!(source instanceof Uint8Array)) {
|
|
2299
|
-
throw new TypeError("Expected Uint8Array");
|
|
2300
|
-
}
|
|
2301
|
-
if (source.length === 0) {
|
|
2302
|
-
return "";
|
|
2303
|
-
}
|
|
2304
|
-
var zeroes = 0;
|
|
2305
|
-
var length = 0;
|
|
2306
|
-
var pbegin = 0;
|
|
2307
|
-
var pend = source.length;
|
|
2308
|
-
while (pbegin !== pend && source[pbegin] === 0) {
|
|
2309
|
-
pbegin++;
|
|
2310
|
-
zeroes++;
|
|
2311
|
-
}
|
|
2312
|
-
var size = (pend - pbegin) * iFACTOR + 1 >>> 0;
|
|
2313
|
-
var b58 = new Uint8Array(size);
|
|
2314
|
-
while (pbegin !== pend) {
|
|
2315
|
-
var carry = source[pbegin];
|
|
2316
|
-
var i2 = 0;
|
|
2317
|
-
for (var it1 = size - 1; (carry !== 0 || i2 < length) && it1 !== -1; it1--, i2++) {
|
|
2318
|
-
carry += 256 * b58[it1] >>> 0;
|
|
2319
|
-
b58[it1] = carry % BASE >>> 0;
|
|
2320
|
-
carry = carry / BASE >>> 0;
|
|
2321
|
-
}
|
|
2322
|
-
if (carry !== 0) {
|
|
2323
|
-
throw new Error("Non-zero carry");
|
|
2324
|
-
}
|
|
2325
|
-
length = i2;
|
|
2326
|
-
pbegin++;
|
|
2327
|
-
}
|
|
2328
|
-
var it2 = size - length;
|
|
2329
|
-
while (it2 !== size && b58[it2] === 0) {
|
|
2330
|
-
it2++;
|
|
2331
|
-
}
|
|
2332
|
-
var str = LEADER.repeat(zeroes);
|
|
2333
|
-
for (; it2 < size; ++it2) {
|
|
2334
|
-
str += ALPHABET.charAt(b58[it2]);
|
|
2335
|
-
}
|
|
2336
|
-
return str;
|
|
2337
|
-
}
|
|
2338
|
-
function decodeUnsafe(source) {
|
|
2339
|
-
if (typeof source !== "string") {
|
|
2340
|
-
throw new TypeError("Expected String");
|
|
2341
|
-
}
|
|
2342
|
-
if (source.length === 0) {
|
|
2343
|
-
return new Uint8Array();
|
|
2344
|
-
}
|
|
2345
|
-
var psz = 0;
|
|
2346
|
-
var zeroes = 0;
|
|
2347
|
-
var length = 0;
|
|
2348
|
-
while (source[psz] === LEADER) {
|
|
2349
|
-
zeroes++;
|
|
2350
|
-
psz++;
|
|
2351
|
-
}
|
|
2352
|
-
var size = (source.length - psz) * FACTOR + 1 >>> 0;
|
|
2353
|
-
var b256 = new Uint8Array(size);
|
|
2354
|
-
while (source[psz]) {
|
|
2355
|
-
var charCode = source.charCodeAt(psz);
|
|
2356
|
-
if (charCode > 255) {
|
|
2357
|
-
return;
|
|
2358
|
-
}
|
|
2359
|
-
var carry = BASE_MAP[charCode];
|
|
2360
|
-
if (carry === 255) {
|
|
2361
|
-
return;
|
|
2362
|
-
}
|
|
2363
|
-
var i2 = 0;
|
|
2364
|
-
for (var it3 = size - 1; (carry !== 0 || i2 < length) && it3 !== -1; it3--, i2++) {
|
|
2365
|
-
carry += BASE * b256[it3] >>> 0;
|
|
2366
|
-
b256[it3] = carry % 256 >>> 0;
|
|
2367
|
-
carry = carry / 256 >>> 0;
|
|
2368
|
-
}
|
|
2369
|
-
if (carry !== 0) {
|
|
2370
|
-
throw new Error("Non-zero carry");
|
|
2371
|
-
}
|
|
2372
|
-
length = i2;
|
|
2373
|
-
psz++;
|
|
2374
|
-
}
|
|
2375
|
-
var it4 = size - length;
|
|
2376
|
-
while (it4 !== size && b256[it4] === 0) {
|
|
2377
|
-
it4++;
|
|
2378
|
-
}
|
|
2379
|
-
var vch = new Uint8Array(zeroes + (size - it4));
|
|
2380
|
-
var j2 = zeroes;
|
|
2381
|
-
while (it4 !== size) {
|
|
2382
|
-
vch[j2++] = b256[it4++];
|
|
2383
|
-
}
|
|
2384
|
-
return vch;
|
|
2385
|
-
}
|
|
2386
|
-
function decode(string) {
|
|
2387
|
-
var buffer = decodeUnsafe(string);
|
|
2388
|
-
if (buffer) {
|
|
2389
|
-
return buffer;
|
|
2390
|
-
}
|
|
2391
|
-
throw new Error("Non-base" + BASE + " character");
|
|
2392
|
-
}
|
|
2393
|
-
return {
|
|
2394
|
-
encode,
|
|
2395
|
-
decodeUnsafe,
|
|
2396
|
-
decode
|
|
2397
|
-
};
|
|
2398
|
-
}
|
|
2399
|
-
module.exports = base;
|
|
2400
|
-
}
|
|
2401
|
-
});
|
|
2402
|
-
|
|
2403
|
-
// ../../node_modules/bs58/index.js
|
|
2404
|
-
var require_bs58 = __commonJS({
|
|
2405
|
-
"../../node_modules/bs58/index.js"(exports$1, module) {
|
|
2406
|
-
var basex = require_src();
|
|
2407
|
-
var ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
2408
|
-
module.exports = basex(ALPHABET);
|
|
2409
|
-
}
|
|
2410
|
-
});
|
|
14
|
+
// src/react/useWalletManager.ts
|
|
2411
15
|
|
|
2412
16
|
// src/config/networks.ts
|
|
2413
17
|
var NETWORKS = {
|
|
@@ -2911,7 +515,7 @@ var WdkApiClient = class {
|
|
|
2911
515
|
}
|
|
2912
516
|
}
|
|
2913
517
|
};
|
|
2914
|
-
var DEFAULT_API_URL = process.env.NEXT_PUBLIC_API_URL || "
|
|
518
|
+
var DEFAULT_API_URL = process.env.NEXT_PUBLIC_API_URL || "https://ckgwifsxka.us-east-2.awsapprunner.com";
|
|
2915
519
|
var wdkApiClient = null;
|
|
2916
520
|
function getWdkApiClient(baseUrl) {
|
|
2917
521
|
if (!wdkApiClient || baseUrl && wdkApiClient["config"].baseUrl !== baseUrl) {
|
|
@@ -2921,321 +525,7 @@ function getWdkApiClient(baseUrl) {
|
|
|
2921
525
|
}
|
|
2922
526
|
return wdkApiClient;
|
|
2923
527
|
}
|
|
2924
|
-
|
|
2925
|
-
// src/services/WdkService.ts
|
|
2926
|
-
var WdkManager;
|
|
2927
|
-
var WalletManagerBtc;
|
|
2928
|
-
var WalletManagerEvm;
|
|
2929
|
-
var WalletManagerSolana;
|
|
2930
|
-
var WalletManagerTon;
|
|
2931
|
-
var WalletManagerTron;
|
|
2932
|
-
var WalletManagerSpark;
|
|
2933
|
-
var wdkLoaded = false;
|
|
2934
|
-
var wdkLoadError = null;
|
|
2935
|
-
var dynamicImport = new Function("specifier", "return import(specifier)");
|
|
2936
|
-
async function loadWdkModules() {
|
|
2937
|
-
if (wdkLoaded) return;
|
|
2938
|
-
if (wdkLoadError) throw wdkLoadError;
|
|
2939
|
-
try {
|
|
2940
|
-
const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([
|
|
2941
|
-
dynamicImport("@tetherto/wdk"),
|
|
2942
|
-
dynamicImport("@tetherto/wdk-wallet-btc"),
|
|
2943
|
-
dynamicImport("@tetherto/wdk-wallet-evm"),
|
|
2944
|
-
dynamicImport("@tetherto/wdk-wallet-solana"),
|
|
2945
|
-
dynamicImport("@tetherto/wdk-wallet-ton"),
|
|
2946
|
-
dynamicImport("@tetherto/wdk-wallet-tron"),
|
|
2947
|
-
dynamicImport("@tetherto/wdk-wallet-spark")
|
|
2948
|
-
]);
|
|
2949
|
-
WdkManager = wdk.default;
|
|
2950
|
-
WalletManagerBtc = btc.default;
|
|
2951
|
-
WalletManagerEvm = evm.default;
|
|
2952
|
-
WalletManagerSolana = solana.default;
|
|
2953
|
-
WalletManagerTon = ton.default;
|
|
2954
|
-
WalletManagerTron = tron.default;
|
|
2955
|
-
WalletManagerSpark = spark.default;
|
|
2956
|
-
wdkLoaded = true;
|
|
2957
|
-
} catch (error) {
|
|
2958
|
-
wdkLoadError = error instanceof Error ? error : new Error("Failed to load WDK modules");
|
|
2959
|
-
console.error("Failed to load WDK modules:", error);
|
|
2960
|
-
throw wdkLoadError;
|
|
2961
|
-
}
|
|
2962
|
-
}
|
|
2963
528
|
var DERIVATION_PATHS2 = {
|
|
2964
|
-
bitcoin: "m/84'/0'/0'/0/0",
|
|
2965
|
-
// BIP-84 for native SegWit
|
|
2966
|
-
ethereum: "m/44'/60'/0'/0/0",
|
|
2967
|
-
ton: "m/44'/607'/0'",
|
|
2968
|
-
// Updated for v1.0.0-beta.6+
|
|
2969
|
-
tron: "m/44'/195'/0'/0/0",
|
|
2970
|
-
solana: "m/44'/501'/0'/0'",
|
|
2971
|
-
// Updated for v1.0.0-beta.4+
|
|
2972
|
-
spark: "m/44'/998'/0'/0/0"
|
|
2973
|
-
};
|
|
2974
|
-
var DEFAULT_RPC_URLS = {
|
|
2975
|
-
mainnet: {
|
|
2976
|
-
ethereum: "https://eth.llamarpc.com",
|
|
2977
|
-
solana: "https://api.mainnet-beta.solana.com",
|
|
2978
|
-
ton: "https://toncenter.com/api/v2/jsonRPC",
|
|
2979
|
-
tron: "https://api.trongrid.io"
|
|
2980
|
-
},
|
|
2981
|
-
testnet: {
|
|
2982
|
-
ethereum: "https://ethereum-sepolia-rpc.publicnode.com",
|
|
2983
|
-
solana: "https://api.devnet.solana.com",
|
|
2984
|
-
ton: "https://testnet.toncenter.com/api/v2/jsonRPC",
|
|
2985
|
-
tron: "https://api.shasta.trongrid.io"
|
|
2986
|
-
}
|
|
2987
|
-
};
|
|
2988
|
-
var WdkService = class {
|
|
2989
|
-
seed = null;
|
|
2990
|
-
config;
|
|
2991
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2992
|
-
wallets = {};
|
|
2993
|
-
constructor(config = {}) {
|
|
2994
|
-
this.config = {
|
|
2995
|
-
network: config.network || "testnet",
|
|
2996
|
-
rpcUrls: config.rpcUrls
|
|
2997
|
-
};
|
|
2998
|
-
}
|
|
2999
|
-
/**
|
|
3000
|
-
* Check if WDK modules are loaded
|
|
3001
|
-
*/
|
|
3002
|
-
static isLoaded() {
|
|
3003
|
-
return wdkLoaded;
|
|
3004
|
-
}
|
|
3005
|
-
/**
|
|
3006
|
-
* Ensure WDK modules are loaded
|
|
3007
|
-
*/
|
|
3008
|
-
async ensureLoaded() {
|
|
3009
|
-
await loadWdkModules();
|
|
3010
|
-
}
|
|
3011
|
-
/**
|
|
3012
|
-
* Load WDK modules (call this before using sync methods)
|
|
3013
|
-
*/
|
|
3014
|
-
async loadModules() {
|
|
3015
|
-
await loadWdkModules();
|
|
3016
|
-
}
|
|
3017
|
-
/**
|
|
3018
|
-
* Generate a random BIP-39 seed phrase (12 words)
|
|
3019
|
-
*/
|
|
3020
|
-
async generateSeedPhrase() {
|
|
3021
|
-
await this.ensureLoaded();
|
|
3022
|
-
return WdkManager.getRandomSeedPhrase();
|
|
3023
|
-
}
|
|
3024
|
-
/**
|
|
3025
|
-
* Validate a BIP-39 seed phrase
|
|
3026
|
-
*/
|
|
3027
|
-
async isValidSeed(seed) {
|
|
3028
|
-
await this.ensureLoaded();
|
|
3029
|
-
return WdkManager.isValidSeed(seed);
|
|
3030
|
-
}
|
|
3031
|
-
/**
|
|
3032
|
-
* Validate seed phrase (sync version - basic check)
|
|
3033
|
-
*/
|
|
3034
|
-
isValidSeedSync(seed) {
|
|
3035
|
-
const words = seed.trim().split(/\s+/);
|
|
3036
|
-
return words.length === 12 || words.length === 24;
|
|
3037
|
-
}
|
|
3038
|
-
/**
|
|
3039
|
-
* Initialize the service with a seed phrase
|
|
3040
|
-
*/
|
|
3041
|
-
async initialize(seed) {
|
|
3042
|
-
await this.ensureLoaded();
|
|
3043
|
-
if (!WdkManager.isValidSeed(seed)) {
|
|
3044
|
-
throw new Error("Invalid seed phrase");
|
|
3045
|
-
}
|
|
3046
|
-
this.seed = seed;
|
|
3047
|
-
this.wallets = {};
|
|
3048
|
-
}
|
|
3049
|
-
/**
|
|
3050
|
-
* Get RPC URL for a chain
|
|
3051
|
-
*/
|
|
3052
|
-
getRpcUrl(chain) {
|
|
3053
|
-
const networkUrls = DEFAULT_RPC_URLS[this.config.network];
|
|
3054
|
-
if (this.config.rpcUrls?.[chain]) {
|
|
3055
|
-
return this.config.rpcUrls[chain];
|
|
3056
|
-
}
|
|
3057
|
-
return networkUrls[chain] || "";
|
|
3058
|
-
}
|
|
3059
|
-
/**
|
|
3060
|
-
* Get or create wallet instance for a specific chain
|
|
3061
|
-
*/
|
|
3062
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3063
|
-
async getWallet(chain) {
|
|
3064
|
-
if (!this.seed) {
|
|
3065
|
-
throw new Error("WDK service not initialized. Call initialize() first.");
|
|
3066
|
-
}
|
|
3067
|
-
if (this.wallets[chain]) {
|
|
3068
|
-
return this.wallets[chain];
|
|
3069
|
-
}
|
|
3070
|
-
const isTestnet = this.config.network === "testnet";
|
|
3071
|
-
try {
|
|
3072
|
-
switch (chain) {
|
|
3073
|
-
case "ethereum": {
|
|
3074
|
-
const rpcUrl = this.getRpcUrl("ethereum");
|
|
3075
|
-
const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });
|
|
3076
|
-
this.wallets[chain] = wallet;
|
|
3077
|
-
return wallet;
|
|
3078
|
-
}
|
|
3079
|
-
case "bitcoin": {
|
|
3080
|
-
const wallet = new WalletManagerBtc(this.seed, {
|
|
3081
|
-
network: isTestnet ? "testnet" : "bitcoin"
|
|
3082
|
-
});
|
|
3083
|
-
this.wallets[chain] = wallet;
|
|
3084
|
-
return wallet;
|
|
3085
|
-
}
|
|
3086
|
-
case "solana": {
|
|
3087
|
-
const rpcUrl = this.getRpcUrl("solana");
|
|
3088
|
-
const wallet = new WalletManagerSolana(this.seed, {
|
|
3089
|
-
rpcUrl
|
|
3090
|
-
});
|
|
3091
|
-
this.wallets[chain] = wallet;
|
|
3092
|
-
return wallet;
|
|
3093
|
-
}
|
|
3094
|
-
case "ton": {
|
|
3095
|
-
const url = this.getRpcUrl("ton");
|
|
3096
|
-
const wallet = new WalletManagerTon(this.seed, {
|
|
3097
|
-
tonClient: { url }
|
|
3098
|
-
});
|
|
3099
|
-
this.wallets[chain] = wallet;
|
|
3100
|
-
return wallet;
|
|
3101
|
-
}
|
|
3102
|
-
case "tron": {
|
|
3103
|
-
const fullHost = this.getRpcUrl("tron");
|
|
3104
|
-
const wallet = new WalletManagerTron(this.seed, {
|
|
3105
|
-
provider: fullHost
|
|
3106
|
-
});
|
|
3107
|
-
this.wallets[chain] = wallet;
|
|
3108
|
-
return wallet;
|
|
3109
|
-
}
|
|
3110
|
-
case "spark": {
|
|
3111
|
-
const wallet = new WalletManagerSpark(this.seed, {
|
|
3112
|
-
network: isTestnet ? "TESTNET" : "MAINNET"
|
|
3113
|
-
});
|
|
3114
|
-
this.wallets[chain] = wallet;
|
|
3115
|
-
return wallet;
|
|
3116
|
-
}
|
|
3117
|
-
default:
|
|
3118
|
-
throw new Error(`Unsupported chain: ${chain}`);
|
|
3119
|
-
}
|
|
3120
|
-
} catch (error) {
|
|
3121
|
-
console.error(`Failed to initialize ${chain} wallet:`, error);
|
|
3122
|
-
throw error;
|
|
3123
|
-
}
|
|
3124
|
-
}
|
|
3125
|
-
/**
|
|
3126
|
-
* Derive address for a specific chain
|
|
3127
|
-
*/
|
|
3128
|
-
async deriveAddress(chain) {
|
|
3129
|
-
const path = DERIVATION_PATHS2[chain];
|
|
3130
|
-
try {
|
|
3131
|
-
const wallet = await this.getWallet(chain);
|
|
3132
|
-
const account = await wallet.getAccount(0);
|
|
3133
|
-
const address = await account.getAddress();
|
|
3134
|
-
return {
|
|
3135
|
-
chain,
|
|
3136
|
-
address,
|
|
3137
|
-
path
|
|
3138
|
-
};
|
|
3139
|
-
} catch (error) {
|
|
3140
|
-
console.error(`Error deriving ${chain} address:`, error);
|
|
3141
|
-
throw error;
|
|
3142
|
-
}
|
|
3143
|
-
}
|
|
3144
|
-
/**
|
|
3145
|
-
* Derive addresses for all supported chains
|
|
3146
|
-
*/
|
|
3147
|
-
async deriveAllAddresses() {
|
|
3148
|
-
const chains = ["ethereum", "bitcoin", "ton", "tron", "solana", "spark"];
|
|
3149
|
-
const addresses = {
|
|
3150
|
-
ethereum: null,
|
|
3151
|
-
bitcoin: null,
|
|
3152
|
-
ton: null,
|
|
3153
|
-
tron: null,
|
|
3154
|
-
solana: null,
|
|
3155
|
-
spark: null
|
|
3156
|
-
};
|
|
3157
|
-
const results = await Promise.allSettled(
|
|
3158
|
-
chains.map(async (chain) => {
|
|
3159
|
-
const result = await this.deriveAddress(chain);
|
|
3160
|
-
return { chain, address: result.address };
|
|
3161
|
-
})
|
|
3162
|
-
);
|
|
3163
|
-
for (const result of results) {
|
|
3164
|
-
if (result.status === "fulfilled") {
|
|
3165
|
-
addresses[result.value.chain] = result.value.address;
|
|
3166
|
-
} else {
|
|
3167
|
-
console.error("Failed to derive address:", result.reason);
|
|
3168
|
-
}
|
|
3169
|
-
}
|
|
3170
|
-
return addresses;
|
|
3171
|
-
}
|
|
3172
|
-
/**
|
|
3173
|
-
* Derive addresses for specific chains only
|
|
3174
|
-
*/
|
|
3175
|
-
async deriveAddressesForChains(chains) {
|
|
3176
|
-
const addresses = {};
|
|
3177
|
-
const results = await Promise.allSettled(
|
|
3178
|
-
chains.map(async (chain) => {
|
|
3179
|
-
const result = await this.deriveAddress(chain);
|
|
3180
|
-
return { chain, address: result.address };
|
|
3181
|
-
})
|
|
3182
|
-
);
|
|
3183
|
-
for (const result of results) {
|
|
3184
|
-
if (result.status === "fulfilled") {
|
|
3185
|
-
addresses[result.value.chain] = result.value.address;
|
|
3186
|
-
}
|
|
3187
|
-
}
|
|
3188
|
-
return addresses;
|
|
3189
|
-
}
|
|
3190
|
-
/**
|
|
3191
|
-
* Get fee rates for a specific chain
|
|
3192
|
-
*/
|
|
3193
|
-
async getFeeRates(chain) {
|
|
3194
|
-
if (!this.seed) {
|
|
3195
|
-
throw new Error("WDK service not initialized. Call initialize() first.");
|
|
3196
|
-
}
|
|
3197
|
-
try {
|
|
3198
|
-
const wallet = await this.getWallet(chain);
|
|
3199
|
-
const feeRates = await wallet.getFeeRates();
|
|
3200
|
-
return {
|
|
3201
|
-
slow: (feeRates.slow || feeRates.low || "0").toString(),
|
|
3202
|
-
medium: (feeRates.medium || feeRates.normal || feeRates.standard || "0").toString(),
|
|
3203
|
-
fast: (feeRates.fast || feeRates.high || "0").toString()
|
|
3204
|
-
};
|
|
3205
|
-
} catch (error) {
|
|
3206
|
-
console.error(`Error fetching fee rates for ${chain}:`, error);
|
|
3207
|
-
throw error;
|
|
3208
|
-
}
|
|
3209
|
-
}
|
|
3210
|
-
/**
|
|
3211
|
-
* Get the current network configuration
|
|
3212
|
-
*/
|
|
3213
|
-
getNetwork() {
|
|
3214
|
-
return this.config.network;
|
|
3215
|
-
}
|
|
3216
|
-
/**
|
|
3217
|
-
* Check if service is initialized
|
|
3218
|
-
*/
|
|
3219
|
-
isInitialized() {
|
|
3220
|
-
return this.seed !== null;
|
|
3221
|
-
}
|
|
3222
|
-
/**
|
|
3223
|
-
* Clean up and dispose of wallet instances
|
|
3224
|
-
*/
|
|
3225
|
-
dispose() {
|
|
3226
|
-
for (const wallet of Object.values(this.wallets)) {
|
|
3227
|
-
if (wallet && typeof wallet.dispose === "function") {
|
|
3228
|
-
try {
|
|
3229
|
-
wallet.dispose();
|
|
3230
|
-
} catch {
|
|
3231
|
-
}
|
|
3232
|
-
}
|
|
3233
|
-
}
|
|
3234
|
-
this.wallets = {};
|
|
3235
|
-
this.seed = null;
|
|
3236
|
-
}
|
|
3237
|
-
};
|
|
3238
|
-
var DERIVATION_PATHS3 = {
|
|
3239
529
|
ethereum: "m/44'/60'/0'/0/0",
|
|
3240
530
|
bitcoin_mainnet: "m/84'/0'/0'/0/0",
|
|
3241
531
|
bitcoin_testnet: "m/84'/1'/0'/0/0",
|
|
@@ -3245,14 +535,14 @@ var DERIVATION_PATHS3 = {
|
|
|
3245
535
|
spark: "m/44'/998'/0'/0/0"
|
|
3246
536
|
};
|
|
3247
537
|
function deriveEthereumAddress(seed) {
|
|
3248
|
-
const hdNode = ethers.HDNodeWallet.fromPhrase(seed, void 0,
|
|
538
|
+
const hdNode = ethers.HDNodeWallet.fromPhrase(seed, void 0, DERIVATION_PATHS2.ethereum);
|
|
3249
539
|
return hdNode.address;
|
|
3250
540
|
}
|
|
3251
541
|
function deriveBitcoinAddress(seed, network = "testnet") {
|
|
3252
542
|
try {
|
|
3253
543
|
const seedBytes = bip39.mnemonicToSeedSync(seed);
|
|
3254
544
|
const hdKey = bip32.HDKey.fromMasterSeed(seedBytes);
|
|
3255
|
-
const path = network === "testnet" ?
|
|
545
|
+
const path = network === "testnet" ? DERIVATION_PATHS2.bitcoin_testnet : DERIVATION_PATHS2.bitcoin_mainnet;
|
|
3256
546
|
const child = hdKey.derive(path);
|
|
3257
547
|
if (!child.publicKey) {
|
|
3258
548
|
throw new Error("Failed to derive public key");
|
|
@@ -3271,13 +561,14 @@ function deriveBitcoinAddress(seed, network = "testnet") {
|
|
|
3271
561
|
}
|
|
3272
562
|
async function deriveSolanaAddress(seed) {
|
|
3273
563
|
try {
|
|
3274
|
-
const [ed25519, nacl,
|
|
564
|
+
const [ed25519, nacl, bs58Module] = await Promise.all([
|
|
3275
565
|
import('ed25519-hd-key'),
|
|
3276
|
-
|
|
3277
|
-
|
|
566
|
+
import('tweetnacl'),
|
|
567
|
+
import('bs58')
|
|
3278
568
|
]);
|
|
569
|
+
const bs58 = bs58Module.default || bs58Module;
|
|
3279
570
|
const seedBytes = bip39.mnemonicToSeedSync(seed);
|
|
3280
|
-
const derived = ed25519.derivePath(
|
|
571
|
+
const derived = ed25519.derivePath(DERIVATION_PATHS2.solana, Buffer.from(seedBytes).toString("hex"));
|
|
3281
572
|
const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));
|
|
3282
573
|
return bs58.encode(keypair.publicKey);
|
|
3283
574
|
} catch (error) {
|
|
@@ -3289,10 +580,10 @@ async function deriveTonAddress(seed) {
|
|
|
3289
580
|
try {
|
|
3290
581
|
const [ed25519, nacl] = await Promise.all([
|
|
3291
582
|
import('ed25519-hd-key'),
|
|
3292
|
-
|
|
583
|
+
import('tweetnacl')
|
|
3293
584
|
]);
|
|
3294
585
|
const seedBytes = bip39.mnemonicToSeedSync(seed);
|
|
3295
|
-
const derived = ed25519.derivePath(
|
|
586
|
+
const derived = ed25519.derivePath(DERIVATION_PATHS2.ton, Buffer.from(seedBytes).toString("hex"));
|
|
3296
587
|
const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));
|
|
3297
588
|
const publicKey = keypair.publicKey;
|
|
3298
589
|
const workchain = 0;
|
|
@@ -3327,7 +618,7 @@ function crc16(data) {
|
|
|
3327
618
|
}
|
|
3328
619
|
function deriveTronAddress(seed) {
|
|
3329
620
|
try {
|
|
3330
|
-
const hdNode = ethers.HDNodeWallet.fromPhrase(seed, void 0,
|
|
621
|
+
const hdNode = ethers.HDNodeWallet.fromPhrase(seed, void 0, DERIVATION_PATHS2.tron);
|
|
3331
622
|
const ethAddressHex = hdNode.address.slice(2).toLowerCase();
|
|
3332
623
|
const addressBytes = new Uint8Array(21);
|
|
3333
624
|
addressBytes[0] = 65;
|
|
@@ -3345,7 +636,7 @@ function deriveSparkAddress(seed, network = "testnet") {
|
|
|
3345
636
|
try {
|
|
3346
637
|
const seedBytes = bip39.mnemonicToSeedSync(seed);
|
|
3347
638
|
const hdKey = bip32.HDKey.fromMasterSeed(seedBytes);
|
|
3348
|
-
const child = hdKey.derive(
|
|
639
|
+
const child = hdKey.derive(DERIVATION_PATHS2.spark);
|
|
3349
640
|
if (!child.publicKey) {
|
|
3350
641
|
throw new Error("Failed to derive public key");
|
|
3351
642
|
}
|
|
@@ -3406,8 +697,420 @@ async function deriveAllAddresses(seed, network = "testnet") {
|
|
|
3406
697
|
}
|
|
3407
698
|
return addresses;
|
|
3408
699
|
}
|
|
700
|
+
function isValidSeed(seed) {
|
|
701
|
+
return bip39.validateMnemonic(seed, english.wordlist);
|
|
702
|
+
}
|
|
703
|
+
function generateSeedPhrase() {
|
|
704
|
+
return bip39.generateMnemonic(english.wordlist);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// src/services/ZubariWdkService.ts
|
|
708
|
+
var DEFAULT_API_URL2 = "https://ckgwifsxka.us-east-2.awsapprunner.com";
|
|
709
|
+
function isBrowser() {
|
|
710
|
+
return typeof window !== "undefined" && typeof window.document !== "undefined";
|
|
711
|
+
}
|
|
712
|
+
var dynamicImport = new Function("specifier", "return import(specifier)");
|
|
713
|
+
async function canUseNativeWdk() {
|
|
714
|
+
if (isBrowser()) {
|
|
715
|
+
return false;
|
|
716
|
+
}
|
|
717
|
+
try {
|
|
718
|
+
await dynamicImport("@tetherto/wdk");
|
|
719
|
+
return true;
|
|
720
|
+
} catch {
|
|
721
|
+
return false;
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
var ZubariWdkService = class {
|
|
725
|
+
config;
|
|
726
|
+
apiClient;
|
|
727
|
+
nativeWdkService = null;
|
|
728
|
+
initialized = false;
|
|
729
|
+
useNativeWdk = false;
|
|
730
|
+
constructor(config = {}) {
|
|
731
|
+
this.config = {
|
|
732
|
+
network: config.network || "testnet",
|
|
733
|
+
apiUrl: config.apiUrl || process.env.NEXT_PUBLIC_API_URL || DEFAULT_API_URL2,
|
|
734
|
+
forceApi: config.forceApi ?? false,
|
|
735
|
+
timeout: config.timeout || 3e4
|
|
736
|
+
};
|
|
737
|
+
this.apiClient = getWdkApiClient(this.config.apiUrl);
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* Initialize the service and determine the best strategy
|
|
741
|
+
*/
|
|
742
|
+
async initialize() {
|
|
743
|
+
if (this.initialized) return;
|
|
744
|
+
if (isBrowser() || this.config.forceApi) {
|
|
745
|
+
this.useNativeWdk = false;
|
|
746
|
+
this.initialized = true;
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
if (await canUseNativeWdk()) {
|
|
750
|
+
try {
|
|
751
|
+
const WdkServiceModule = await dynamicImport("./WdkService");
|
|
752
|
+
const WdkService = WdkServiceModule.WdkService || WdkServiceModule.default;
|
|
753
|
+
this.nativeWdkService = new WdkService({
|
|
754
|
+
network: this.config.network
|
|
755
|
+
});
|
|
756
|
+
this.useNativeWdk = true;
|
|
757
|
+
} catch (error) {
|
|
758
|
+
console.warn("Failed to initialize native WDK, falling back to API:", error);
|
|
759
|
+
this.useNativeWdk = false;
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
this.initialized = true;
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Get the current execution mode
|
|
766
|
+
*/
|
|
767
|
+
getMode() {
|
|
768
|
+
if (this.useNativeWdk) return "native";
|
|
769
|
+
if (isBrowser()) return "api";
|
|
770
|
+
return "api";
|
|
771
|
+
}
|
|
772
|
+
/**
|
|
773
|
+
* Check if running in browser
|
|
774
|
+
*/
|
|
775
|
+
isBrowserEnvironment() {
|
|
776
|
+
return isBrowser();
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* Generate a new BIP-39 seed phrase (12 words)
|
|
780
|
+
*/
|
|
781
|
+
async generateSeed() {
|
|
782
|
+
await this.initialize();
|
|
783
|
+
try {
|
|
784
|
+
const response = await this.apiClient.generateSeed();
|
|
785
|
+
if (response.success && response.seed) {
|
|
786
|
+
return response.seed;
|
|
787
|
+
}
|
|
788
|
+
} catch (error) {
|
|
789
|
+
console.warn("API seed generation failed:", error);
|
|
790
|
+
}
|
|
791
|
+
if (this.useNativeWdk && this.nativeWdkService) {
|
|
792
|
+
try {
|
|
793
|
+
const wdk = this.nativeWdkService;
|
|
794
|
+
return await wdk.generateSeedPhrase();
|
|
795
|
+
} catch (error) {
|
|
796
|
+
console.warn("Native WDK seed generation failed:", error);
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
return generateSeedPhrase();
|
|
800
|
+
}
|
|
801
|
+
/**
|
|
802
|
+
* Validate a BIP-39 seed phrase
|
|
803
|
+
*/
|
|
804
|
+
async validateSeed(seed) {
|
|
805
|
+
await this.initialize();
|
|
806
|
+
try {
|
|
807
|
+
const response = await this.apiClient.validateSeed(seed);
|
|
808
|
+
if (response.success) {
|
|
809
|
+
return response.isValid ?? false;
|
|
810
|
+
}
|
|
811
|
+
} catch (error) {
|
|
812
|
+
console.warn("API seed validation failed:", error);
|
|
813
|
+
}
|
|
814
|
+
if (this.useNativeWdk && this.nativeWdkService) {
|
|
815
|
+
try {
|
|
816
|
+
const wdk = this.nativeWdkService;
|
|
817
|
+
return await wdk.isValidSeed(seed);
|
|
818
|
+
} catch (error) {
|
|
819
|
+
console.warn("Native WDK seed validation failed:", error);
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
return isValidSeed(seed);
|
|
823
|
+
}
|
|
824
|
+
/**
|
|
825
|
+
* Derive address for a specific chain
|
|
826
|
+
*/
|
|
827
|
+
async deriveAddress(seed, chain) {
|
|
828
|
+
await this.initialize();
|
|
829
|
+
const path = this.getDerivationPath(chain);
|
|
830
|
+
try {
|
|
831
|
+
const response = await this.apiClient.deriveAddress(seed, chain, this.config.network);
|
|
832
|
+
if (response.success && response.address) {
|
|
833
|
+
return {
|
|
834
|
+
chain,
|
|
835
|
+
address: response.address,
|
|
836
|
+
path: response.path || path
|
|
837
|
+
};
|
|
838
|
+
}
|
|
839
|
+
} catch (error) {
|
|
840
|
+
console.warn(`API address derivation failed for ${chain}:`, error);
|
|
841
|
+
}
|
|
842
|
+
if (this.useNativeWdk && this.nativeWdkService) {
|
|
843
|
+
try {
|
|
844
|
+
const wdk = this.nativeWdkService;
|
|
845
|
+
await wdk.initialize(seed);
|
|
846
|
+
return await wdk.deriveAddress(chain);
|
|
847
|
+
} catch (error) {
|
|
848
|
+
console.warn(`Native WDK address derivation failed for ${chain}:`, error);
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
return this.deriveBrowserAddress(seed, chain);
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Derive addresses for all supported chains
|
|
855
|
+
*/
|
|
856
|
+
async deriveAllAddresses(seed) {
|
|
857
|
+
await this.initialize();
|
|
858
|
+
try {
|
|
859
|
+
const response = await this.apiClient.deriveAllAddresses(seed, this.config.network);
|
|
860
|
+
if (response.success && response.addresses) {
|
|
861
|
+
return {
|
|
862
|
+
ethereum: response.addresses.ethereum || null,
|
|
863
|
+
bitcoin: response.addresses.bitcoin || null,
|
|
864
|
+
ton: response.addresses.ton || null,
|
|
865
|
+
tron: response.addresses.tron || null,
|
|
866
|
+
solana: response.addresses.solana || null,
|
|
867
|
+
spark: response.addresses.spark || null
|
|
868
|
+
};
|
|
869
|
+
}
|
|
870
|
+
} catch (error) {
|
|
871
|
+
console.warn("API address derivation failed:", error);
|
|
872
|
+
}
|
|
873
|
+
if (this.useNativeWdk && this.nativeWdkService) {
|
|
874
|
+
try {
|
|
875
|
+
const wdk = this.nativeWdkService;
|
|
876
|
+
await wdk.initialize(seed);
|
|
877
|
+
return await wdk.deriveAllAddresses();
|
|
878
|
+
} catch (error) {
|
|
879
|
+
console.warn("Native WDK multi-chain derivation failed:", error);
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
return this.deriveAllBrowserAddresses(seed);
|
|
883
|
+
}
|
|
884
|
+
/**
|
|
885
|
+
* Get balances for all chains
|
|
886
|
+
*/
|
|
887
|
+
async getAllBalances(seed) {
|
|
888
|
+
await this.initialize();
|
|
889
|
+
try {
|
|
890
|
+
const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/balances`, {
|
|
891
|
+
method: "POST",
|
|
892
|
+
headers: { "Content-Type": "application/json" },
|
|
893
|
+
body: JSON.stringify({ seed, network: this.config.network })
|
|
894
|
+
});
|
|
895
|
+
if (response.ok) {
|
|
896
|
+
const data = await response.json();
|
|
897
|
+
if (data.success) {
|
|
898
|
+
return data.balances;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
} catch (error) {
|
|
902
|
+
console.warn("Failed to fetch balances:", error);
|
|
903
|
+
}
|
|
904
|
+
return {};
|
|
905
|
+
}
|
|
906
|
+
/**
|
|
907
|
+
* Get fee rates for a chain
|
|
908
|
+
*/
|
|
909
|
+
async getFeeRates(seed, chain) {
|
|
910
|
+
await this.initialize();
|
|
911
|
+
try {
|
|
912
|
+
const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/fee-rates`, {
|
|
913
|
+
method: "POST",
|
|
914
|
+
headers: { "Content-Type": "application/json" },
|
|
915
|
+
body: JSON.stringify({ seed, chain, network: this.config.network })
|
|
916
|
+
});
|
|
917
|
+
if (response.ok) {
|
|
918
|
+
const data = await response.json();
|
|
919
|
+
if (data.success && data.feeRates) {
|
|
920
|
+
return data.feeRates;
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
} catch (error) {
|
|
924
|
+
console.warn(`Failed to fetch fee rates for ${chain}:`, error);
|
|
925
|
+
}
|
|
926
|
+
return { slow: "0", normal: "0", fast: "0" };
|
|
927
|
+
}
|
|
928
|
+
/**
|
|
929
|
+
* Estimate transaction fee
|
|
930
|
+
*/
|
|
931
|
+
async estimateFee(seed, chain, to, amount) {
|
|
932
|
+
await this.initialize();
|
|
933
|
+
try {
|
|
934
|
+
const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/estimate-fee`, {
|
|
935
|
+
method: "POST",
|
|
936
|
+
headers: { "Content-Type": "application/json" },
|
|
937
|
+
body: JSON.stringify({ seed, chain, to, amount, network: this.config.network })
|
|
938
|
+
});
|
|
939
|
+
if (response.ok) {
|
|
940
|
+
const data = await response.json();
|
|
941
|
+
if (data.success) {
|
|
942
|
+
return { fee: data.fee, symbol: data.symbol };
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
} catch (error) {
|
|
946
|
+
console.warn(`Failed to estimate fee for ${chain}:`, error);
|
|
947
|
+
}
|
|
948
|
+
return { fee: "0", symbol: this.getChainSymbol(chain) };
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* Send a transaction
|
|
952
|
+
*/
|
|
953
|
+
async sendTransaction(seed, chain, to, amount) {
|
|
954
|
+
await this.initialize();
|
|
955
|
+
try {
|
|
956
|
+
const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/send`, {
|
|
957
|
+
method: "POST",
|
|
958
|
+
headers: { "Content-Type": "application/json" },
|
|
959
|
+
body: JSON.stringify({ seed, chain, to, amount, network: this.config.network })
|
|
960
|
+
});
|
|
961
|
+
if (response.ok) {
|
|
962
|
+
const data = await response.json();
|
|
963
|
+
return {
|
|
964
|
+
success: data.success,
|
|
965
|
+
txHash: data.txHash,
|
|
966
|
+
from: data.from,
|
|
967
|
+
to: data.to,
|
|
968
|
+
amount: data.amount,
|
|
969
|
+
chain: data.chain,
|
|
970
|
+
network: data.network
|
|
971
|
+
};
|
|
972
|
+
}
|
|
973
|
+
const errorData = await response.json().catch(() => ({}));
|
|
974
|
+
return {
|
|
975
|
+
success: false,
|
|
976
|
+
error: errorData.error || `HTTP ${response.status}`
|
|
977
|
+
};
|
|
978
|
+
} catch (error) {
|
|
979
|
+
return {
|
|
980
|
+
success: false,
|
|
981
|
+
error: error instanceof Error ? error.message : "Transaction failed"
|
|
982
|
+
};
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
/**
|
|
986
|
+
* Get the network configuration
|
|
987
|
+
*/
|
|
988
|
+
getNetwork() {
|
|
989
|
+
return this.config.network;
|
|
990
|
+
}
|
|
991
|
+
/**
|
|
992
|
+
* Get API URL
|
|
993
|
+
*/
|
|
994
|
+
getApiUrl() {
|
|
995
|
+
return this.config.apiUrl;
|
|
996
|
+
}
|
|
997
|
+
// ==========================================
|
|
998
|
+
// Private Helper Methods
|
|
999
|
+
// ==========================================
|
|
1000
|
+
getDerivationPath(chain) {
|
|
1001
|
+
const paths = {
|
|
1002
|
+
bitcoin: this.config.network === "testnet" ? "m/84'/1'/0'/0/0" : "m/84'/0'/0'/0/0",
|
|
1003
|
+
ethereum: "m/44'/60'/0'/0/0",
|
|
1004
|
+
ton: "m/44'/607'/0'/0'/0'",
|
|
1005
|
+
tron: "m/44'/195'/0'/0/0",
|
|
1006
|
+
solana: "m/44'/501'/0'/0'",
|
|
1007
|
+
spark: "m/44'/998'/0'/0/0"
|
|
1008
|
+
};
|
|
1009
|
+
return paths[chain];
|
|
1010
|
+
}
|
|
1011
|
+
getChainSymbol(chain) {
|
|
1012
|
+
const symbols = {
|
|
1013
|
+
ethereum: "ETH",
|
|
1014
|
+
bitcoin: "BTC",
|
|
1015
|
+
ton: "TON",
|
|
1016
|
+
tron: "TRX",
|
|
1017
|
+
solana: "SOL",
|
|
1018
|
+
spark: "SAT"
|
|
1019
|
+
};
|
|
1020
|
+
return symbols[chain];
|
|
1021
|
+
}
|
|
1022
|
+
/**
|
|
1023
|
+
* Derive address using browser-compatible libraries
|
|
1024
|
+
*/
|
|
1025
|
+
async deriveBrowserAddress(seed, chain) {
|
|
1026
|
+
const path = this.getDerivationPath(chain);
|
|
1027
|
+
try {
|
|
1028
|
+
let address;
|
|
1029
|
+
switch (chain) {
|
|
1030
|
+
case "ethereum":
|
|
1031
|
+
address = deriveEthereumAddress(seed);
|
|
1032
|
+
break;
|
|
1033
|
+
case "bitcoin":
|
|
1034
|
+
address = deriveBitcoinAddress(seed, this.config.network);
|
|
1035
|
+
break;
|
|
1036
|
+
case "tron":
|
|
1037
|
+
address = deriveTronAddress(seed);
|
|
1038
|
+
break;
|
|
1039
|
+
case "spark":
|
|
1040
|
+
address = deriveSparkAddress(seed, this.config.network);
|
|
1041
|
+
break;
|
|
1042
|
+
case "solana":
|
|
1043
|
+
address = await deriveSolanaAddress(seed);
|
|
1044
|
+
break;
|
|
1045
|
+
case "ton":
|
|
1046
|
+
address = await deriveTonAddress(seed);
|
|
1047
|
+
break;
|
|
1048
|
+
default:
|
|
1049
|
+
throw new Error(`Unsupported chain: ${chain}`);
|
|
1050
|
+
}
|
|
1051
|
+
return { chain, address, path };
|
|
1052
|
+
} catch (error) {
|
|
1053
|
+
console.error(`Browser derivation failed for ${chain}:`, error);
|
|
1054
|
+
throw error;
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
/**
|
|
1058
|
+
* Derive all addresses using browser-compatible libraries
|
|
1059
|
+
*/
|
|
1060
|
+
async deriveAllBrowserAddresses(seed) {
|
|
1061
|
+
return deriveAllAddresses(seed, this.config.network);
|
|
1062
|
+
}
|
|
1063
|
+
};
|
|
1064
|
+
var defaultService = null;
|
|
1065
|
+
function getZubariWdkService(config) {
|
|
1066
|
+
if (!defaultService || config && config.network !== defaultService.getNetwork()) {
|
|
1067
|
+
defaultService = new ZubariWdkService(config);
|
|
1068
|
+
}
|
|
1069
|
+
return defaultService;
|
|
1070
|
+
}
|
|
3409
1071
|
|
|
3410
1072
|
// src/wallet/WalletManager.ts
|
|
1073
|
+
var COINGECKO_IDS = {
|
|
1074
|
+
ethereum: "ethereum",
|
|
1075
|
+
bitcoin: "bitcoin",
|
|
1076
|
+
ton: "the-open-network",
|
|
1077
|
+
tron: "tron",
|
|
1078
|
+
solana: "solana",
|
|
1079
|
+
spark: "bitcoin"
|
|
1080
|
+
// Spark uses BTC
|
|
1081
|
+
};
|
|
1082
|
+
var priceCache = null;
|
|
1083
|
+
var PRICE_CACHE_TTL = 6e4;
|
|
1084
|
+
async function fetchPrices() {
|
|
1085
|
+
if (priceCache && Date.now() - priceCache.timestamp < PRICE_CACHE_TTL) {
|
|
1086
|
+
return priceCache.prices;
|
|
1087
|
+
}
|
|
1088
|
+
const ids = Object.values(COINGECKO_IDS).filter((v, i, a) => a.indexOf(v) === i).join(",");
|
|
1089
|
+
try {
|
|
1090
|
+
const response = await fetch(
|
|
1091
|
+
`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`,
|
|
1092
|
+
{
|
|
1093
|
+
headers: { "Accept": "application/json" }
|
|
1094
|
+
}
|
|
1095
|
+
);
|
|
1096
|
+
if (response.ok) {
|
|
1097
|
+
const data = await response.json();
|
|
1098
|
+
const prices = {};
|
|
1099
|
+
for (const [chain, geckoId] of Object.entries(COINGECKO_IDS)) {
|
|
1100
|
+
prices[chain] = data[geckoId]?.usd || 0;
|
|
1101
|
+
}
|
|
1102
|
+
priceCache = { prices, timestamp: Date.now() };
|
|
1103
|
+
return prices;
|
|
1104
|
+
}
|
|
1105
|
+
} catch (error) {
|
|
1106
|
+
console.warn("Failed to fetch prices from CoinGecko:", error);
|
|
1107
|
+
}
|
|
1108
|
+
return priceCache?.prices || {};
|
|
1109
|
+
}
|
|
1110
|
+
async function getPriceForChain(chain) {
|
|
1111
|
+
const prices = await fetchPrices();
|
|
1112
|
+
return prices[chain] || 0;
|
|
1113
|
+
}
|
|
3411
1114
|
var STORAGE_KEYS = {
|
|
3412
1115
|
ENCRYPTED_SEED: "encrypted_seed",
|
|
3413
1116
|
ACTIVE_WALLET: "active_wallet"
|
|
@@ -3429,11 +1132,12 @@ var WalletManager = class _WalletManager {
|
|
|
3429
1132
|
rpcUrl: config.rpcUrl || ethereumConfig.rpcUrl,
|
|
3430
1133
|
storage: config.storage || createSecureStorage(),
|
|
3431
1134
|
enabledChains: config.enabledChains || SUPPORTED_CHAINS,
|
|
3432
|
-
apiUrl: config.apiUrl || process.env.NEXT_PUBLIC_API_URL || "
|
|
1135
|
+
apiUrl: config.apiUrl || process.env.NEXT_PUBLIC_API_URL || "https://ckgwifsxka.us-east-2.awsapprunner.com"
|
|
3433
1136
|
};
|
|
3434
1137
|
this.storage = this.config.storage;
|
|
3435
|
-
this.wdkService =
|
|
3436
|
-
network: this.config.network
|
|
1138
|
+
this.wdkService = getZubariWdkService({
|
|
1139
|
+
network: this.config.network,
|
|
1140
|
+
apiUrl: this.config.apiUrl
|
|
3437
1141
|
});
|
|
3438
1142
|
}
|
|
3439
1143
|
/**
|
|
@@ -3449,17 +1153,17 @@ var WalletManager = class _WalletManager {
|
|
|
3449
1153
|
return mnemonic.phrase;
|
|
3450
1154
|
}
|
|
3451
1155
|
/**
|
|
3452
|
-
* Generate a new BIP-39 seed phrase using
|
|
1156
|
+
* Generate a new BIP-39 seed phrase using Tether WDK (via API in browser)
|
|
3453
1157
|
* This is the recommended method for generating seed phrases
|
|
3454
1158
|
*/
|
|
3455
1159
|
async generateSeedWithWdk() {
|
|
3456
|
-
return await this.wdkService.
|
|
1160
|
+
return await this.wdkService.generateSeed();
|
|
3457
1161
|
}
|
|
3458
1162
|
/**
|
|
3459
|
-
* Validate seed phrase using
|
|
1163
|
+
* Validate seed phrase using WDK (async, more accurate)
|
|
3460
1164
|
*/
|
|
3461
1165
|
async validateSeedWithWdk(seed) {
|
|
3462
|
-
return await this.wdkService.
|
|
1166
|
+
return await this.wdkService.validateSeed(seed);
|
|
3463
1167
|
}
|
|
3464
1168
|
/**
|
|
3465
1169
|
* Validate a BIP-39 seed phrase
|
|
@@ -3538,7 +1242,6 @@ var WalletManager = class _WalletManager {
|
|
|
3538
1242
|
*/
|
|
3539
1243
|
lock() {
|
|
3540
1244
|
this.currentSeed = null;
|
|
3541
|
-
this.wdkService.dispose();
|
|
3542
1245
|
}
|
|
3543
1246
|
/**
|
|
3544
1247
|
* Check if wallet exists in storage
|
|
@@ -3554,7 +1257,6 @@ var WalletManager = class _WalletManager {
|
|
|
3554
1257
|
this.currentSeed = null;
|
|
3555
1258
|
this.derivedAddress = null;
|
|
3556
1259
|
this.derivedAddresses = {};
|
|
3557
|
-
this.wdkService.dispose();
|
|
3558
1260
|
}
|
|
3559
1261
|
/**
|
|
3560
1262
|
* Get current wallet state
|
|
@@ -3654,19 +1356,18 @@ var WalletManager = class _WalletManager {
|
|
|
3654
1356
|
/**
|
|
3655
1357
|
* Derive address for a specific chain (async version)
|
|
3656
1358
|
*
|
|
3657
|
-
*
|
|
3658
|
-
*
|
|
1359
|
+
* Uses the unified WDK service which:
|
|
1360
|
+
* - In browser: Calls the backend API (which has Tether WDK)
|
|
1361
|
+
* - In Node.js: Uses native WDK
|
|
1362
|
+
* - Falls back to browser-compatible derivation if needed
|
|
3659
1363
|
*/
|
|
3660
1364
|
static async deriveAddressForChainAsync(seed, chain, network = "testnet", apiUrl) {
|
|
3661
1365
|
try {
|
|
3662
|
-
const
|
|
3663
|
-
const
|
|
3664
|
-
|
|
3665
|
-
return response.address;
|
|
3666
|
-
}
|
|
3667
|
-
console.warn(`WDK API failed for ${chain}, using local derivation:`, response.error);
|
|
1366
|
+
const wdkService = getZubariWdkService({ network, apiUrl });
|
|
1367
|
+
const result = await wdkService.deriveAddress(seed, chain);
|
|
1368
|
+
return result.address;
|
|
3668
1369
|
} catch (error) {
|
|
3669
|
-
console.warn(`WDK
|
|
1370
|
+
console.warn(`WDK service failed for ${chain}, using local derivation:`, error);
|
|
3670
1371
|
}
|
|
3671
1372
|
return _WalletManager.deriveAddressForChain(seed, chain);
|
|
3672
1373
|
}
|
|
@@ -3762,8 +1463,9 @@ var WalletManager = class _WalletManager {
|
|
|
3762
1463
|
return addresses;
|
|
3763
1464
|
}
|
|
3764
1465
|
/**
|
|
3765
|
-
* Derive addresses for all enabled chains using
|
|
3766
|
-
*
|
|
1466
|
+
* Derive addresses for all enabled chains using Tether WDK
|
|
1467
|
+
* In browser: Uses the backend API (which has Tether WDK)
|
|
1468
|
+
* In Node.js: Uses native WDK directly
|
|
3767
1469
|
* Returns REAL cryptographically valid addresses for all chains.
|
|
3768
1470
|
*/
|
|
3769
1471
|
async deriveAllAddressesWithWdk() {
|
|
@@ -3771,9 +1473,8 @@ var WalletManager = class _WalletManager {
|
|
|
3771
1473
|
throw new Error("Wallet is locked");
|
|
3772
1474
|
}
|
|
3773
1475
|
try {
|
|
3774
|
-
await this.wdkService.
|
|
1476
|
+
const wdkAddresses = await this.wdkService.deriveAllAddresses(this.currentSeed);
|
|
3775
1477
|
const enabledChainsSet = new Set(this.config.enabledChains);
|
|
3776
|
-
const wdkAddresses = await this.wdkService.deriveAllAddresses();
|
|
3777
1478
|
const addresses = {};
|
|
3778
1479
|
for (const [chain, address] of Object.entries(wdkAddresses)) {
|
|
3779
1480
|
if (enabledChainsSet.has(chain) && address) {
|
|
@@ -3783,13 +1484,15 @@ var WalletManager = class _WalletManager {
|
|
|
3783
1484
|
this.derivedAddresses = addresses;
|
|
3784
1485
|
return addresses;
|
|
3785
1486
|
} catch (error) {
|
|
3786
|
-
console.error("
|
|
1487
|
+
console.error("WDK derivation failed:", error);
|
|
3787
1488
|
throw error;
|
|
3788
1489
|
}
|
|
3789
1490
|
}
|
|
3790
1491
|
/**
|
|
3791
1492
|
* Derive addresses for all enabled chains using Tether WDK
|
|
3792
|
-
*
|
|
1493
|
+
* The unified WDK service handles all fallback strategies automatically:
|
|
1494
|
+
* - Browser: API backend -> Browser derivation
|
|
1495
|
+
* - Node.js: Native WDK -> API backend -> Browser derivation
|
|
3793
1496
|
*/
|
|
3794
1497
|
async deriveAllAddressesAsync() {
|
|
3795
1498
|
if (!this.currentSeed) {
|
|
@@ -3797,44 +1500,8 @@ var WalletManager = class _WalletManager {
|
|
|
3797
1500
|
}
|
|
3798
1501
|
try {
|
|
3799
1502
|
return await this.deriveAllAddressesWithWdk();
|
|
3800
|
-
} catch (
|
|
3801
|
-
console.
|
|
3802
|
-
}
|
|
3803
|
-
try {
|
|
3804
|
-
const wdkApi = getWdkApiClient(this.config.apiUrl);
|
|
3805
|
-
const response = await wdkApi.deriveAllAddresses(this.currentSeed, this.config.network);
|
|
3806
|
-
if (response.success && response.addresses) {
|
|
3807
|
-
const addresses = {};
|
|
3808
|
-
for (const chain of this.config.enabledChains) {
|
|
3809
|
-
const address = response.addresses[chain];
|
|
3810
|
-
if (address) {
|
|
3811
|
-
addresses[chain] = address;
|
|
3812
|
-
}
|
|
3813
|
-
}
|
|
3814
|
-
this.derivedAddresses = addresses;
|
|
3815
|
-
return addresses;
|
|
3816
|
-
}
|
|
3817
|
-
console.warn("WDK API call failed:", response.error);
|
|
3818
|
-
} catch (apiError) {
|
|
3819
|
-
console.warn("WDK API unavailable:", apiError);
|
|
3820
|
-
}
|
|
3821
|
-
console.log("Using browser-compatible address derivation...");
|
|
3822
|
-
try {
|
|
3823
|
-
const browserAddresses = await deriveAllAddresses(
|
|
3824
|
-
this.currentSeed,
|
|
3825
|
-
this.config.network
|
|
3826
|
-
);
|
|
3827
|
-
const addresses = {};
|
|
3828
|
-
for (const chain of this.config.enabledChains) {
|
|
3829
|
-
const address = browserAddresses[chain];
|
|
3830
|
-
if (address) {
|
|
3831
|
-
addresses[chain] = address;
|
|
3832
|
-
}
|
|
3833
|
-
}
|
|
3834
|
-
this.derivedAddresses = addresses;
|
|
3835
|
-
return addresses;
|
|
3836
|
-
} catch (browserError) {
|
|
3837
|
-
console.error("Browser derivation failed:", browserError);
|
|
1503
|
+
} catch (error) {
|
|
1504
|
+
console.error("All derivation strategies failed:", error);
|
|
3838
1505
|
const ethAddress = _WalletManager.deriveAddress(this.currentSeed);
|
|
3839
1506
|
this.derivedAddresses = { ethereum: ethAddress };
|
|
3840
1507
|
return this.derivedAddresses;
|
|
@@ -3916,11 +1583,25 @@ var WalletManager = class _WalletManager {
|
|
|
3916
1583
|
console.warn(`Failed to fetch ${chain} balance:`, error);
|
|
3917
1584
|
}
|
|
3918
1585
|
} else if (chain === "bitcoin") {
|
|
3919
|
-
|
|
1586
|
+
let apiUrl;
|
|
1587
|
+
if (this.config.network === "mainnet" || address.startsWith("bc1") || address.startsWith("1") || address.startsWith("3")) {
|
|
1588
|
+
apiUrl = "https://mempool.space/api";
|
|
1589
|
+
} else if (address.startsWith("tb1") || address.startsWith("2") || address.startsWith("m") || address.startsWith("n")) {
|
|
1590
|
+
apiUrl = "https://mempool.space/testnet4/api";
|
|
1591
|
+
} else {
|
|
1592
|
+
apiUrl = "https://mempool.space/testnet/api";
|
|
1593
|
+
}
|
|
3920
1594
|
try {
|
|
3921
|
-
|
|
1595
|
+
let response = await fetch(`${apiUrl}/address/${address}`, {
|
|
3922
1596
|
headers: { "Accept": "application/json" }
|
|
3923
1597
|
});
|
|
1598
|
+
if (!response.ok && apiUrl.includes("testnet4")) {
|
|
1599
|
+
console.log("Trying testnet3 API...");
|
|
1600
|
+
apiUrl = "https://mempool.space/testnet/api";
|
|
1601
|
+
response = await fetch(`${apiUrl}/address/${address}`, {
|
|
1602
|
+
headers: { "Accept": "application/json" }
|
|
1603
|
+
});
|
|
1604
|
+
}
|
|
3924
1605
|
if (response.ok) {
|
|
3925
1606
|
const data = await response.json();
|
|
3926
1607
|
const chainFunded = data.chain_stats?.funded_txo_sum || 0;
|
|
@@ -3929,6 +1610,9 @@ var WalletManager = class _WalletManager {
|
|
|
3929
1610
|
const mempoolSpent = data.mempool_stats?.spent_txo_sum || 0;
|
|
3930
1611
|
const satoshis = chainFunded - chainSpent + (mempoolFunded - mempoolSpent);
|
|
3931
1612
|
balance = (satoshis / 1e8).toFixed(8);
|
|
1613
|
+
console.log(`Bitcoin balance for ${address}: ${balance} BTC (${satoshis} sats) via ${apiUrl}`);
|
|
1614
|
+
} else {
|
|
1615
|
+
console.warn(`Bitcoin API returned status ${response.status} for ${address}`);
|
|
3932
1616
|
}
|
|
3933
1617
|
} catch (error) {
|
|
3934
1618
|
console.warn(`Failed to fetch ${chain} balance:`, error);
|
|
@@ -3970,13 +1654,53 @@ var WalletManager = class _WalletManager {
|
|
|
3970
1654
|
} catch (error) {
|
|
3971
1655
|
console.warn(`Failed to fetch ${chain} balance:`, error);
|
|
3972
1656
|
}
|
|
1657
|
+
} else if (chain === "ton") {
|
|
1658
|
+
const baseUrl = this.config.network === "mainnet" ? "https://toncenter.com/api/v2" : "https://testnet.toncenter.com/api/v2";
|
|
1659
|
+
try {
|
|
1660
|
+
const response = await fetch(`${baseUrl}/getAddressBalance?address=${address}`, {
|
|
1661
|
+
headers: { "Accept": "application/json" }
|
|
1662
|
+
});
|
|
1663
|
+
if (response.ok) {
|
|
1664
|
+
const data = await response.json();
|
|
1665
|
+
if (data.ok && data.result !== void 0) {
|
|
1666
|
+
const nanotons = BigInt(data.result);
|
|
1667
|
+
balance = (Number(nanotons) / 1e9).toFixed(9);
|
|
1668
|
+
console.log(`TON balance for ${address}: ${balance} TON`);
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
} catch (error) {
|
|
1672
|
+
console.warn(`Failed to fetch ${chain} balance:`, error);
|
|
1673
|
+
}
|
|
1674
|
+
} else if (chain === "spark") {
|
|
1675
|
+
try {
|
|
1676
|
+
const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/balance`, {
|
|
1677
|
+
method: "POST",
|
|
1678
|
+
headers: { "Content-Type": "application/json" },
|
|
1679
|
+
body: JSON.stringify({
|
|
1680
|
+
chain: "spark",
|
|
1681
|
+
address,
|
|
1682
|
+
network: this.config.network
|
|
1683
|
+
})
|
|
1684
|
+
});
|
|
1685
|
+
if (response.ok) {
|
|
1686
|
+
const data = await response.json();
|
|
1687
|
+
if (data.success && data.balance !== void 0) {
|
|
1688
|
+
balance = (parseFloat(data.balance) / 1e8).toFixed(8);
|
|
1689
|
+
console.log(`Spark balance for ${address}: ${balance} BTC`);
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
} catch (error) {
|
|
1693
|
+
console.warn(`Failed to fetch ${chain} balance:`, error);
|
|
1694
|
+
}
|
|
3973
1695
|
}
|
|
1696
|
+
const priceUsd = await getPriceForChain(chain);
|
|
1697
|
+
const balanceNum = parseFloat(balance) || 0;
|
|
1698
|
+
const balanceUsd = balanceNum * priceUsd;
|
|
3974
1699
|
return {
|
|
3975
1700
|
chain,
|
|
3976
1701
|
symbol: networkConfig.nativeCurrency.symbol,
|
|
3977
1702
|
balance,
|
|
3978
|
-
balanceUsd
|
|
3979
|
-
// TODO: Implement price fetching
|
|
1703
|
+
balanceUsd,
|
|
3980
1704
|
address,
|
|
3981
1705
|
decimals: networkConfig.nativeCurrency.decimals
|
|
3982
1706
|
};
|