quantum-resistant-rustykey 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -125
- package/dist/index.mjs +2404 -0
- package/package.json +32 -38
- package/install/index.d.ts +0 -21
- package/install/index.js +0 -1877
- package/install/index.js.map +0 -1
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2404 @@
|
|
|
1
|
+
//#region src/vendor/mlkem.js
|
|
2
|
+
async function MLKEM768Module(moduleArg = {}) {
|
|
3
|
+
var moduleRtn;
|
|
4
|
+
var Module = moduleArg;
|
|
5
|
+
var ENVIRONMENT_IS_WEB = typeof window == "object";
|
|
6
|
+
var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != "undefined";
|
|
7
|
+
typeof process == "object" && process.versions?.node && process.type;
|
|
8
|
+
var _scriptName = import.meta.url, readBinary;
|
|
9
|
+
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
10
|
+
try {
|
|
11
|
+
new URL(".", _scriptName).href;
|
|
12
|
+
} catch {}
|
|
13
|
+
if (ENVIRONMENT_IS_WORKER) readBinary = (url) => {
|
|
14
|
+
var xhr = new XMLHttpRequest();
|
|
15
|
+
xhr.open("GET", url, false);
|
|
16
|
+
xhr.responseType = "arraybuffer";
|
|
17
|
+
xhr.send(null);
|
|
18
|
+
return new Uint8Array(xhr.response);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
console.log.bind(console);
|
|
22
|
+
var err = console.error.bind(console);
|
|
23
|
+
var wasmBinary;
|
|
24
|
+
var ABORT = false;
|
|
25
|
+
var readyPromiseResolve, readyPromiseReject;
|
|
26
|
+
var wasmMemory, HEAP8, HEAP16, HEAP32, HEAPU32, HEAPF32, HEAPF64, HEAP64;
|
|
27
|
+
var runtimeInitialized = false;
|
|
28
|
+
function updateMemoryViews() {
|
|
29
|
+
var b = wasmMemory.buffer;
|
|
30
|
+
Module["HEAP8"] = HEAP8 = new Int8Array(b);
|
|
31
|
+
HEAP16 = new Int16Array(b);
|
|
32
|
+
Module["HEAPU8"] = new Uint8Array(b);
|
|
33
|
+
new Uint16Array(b);
|
|
34
|
+
HEAP32 = new Int32Array(b);
|
|
35
|
+
HEAPU32 = new Uint32Array(b);
|
|
36
|
+
HEAPF32 = new Float32Array(b);
|
|
37
|
+
HEAPF64 = new Float64Array(b);
|
|
38
|
+
HEAP64 = new BigInt64Array(b);
|
|
39
|
+
new BigUint64Array(b);
|
|
40
|
+
}
|
|
41
|
+
function preRun() {}
|
|
42
|
+
function initRuntime() {
|
|
43
|
+
runtimeInitialized = true;
|
|
44
|
+
wasmExports["b"]();
|
|
45
|
+
}
|
|
46
|
+
function postRun() {}
|
|
47
|
+
function abort(what) {
|
|
48
|
+
what = "Aborted(" + what + ")";
|
|
49
|
+
err(what);
|
|
50
|
+
ABORT = true;
|
|
51
|
+
what += ". Build with -sASSERTIONS for more info.";
|
|
52
|
+
var e = new WebAssembly.RuntimeError(what);
|
|
53
|
+
readyPromiseReject?.(e);
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
var wasmBinaryFile;
|
|
57
|
+
function findWasmBinary() {
|
|
58
|
+
return base64Decode("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CCIBIAAtABtzIAJxIAFzOgAbIAAgAy0A/AgiASAALQAccyACcSABczoAHCAAIAMtAP0IIgEgAC0AHXMgAnEgAXM6AB0gACADLQD+CCIBIAAtAB5zIAJxIAFzOgAeIAAgAiADLQD/CCIBIAAtAB9zcSABczoAHyADQdgJakIANwMAIANB0AlqQgA3AwAgA0HICWpCADcDACADQcAJakIANwMAIANCADcDuAkgA0IANwOwCSADQgA3A6gJIANCADcDoAkgA0GYCWpCADcDACADQZAJakIANwMAIANBiAlqQgA3AwAgA0GACWpCADcDACADQgA3A/gIIANCADcD8AggA0IANwPoCCADQgA3A+AIIANBAEHgCPwLAEEAIQcLJAAgBwvPAwEIfyMAIgQgBEGAFWtBYHEiBCQAIARBgAlqIgUgAhANIAUQDCAEIAUQDkEAIQUDQCAEIAZBAmoiB2otAAAgAiAHai0AAHMiByAEIAZBAWoiCWotAAAgAiAJai0AAHMiCSAEIAZqLQAAIAIgBmotAABzIgsgCHNzcyEIIAcgCSAFIAtycnIhBSAGQQNqIgZBgAlHDQALIARBAEGACfwLACAEQYAJaiIGQQBBgAz8CwAgCEEAIAVB/wFxa0EYdnNBfyEFQf8BcSAIQf8BcUYEQCAEIAMpAAA3A4AJIAQgAykAGDcDmAkgBCADKQAQNwOQCSAEIAMpAAg3A4gJIARBoAlqIgMgAhATIAQgBkHAABASIAAgBiACIARBIGoQGiABIAQpAxg3ABggASAEKQMQNwAQIAEgBCkDCDcACCABIAQpAwA3AAAgA0IANwMAIARBqAlqQgA3AwAgBEGwCWpCADcDACAEQbgJakIANwMAIARCADcDgAkgBEIANwOICSAEQgA3A5AJIARCADcDmAkgBEIANwM4IARCADcDMCAEQgA3AyggBEIANwMgIARCADcDGCAEQgA3AxAgBEIANwMIIARCADcDAEEAIQULJAAgBQuVBwIKfwR+IwAiAyADQYDPAGtBYHEiAyQAIAIpAAghDSACKQAQIQ4gAikAGCEPIAIpAAAhECADQQM6ACAgAyAPNwMYIAMgDjcDECADIA03AwggAyAQNwMAIANBwM4AaiADQSEQEiADQYgfaiADKQPITiINNwMAIANBkB9qIAMpA9BOIg43AwAgA0GYH2ogAykD2E4iDzcDACADQcgfaiANNwMAIANB0B9qIA43AwAgA0HYH2ogDzcDACADQZggaiAPNwMAIANBkCBqIA43AwAgA0GIIGogDTcDACADIA83A9geIAMgDjcD0B4gAyANNwPIHiADIAMpA8BOIg03A8AeIAMgDTcDgB8gAyANNwPAHyADIA03A4AgIANBgAI7AaAgIANBAjsB4B8gA0EBOwGgHyADQQA7AeAeIANBwCpqIgggA0HALmogA0HAMmogA0HANmoiCyADQcAeaiIGEAogA0GBBDsBoCAgA0GABDsB4B8gA0GCAjsBoB8gA0GBAjsB4B4gA0HAOmogA0HAPmogA0HAwgBqIgwgA0HAxgBqIAYQCiADQYIEOwHgHiADQcDKAGogBhAfIAZBAEGAAvwLACADQcAGaiIEIANBwApqIANBwA5qIANBwBJqIgUgA0HgzgBqIglBAEEBQQJB/wEQCyAGIANBwCJqIANBwCZqIAUgCUEDQQRBBUH/ARALIAQQBiAGEAYgA0FAayIHIAQQGCAFIAggBCAHEAIgA0HAFmogCyAEIAcQAiADQcAaaiAMIAQgBxACIAUQFyAFQYAEahAXIAVBgAhqEBcgBSAGECAgBRAMIAQQDCABIAQQDiAAIAUQDiAAQZgJaiADKQPYTjcAACAAQZAJaiADKQPQTjcAACAAQYgJaiADKQPITjcAACAAIAMpA8BONwCACSAJQgA3AwAgA0HozgBqQgA3AwAgA0HwzgBqQgA3AwAgA0H4zgBqQgA3AwAgA0IANwPATiADQgA3A8hOIANCADcD0E4gA0IANwPYTiADQQA6ACAgA0IANwMYIANCADcDECADQgA3AwggA0IANwMAIAhBAEGAJPwLACAGQQBBgAz8CwAgBEEAQYAM/AsAIAdBAEGABvwLACQAIAFBgAlqIABBoAn8CgAAIAFBoBJqIAAQEyABQdgSaiACKQA4NwAAIAFB0BJqIAIpADA3AAAgAUHIEmogAikAKDcAACABIAIpACA3AMASQQALAgALC8gDAQBBgAgLwAPs+wr9mf4T+tUFjgUfAcoAVf9uAikGtgDCA077Pvq8BT0C0/oIAX8Bw/yyBb75fv9X/fkD3AJgAvr5mwEz/935xwSMAtj99wPz+tMF5v74+QQC+P/A/mb9rvl2+34AvQWr/Kb/8f4+A2sAc/oJ/0n8cv7BAxz6K/3AAdf7pQIF+7H7rgErAksDHftnAw4GaQCmAUsCsQAV/93+NP4mBnUGCv8KA4cEbf/3/MsFpv1fBMr5hAKY/F0BogFJAWT/tf8xA0kEWwJiAioF+/pH+oABQft4/8IEyfqW/NwAXfuF+V/7BvoC+xoDGvqq/Jr83gGU/8z+5APfA74DTPryBVwGAQAAAAAAAACCgAAAAAAAAIqAAAAAAACAAIAAgAAAAICLgAAAAAAAAAEAAIAAAAAAgYAAgAAAAIAJgAAAAAAAgIoAAAAAAAAAiAAAAAAAAAAJgACAAAAAAAoAAIAAAAAAi4AAgAAAAACLAAAAAAAAgImAAAAAAACAA4AAAAAAAIACgAAAAAAAgIAAAAAAAACACoAAAAAAAAAKAACAAAAAgIGAAIAAAACAgIAAAAAAAIABAACAAAAAAAiAAIAAAACA");
|
|
59
|
+
}
|
|
60
|
+
function getBinarySync(file) {
|
|
61
|
+
if (ArrayBuffer.isView(file)) return file;
|
|
62
|
+
if (readBinary) return readBinary(file);
|
|
63
|
+
throw "both async and sync fetching of the wasm failed";
|
|
64
|
+
}
|
|
65
|
+
async function getWasmBinary(binaryFile) {
|
|
66
|
+
return getBinarySync(binaryFile);
|
|
67
|
+
}
|
|
68
|
+
async function instantiateArrayBuffer(binaryFile, imports) {
|
|
69
|
+
try {
|
|
70
|
+
var binary = await getWasmBinary(binaryFile);
|
|
71
|
+
return await WebAssembly.instantiate(binary, imports);
|
|
72
|
+
} catch (reason) {
|
|
73
|
+
err(`failed to asynchronously prepare wasm: ${reason}`);
|
|
74
|
+
abort(reason);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function instantiateAsync(binary, binaryFile, imports) {
|
|
78
|
+
return instantiateArrayBuffer(binaryFile, imports);
|
|
79
|
+
}
|
|
80
|
+
function getWasmImports() {
|
|
81
|
+
return { a: wasmImports };
|
|
82
|
+
}
|
|
83
|
+
async function createWasm() {
|
|
84
|
+
function receiveInstance(instance, module) {
|
|
85
|
+
wasmExports = instance.exports;
|
|
86
|
+
wasmMemory = wasmExports["a"];
|
|
87
|
+
updateMemoryViews();
|
|
88
|
+
assignWasmExports(wasmExports);
|
|
89
|
+
return wasmExports;
|
|
90
|
+
}
|
|
91
|
+
function receiveInstantiationResult(result2) {
|
|
92
|
+
return receiveInstance(result2["instance"]);
|
|
93
|
+
}
|
|
94
|
+
var info = getWasmImports();
|
|
95
|
+
wasmBinaryFile ??= findWasmBinary();
|
|
96
|
+
return receiveInstantiationResult(await instantiateAsync(wasmBinary, wasmBinaryFile, info));
|
|
97
|
+
}
|
|
98
|
+
var base64Decode = (b64) => {
|
|
99
|
+
var b1, b2, i2 = 0, j = 0, bLength = b64.length;
|
|
100
|
+
var output = new Uint8Array((bLength * 3 >> 2) - (b64[bLength - 2] == "=") - (b64[bLength - 1] == "="));
|
|
101
|
+
for (; i2 < bLength; i2 += 4, j += 3) {
|
|
102
|
+
b1 = base64ReverseLookup[b64.charCodeAt(i2 + 1)];
|
|
103
|
+
b2 = base64ReverseLookup[b64.charCodeAt(i2 + 2)];
|
|
104
|
+
output[j] = base64ReverseLookup[b64.charCodeAt(i2)] << 2 | b1 >> 4;
|
|
105
|
+
output[j + 1] = b1 << 4 | b2 >> 2;
|
|
106
|
+
output[j + 2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i2 + 3)];
|
|
107
|
+
}
|
|
108
|
+
return output;
|
|
109
|
+
};
|
|
110
|
+
function getValue(ptr, type = "i8") {
|
|
111
|
+
if (type.endsWith("*")) type = "*";
|
|
112
|
+
switch (type) {
|
|
113
|
+
case "i1": return HEAP8[ptr];
|
|
114
|
+
case "i8": return HEAP8[ptr];
|
|
115
|
+
case "i16": return HEAP16[ptr >> 1];
|
|
116
|
+
case "i32": return HEAP32[ptr >> 2];
|
|
117
|
+
case "i64": return HEAP64[ptr >> 3];
|
|
118
|
+
case "float": return HEAPF32[ptr >> 2];
|
|
119
|
+
case "double": return HEAPF64[ptr >> 3];
|
|
120
|
+
case "*": return HEAPU32[ptr >> 2];
|
|
121
|
+
default: abort(`invalid type for getValue: ${type}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function setValue(ptr, value, type = "i8") {
|
|
125
|
+
if (type.endsWith("*")) type = "*";
|
|
126
|
+
switch (type) {
|
|
127
|
+
case "i1":
|
|
128
|
+
HEAP8[ptr] = value;
|
|
129
|
+
break;
|
|
130
|
+
case "i8":
|
|
131
|
+
HEAP8[ptr] = value;
|
|
132
|
+
break;
|
|
133
|
+
case "i16":
|
|
134
|
+
HEAP16[ptr >> 1] = value;
|
|
135
|
+
break;
|
|
136
|
+
case "i32":
|
|
137
|
+
HEAP32[ptr >> 2] = value;
|
|
138
|
+
break;
|
|
139
|
+
case "i64":
|
|
140
|
+
HEAP64[ptr >> 3] = BigInt(value);
|
|
141
|
+
break;
|
|
142
|
+
case "float":
|
|
143
|
+
HEAPF32[ptr >> 2] = value;
|
|
144
|
+
break;
|
|
145
|
+
case "double":
|
|
146
|
+
HEAPF64[ptr >> 3] = value;
|
|
147
|
+
break;
|
|
148
|
+
case "*":
|
|
149
|
+
HEAPU32[ptr >> 2] = value;
|
|
150
|
+
break;
|
|
151
|
+
default: abort(`invalid type for setValue: ${type}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
var stackRestore = (val) => __emscripten_stack_restore(val);
|
|
155
|
+
var stackSave = () => _emscripten_stack_get_current();
|
|
156
|
+
var stackAlloc = (sz) => __emscripten_stack_alloc(sz);
|
|
157
|
+
for (var base64ReverseLookup = new Uint8Array(123), i = 25; i >= 0; --i) {
|
|
158
|
+
base64ReverseLookup[48 + i] = 52 + i;
|
|
159
|
+
base64ReverseLookup[65 + i] = i;
|
|
160
|
+
base64ReverseLookup[97 + i] = 26 + i;
|
|
161
|
+
}
|
|
162
|
+
base64ReverseLookup[43] = 62;
|
|
163
|
+
base64ReverseLookup[47] = 63;
|
|
164
|
+
Module["stackSave"] = stackSave;
|
|
165
|
+
Module["stackRestore"] = stackRestore;
|
|
166
|
+
Module["stackAlloc"] = stackAlloc;
|
|
167
|
+
Module["setValue"] = setValue;
|
|
168
|
+
Module["getValue"] = getValue;
|
|
169
|
+
var __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current;
|
|
170
|
+
function assignWasmExports(wasmExports2) {
|
|
171
|
+
Module["_mlkem768_keypair_derand"] = wasmExports2["c"];
|
|
172
|
+
Module["_mlkem768_enc_derand"] = wasmExports2["d"];
|
|
173
|
+
Module["_mlkem768_dec"] = wasmExports2["e"];
|
|
174
|
+
__emscripten_stack_restore = wasmExports2["f"];
|
|
175
|
+
__emscripten_stack_alloc = wasmExports2["g"];
|
|
176
|
+
_emscripten_stack_get_current = wasmExports2["h"];
|
|
177
|
+
}
|
|
178
|
+
var wasmImports = {};
|
|
179
|
+
function run() {
|
|
180
|
+
preRun();
|
|
181
|
+
function doRun() {
|
|
182
|
+
Module["calledRun"] = true;
|
|
183
|
+
if (ABORT) return;
|
|
184
|
+
initRuntime();
|
|
185
|
+
readyPromiseResolve?.(Module);
|
|
186
|
+
postRun();
|
|
187
|
+
}
|
|
188
|
+
doRun();
|
|
189
|
+
}
|
|
190
|
+
var wasmExports = await createWasm();
|
|
191
|
+
run();
|
|
192
|
+
if (runtimeInitialized) moduleRtn = Module;
|
|
193
|
+
else moduleRtn = new Promise((resolve, reject) => {
|
|
194
|
+
readyPromiseResolve = resolve;
|
|
195
|
+
readyPromiseReject = reject;
|
|
196
|
+
});
|
|
197
|
+
return moduleRtn;
|
|
198
|
+
}
|
|
199
|
+
var wasm_module_default = MLKEM768Module;
|
|
200
|
+
var ALGORITHM_NAME = "ML-KEM-768";
|
|
201
|
+
var JWK_ALG = "MLKEM768";
|
|
202
|
+
var KEY_USAGES = [
|
|
203
|
+
"encapsulateKey",
|
|
204
|
+
"encapsulateBits",
|
|
205
|
+
"decapsulateKey",
|
|
206
|
+
"decapsulateBits"
|
|
207
|
+
];
|
|
208
|
+
var MlKemOperationError = class extends Error {
|
|
209
|
+
constructor(message) {
|
|
210
|
+
super(message);
|
|
211
|
+
this.name = "OperationError";
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
var MlKemInvalidAccessError = class extends Error {
|
|
215
|
+
constructor(message) {
|
|
216
|
+
super(message);
|
|
217
|
+
this.name = "InvalidAccessError";
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
var MlKemNotSupportedError = class extends Error {
|
|
221
|
+
constructor(message) {
|
|
222
|
+
super(message);
|
|
223
|
+
this.name = "NotSupportedError";
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
var MlKemDataError = class extends Error {
|
|
227
|
+
constructor(message) {
|
|
228
|
+
super(message);
|
|
229
|
+
this.name = "DataError";
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
var internalKeyData = /* @__PURE__ */ new WeakMap();
|
|
233
|
+
function getInternalKeyData(key) {
|
|
234
|
+
const keyData = internalKeyData.get(key);
|
|
235
|
+
if (!keyData) throw new TypeError("Unknown key object");
|
|
236
|
+
return keyData;
|
|
237
|
+
}
|
|
238
|
+
var cleanupRegistry = new FinalizationRegistry((keyData) => {
|
|
239
|
+
keyData.publicKeyData.fill(0);
|
|
240
|
+
keyData.privateSeedData?.fill(0);
|
|
241
|
+
keyData.privateSecretKeyData?.fill(0);
|
|
242
|
+
});
|
|
243
|
+
function getPublicKeyDataRef(key) {
|
|
244
|
+
const keyData = getInternalKeyData(key);
|
|
245
|
+
if (!keyData.publicKeyData) throw new MlKemOperationError("Failed to get public key data");
|
|
246
|
+
return keyData.publicKeyData;
|
|
247
|
+
}
|
|
248
|
+
function getPrivateKeyDataRef(key) {
|
|
249
|
+
const keyData = getInternalKeyData(key);
|
|
250
|
+
if (!keyData.privateSeedData || !keyData.privateSecretKeyData) throw new MlKemOperationError("Failed to get private key data");
|
|
251
|
+
return keyData;
|
|
252
|
+
}
|
|
253
|
+
var noClone = Symbol("CryptoKey created by mlkem-wasm cannot be cloned");
|
|
254
|
+
var keyIdKey = "_mlkem_wasm";
|
|
255
|
+
var emptyToJSON = () => ({});
|
|
256
|
+
function createKeyObject(type, extractable, usages, keyData) {
|
|
257
|
+
const key = {
|
|
258
|
+
type,
|
|
259
|
+
extractable,
|
|
260
|
+
algorithm: Object.freeze({ name: ALGORITHM_NAME }),
|
|
261
|
+
usages: Object.freeze(Array.from(usages)),
|
|
262
|
+
[keyIdKey]: noClone
|
|
263
|
+
};
|
|
264
|
+
Object.defineProperty(key, "toJSON", {
|
|
265
|
+
value: emptyToJSON,
|
|
266
|
+
writable: false,
|
|
267
|
+
enumerable: false,
|
|
268
|
+
configurable: false
|
|
269
|
+
});
|
|
270
|
+
Object.setPrototypeOf(key, CryptoKey.prototype);
|
|
271
|
+
internalKeyData.set(key, keyData);
|
|
272
|
+
cleanupRegistry.register(key, keyData);
|
|
273
|
+
return Object.freeze(key);
|
|
274
|
+
}
|
|
275
|
+
function createPublicKey(publicKeyData, usages) {
|
|
276
|
+
return createKeyObject("public", true, usages, { publicKeyData });
|
|
277
|
+
}
|
|
278
|
+
function createPrivateKey(publicKeyData, privateSeedData, privateSecretKeyData, extractable, usages) {
|
|
279
|
+
return createKeyObject("private", extractable, usages, {
|
|
280
|
+
publicKeyData,
|
|
281
|
+
privateSeedData,
|
|
282
|
+
privateSecretKeyData
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
function _isSupportedCryptoKey(key) {
|
|
286
|
+
return key instanceof CryptoKey && keyIdKey in key && key[keyIdKey] == noClone && internalKeyData.has(key);
|
|
287
|
+
}
|
|
288
|
+
function toBase64url(data) {
|
|
289
|
+
return btoa(String.fromCharCode(...data)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
290
|
+
}
|
|
291
|
+
function fromBase64url(base64url) {
|
|
292
|
+
const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
|
|
293
|
+
const binary = atob(base64 + "===".slice((base64.length + 3) % 4));
|
|
294
|
+
return Uint8Array.from(binary, (c) => c.charCodeAt(0));
|
|
295
|
+
}
|
|
296
|
+
var PUBLICKEY_BYTES = 1184;
|
|
297
|
+
var SECRETKEY_BYTES = 2400;
|
|
298
|
+
var CIPHERTEXT_BYTES = 1088;
|
|
299
|
+
var SHARED_SECRET_BYTES = 32;
|
|
300
|
+
var KEYPAIR_RANDOM_BYTES = 64;
|
|
301
|
+
var ENC_RANDOM_BYTES = 32;
|
|
302
|
+
var _module;
|
|
303
|
+
async function getModule() {
|
|
304
|
+
if (!_module) _module = await wasm_module_default();
|
|
305
|
+
return _module;
|
|
306
|
+
}
|
|
307
|
+
var getRandomValues = crypto.getRandomValues.bind(crypto);
|
|
308
|
+
function checkAlgorithm(algorithm) {
|
|
309
|
+
if ((typeof algorithm === "string" ? algorithm.toUpperCase() : typeof algorithm === "object" && algorithm !== null && "name" in algorithm && typeof algorithm.name === "string" ? algorithm.name.toUpperCase() : null) !== ALGORITHM_NAME) throw new TypeError("Unsupported algorithm");
|
|
310
|
+
}
|
|
311
|
+
async function internalGenerateKeyPair(coins) {
|
|
312
|
+
const module = await getModule();
|
|
313
|
+
const stackSave = module.stackSave();
|
|
314
|
+
try {
|
|
315
|
+
const pkPtr = module.stackAlloc(PUBLICKEY_BYTES);
|
|
316
|
+
const skPtr = module.stackAlloc(SECRETKEY_BYTES);
|
|
317
|
+
const coinsPtr = module.stackAlloc(KEYPAIR_RANDOM_BYTES);
|
|
318
|
+
module.HEAPU8.set(coins, coinsPtr);
|
|
319
|
+
if (module._mlkem768_keypair_derand(pkPtr, skPtr, coinsPtr) !== 0) throw new MlKemOperationError("Key generation failed");
|
|
320
|
+
const rawPublicKey = new Uint8Array(PUBLICKEY_BYTES);
|
|
321
|
+
const rawSecretKey = new Uint8Array(SECRETKEY_BYTES);
|
|
322
|
+
const rawSeed = new Uint8Array(coins);
|
|
323
|
+
rawPublicKey.set(module.HEAPU8.subarray(pkPtr, pkPtr + PUBLICKEY_BYTES));
|
|
324
|
+
rawSecretKey.set(module.HEAPU8.subarray(skPtr, skPtr + SECRETKEY_BYTES));
|
|
325
|
+
module.HEAPU8.fill(0, pkPtr, pkPtr + PUBLICKEY_BYTES);
|
|
326
|
+
module.HEAPU8.fill(0, skPtr, skPtr + SECRETKEY_BYTES);
|
|
327
|
+
module.HEAPU8.fill(0, coinsPtr, coinsPtr + KEYPAIR_RANDOM_BYTES);
|
|
328
|
+
return {
|
|
329
|
+
rawPublicKey,
|
|
330
|
+
rawSecretKey,
|
|
331
|
+
rawSeed
|
|
332
|
+
};
|
|
333
|
+
} finally {
|
|
334
|
+
module.stackRestore(stackSave);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
async function generateKey(keyAlgorithm, extractable, usages) {
|
|
338
|
+
checkAlgorithm(keyAlgorithm);
|
|
339
|
+
if (!Array.isArray(usages) || usages.some((usage) => !KEY_USAGES.includes(usage))) throw new SyntaxError("Invalid key usages");
|
|
340
|
+
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair(getRandomValues(new Uint8Array(KEYPAIR_RANDOM_BYTES)));
|
|
341
|
+
return {
|
|
342
|
+
publicKey: createPublicKey(rawPublicKey, usages.filter((usage) => usage === "encapsulateKey" || usage === "encapsulateBits")),
|
|
343
|
+
privateKey: createPrivateKey(rawPublicKey, rawSeed, rawSecretKey, extractable, usages.filter((usage) => usage === "decapsulateKey" || usage === "decapsulateBits"))
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
async function exportKey(format, key) {
|
|
347
|
+
if (!(key instanceof CryptoKey)) throw new TypeError("Expected key to be an instance of CryptoKey");
|
|
348
|
+
checkAlgorithm(key.algorithm);
|
|
349
|
+
if (!key.extractable) throw new MlKemOperationError("Key is not extractable");
|
|
350
|
+
if (format === "spki") {
|
|
351
|
+
if (key.type !== "public") throw new TypeError("Expected key type to be 'public'");
|
|
352
|
+
return rawToDer(MLKEM768_SPKI, getPublicKeyDataRef(key)).buffer;
|
|
353
|
+
}
|
|
354
|
+
if (format === "pkcs8") {
|
|
355
|
+
if (key.type !== "private") throw new MlKemInvalidAccessError("Expected key type to be 'private'");
|
|
356
|
+
return rawToDer(MLKEM768_PKCS8, getPrivateKeyDataRef(key).privateSeedData).buffer;
|
|
357
|
+
}
|
|
358
|
+
if (format === "raw-public") {
|
|
359
|
+
if (key.type !== "public") throw new TypeError("Expected key type to be 'public'");
|
|
360
|
+
return new Uint8Array(getPublicKeyDataRef(key)).buffer;
|
|
361
|
+
}
|
|
362
|
+
if (format === "raw-seed") {
|
|
363
|
+
if (key.type !== "private") throw new MlKemInvalidAccessError("Expected key type to be 'private'");
|
|
364
|
+
return new Uint8Array(getPrivateKeyDataRef(key).privateSeedData).buffer;
|
|
365
|
+
}
|
|
366
|
+
if (format === "jwk") {
|
|
367
|
+
const jwk = {
|
|
368
|
+
kty: "AKP",
|
|
369
|
+
alg: JWK_ALG,
|
|
370
|
+
pub: toBase64url(getPublicKeyDataRef(key))
|
|
371
|
+
};
|
|
372
|
+
if (key.type === "private") jwk.priv = toBase64url(getPrivateKeyDataRef(key).privateSeedData);
|
|
373
|
+
jwk.key_ops = key.usages;
|
|
374
|
+
jwk.ext = key.extractable;
|
|
375
|
+
return jwk;
|
|
376
|
+
}
|
|
377
|
+
throw new MlKemNotSupportedError("Format not supported");
|
|
378
|
+
}
|
|
379
|
+
function bufferSourcetoUint8Array(value) {
|
|
380
|
+
if (ArrayBuffer.isView(value) && value.buffer instanceof ArrayBuffer) return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
381
|
+
else if (value instanceof ArrayBuffer) return new Uint8Array(value);
|
|
382
|
+
else throw new TypeError("Value must be a BufferSource");
|
|
383
|
+
}
|
|
384
|
+
function bufferSourcetoUint8ArrayCopy(value) {
|
|
385
|
+
return bufferSourcetoUint8Array(value).slice();
|
|
386
|
+
}
|
|
387
|
+
var MLKEM768_SPKI = {
|
|
388
|
+
fullLength: 1206,
|
|
389
|
+
prefix: new Uint8Array([
|
|
390
|
+
48,
|
|
391
|
+
130,
|
|
392
|
+
4,
|
|
393
|
+
178,
|
|
394
|
+
48,
|
|
395
|
+
11,
|
|
396
|
+
6,
|
|
397
|
+
9,
|
|
398
|
+
96,
|
|
399
|
+
134,
|
|
400
|
+
72,
|
|
401
|
+
1,
|
|
402
|
+
101,
|
|
403
|
+
3,
|
|
404
|
+
4,
|
|
405
|
+
4,
|
|
406
|
+
2,
|
|
407
|
+
3,
|
|
408
|
+
130,
|
|
409
|
+
4,
|
|
410
|
+
161,
|
|
411
|
+
0
|
|
412
|
+
])
|
|
413
|
+
};
|
|
414
|
+
var MLKEM768_PKCS8 = {
|
|
415
|
+
fullLength: 86,
|
|
416
|
+
prefix: new Uint8Array([
|
|
417
|
+
48,
|
|
418
|
+
84,
|
|
419
|
+
2,
|
|
420
|
+
1,
|
|
421
|
+
0,
|
|
422
|
+
48,
|
|
423
|
+
11,
|
|
424
|
+
6,
|
|
425
|
+
9,
|
|
426
|
+
96,
|
|
427
|
+
134,
|
|
428
|
+
72,
|
|
429
|
+
1,
|
|
430
|
+
101,
|
|
431
|
+
3,
|
|
432
|
+
4,
|
|
433
|
+
4,
|
|
434
|
+
2,
|
|
435
|
+
4,
|
|
436
|
+
66,
|
|
437
|
+
128,
|
|
438
|
+
64
|
|
439
|
+
])
|
|
440
|
+
};
|
|
441
|
+
function bytesEqual(a, b) {
|
|
442
|
+
if (a.length !== b.length) return false;
|
|
443
|
+
let diff = 0;
|
|
444
|
+
for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];
|
|
445
|
+
return diff === 0;
|
|
446
|
+
}
|
|
447
|
+
function derToRaw(encoding, der) {
|
|
448
|
+
if (der.length !== encoding.fullLength) throw new MlKemDataError("Invalid encoding");
|
|
449
|
+
if (!bytesEqual(der.subarray(0, encoding.prefix.length), encoding.prefix)) throw new MlKemNotSupportedError("Unsupported encoding");
|
|
450
|
+
return der.slice(encoding.prefix.length);
|
|
451
|
+
}
|
|
452
|
+
function rawToDer(encoding, raw) {
|
|
453
|
+
const der = new Uint8Array(encoding.fullLength);
|
|
454
|
+
der.set(encoding.prefix);
|
|
455
|
+
der.set(raw, encoding.prefix.length);
|
|
456
|
+
return der;
|
|
457
|
+
}
|
|
458
|
+
async function importKey(format, keyData, algorithm, extractable, usages) {
|
|
459
|
+
checkAlgorithm(algorithm);
|
|
460
|
+
if (format === "spki") {
|
|
461
|
+
if (!Array.isArray(usages) || usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages for public key");
|
|
462
|
+
const data = derToRaw(MLKEM768_SPKI, bufferSourcetoUint8Array(keyData));
|
|
463
|
+
if (data.length !== PUBLICKEY_BYTES) throw new MlKemDataError("Invalid key length");
|
|
464
|
+
return createPublicKey(data, usages);
|
|
465
|
+
}
|
|
466
|
+
if (format === "pkcs8") {
|
|
467
|
+
if (!Array.isArray(usages) || usages.some((usage) => usage !== "decapsulateKey" && usage !== "decapsulateBits")) throw new SyntaxError("Invalid key usages for private key");
|
|
468
|
+
const data = derToRaw(MLKEM768_PKCS8, bufferSourcetoUint8Array(keyData));
|
|
469
|
+
if (data.length !== KEYPAIR_RANDOM_BYTES) throw new MlKemDataError("Invalid key length");
|
|
470
|
+
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair(data);
|
|
471
|
+
return createPrivateKey(rawPublicKey, rawSeed, rawSecretKey, extractable, usages);
|
|
472
|
+
}
|
|
473
|
+
if (format === "raw-public") {
|
|
474
|
+
if (!Array.isArray(usages) || usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages for public key");
|
|
475
|
+
return createPublicKey(bufferSourcetoUint8ArrayCopy(keyData), usages);
|
|
476
|
+
}
|
|
477
|
+
if (format === "raw-seed") {
|
|
478
|
+
if (!Array.isArray(usages) || usages.some((usage) => usage !== "decapsulateKey" && usage !== "decapsulateBits")) throw new SyntaxError("Invalid key usages for private key");
|
|
479
|
+
const data = bufferSourcetoUint8ArrayCopy(keyData);
|
|
480
|
+
if (data.length !== KEYPAIR_RANDOM_BYTES) throw new MlKemDataError("Invalid key length");
|
|
481
|
+
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair(data);
|
|
482
|
+
return createPrivateKey(rawPublicKey, rawSeed, rawSecretKey, extractable, usages);
|
|
483
|
+
}
|
|
484
|
+
if (format === "jwk") {
|
|
485
|
+
if (typeof keyData !== "object" || keyData === null) throw new MlKemDataError("Expected keyData to be a JsonWebKey dictionary");
|
|
486
|
+
const jwk = keyData;
|
|
487
|
+
if (jwk.priv && usages.some((usage) => usage !== "decapsulateKey" && usage !== "decapsulateBits")) throw new SyntaxError("Invalid key usages for private key");
|
|
488
|
+
if (!jwk.priv && usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages for public key");
|
|
489
|
+
if (jwk.kty !== "AKP") throw new MlKemDataError("Invalid key type");
|
|
490
|
+
if (jwk.alg !== JWK_ALG && jwk.alg !== "ML-KEM-768+A192KW") throw new MlKemDataError("Invalid algorithm");
|
|
491
|
+
if (usages.length > 0 && jwk.use && jwk.use !== "enc") throw new MlKemDataError("Invalid key usage");
|
|
492
|
+
if (jwk.key_ops && Array.isArray(jwk.key_ops) && !Array.prototype.every.call(jwk.key_ops, (op) => KEY_USAGES.includes(op)) || !Array.isArray(jwk.key_ops)) throw new MlKemDataError("Invalid key operations");
|
|
493
|
+
if (jwk.ext === false && extractable) throw new MlKemDataError("Invalid key extractability");
|
|
494
|
+
if (jwk.priv) try {
|
|
495
|
+
const seedData = fromBase64url(jwk.priv);
|
|
496
|
+
if (seedData.length !== KEYPAIR_RANDOM_BYTES) throw new MlKemDataError("Invalid private key length");
|
|
497
|
+
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair(seedData);
|
|
498
|
+
const key = createPrivateKey(rawPublicKey, rawSeed, rawSecretKey, extractable, usages);
|
|
499
|
+
if (toBase64url(rawPublicKey) !== jwk.pub) throw new MlKemDataError("Invalid public key data");
|
|
500
|
+
return key;
|
|
501
|
+
} catch {
|
|
502
|
+
throw new MlKemDataError("Invalid private key format");
|
|
503
|
+
}
|
|
504
|
+
else try {
|
|
505
|
+
const publicKeyData = fromBase64url(jwk.pub);
|
|
506
|
+
if (publicKeyData.length !== PUBLICKEY_BYTES) throw new MlKemDataError("Invalid public key data");
|
|
507
|
+
return createPublicKey(publicKeyData, usages);
|
|
508
|
+
} catch {
|
|
509
|
+
throw new MlKemDataError("Invalid public key format");
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
throw new MlKemNotSupportedError("Unsupported key format");
|
|
513
|
+
}
|
|
514
|
+
async function getPublicKey(key, usages) {
|
|
515
|
+
if (!(key instanceof CryptoKey)) throw new TypeError("Expected key to be an instance of CryptoKey");
|
|
516
|
+
checkAlgorithm(key.algorithm);
|
|
517
|
+
if (key.type !== "private") throw new MlKemInvalidAccessError("Expected key type to be 'private'");
|
|
518
|
+
if (!Array.isArray(usages) || usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages");
|
|
519
|
+
const keyData = getInternalKeyData(key);
|
|
520
|
+
if (!keyData.publicKeyData) throw new MlKemOperationError("Failed to get public key data");
|
|
521
|
+
return createPublicKey(new Uint8Array(keyData.publicKeyData), usages);
|
|
522
|
+
}
|
|
523
|
+
async function internalEncapsulate(algorithm, encapsulationKey, usage) {
|
|
524
|
+
const module = await getModule();
|
|
525
|
+
checkAlgorithm(algorithm);
|
|
526
|
+
if (!(encapsulationKey instanceof CryptoKey) || encapsulationKey.type !== "public") throw new MlKemInvalidAccessError("Expected publicKey to be an instance of MlKemCryptoKey with type 'public'");
|
|
527
|
+
if (!encapsulationKey.usages.includes(usage)) throw new MlKemInvalidAccessError(`Key usages don't include '${usage}'`);
|
|
528
|
+
const publicKeyData = getPublicKeyDataRef(encapsulationKey);
|
|
529
|
+
if (publicKeyData.length !== PUBLICKEY_BYTES) throw new MlKemOperationError("Invalid public key length");
|
|
530
|
+
const coins = getRandomValues(new Uint8Array(ENC_RANDOM_BYTES));
|
|
531
|
+
const stackSave = module.stackSave();
|
|
532
|
+
try {
|
|
533
|
+
const pkPtr = module.stackAlloc(PUBLICKEY_BYTES);
|
|
534
|
+
const ctPtr = module.stackAlloc(CIPHERTEXT_BYTES);
|
|
535
|
+
const ssPtr = module.stackAlloc(SHARED_SECRET_BYTES);
|
|
536
|
+
const coinsPtr = module.stackAlloc(ENC_RANDOM_BYTES);
|
|
537
|
+
module.HEAPU8.set(publicKeyData, pkPtr);
|
|
538
|
+
module.HEAPU8.set(coins, coinsPtr);
|
|
539
|
+
if (module._mlkem768_enc_derand(ctPtr, ssPtr, pkPtr, coinsPtr) !== 0) throw new MlKemOperationError("Encapsulation failed");
|
|
540
|
+
const ciphertext = new Uint8Array(CIPHERTEXT_BYTES);
|
|
541
|
+
const sharedKey = new Uint8Array(SHARED_SECRET_BYTES);
|
|
542
|
+
ciphertext.set(module.HEAPU8.subarray(ctPtr, ctPtr + CIPHERTEXT_BYTES));
|
|
543
|
+
sharedKey.set(module.HEAPU8.subarray(ssPtr, ssPtr + SHARED_SECRET_BYTES));
|
|
544
|
+
module.HEAPU8.fill(0, ctPtr, ctPtr + CIPHERTEXT_BYTES);
|
|
545
|
+
module.HEAPU8.fill(0, ssPtr, ssPtr + SHARED_SECRET_BYTES);
|
|
546
|
+
module.HEAPU8.fill(0, pkPtr, pkPtr + PUBLICKEY_BYTES);
|
|
547
|
+
module.HEAPU8.fill(0, coinsPtr, coinsPtr + ENC_RANDOM_BYTES);
|
|
548
|
+
return {
|
|
549
|
+
ciphertext: ciphertext.buffer,
|
|
550
|
+
sharedKey: sharedKey.buffer
|
|
551
|
+
};
|
|
552
|
+
} finally {
|
|
553
|
+
module.stackRestore(stackSave);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
async function encapsulateBits(algorithm, encapsulationKey) {
|
|
557
|
+
return internalEncapsulate(algorithm, encapsulationKey, "encapsulateBits");
|
|
558
|
+
}
|
|
559
|
+
async function encapsulateKey(encapsulationAlgorithm, encapsulationKey, sharedKeyAlgorithm, extractable, usages) {
|
|
560
|
+
const { sharedKey: sharedKeyBits, ciphertext } = await internalEncapsulate(encapsulationAlgorithm, encapsulationKey, "encapsulateKey");
|
|
561
|
+
return {
|
|
562
|
+
sharedKey: await crypto.subtle.importKey("raw", sharedKeyBits, sharedKeyAlgorithm, extractable, usages),
|
|
563
|
+
ciphertext
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
async function internalDecapsulate(algorithm, decapsulationKey, ciphertext, usage) {
|
|
567
|
+
const module = await getModule();
|
|
568
|
+
checkAlgorithm(algorithm);
|
|
569
|
+
if (!(decapsulationKey instanceof CryptoKey) || decapsulationKey.type !== "private") throw new MlKemInvalidAccessError("Expected key to be an instance of MlKemCryptoKey with type 'private'");
|
|
570
|
+
if (!decapsulationKey.usages.includes(usage)) throw new MlKemInvalidAccessError(`Key usages don't include '${usage}'`);
|
|
571
|
+
const secretKeyData = getPrivateKeyDataRef(decapsulationKey).privateSecretKeyData;
|
|
572
|
+
if (!secretKeyData || secretKeyData.length !== SECRETKEY_BYTES) throw new Error("Invalid secret key length");
|
|
573
|
+
const ct = bufferSourcetoUint8Array(ciphertext);
|
|
574
|
+
if (ct.length !== CIPHERTEXT_BYTES) throw new MlKemOperationError("Invalid ciphertext length");
|
|
575
|
+
const stackSave = module.stackSave();
|
|
576
|
+
try {
|
|
577
|
+
const ctPtr = module.stackAlloc(CIPHERTEXT_BYTES);
|
|
578
|
+
const skPtr = module.stackAlloc(SECRETKEY_BYTES);
|
|
579
|
+
const ssPtr = module.stackAlloc(SHARED_SECRET_BYTES);
|
|
580
|
+
module.HEAPU8.set(ct, ctPtr);
|
|
581
|
+
module.HEAPU8.set(secretKeyData, skPtr);
|
|
582
|
+
if (module._mlkem768_dec(ssPtr, ctPtr, skPtr) !== 0) throw new MlKemOperationError("Decapsulation failed");
|
|
583
|
+
const sharedKey = new Uint8Array(SHARED_SECRET_BYTES);
|
|
584
|
+
sharedKey.set(module.HEAPU8.subarray(ssPtr, ssPtr + SHARED_SECRET_BYTES));
|
|
585
|
+
module.HEAPU8.fill(0, ctPtr, ctPtr + CIPHERTEXT_BYTES);
|
|
586
|
+
module.HEAPU8.fill(0, skPtr, skPtr + SECRETKEY_BYTES);
|
|
587
|
+
module.HEAPU8.fill(0, ssPtr, ssPtr + SHARED_SECRET_BYTES);
|
|
588
|
+
return sharedKey.buffer;
|
|
589
|
+
} finally {
|
|
590
|
+
module.stackRestore(stackSave);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
async function decapsulateBits(decapsulationAlgorithm, decapsulationKey, ciphertext) {
|
|
594
|
+
return internalDecapsulate(decapsulationAlgorithm, decapsulationKey, ciphertext, "decapsulateBits");
|
|
595
|
+
}
|
|
596
|
+
async function decapsulateKey(decapsulationAlgorithm, decapsulationKey, ciphertext, sharedKeyAlgorithm, extractable, usages) {
|
|
597
|
+
const sharedKeyBits = await internalDecapsulate(decapsulationAlgorithm, decapsulationKey, ciphertext, "decapsulateKey");
|
|
598
|
+
return await crypto.subtle.importKey("raw", sharedKeyBits, sharedKeyAlgorithm, extractable, usages);
|
|
599
|
+
}
|
|
600
|
+
var mlkem_default = {
|
|
601
|
+
generateKey,
|
|
602
|
+
exportKey,
|
|
603
|
+
importKey,
|
|
604
|
+
getPublicKey,
|
|
605
|
+
encapsulateBits,
|
|
606
|
+
encapsulateKey,
|
|
607
|
+
decapsulateBits,
|
|
608
|
+
decapsulateKey,
|
|
609
|
+
_isSupportedCryptoKey
|
|
610
|
+
};
|
|
611
|
+
//#endregion
|
|
612
|
+
//#region src/kyber_crystals_wasm_engine.js
|
|
613
|
+
var kyber_crystals_wasm_engine = (async function(moduleArg = {}) {
|
|
614
|
+
var moduleRtn;
|
|
615
|
+
var Module = moduleArg;
|
|
616
|
+
var readyPromiseResolve, readyPromiseReject;
|
|
617
|
+
var readyPromise = new Promise((resolve, reject) => {
|
|
618
|
+
readyPromiseResolve = resolve;
|
|
619
|
+
readyPromiseReject = reject;
|
|
620
|
+
});
|
|
621
|
+
var ENVIRONMENT_IS_WEB = typeof window == "object";
|
|
622
|
+
var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != "undefined";
|
|
623
|
+
var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string" && process.type != "renderer";
|
|
624
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
625
|
+
const { createRequire } = await import("module");
|
|
626
|
+
var require = createRequire(import.meta.url);
|
|
627
|
+
}
|
|
628
|
+
var thisProgram = "./this.program";
|
|
629
|
+
var quit_ = (status, toThrow) => {
|
|
630
|
+
throw toThrow;
|
|
631
|
+
};
|
|
632
|
+
var _scriptName = import.meta.url;
|
|
633
|
+
var scriptDirectory = "";
|
|
634
|
+
function locateFile(path) {
|
|
635
|
+
if (Module["locateFile"]) return Module["locateFile"](path, scriptDirectory);
|
|
636
|
+
return scriptDirectory + path;
|
|
637
|
+
}
|
|
638
|
+
var readAsync, readBinary;
|
|
639
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
640
|
+
var fs = require("fs");
|
|
641
|
+
var nodePath = require("path");
|
|
642
|
+
if (_scriptName.startsWith("file:")) scriptDirectory = nodePath.dirname(require("url").fileURLToPath(_scriptName)) + "/";
|
|
643
|
+
readBinary = (filename) => {
|
|
644
|
+
filename = isFileURI(filename) ? new URL(filename) : filename;
|
|
645
|
+
return fs.readFileSync(filename);
|
|
646
|
+
};
|
|
647
|
+
readAsync = async (filename, binary = true) => {
|
|
648
|
+
filename = isFileURI(filename) ? new URL(filename) : filename;
|
|
649
|
+
return fs.readFileSync(filename, binary ? void 0 : "utf8");
|
|
650
|
+
};
|
|
651
|
+
if (process.argv.length > 1) thisProgram = process.argv[1].replace(/\\/g, "/");
|
|
652
|
+
process.argv.slice(2);
|
|
653
|
+
quit_ = (status, toThrow) => {
|
|
654
|
+
process.exitCode = status;
|
|
655
|
+
throw toThrow;
|
|
656
|
+
};
|
|
657
|
+
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
658
|
+
try {
|
|
659
|
+
scriptDirectory = new URL(".", _scriptName).href;
|
|
660
|
+
} catch {}
|
|
661
|
+
if (ENVIRONMENT_IS_WORKER) readBinary = (url) => {
|
|
662
|
+
var xhr = new XMLHttpRequest();
|
|
663
|
+
xhr.open("GET", url, false);
|
|
664
|
+
xhr.responseType = "arraybuffer";
|
|
665
|
+
xhr.send(null);
|
|
666
|
+
return new Uint8Array(xhr.response);
|
|
667
|
+
};
|
|
668
|
+
readAsync = async (url) => {
|
|
669
|
+
var response = await fetch(url, { credentials: "same-origin" });
|
|
670
|
+
if (response.ok) return response.arrayBuffer();
|
|
671
|
+
throw new Error(response.status + " : " + response.url);
|
|
672
|
+
};
|
|
673
|
+
}
|
|
674
|
+
console.log.bind(console);
|
|
675
|
+
var err = console.error.bind(console);
|
|
676
|
+
var wasmBinary;
|
|
677
|
+
var wasmMemory;
|
|
678
|
+
var ABORT = false;
|
|
679
|
+
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAP64, HEAPU64, HEAPF64;
|
|
680
|
+
var isFileURI = (filename) => filename.startsWith("file://");
|
|
681
|
+
function updateMemoryViews() {
|
|
682
|
+
var b = wasmMemory.buffer;
|
|
683
|
+
HEAP8 = new Int8Array(b);
|
|
684
|
+
HEAP16 = new Int16Array(b);
|
|
685
|
+
HEAPU8 = new Uint8Array(b);
|
|
686
|
+
HEAPU16 = new Uint16Array(b);
|
|
687
|
+
HEAP32 = new Int32Array(b);
|
|
688
|
+
HEAPU32 = new Uint32Array(b);
|
|
689
|
+
HEAPF32 = new Float32Array(b);
|
|
690
|
+
HEAPF64 = new Float64Array(b);
|
|
691
|
+
HEAP64 = new BigInt64Array(b);
|
|
692
|
+
HEAPU64 = new BigUint64Array(b);
|
|
693
|
+
}
|
|
694
|
+
function preRun() {
|
|
695
|
+
if (Module["preRun"]) {
|
|
696
|
+
if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]];
|
|
697
|
+
while (Module["preRun"].length) addOnPreRun(Module["preRun"].shift());
|
|
698
|
+
}
|
|
699
|
+
callRuntimeCallbacks(onPreRuns);
|
|
700
|
+
}
|
|
701
|
+
function initRuntime() {
|
|
702
|
+
wasmExports["x"]();
|
|
703
|
+
}
|
|
704
|
+
function postRun() {
|
|
705
|
+
if (Module["postRun"]) {
|
|
706
|
+
if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]];
|
|
707
|
+
while (Module["postRun"].length) addOnPostRun(Module["postRun"].shift());
|
|
708
|
+
}
|
|
709
|
+
callRuntimeCallbacks(onPostRuns);
|
|
710
|
+
}
|
|
711
|
+
var runDependencies = 0;
|
|
712
|
+
var dependenciesFulfilled = null;
|
|
713
|
+
function addRunDependency(id) {
|
|
714
|
+
runDependencies++;
|
|
715
|
+
Module["monitorRunDependencies"]?.(runDependencies);
|
|
716
|
+
}
|
|
717
|
+
function removeRunDependency(id) {
|
|
718
|
+
runDependencies--;
|
|
719
|
+
Module["monitorRunDependencies"]?.(runDependencies);
|
|
720
|
+
if (runDependencies == 0) {
|
|
721
|
+
if (dependenciesFulfilled) {
|
|
722
|
+
var callback = dependenciesFulfilled;
|
|
723
|
+
dependenciesFulfilled = null;
|
|
724
|
+
callback();
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
function abort(what) {
|
|
729
|
+
Module["onAbort"]?.(what);
|
|
730
|
+
what = "Aborted(" + what + ")";
|
|
731
|
+
err(what);
|
|
732
|
+
ABORT = true;
|
|
733
|
+
what += ". Build with -sASSERTIONS for more info.";
|
|
734
|
+
var e = new WebAssembly.RuntimeError(what);
|
|
735
|
+
readyPromiseReject(e);
|
|
736
|
+
throw e;
|
|
737
|
+
}
|
|
738
|
+
var wasmBinaryFile;
|
|
739
|
+
function findWasmBinary() {
|
|
740
|
+
if (Module["locateFile"]) return locateFile("kyber_crystals_wasm_engine.wasm");
|
|
741
|
+
return new URL("kyber_crystals_wasm_engine.wasm", import.meta.url).href;
|
|
742
|
+
}
|
|
743
|
+
function getBinarySync(file) {
|
|
744
|
+
if (file == wasmBinaryFile && wasmBinary) return new Uint8Array(wasmBinary);
|
|
745
|
+
if (readBinary) return readBinary(file);
|
|
746
|
+
throw "both async and sync fetching of the wasm failed";
|
|
747
|
+
}
|
|
748
|
+
async function getWasmBinary(binaryFile) {
|
|
749
|
+
if (!wasmBinary) try {
|
|
750
|
+
var response = await readAsync(binaryFile);
|
|
751
|
+
return new Uint8Array(response);
|
|
752
|
+
} catch {}
|
|
753
|
+
return getBinarySync(binaryFile);
|
|
754
|
+
}
|
|
755
|
+
async function instantiateArrayBuffer(binaryFile, imports) {
|
|
756
|
+
try {
|
|
757
|
+
var binary = await getWasmBinary(binaryFile);
|
|
758
|
+
return await WebAssembly.instantiate(binary, imports);
|
|
759
|
+
} catch (reason) {
|
|
760
|
+
err(`failed to asynchronously prepare wasm: ${reason}`);
|
|
761
|
+
abort(reason);
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
async function instantiateAsync(binary, binaryFile, imports) {
|
|
765
|
+
if (!binary && typeof WebAssembly.instantiateStreaming == "function" && !ENVIRONMENT_IS_NODE) try {
|
|
766
|
+
var response = fetch(binaryFile, { credentials: "same-origin" });
|
|
767
|
+
return await WebAssembly.instantiateStreaming(response, imports);
|
|
768
|
+
} catch (reason) {
|
|
769
|
+
err(`wasm streaming compile failed: ${reason}`);
|
|
770
|
+
err("falling back to ArrayBuffer instantiation");
|
|
771
|
+
}
|
|
772
|
+
return instantiateArrayBuffer(binaryFile, imports);
|
|
773
|
+
}
|
|
774
|
+
function getWasmImports() {
|
|
775
|
+
return { a: wasmImports };
|
|
776
|
+
}
|
|
777
|
+
async function createWasm() {
|
|
778
|
+
function receiveInstance(instance, module) {
|
|
779
|
+
wasmExports = instance.exports;
|
|
780
|
+
wasmMemory = wasmExports["w"];
|
|
781
|
+
updateMemoryViews();
|
|
782
|
+
wasmTable = wasmExports["y"];
|
|
783
|
+
removeRunDependency("wasm-instantiate");
|
|
784
|
+
return wasmExports;
|
|
785
|
+
}
|
|
786
|
+
addRunDependency("wasm-instantiate");
|
|
787
|
+
function receiveInstantiationResult(result) {
|
|
788
|
+
return receiveInstance(result["instance"]);
|
|
789
|
+
}
|
|
790
|
+
var info = getWasmImports();
|
|
791
|
+
if (Module["instantiateWasm"]) return new Promise((resolve, reject) => {
|
|
792
|
+
Module["instantiateWasm"](info, (mod, inst) => {
|
|
793
|
+
resolve(receiveInstance(mod, inst));
|
|
794
|
+
});
|
|
795
|
+
});
|
|
796
|
+
wasmBinaryFile ??= findWasmBinary();
|
|
797
|
+
try {
|
|
798
|
+
return receiveInstantiationResult(await instantiateAsync(wasmBinary, wasmBinaryFile, info));
|
|
799
|
+
} catch (e) {
|
|
800
|
+
readyPromiseReject(e);
|
|
801
|
+
return Promise.reject(e);
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
class ExitStatus {
|
|
805
|
+
name = "ExitStatus";
|
|
806
|
+
constructor(status) {
|
|
807
|
+
this.message = `Program terminated with exit(${status})`;
|
|
808
|
+
this.status = status;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
var callRuntimeCallbacks = (callbacks) => {
|
|
812
|
+
while (callbacks.length > 0) callbacks.shift()(Module);
|
|
813
|
+
};
|
|
814
|
+
var onPostRuns = [];
|
|
815
|
+
var addOnPostRun = (cb) => onPostRuns.push(cb);
|
|
816
|
+
var onPreRuns = [];
|
|
817
|
+
var addOnPreRun = (cb) => onPreRuns.push(cb);
|
|
818
|
+
var noExitRuntime = true;
|
|
819
|
+
var stackRestore = (val) => __emscripten_stack_restore(val);
|
|
820
|
+
var stackSave = () => _emscripten_stack_get_current();
|
|
821
|
+
class ExceptionInfo {
|
|
822
|
+
constructor(excPtr) {
|
|
823
|
+
this.excPtr = excPtr;
|
|
824
|
+
this.ptr = excPtr - 24;
|
|
825
|
+
}
|
|
826
|
+
set_type(type) {
|
|
827
|
+
HEAPU32[this.ptr + 4 >> 2] = type;
|
|
828
|
+
}
|
|
829
|
+
get_type() {
|
|
830
|
+
return HEAPU32[this.ptr + 4 >> 2];
|
|
831
|
+
}
|
|
832
|
+
set_destructor(destructor) {
|
|
833
|
+
HEAPU32[this.ptr + 8 >> 2] = destructor;
|
|
834
|
+
}
|
|
835
|
+
get_destructor() {
|
|
836
|
+
return HEAPU32[this.ptr + 8 >> 2];
|
|
837
|
+
}
|
|
838
|
+
set_caught(caught) {
|
|
839
|
+
caught = caught ? 1 : 0;
|
|
840
|
+
HEAP8[this.ptr + 12] = caught;
|
|
841
|
+
}
|
|
842
|
+
get_caught() {
|
|
843
|
+
return HEAP8[this.ptr + 12] != 0;
|
|
844
|
+
}
|
|
845
|
+
set_rethrown(rethrown) {
|
|
846
|
+
rethrown = rethrown ? 1 : 0;
|
|
847
|
+
HEAP8[this.ptr + 13] = rethrown;
|
|
848
|
+
}
|
|
849
|
+
get_rethrown() {
|
|
850
|
+
return HEAP8[this.ptr + 13] != 0;
|
|
851
|
+
}
|
|
852
|
+
init(type, destructor) {
|
|
853
|
+
this.set_adjusted_ptr(0);
|
|
854
|
+
this.set_type(type);
|
|
855
|
+
this.set_destructor(destructor);
|
|
856
|
+
}
|
|
857
|
+
set_adjusted_ptr(adjustedPtr) {
|
|
858
|
+
HEAPU32[this.ptr + 16 >> 2] = adjustedPtr;
|
|
859
|
+
}
|
|
860
|
+
get_adjusted_ptr() {
|
|
861
|
+
return HEAPU32[this.ptr + 16 >> 2];
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
var exceptionLast = 0;
|
|
865
|
+
var uncaughtExceptionCount = 0;
|
|
866
|
+
var ___cxa_throw = (ptr, type, destructor) => {
|
|
867
|
+
new ExceptionInfo(ptr).init(type, destructor);
|
|
868
|
+
exceptionLast = ptr;
|
|
869
|
+
uncaughtExceptionCount++;
|
|
870
|
+
throw exceptionLast;
|
|
871
|
+
};
|
|
872
|
+
var __abort_js = () => abort("");
|
|
873
|
+
var embindRepr = (v) => {
|
|
874
|
+
if (v === null) return "null";
|
|
875
|
+
var t = typeof v;
|
|
876
|
+
if (t === "object" || t === "array" || t === "function") return v.toString();
|
|
877
|
+
else return "" + v;
|
|
878
|
+
};
|
|
879
|
+
var embind_init_charCodes = () => {
|
|
880
|
+
var codes = new Array(256);
|
|
881
|
+
for (var i = 0; i < 256; ++i) codes[i] = String.fromCharCode(i);
|
|
882
|
+
embind_charCodes = codes;
|
|
883
|
+
};
|
|
884
|
+
var embind_charCodes;
|
|
885
|
+
var readLatin1String = (ptr) => {
|
|
886
|
+
var ret = "";
|
|
887
|
+
var c = ptr;
|
|
888
|
+
while (HEAPU8[c]) ret += embind_charCodes[HEAPU8[c++]];
|
|
889
|
+
return ret;
|
|
890
|
+
};
|
|
891
|
+
var awaitingDependencies = {};
|
|
892
|
+
var registeredTypes = {};
|
|
893
|
+
var typeDependencies = {};
|
|
894
|
+
var BindingError = Module["BindingError"] = class BindingError extends Error {
|
|
895
|
+
constructor(message) {
|
|
896
|
+
super(message);
|
|
897
|
+
this.name = "BindingError";
|
|
898
|
+
}
|
|
899
|
+
};
|
|
900
|
+
var throwBindingError = (message) => {
|
|
901
|
+
throw new BindingError(message);
|
|
902
|
+
};
|
|
903
|
+
function sharedRegisterType(rawType, registeredInstance, options = {}) {
|
|
904
|
+
var name = registeredInstance.name;
|
|
905
|
+
if (!rawType) throwBindingError(`type "${name}" must have a positive integer typeid pointer`);
|
|
906
|
+
if (registeredTypes.hasOwnProperty(rawType)) if (options.ignoreDuplicateRegistrations) return;
|
|
907
|
+
else throwBindingError(`Cannot register type '${name}' twice`);
|
|
908
|
+
registeredTypes[rawType] = registeredInstance;
|
|
909
|
+
delete typeDependencies[rawType];
|
|
910
|
+
if (awaitingDependencies.hasOwnProperty(rawType)) {
|
|
911
|
+
var callbacks = awaitingDependencies[rawType];
|
|
912
|
+
delete awaitingDependencies[rawType];
|
|
913
|
+
callbacks.forEach((cb) => cb());
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
function registerType(rawType, registeredInstance, options = {}) {
|
|
917
|
+
return sharedRegisterType(rawType, registeredInstance, options);
|
|
918
|
+
}
|
|
919
|
+
var integerReadValueFromPointer = (name, width, signed) => {
|
|
920
|
+
switch (width) {
|
|
921
|
+
case 1: return signed ? (pointer) => HEAP8[pointer] : (pointer) => HEAPU8[pointer];
|
|
922
|
+
case 2: return signed ? (pointer) => HEAP16[pointer >> 1] : (pointer) => HEAPU16[pointer >> 1];
|
|
923
|
+
case 4: return signed ? (pointer) => HEAP32[pointer >> 2] : (pointer) => HEAPU32[pointer >> 2];
|
|
924
|
+
case 8: return signed ? (pointer) => HEAP64[pointer >> 3] : (pointer) => HEAPU64[pointer >> 3];
|
|
925
|
+
default: throw new TypeError(`invalid integer width (${width}): ${name}`);
|
|
926
|
+
}
|
|
927
|
+
};
|
|
928
|
+
var __embind_register_bigint = (primitiveType, name, size, minRange, maxRange) => {
|
|
929
|
+
name = readLatin1String(name);
|
|
930
|
+
var isUnsignedType = name.indexOf("u") != -1;
|
|
931
|
+
if (isUnsignedType) maxRange = (1n << 64n) - 1n;
|
|
932
|
+
registerType(primitiveType, {
|
|
933
|
+
name,
|
|
934
|
+
fromWireType: (value) => value,
|
|
935
|
+
toWireType: function(destructors, value) {
|
|
936
|
+
if (typeof value != "bigint" && typeof value != "number") throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`);
|
|
937
|
+
if (typeof value == "number") value = BigInt(value);
|
|
938
|
+
return value;
|
|
939
|
+
},
|
|
940
|
+
argPackAdvance: GenericWireTypeSize,
|
|
941
|
+
readValueFromPointer: integerReadValueFromPointer(name, size, !isUnsignedType),
|
|
942
|
+
destructorFunction: null
|
|
943
|
+
});
|
|
944
|
+
};
|
|
945
|
+
var GenericWireTypeSize = 8;
|
|
946
|
+
var __embind_register_bool = (rawType, name, trueValue, falseValue) => {
|
|
947
|
+
name = readLatin1String(name);
|
|
948
|
+
registerType(rawType, {
|
|
949
|
+
name,
|
|
950
|
+
fromWireType: function(wt) {
|
|
951
|
+
return !!wt;
|
|
952
|
+
},
|
|
953
|
+
toWireType: function(destructors, o) {
|
|
954
|
+
return o ? trueValue : falseValue;
|
|
955
|
+
},
|
|
956
|
+
argPackAdvance: GenericWireTypeSize,
|
|
957
|
+
readValueFromPointer: function(pointer) {
|
|
958
|
+
return this["fromWireType"](HEAPU8[pointer]);
|
|
959
|
+
},
|
|
960
|
+
destructorFunction: null
|
|
961
|
+
});
|
|
962
|
+
};
|
|
963
|
+
var shallowCopyInternalPointer = (o) => ({
|
|
964
|
+
count: o.count,
|
|
965
|
+
deleteScheduled: o.deleteScheduled,
|
|
966
|
+
preservePointerOnDelete: o.preservePointerOnDelete,
|
|
967
|
+
ptr: o.ptr,
|
|
968
|
+
ptrType: o.ptrType,
|
|
969
|
+
smartPtr: o.smartPtr,
|
|
970
|
+
smartPtrType: o.smartPtrType
|
|
971
|
+
});
|
|
972
|
+
var throwInstanceAlreadyDeleted = (obj) => {
|
|
973
|
+
function getInstanceTypeName(handle) {
|
|
974
|
+
return handle.$$.ptrType.registeredClass.name;
|
|
975
|
+
}
|
|
976
|
+
throwBindingError(getInstanceTypeName(obj) + " instance already deleted");
|
|
977
|
+
};
|
|
978
|
+
var finalizationRegistry = false;
|
|
979
|
+
var detachFinalizer = (handle) => {};
|
|
980
|
+
var runDestructor = ($$) => {
|
|
981
|
+
if ($$.smartPtr) $$.smartPtrType.rawDestructor($$.smartPtr);
|
|
982
|
+
else $$.ptrType.registeredClass.rawDestructor($$.ptr);
|
|
983
|
+
};
|
|
984
|
+
var releaseClassHandle = ($$) => {
|
|
985
|
+
$$.count.value -= 1;
|
|
986
|
+
if (0 === $$.count.value) runDestructor($$);
|
|
987
|
+
};
|
|
988
|
+
var attachFinalizer = (handle) => {
|
|
989
|
+
if ("undefined" === typeof FinalizationRegistry) {
|
|
990
|
+
attachFinalizer = (handle) => handle;
|
|
991
|
+
return handle;
|
|
992
|
+
}
|
|
993
|
+
finalizationRegistry = new FinalizationRegistry((info) => {
|
|
994
|
+
releaseClassHandle(info.$$);
|
|
995
|
+
});
|
|
996
|
+
attachFinalizer = (handle) => {
|
|
997
|
+
var $$ = handle.$$;
|
|
998
|
+
if (!!$$.smartPtr) {
|
|
999
|
+
var info = { $$ };
|
|
1000
|
+
finalizationRegistry.register(handle, info, handle);
|
|
1001
|
+
}
|
|
1002
|
+
return handle;
|
|
1003
|
+
};
|
|
1004
|
+
detachFinalizer = (handle) => finalizationRegistry.unregister(handle);
|
|
1005
|
+
return attachFinalizer(handle);
|
|
1006
|
+
};
|
|
1007
|
+
var deletionQueue = [];
|
|
1008
|
+
var flushPendingDeletes = () => {
|
|
1009
|
+
while (deletionQueue.length) {
|
|
1010
|
+
var obj = deletionQueue.pop();
|
|
1011
|
+
obj.$$.deleteScheduled = false;
|
|
1012
|
+
obj["delete"]();
|
|
1013
|
+
}
|
|
1014
|
+
};
|
|
1015
|
+
var delayFunction;
|
|
1016
|
+
var init_ClassHandle = () => {
|
|
1017
|
+
let proto = ClassHandle.prototype;
|
|
1018
|
+
Object.assign(proto, {
|
|
1019
|
+
isAliasOf(other) {
|
|
1020
|
+
if (!(this instanceof ClassHandle)) return false;
|
|
1021
|
+
if (!(other instanceof ClassHandle)) return false;
|
|
1022
|
+
var leftClass = this.$$.ptrType.registeredClass;
|
|
1023
|
+
var left = this.$$.ptr;
|
|
1024
|
+
other.$$ = other.$$;
|
|
1025
|
+
var rightClass = other.$$.ptrType.registeredClass;
|
|
1026
|
+
var right = other.$$.ptr;
|
|
1027
|
+
while (leftClass.baseClass) {
|
|
1028
|
+
left = leftClass.upcast(left);
|
|
1029
|
+
leftClass = leftClass.baseClass;
|
|
1030
|
+
}
|
|
1031
|
+
while (rightClass.baseClass) {
|
|
1032
|
+
right = rightClass.upcast(right);
|
|
1033
|
+
rightClass = rightClass.baseClass;
|
|
1034
|
+
}
|
|
1035
|
+
return leftClass === rightClass && left === right;
|
|
1036
|
+
},
|
|
1037
|
+
clone() {
|
|
1038
|
+
if (!this.$$.ptr) throwInstanceAlreadyDeleted(this);
|
|
1039
|
+
if (this.$$.preservePointerOnDelete) {
|
|
1040
|
+
this.$$.count.value += 1;
|
|
1041
|
+
return this;
|
|
1042
|
+
} else {
|
|
1043
|
+
var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { $$: { value: shallowCopyInternalPointer(this.$$) } }));
|
|
1044
|
+
clone.$$.count.value += 1;
|
|
1045
|
+
clone.$$.deleteScheduled = false;
|
|
1046
|
+
return clone;
|
|
1047
|
+
}
|
|
1048
|
+
},
|
|
1049
|
+
delete() {
|
|
1050
|
+
if (!this.$$.ptr) throwInstanceAlreadyDeleted(this);
|
|
1051
|
+
if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) throwBindingError("Object already scheduled for deletion");
|
|
1052
|
+
detachFinalizer(this);
|
|
1053
|
+
releaseClassHandle(this.$$);
|
|
1054
|
+
if (!this.$$.preservePointerOnDelete) {
|
|
1055
|
+
this.$$.smartPtr = void 0;
|
|
1056
|
+
this.$$.ptr = void 0;
|
|
1057
|
+
}
|
|
1058
|
+
},
|
|
1059
|
+
isDeleted() {
|
|
1060
|
+
return !this.$$.ptr;
|
|
1061
|
+
},
|
|
1062
|
+
deleteLater() {
|
|
1063
|
+
if (!this.$$.ptr) throwInstanceAlreadyDeleted(this);
|
|
1064
|
+
if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) throwBindingError("Object already scheduled for deletion");
|
|
1065
|
+
deletionQueue.push(this);
|
|
1066
|
+
if (deletionQueue.length === 1 && delayFunction) delayFunction(flushPendingDeletes);
|
|
1067
|
+
this.$$.deleteScheduled = true;
|
|
1068
|
+
return this;
|
|
1069
|
+
}
|
|
1070
|
+
});
|
|
1071
|
+
const symbolDispose = Symbol.dispose;
|
|
1072
|
+
if (symbolDispose) proto[symbolDispose] = proto["delete"];
|
|
1073
|
+
};
|
|
1074
|
+
function ClassHandle() {}
|
|
1075
|
+
var createNamedFunction = (name, func) => Object.defineProperty(func, "name", { value: name });
|
|
1076
|
+
var registeredPointers = {};
|
|
1077
|
+
var ensureOverloadTable = (proto, methodName, humanName) => {
|
|
1078
|
+
if (void 0 === proto[methodName].overloadTable) {
|
|
1079
|
+
var prevFunc = proto[methodName];
|
|
1080
|
+
proto[methodName] = function(...args) {
|
|
1081
|
+
if (!proto[methodName].overloadTable.hasOwnProperty(args.length)) throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`);
|
|
1082
|
+
return proto[methodName].overloadTable[args.length].apply(this, args);
|
|
1083
|
+
};
|
|
1084
|
+
proto[methodName].overloadTable = [];
|
|
1085
|
+
proto[methodName].overloadTable[prevFunc.argCount] = prevFunc;
|
|
1086
|
+
}
|
|
1087
|
+
};
|
|
1088
|
+
var exposePublicSymbol = (name, value, numArguments) => {
|
|
1089
|
+
if (Module.hasOwnProperty(name)) {
|
|
1090
|
+
if (void 0 === numArguments || void 0 !== Module[name].overloadTable && void 0 !== Module[name].overloadTable[numArguments]) throwBindingError(`Cannot register public name '${name}' twice`);
|
|
1091
|
+
ensureOverloadTable(Module, name, name);
|
|
1092
|
+
if (Module[name].overloadTable.hasOwnProperty(numArguments)) throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`);
|
|
1093
|
+
Module[name].overloadTable[numArguments] = value;
|
|
1094
|
+
} else {
|
|
1095
|
+
Module[name] = value;
|
|
1096
|
+
Module[name].argCount = numArguments;
|
|
1097
|
+
}
|
|
1098
|
+
};
|
|
1099
|
+
var char_0 = 48;
|
|
1100
|
+
var char_9 = 57;
|
|
1101
|
+
var makeLegalFunctionName = (name) => {
|
|
1102
|
+
name = name.replace(/[^a-zA-Z0-9_]/g, "$");
|
|
1103
|
+
var f = name.charCodeAt(0);
|
|
1104
|
+
if (f >= char_0 && f <= char_9) return `_${name}`;
|
|
1105
|
+
return name;
|
|
1106
|
+
};
|
|
1107
|
+
function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) {
|
|
1108
|
+
this.name = name;
|
|
1109
|
+
this.constructor = constructor;
|
|
1110
|
+
this.instancePrototype = instancePrototype;
|
|
1111
|
+
this.rawDestructor = rawDestructor;
|
|
1112
|
+
this.baseClass = baseClass;
|
|
1113
|
+
this.getActualType = getActualType;
|
|
1114
|
+
this.upcast = upcast;
|
|
1115
|
+
this.downcast = downcast;
|
|
1116
|
+
this.pureVirtualFunctions = [];
|
|
1117
|
+
}
|
|
1118
|
+
var upcastPointer = (ptr, ptrClass, desiredClass) => {
|
|
1119
|
+
while (ptrClass !== desiredClass) {
|
|
1120
|
+
if (!ptrClass.upcast) throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`);
|
|
1121
|
+
ptr = ptrClass.upcast(ptr);
|
|
1122
|
+
ptrClass = ptrClass.baseClass;
|
|
1123
|
+
}
|
|
1124
|
+
return ptr;
|
|
1125
|
+
};
|
|
1126
|
+
function constNoSmartPtrRawPointerToWireType(destructors, handle) {
|
|
1127
|
+
if (handle === null) {
|
|
1128
|
+
if (this.isReference) throwBindingError(`null is not a valid ${this.name}`);
|
|
1129
|
+
return 0;
|
|
1130
|
+
}
|
|
1131
|
+
if (!handle.$$) throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
|
|
1132
|
+
if (!handle.$$.ptr) throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
|
|
1133
|
+
var handleClass = handle.$$.ptrType.registeredClass;
|
|
1134
|
+
return upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
|
|
1135
|
+
}
|
|
1136
|
+
function genericPointerToWireType(destructors, handle) {
|
|
1137
|
+
var ptr;
|
|
1138
|
+
if (handle === null) {
|
|
1139
|
+
if (this.isReference) throwBindingError(`null is not a valid ${this.name}`);
|
|
1140
|
+
if (this.isSmartPointer) {
|
|
1141
|
+
ptr = this.rawConstructor();
|
|
1142
|
+
if (destructors !== null) destructors.push(this.rawDestructor, ptr);
|
|
1143
|
+
return ptr;
|
|
1144
|
+
} else return 0;
|
|
1145
|
+
}
|
|
1146
|
+
if (!handle || !handle.$$) throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
|
|
1147
|
+
if (!handle.$$.ptr) throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
|
|
1148
|
+
if (!this.isConst && handle.$$.ptrType.isConst) throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name} to parameter type ${this.name}`);
|
|
1149
|
+
var handleClass = handle.$$.ptrType.registeredClass;
|
|
1150
|
+
ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
|
|
1151
|
+
if (this.isSmartPointer) {
|
|
1152
|
+
if (void 0 === handle.$$.smartPtr) throwBindingError("Passing raw pointer to smart pointer is illegal");
|
|
1153
|
+
switch (this.sharingPolicy) {
|
|
1154
|
+
case 0:
|
|
1155
|
+
if (handle.$$.smartPtrType === this) ptr = handle.$$.smartPtr;
|
|
1156
|
+
else throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name} to parameter type ${this.name}`);
|
|
1157
|
+
break;
|
|
1158
|
+
case 1:
|
|
1159
|
+
ptr = handle.$$.smartPtr;
|
|
1160
|
+
break;
|
|
1161
|
+
case 2:
|
|
1162
|
+
if (handle.$$.smartPtrType === this) ptr = handle.$$.smartPtr;
|
|
1163
|
+
else {
|
|
1164
|
+
var clonedHandle = handle["clone"]();
|
|
1165
|
+
ptr = this.rawShare(ptr, Emval.toHandle(() => clonedHandle["delete"]()));
|
|
1166
|
+
if (destructors !== null) destructors.push(this.rawDestructor, ptr);
|
|
1167
|
+
}
|
|
1168
|
+
break;
|
|
1169
|
+
default: throwBindingError("Unsupporting sharing policy");
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
return ptr;
|
|
1173
|
+
}
|
|
1174
|
+
function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {
|
|
1175
|
+
if (handle === null) {
|
|
1176
|
+
if (this.isReference) throwBindingError(`null is not a valid ${this.name}`);
|
|
1177
|
+
return 0;
|
|
1178
|
+
}
|
|
1179
|
+
if (!handle.$$) throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
|
|
1180
|
+
if (!handle.$$.ptr) throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
|
|
1181
|
+
if (handle.$$.ptrType.isConst) throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`);
|
|
1182
|
+
var handleClass = handle.$$.ptrType.registeredClass;
|
|
1183
|
+
return upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
|
|
1184
|
+
}
|
|
1185
|
+
function readPointer(pointer) {
|
|
1186
|
+
return this["fromWireType"](HEAPU32[pointer >> 2]);
|
|
1187
|
+
}
|
|
1188
|
+
var downcastPointer = (ptr, ptrClass, desiredClass) => {
|
|
1189
|
+
if (ptrClass === desiredClass) return ptr;
|
|
1190
|
+
if (void 0 === desiredClass.baseClass) return null;
|
|
1191
|
+
var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass);
|
|
1192
|
+
if (rv === null) return null;
|
|
1193
|
+
return desiredClass.downcast(rv);
|
|
1194
|
+
};
|
|
1195
|
+
var registeredInstances = {};
|
|
1196
|
+
var getBasestPointer = (class_, ptr) => {
|
|
1197
|
+
if (ptr === void 0) throwBindingError("ptr should not be undefined");
|
|
1198
|
+
while (class_.baseClass) {
|
|
1199
|
+
ptr = class_.upcast(ptr);
|
|
1200
|
+
class_ = class_.baseClass;
|
|
1201
|
+
}
|
|
1202
|
+
return ptr;
|
|
1203
|
+
};
|
|
1204
|
+
var getInheritedInstance = (class_, ptr) => {
|
|
1205
|
+
ptr = getBasestPointer(class_, ptr);
|
|
1206
|
+
return registeredInstances[ptr];
|
|
1207
|
+
};
|
|
1208
|
+
var InternalError = Module["InternalError"] = class InternalError extends Error {
|
|
1209
|
+
constructor(message) {
|
|
1210
|
+
super(message);
|
|
1211
|
+
this.name = "InternalError";
|
|
1212
|
+
}
|
|
1213
|
+
};
|
|
1214
|
+
var throwInternalError = (message) => {
|
|
1215
|
+
throw new InternalError(message);
|
|
1216
|
+
};
|
|
1217
|
+
var makeClassHandle = (prototype, record) => {
|
|
1218
|
+
if (!record.ptrType || !record.ptr) throwInternalError("makeClassHandle requires ptr and ptrType");
|
|
1219
|
+
if (!!record.smartPtrType !== !!record.smartPtr) throwInternalError("Both smartPtrType and smartPtr must be specified");
|
|
1220
|
+
record.count = { value: 1 };
|
|
1221
|
+
return attachFinalizer(Object.create(prototype, { $$: {
|
|
1222
|
+
value: record,
|
|
1223
|
+
writable: true
|
|
1224
|
+
} }));
|
|
1225
|
+
};
|
|
1226
|
+
function RegisteredPointer_fromWireType(ptr) {
|
|
1227
|
+
var rawPointer = this.getPointee(ptr);
|
|
1228
|
+
if (!rawPointer) {
|
|
1229
|
+
this.destructor(ptr);
|
|
1230
|
+
return null;
|
|
1231
|
+
}
|
|
1232
|
+
var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);
|
|
1233
|
+
if (void 0 !== registeredInstance) if (0 === registeredInstance.$$.count.value) {
|
|
1234
|
+
registeredInstance.$$.ptr = rawPointer;
|
|
1235
|
+
registeredInstance.$$.smartPtr = ptr;
|
|
1236
|
+
return registeredInstance["clone"]();
|
|
1237
|
+
} else {
|
|
1238
|
+
var rv = registeredInstance["clone"]();
|
|
1239
|
+
this.destructor(ptr);
|
|
1240
|
+
return rv;
|
|
1241
|
+
}
|
|
1242
|
+
function makeDefaultHandle() {
|
|
1243
|
+
if (this.isSmartPointer) return makeClassHandle(this.registeredClass.instancePrototype, {
|
|
1244
|
+
ptrType: this.pointeeType,
|
|
1245
|
+
ptr: rawPointer,
|
|
1246
|
+
smartPtrType: this,
|
|
1247
|
+
smartPtr: ptr
|
|
1248
|
+
});
|
|
1249
|
+
else return makeClassHandle(this.registeredClass.instancePrototype, {
|
|
1250
|
+
ptrType: this,
|
|
1251
|
+
ptr
|
|
1252
|
+
});
|
|
1253
|
+
}
|
|
1254
|
+
var registeredPointerRecord = registeredPointers[this.registeredClass.getActualType(rawPointer)];
|
|
1255
|
+
if (!registeredPointerRecord) return makeDefaultHandle.call(this);
|
|
1256
|
+
var toType;
|
|
1257
|
+
if (this.isConst) toType = registeredPointerRecord.constPointerType;
|
|
1258
|
+
else toType = registeredPointerRecord.pointerType;
|
|
1259
|
+
var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass);
|
|
1260
|
+
if (dp === null) return makeDefaultHandle.call(this);
|
|
1261
|
+
if (this.isSmartPointer) return makeClassHandle(toType.registeredClass.instancePrototype, {
|
|
1262
|
+
ptrType: toType,
|
|
1263
|
+
ptr: dp,
|
|
1264
|
+
smartPtrType: this,
|
|
1265
|
+
smartPtr: ptr
|
|
1266
|
+
});
|
|
1267
|
+
else return makeClassHandle(toType.registeredClass.instancePrototype, {
|
|
1268
|
+
ptrType: toType,
|
|
1269
|
+
ptr: dp
|
|
1270
|
+
});
|
|
1271
|
+
}
|
|
1272
|
+
var init_RegisteredPointer = () => {
|
|
1273
|
+
Object.assign(RegisteredPointer.prototype, {
|
|
1274
|
+
getPointee(ptr) {
|
|
1275
|
+
if (this.rawGetPointee) ptr = this.rawGetPointee(ptr);
|
|
1276
|
+
return ptr;
|
|
1277
|
+
},
|
|
1278
|
+
destructor(ptr) {
|
|
1279
|
+
this.rawDestructor?.(ptr);
|
|
1280
|
+
},
|
|
1281
|
+
argPackAdvance: GenericWireTypeSize,
|
|
1282
|
+
readValueFromPointer: readPointer,
|
|
1283
|
+
fromWireType: RegisteredPointer_fromWireType
|
|
1284
|
+
});
|
|
1285
|
+
};
|
|
1286
|
+
function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) {
|
|
1287
|
+
this.name = name;
|
|
1288
|
+
this.registeredClass = registeredClass;
|
|
1289
|
+
this.isReference = isReference;
|
|
1290
|
+
this.isConst = isConst;
|
|
1291
|
+
this.isSmartPointer = isSmartPointer;
|
|
1292
|
+
this.pointeeType = pointeeType;
|
|
1293
|
+
this.sharingPolicy = sharingPolicy;
|
|
1294
|
+
this.rawGetPointee = rawGetPointee;
|
|
1295
|
+
this.rawConstructor = rawConstructor;
|
|
1296
|
+
this.rawShare = rawShare;
|
|
1297
|
+
this.rawDestructor = rawDestructor;
|
|
1298
|
+
if (!isSmartPointer && registeredClass.baseClass === void 0) if (isConst) {
|
|
1299
|
+
this["toWireType"] = constNoSmartPtrRawPointerToWireType;
|
|
1300
|
+
this.destructorFunction = null;
|
|
1301
|
+
} else {
|
|
1302
|
+
this["toWireType"] = nonConstNoSmartPtrRawPointerToWireType;
|
|
1303
|
+
this.destructorFunction = null;
|
|
1304
|
+
}
|
|
1305
|
+
else this["toWireType"] = genericPointerToWireType;
|
|
1306
|
+
}
|
|
1307
|
+
var replacePublicSymbol = (name, value, numArguments) => {
|
|
1308
|
+
if (!Module.hasOwnProperty(name)) throwInternalError("Replacing nonexistent public symbol");
|
|
1309
|
+
if (void 0 !== Module[name].overloadTable && void 0 !== numArguments) Module[name].overloadTable[numArguments] = value;
|
|
1310
|
+
else {
|
|
1311
|
+
Module[name] = value;
|
|
1312
|
+
Module[name].argCount = numArguments;
|
|
1313
|
+
}
|
|
1314
|
+
};
|
|
1315
|
+
var wasmTableMirror = [];
|
|
1316
|
+
var wasmTable;
|
|
1317
|
+
var getWasmTableEntry = (funcPtr) => {
|
|
1318
|
+
var func = wasmTableMirror[funcPtr];
|
|
1319
|
+
if (!func) wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);
|
|
1320
|
+
return func;
|
|
1321
|
+
};
|
|
1322
|
+
var embind__requireFunction = (signature, rawFunction, isAsync = false) => {
|
|
1323
|
+
signature = readLatin1String(signature);
|
|
1324
|
+
function makeDynCaller() {
|
|
1325
|
+
return getWasmTableEntry(rawFunction);
|
|
1326
|
+
}
|
|
1327
|
+
var fp = makeDynCaller();
|
|
1328
|
+
if (typeof fp != "function") throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`);
|
|
1329
|
+
return fp;
|
|
1330
|
+
};
|
|
1331
|
+
class UnboundTypeError extends Error {}
|
|
1332
|
+
var getTypeName = (type) => {
|
|
1333
|
+
var ptr = ___getTypeName(type);
|
|
1334
|
+
var rv = readLatin1String(ptr);
|
|
1335
|
+
_free(ptr);
|
|
1336
|
+
return rv;
|
|
1337
|
+
};
|
|
1338
|
+
var throwUnboundTypeError = (message, types) => {
|
|
1339
|
+
var unboundTypes = [];
|
|
1340
|
+
var seen = {};
|
|
1341
|
+
function visit(type) {
|
|
1342
|
+
if (seen[type]) return;
|
|
1343
|
+
if (registeredTypes[type]) return;
|
|
1344
|
+
if (typeDependencies[type]) {
|
|
1345
|
+
typeDependencies[type].forEach(visit);
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
unboundTypes.push(type);
|
|
1349
|
+
seen[type] = true;
|
|
1350
|
+
}
|
|
1351
|
+
types.forEach(visit);
|
|
1352
|
+
throw new UnboundTypeError(`${message}: ` + unboundTypes.map(getTypeName).join([", "]));
|
|
1353
|
+
};
|
|
1354
|
+
var whenDependentTypesAreResolved = (myTypes, dependentTypes, getTypeConverters) => {
|
|
1355
|
+
myTypes.forEach((type) => typeDependencies[type] = dependentTypes);
|
|
1356
|
+
function onComplete(typeConverters) {
|
|
1357
|
+
var myTypeConverters = getTypeConverters(typeConverters);
|
|
1358
|
+
if (myTypeConverters.length !== myTypes.length) throwInternalError("Mismatched type converter count");
|
|
1359
|
+
for (var i = 0; i < myTypes.length; ++i) registerType(myTypes[i], myTypeConverters[i]);
|
|
1360
|
+
}
|
|
1361
|
+
var typeConverters = new Array(dependentTypes.length);
|
|
1362
|
+
var unregisteredTypes = [];
|
|
1363
|
+
var registered = 0;
|
|
1364
|
+
dependentTypes.forEach((dt, i) => {
|
|
1365
|
+
if (registeredTypes.hasOwnProperty(dt)) typeConverters[i] = registeredTypes[dt];
|
|
1366
|
+
else {
|
|
1367
|
+
unregisteredTypes.push(dt);
|
|
1368
|
+
if (!awaitingDependencies.hasOwnProperty(dt)) awaitingDependencies[dt] = [];
|
|
1369
|
+
awaitingDependencies[dt].push(() => {
|
|
1370
|
+
typeConverters[i] = registeredTypes[dt];
|
|
1371
|
+
++registered;
|
|
1372
|
+
if (registered === unregisteredTypes.length) onComplete(typeConverters);
|
|
1373
|
+
});
|
|
1374
|
+
}
|
|
1375
|
+
});
|
|
1376
|
+
if (0 === unregisteredTypes.length) onComplete(typeConverters);
|
|
1377
|
+
};
|
|
1378
|
+
var __embind_register_class = (rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) => {
|
|
1379
|
+
name = readLatin1String(name);
|
|
1380
|
+
getActualType = embind__requireFunction(getActualTypeSignature, getActualType);
|
|
1381
|
+
upcast &&= embind__requireFunction(upcastSignature, upcast);
|
|
1382
|
+
downcast &&= embind__requireFunction(downcastSignature, downcast);
|
|
1383
|
+
rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);
|
|
1384
|
+
var legalFunctionName = makeLegalFunctionName(name);
|
|
1385
|
+
exposePublicSymbol(legalFunctionName, function() {
|
|
1386
|
+
throwUnboundTypeError(`Cannot construct ${name} due to unbound types`, [baseClassRawType]);
|
|
1387
|
+
});
|
|
1388
|
+
whenDependentTypesAreResolved([
|
|
1389
|
+
rawType,
|
|
1390
|
+
rawPointerType,
|
|
1391
|
+
rawConstPointerType
|
|
1392
|
+
], baseClassRawType ? [baseClassRawType] : [], (base) => {
|
|
1393
|
+
base = base[0];
|
|
1394
|
+
var baseClass;
|
|
1395
|
+
var basePrototype;
|
|
1396
|
+
if (baseClassRawType) {
|
|
1397
|
+
baseClass = base.registeredClass;
|
|
1398
|
+
basePrototype = baseClass.instancePrototype;
|
|
1399
|
+
} else basePrototype = ClassHandle.prototype;
|
|
1400
|
+
var constructor = createNamedFunction(name, function(...args) {
|
|
1401
|
+
if (Object.getPrototypeOf(this) !== instancePrototype) throw new BindingError(`Use 'new' to construct ${name}`);
|
|
1402
|
+
if (void 0 === registeredClass.constructor_body) throw new BindingError(`${name} has no accessible constructor`);
|
|
1403
|
+
var body = registeredClass.constructor_body[args.length];
|
|
1404
|
+
if (void 0 === body) throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`);
|
|
1405
|
+
return body.apply(this, args);
|
|
1406
|
+
});
|
|
1407
|
+
var instancePrototype = Object.create(basePrototype, { constructor: { value: constructor } });
|
|
1408
|
+
constructor.prototype = instancePrototype;
|
|
1409
|
+
var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast);
|
|
1410
|
+
if (registeredClass.baseClass) {
|
|
1411
|
+
registeredClass.baseClass.__derivedClasses ??= [];
|
|
1412
|
+
registeredClass.baseClass.__derivedClasses.push(registeredClass);
|
|
1413
|
+
}
|
|
1414
|
+
var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false);
|
|
1415
|
+
var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false);
|
|
1416
|
+
var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false);
|
|
1417
|
+
registeredPointers[rawType] = {
|
|
1418
|
+
pointerType: pointerConverter,
|
|
1419
|
+
constPointerType: constPointerConverter
|
|
1420
|
+
};
|
|
1421
|
+
replacePublicSymbol(legalFunctionName, constructor);
|
|
1422
|
+
return [
|
|
1423
|
+
referenceConverter,
|
|
1424
|
+
pointerConverter,
|
|
1425
|
+
constPointerConverter
|
|
1426
|
+
];
|
|
1427
|
+
});
|
|
1428
|
+
};
|
|
1429
|
+
var heap32VectorToArray = (count, firstElement) => {
|
|
1430
|
+
var array = [];
|
|
1431
|
+
for (var i = 0; i < count; i++) array.push(HEAPU32[firstElement + i * 4 >> 2]);
|
|
1432
|
+
return array;
|
|
1433
|
+
};
|
|
1434
|
+
var runDestructors = (destructors) => {
|
|
1435
|
+
while (destructors.length) {
|
|
1436
|
+
var ptr = destructors.pop();
|
|
1437
|
+
destructors.pop()(ptr);
|
|
1438
|
+
}
|
|
1439
|
+
};
|
|
1440
|
+
function usesDestructorStack(argTypes) {
|
|
1441
|
+
for (var i = 1; i < argTypes.length; ++i) if (argTypes[i] !== null && argTypes[i].destructorFunction === void 0) return true;
|
|
1442
|
+
return false;
|
|
1443
|
+
}
|
|
1444
|
+
function createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync) {
|
|
1445
|
+
var needsDestructorStack = usesDestructorStack(argTypes);
|
|
1446
|
+
var argCount = argTypes.length - 2;
|
|
1447
|
+
var argsList = [];
|
|
1448
|
+
var argsListWired = ["fn"];
|
|
1449
|
+
if (isClassMethodFunc) argsListWired.push("thisWired");
|
|
1450
|
+
for (var i = 0; i < argCount; ++i) {
|
|
1451
|
+
argsList.push(`arg${i}`);
|
|
1452
|
+
argsListWired.push(`arg${i}Wired`);
|
|
1453
|
+
}
|
|
1454
|
+
argsList = argsList.join(",");
|
|
1455
|
+
argsListWired = argsListWired.join(",");
|
|
1456
|
+
var invokerFnBody = `return function (${argsList}) {\n`;
|
|
1457
|
+
if (needsDestructorStack) invokerFnBody += "var destructors = [];\n";
|
|
1458
|
+
var dtorStack = needsDestructorStack ? "destructors" : "null";
|
|
1459
|
+
var args1 = [
|
|
1460
|
+
"humanName",
|
|
1461
|
+
"throwBindingError",
|
|
1462
|
+
"invoker",
|
|
1463
|
+
"fn",
|
|
1464
|
+
"runDestructors",
|
|
1465
|
+
"retType",
|
|
1466
|
+
"classParam"
|
|
1467
|
+
];
|
|
1468
|
+
if (isClassMethodFunc) invokerFnBody += `var thisWired = classParam['toWireType'](${dtorStack}, this);\n`;
|
|
1469
|
+
for (var i = 0; i < argCount; ++i) {
|
|
1470
|
+
invokerFnBody += `var arg${i}Wired = argType${i}['toWireType'](${dtorStack}, arg${i});\n`;
|
|
1471
|
+
args1.push(`argType${i}`);
|
|
1472
|
+
}
|
|
1473
|
+
invokerFnBody += (returns || isAsync ? "var rv = " : "") + `invoker(${argsListWired});\n`;
|
|
1474
|
+
if (needsDestructorStack) invokerFnBody += "runDestructors(destructors);\n";
|
|
1475
|
+
else for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) {
|
|
1476
|
+
var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired";
|
|
1477
|
+
if (argTypes[i].destructorFunction !== null) {
|
|
1478
|
+
invokerFnBody += `${paramName}_dtor(${paramName});\n`;
|
|
1479
|
+
args1.push(`${paramName}_dtor`);
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
if (returns) invokerFnBody += "var ret = retType['fromWireType'](rv);\nreturn ret;\n";
|
|
1483
|
+
invokerFnBody += "}\n";
|
|
1484
|
+
return [args1, invokerFnBody];
|
|
1485
|
+
}
|
|
1486
|
+
function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc, isAsync) {
|
|
1487
|
+
var argCount = argTypes.length;
|
|
1488
|
+
if (argCount < 2) throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!");
|
|
1489
|
+
var isClassMethodFunc = argTypes[1] !== null && classType !== null;
|
|
1490
|
+
var needsDestructorStack = usesDestructorStack(argTypes);
|
|
1491
|
+
var returns = argTypes[0].name !== "void";
|
|
1492
|
+
var closureArgs = [
|
|
1493
|
+
humanName,
|
|
1494
|
+
throwBindingError,
|
|
1495
|
+
cppInvokerFunc,
|
|
1496
|
+
cppTargetFunc,
|
|
1497
|
+
runDestructors,
|
|
1498
|
+
argTypes[0],
|
|
1499
|
+
argTypes[1]
|
|
1500
|
+
];
|
|
1501
|
+
for (var i = 0; i < argCount - 2; ++i) closureArgs.push(argTypes[i + 2]);
|
|
1502
|
+
if (!needsDestructorStack) {
|
|
1503
|
+
for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) if (argTypes[i].destructorFunction !== null) closureArgs.push(argTypes[i].destructorFunction);
|
|
1504
|
+
}
|
|
1505
|
+
let [args, invokerFnBody] = createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync);
|
|
1506
|
+
return createNamedFunction(humanName, new Function(...args, invokerFnBody)(...closureArgs));
|
|
1507
|
+
}
|
|
1508
|
+
var __embind_register_class_constructor = (rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) => {
|
|
1509
|
+
var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
|
|
1510
|
+
invoker = embind__requireFunction(invokerSignature, invoker);
|
|
1511
|
+
whenDependentTypesAreResolved([], [rawClassType], (classType) => {
|
|
1512
|
+
classType = classType[0];
|
|
1513
|
+
var humanName = `constructor ${classType.name}`;
|
|
1514
|
+
if (void 0 === classType.registeredClass.constructor_body) classType.registeredClass.constructor_body = [];
|
|
1515
|
+
if (void 0 !== classType.registeredClass.constructor_body[argCount - 1]) throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount - 1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);
|
|
1516
|
+
classType.registeredClass.constructor_body[argCount - 1] = () => {
|
|
1517
|
+
throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`, rawArgTypes);
|
|
1518
|
+
};
|
|
1519
|
+
whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
|
|
1520
|
+
argTypes.splice(1, 0, null);
|
|
1521
|
+
classType.registeredClass.constructor_body[argCount - 1] = craftInvokerFunction(humanName, argTypes, null, invoker, rawConstructor);
|
|
1522
|
+
return [];
|
|
1523
|
+
});
|
|
1524
|
+
return [];
|
|
1525
|
+
});
|
|
1526
|
+
};
|
|
1527
|
+
var getFunctionName = (signature) => {
|
|
1528
|
+
signature = signature.trim();
|
|
1529
|
+
const argsIndex = signature.indexOf("(");
|
|
1530
|
+
if (argsIndex === -1) return signature;
|
|
1531
|
+
return signature.slice(0, argsIndex);
|
|
1532
|
+
};
|
|
1533
|
+
var __embind_register_class_function = (rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual, isAsync, isNonnullReturn) => {
|
|
1534
|
+
var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
|
|
1535
|
+
methodName = readLatin1String(methodName);
|
|
1536
|
+
methodName = getFunctionName(methodName);
|
|
1537
|
+
rawInvoker = embind__requireFunction(invokerSignature, rawInvoker, isAsync);
|
|
1538
|
+
whenDependentTypesAreResolved([], [rawClassType], (classType) => {
|
|
1539
|
+
classType = classType[0];
|
|
1540
|
+
var humanName = `${classType.name}.${methodName}`;
|
|
1541
|
+
if (methodName.startsWith("@@")) methodName = Symbol[methodName.substring(2)];
|
|
1542
|
+
if (isPureVirtual) classType.registeredClass.pureVirtualFunctions.push(methodName);
|
|
1543
|
+
function unboundTypesHandler() {
|
|
1544
|
+
throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`, rawArgTypes);
|
|
1545
|
+
}
|
|
1546
|
+
var proto = classType.registeredClass.instancePrototype;
|
|
1547
|
+
var method = proto[methodName];
|
|
1548
|
+
if (void 0 === method || void 0 === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) {
|
|
1549
|
+
unboundTypesHandler.argCount = argCount - 2;
|
|
1550
|
+
unboundTypesHandler.className = classType.name;
|
|
1551
|
+
proto[methodName] = unboundTypesHandler;
|
|
1552
|
+
} else {
|
|
1553
|
+
ensureOverloadTable(proto, methodName, humanName);
|
|
1554
|
+
proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler;
|
|
1555
|
+
}
|
|
1556
|
+
whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
|
|
1557
|
+
var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context, isAsync);
|
|
1558
|
+
if (void 0 === proto[methodName].overloadTable) {
|
|
1559
|
+
memberFunction.argCount = argCount - 2;
|
|
1560
|
+
proto[methodName] = memberFunction;
|
|
1561
|
+
} else proto[methodName].overloadTable[argCount - 2] = memberFunction;
|
|
1562
|
+
return [];
|
|
1563
|
+
});
|
|
1564
|
+
return [];
|
|
1565
|
+
});
|
|
1566
|
+
};
|
|
1567
|
+
var emval_freelist = [];
|
|
1568
|
+
var emval_handles = [];
|
|
1569
|
+
var __emval_decref = (handle) => {
|
|
1570
|
+
if (handle > 9 && 0 === --emval_handles[handle + 1]) {
|
|
1571
|
+
emval_handles[handle] = void 0;
|
|
1572
|
+
emval_freelist.push(handle);
|
|
1573
|
+
}
|
|
1574
|
+
};
|
|
1575
|
+
var count_emval_handles = () => emval_handles.length / 2 - 5 - emval_freelist.length;
|
|
1576
|
+
var init_emval = () => {
|
|
1577
|
+
emval_handles.push(0, 1, void 0, 1, null, 1, true, 1, false, 1);
|
|
1578
|
+
Module["count_emval_handles"] = count_emval_handles;
|
|
1579
|
+
};
|
|
1580
|
+
var Emval = {
|
|
1581
|
+
toValue: (handle) => {
|
|
1582
|
+
if (!handle) throwBindingError(`Cannot use deleted val. handle = ${handle}`);
|
|
1583
|
+
return emval_handles[handle];
|
|
1584
|
+
},
|
|
1585
|
+
toHandle: (value) => {
|
|
1586
|
+
switch (value) {
|
|
1587
|
+
case void 0: return 2;
|
|
1588
|
+
case null: return 4;
|
|
1589
|
+
case true: return 6;
|
|
1590
|
+
case false: return 8;
|
|
1591
|
+
default: {
|
|
1592
|
+
const handle = emval_freelist.pop() || emval_handles.length;
|
|
1593
|
+
emval_handles[handle] = value;
|
|
1594
|
+
emval_handles[handle + 1] = 1;
|
|
1595
|
+
return handle;
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
}
|
|
1599
|
+
};
|
|
1600
|
+
var EmValType = {
|
|
1601
|
+
name: "emscripten::val",
|
|
1602
|
+
fromWireType: (handle) => {
|
|
1603
|
+
var rv = Emval.toValue(handle);
|
|
1604
|
+
__emval_decref(handle);
|
|
1605
|
+
return rv;
|
|
1606
|
+
},
|
|
1607
|
+
toWireType: (destructors, value) => Emval.toHandle(value),
|
|
1608
|
+
argPackAdvance: GenericWireTypeSize,
|
|
1609
|
+
readValueFromPointer: readPointer,
|
|
1610
|
+
destructorFunction: null
|
|
1611
|
+
};
|
|
1612
|
+
var __embind_register_emval = (rawType) => registerType(rawType, EmValType);
|
|
1613
|
+
var floatReadValueFromPointer = (name, width) => {
|
|
1614
|
+
switch (width) {
|
|
1615
|
+
case 4: return function(pointer) {
|
|
1616
|
+
return this["fromWireType"](HEAPF32[pointer >> 2]);
|
|
1617
|
+
};
|
|
1618
|
+
case 8: return function(pointer) {
|
|
1619
|
+
return this["fromWireType"](HEAPF64[pointer >> 3]);
|
|
1620
|
+
};
|
|
1621
|
+
default: throw new TypeError(`invalid float width (${width}): ${name}`);
|
|
1622
|
+
}
|
|
1623
|
+
};
|
|
1624
|
+
var __embind_register_float = (rawType, name, size) => {
|
|
1625
|
+
name = readLatin1String(name);
|
|
1626
|
+
registerType(rawType, {
|
|
1627
|
+
name,
|
|
1628
|
+
fromWireType: (value) => value,
|
|
1629
|
+
toWireType: (destructors, value) => value,
|
|
1630
|
+
argPackAdvance: GenericWireTypeSize,
|
|
1631
|
+
readValueFromPointer: floatReadValueFromPointer(name, size),
|
|
1632
|
+
destructorFunction: null
|
|
1633
|
+
});
|
|
1634
|
+
};
|
|
1635
|
+
var __embind_register_integer = (primitiveType, name, size, minRange, maxRange) => {
|
|
1636
|
+
name = readLatin1String(name);
|
|
1637
|
+
if (maxRange === -1) maxRange = 4294967295;
|
|
1638
|
+
var fromWireType = (value) => value;
|
|
1639
|
+
if (minRange === 0) {
|
|
1640
|
+
var bitshift = 32 - 8 * size;
|
|
1641
|
+
fromWireType = (value) => value << bitshift >>> bitshift;
|
|
1642
|
+
}
|
|
1643
|
+
var isUnsignedType = name.includes("unsigned");
|
|
1644
|
+
var checkAssertions = (value, toTypeName) => {};
|
|
1645
|
+
var toWireType;
|
|
1646
|
+
if (isUnsignedType) toWireType = function(destructors, value) {
|
|
1647
|
+
checkAssertions(value, this.name);
|
|
1648
|
+
return value >>> 0;
|
|
1649
|
+
};
|
|
1650
|
+
else toWireType = function(destructors, value) {
|
|
1651
|
+
checkAssertions(value, this.name);
|
|
1652
|
+
return value;
|
|
1653
|
+
};
|
|
1654
|
+
registerType(primitiveType, {
|
|
1655
|
+
name,
|
|
1656
|
+
fromWireType,
|
|
1657
|
+
toWireType,
|
|
1658
|
+
argPackAdvance: GenericWireTypeSize,
|
|
1659
|
+
readValueFromPointer: integerReadValueFromPointer(name, size, minRange !== 0),
|
|
1660
|
+
destructorFunction: null
|
|
1661
|
+
});
|
|
1662
|
+
};
|
|
1663
|
+
var __embind_register_memory_view = (rawType, dataTypeIndex, name) => {
|
|
1664
|
+
var TA = [
|
|
1665
|
+
Int8Array,
|
|
1666
|
+
Uint8Array,
|
|
1667
|
+
Int16Array,
|
|
1668
|
+
Uint16Array,
|
|
1669
|
+
Int32Array,
|
|
1670
|
+
Uint32Array,
|
|
1671
|
+
Float32Array,
|
|
1672
|
+
Float64Array,
|
|
1673
|
+
BigInt64Array,
|
|
1674
|
+
BigUint64Array
|
|
1675
|
+
][dataTypeIndex];
|
|
1676
|
+
function decodeMemoryView(handle) {
|
|
1677
|
+
var size = HEAPU32[handle >> 2];
|
|
1678
|
+
var data = HEAPU32[handle + 4 >> 2];
|
|
1679
|
+
return new TA(HEAP8.buffer, data, size);
|
|
1680
|
+
}
|
|
1681
|
+
name = readLatin1String(name);
|
|
1682
|
+
registerType(rawType, {
|
|
1683
|
+
name,
|
|
1684
|
+
fromWireType: decodeMemoryView,
|
|
1685
|
+
argPackAdvance: GenericWireTypeSize,
|
|
1686
|
+
readValueFromPointer: decodeMemoryView
|
|
1687
|
+
}, { ignoreDuplicateRegistrations: true });
|
|
1688
|
+
};
|
|
1689
|
+
var EmValOptionalType = Object.assign({ optional: true }, EmValType);
|
|
1690
|
+
var __embind_register_optional = (rawOptionalType, rawType) => {
|
|
1691
|
+
registerType(rawOptionalType, EmValOptionalType);
|
|
1692
|
+
};
|
|
1693
|
+
var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
|
|
1694
|
+
if (!(maxBytesToWrite > 0)) return 0;
|
|
1695
|
+
var startIdx = outIdx;
|
|
1696
|
+
var endIdx = outIdx + maxBytesToWrite - 1;
|
|
1697
|
+
for (var i = 0; i < str.length; ++i) {
|
|
1698
|
+
var u = str.charCodeAt(i);
|
|
1699
|
+
if (u >= 55296 && u <= 57343) {
|
|
1700
|
+
var u1 = str.charCodeAt(++i);
|
|
1701
|
+
u = 65536 + ((u & 1023) << 10) | u1 & 1023;
|
|
1702
|
+
}
|
|
1703
|
+
if (u <= 127) {
|
|
1704
|
+
if (outIdx >= endIdx) break;
|
|
1705
|
+
heap[outIdx++] = u;
|
|
1706
|
+
} else if (u <= 2047) {
|
|
1707
|
+
if (outIdx + 1 >= endIdx) break;
|
|
1708
|
+
heap[outIdx++] = 192 | u >> 6;
|
|
1709
|
+
heap[outIdx++] = 128 | u & 63;
|
|
1710
|
+
} else if (u <= 65535) {
|
|
1711
|
+
if (outIdx + 2 >= endIdx) break;
|
|
1712
|
+
heap[outIdx++] = 224 | u >> 12;
|
|
1713
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
1714
|
+
heap[outIdx++] = 128 | u & 63;
|
|
1715
|
+
} else {
|
|
1716
|
+
if (outIdx + 3 >= endIdx) break;
|
|
1717
|
+
heap[outIdx++] = 240 | u >> 18;
|
|
1718
|
+
heap[outIdx++] = 128 | u >> 12 & 63;
|
|
1719
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
1720
|
+
heap[outIdx++] = 128 | u & 63;
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
heap[outIdx] = 0;
|
|
1724
|
+
return outIdx - startIdx;
|
|
1725
|
+
};
|
|
1726
|
+
var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
|
|
1727
|
+
var lengthBytesUTF8 = (str) => {
|
|
1728
|
+
var len = 0;
|
|
1729
|
+
for (var i = 0; i < str.length; ++i) {
|
|
1730
|
+
var c = str.charCodeAt(i);
|
|
1731
|
+
if (c <= 127) len++;
|
|
1732
|
+
else if (c <= 2047) len += 2;
|
|
1733
|
+
else if (c >= 55296 && c <= 57343) {
|
|
1734
|
+
len += 4;
|
|
1735
|
+
++i;
|
|
1736
|
+
} else len += 3;
|
|
1737
|
+
}
|
|
1738
|
+
return len;
|
|
1739
|
+
};
|
|
1740
|
+
var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder() : void 0;
|
|
1741
|
+
var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {
|
|
1742
|
+
var endIdx = idx + maxBytesToRead;
|
|
1743
|
+
var endPtr = idx;
|
|
1744
|
+
while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
|
|
1745
|
+
if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
|
|
1746
|
+
var str = "";
|
|
1747
|
+
while (idx < endPtr) {
|
|
1748
|
+
var u0 = heapOrArray[idx++];
|
|
1749
|
+
if (!(u0 & 128)) {
|
|
1750
|
+
str += String.fromCharCode(u0);
|
|
1751
|
+
continue;
|
|
1752
|
+
}
|
|
1753
|
+
var u1 = heapOrArray[idx++] & 63;
|
|
1754
|
+
if ((u0 & 224) == 192) {
|
|
1755
|
+
str += String.fromCharCode((u0 & 31) << 6 | u1);
|
|
1756
|
+
continue;
|
|
1757
|
+
}
|
|
1758
|
+
var u2 = heapOrArray[idx++] & 63;
|
|
1759
|
+
if ((u0 & 240) == 224) u0 = (u0 & 15) << 12 | u1 << 6 | u2;
|
|
1760
|
+
else u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;
|
|
1761
|
+
if (u0 < 65536) str += String.fromCharCode(u0);
|
|
1762
|
+
else {
|
|
1763
|
+
var ch = u0 - 65536;
|
|
1764
|
+
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1767
|
+
return str;
|
|
1768
|
+
};
|
|
1769
|
+
var UTF8ToString = (ptr, maxBytesToRead) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
|
|
1770
|
+
var __embind_register_std_string = (rawType, name) => {
|
|
1771
|
+
name = readLatin1String(name);
|
|
1772
|
+
var stdStringIsUTF8 = true;
|
|
1773
|
+
registerType(rawType, {
|
|
1774
|
+
name,
|
|
1775
|
+
fromWireType(value) {
|
|
1776
|
+
var length = HEAPU32[value >> 2];
|
|
1777
|
+
var payload = value + 4;
|
|
1778
|
+
var str;
|
|
1779
|
+
if (stdStringIsUTF8) {
|
|
1780
|
+
var decodeStartPtr = payload;
|
|
1781
|
+
for (var i = 0; i <= length; ++i) {
|
|
1782
|
+
var currentBytePtr = payload + i;
|
|
1783
|
+
if (i == length || HEAPU8[currentBytePtr] == 0) {
|
|
1784
|
+
var maxRead = currentBytePtr - decodeStartPtr;
|
|
1785
|
+
var stringSegment = UTF8ToString(decodeStartPtr, maxRead);
|
|
1786
|
+
if (str === void 0) str = stringSegment;
|
|
1787
|
+
else {
|
|
1788
|
+
str += String.fromCharCode(0);
|
|
1789
|
+
str += stringSegment;
|
|
1790
|
+
}
|
|
1791
|
+
decodeStartPtr = currentBytePtr + 1;
|
|
1792
|
+
}
|
|
1793
|
+
}
|
|
1794
|
+
} else {
|
|
1795
|
+
var a = new Array(length);
|
|
1796
|
+
for (var i = 0; i < length; ++i) a[i] = String.fromCharCode(HEAPU8[payload + i]);
|
|
1797
|
+
str = a.join("");
|
|
1798
|
+
}
|
|
1799
|
+
_free(value);
|
|
1800
|
+
return str;
|
|
1801
|
+
},
|
|
1802
|
+
toWireType(destructors, value) {
|
|
1803
|
+
if (value instanceof ArrayBuffer) value = new Uint8Array(value);
|
|
1804
|
+
var length;
|
|
1805
|
+
var valueIsOfTypeString = typeof value == "string";
|
|
1806
|
+
if (!(valueIsOfTypeString || ArrayBuffer.isView(value) && value.BYTES_PER_ELEMENT == 1)) throwBindingError("Cannot pass non-string to std::string");
|
|
1807
|
+
if (stdStringIsUTF8 && valueIsOfTypeString) length = lengthBytesUTF8(value);
|
|
1808
|
+
else length = value.length;
|
|
1809
|
+
var base = _malloc(4 + length + 1);
|
|
1810
|
+
var ptr = base + 4;
|
|
1811
|
+
HEAPU32[base >> 2] = length;
|
|
1812
|
+
if (valueIsOfTypeString) if (stdStringIsUTF8) stringToUTF8(value, ptr, length + 1);
|
|
1813
|
+
else for (var i = 0; i < length; ++i) {
|
|
1814
|
+
var charCode = value.charCodeAt(i);
|
|
1815
|
+
if (charCode > 255) {
|
|
1816
|
+
_free(base);
|
|
1817
|
+
throwBindingError("String has UTF-16 code units that do not fit in 8 bits");
|
|
1818
|
+
}
|
|
1819
|
+
HEAPU8[ptr + i] = charCode;
|
|
1820
|
+
}
|
|
1821
|
+
else HEAPU8.set(value, ptr);
|
|
1822
|
+
if (destructors !== null) destructors.push(_free, base);
|
|
1823
|
+
return base;
|
|
1824
|
+
},
|
|
1825
|
+
argPackAdvance: GenericWireTypeSize,
|
|
1826
|
+
readValueFromPointer: readPointer,
|
|
1827
|
+
destructorFunction(ptr) {
|
|
1828
|
+
_free(ptr);
|
|
1829
|
+
}
|
|
1830
|
+
});
|
|
1831
|
+
};
|
|
1832
|
+
var UTF16Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf-16le") : void 0;
|
|
1833
|
+
var UTF16ToString = (ptr, maxBytesToRead) => {
|
|
1834
|
+
var endPtr = ptr;
|
|
1835
|
+
var idx = endPtr >> 1;
|
|
1836
|
+
var maxIdx = idx + maxBytesToRead / 2;
|
|
1837
|
+
while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;
|
|
1838
|
+
endPtr = idx << 1;
|
|
1839
|
+
if (endPtr - ptr > 32 && UTF16Decoder) return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));
|
|
1840
|
+
var str = "";
|
|
1841
|
+
for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {
|
|
1842
|
+
var codeUnit = HEAP16[ptr + i * 2 >> 1];
|
|
1843
|
+
if (codeUnit == 0) break;
|
|
1844
|
+
str += String.fromCharCode(codeUnit);
|
|
1845
|
+
}
|
|
1846
|
+
return str;
|
|
1847
|
+
};
|
|
1848
|
+
var stringToUTF16 = (str, outPtr, maxBytesToWrite) => {
|
|
1849
|
+
maxBytesToWrite ??= 2147483647;
|
|
1850
|
+
if (maxBytesToWrite < 2) return 0;
|
|
1851
|
+
maxBytesToWrite -= 2;
|
|
1852
|
+
var startPtr = outPtr;
|
|
1853
|
+
var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;
|
|
1854
|
+
for (var i = 0; i < numCharsToWrite; ++i) {
|
|
1855
|
+
var codeUnit = str.charCodeAt(i);
|
|
1856
|
+
HEAP16[outPtr >> 1] = codeUnit;
|
|
1857
|
+
outPtr += 2;
|
|
1858
|
+
}
|
|
1859
|
+
HEAP16[outPtr >> 1] = 0;
|
|
1860
|
+
return outPtr - startPtr;
|
|
1861
|
+
};
|
|
1862
|
+
var lengthBytesUTF16 = (str) => str.length * 2;
|
|
1863
|
+
var UTF32ToString = (ptr, maxBytesToRead) => {
|
|
1864
|
+
var i = 0;
|
|
1865
|
+
var str = "";
|
|
1866
|
+
while (!(i >= maxBytesToRead / 4)) {
|
|
1867
|
+
var utf32 = HEAP32[ptr + i * 4 >> 2];
|
|
1868
|
+
if (utf32 == 0) break;
|
|
1869
|
+
++i;
|
|
1870
|
+
if (utf32 >= 65536) {
|
|
1871
|
+
var ch = utf32 - 65536;
|
|
1872
|
+
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
|
|
1873
|
+
} else str += String.fromCharCode(utf32);
|
|
1874
|
+
}
|
|
1875
|
+
return str;
|
|
1876
|
+
};
|
|
1877
|
+
var stringToUTF32 = (str, outPtr, maxBytesToWrite) => {
|
|
1878
|
+
maxBytesToWrite ??= 2147483647;
|
|
1879
|
+
if (maxBytesToWrite < 4) return 0;
|
|
1880
|
+
var startPtr = outPtr;
|
|
1881
|
+
var endPtr = startPtr + maxBytesToWrite - 4;
|
|
1882
|
+
for (var i = 0; i < str.length; ++i) {
|
|
1883
|
+
var codeUnit = str.charCodeAt(i);
|
|
1884
|
+
if (codeUnit >= 55296 && codeUnit <= 57343) {
|
|
1885
|
+
var trailSurrogate = str.charCodeAt(++i);
|
|
1886
|
+
codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023;
|
|
1887
|
+
}
|
|
1888
|
+
HEAP32[outPtr >> 2] = codeUnit;
|
|
1889
|
+
outPtr += 4;
|
|
1890
|
+
if (outPtr + 4 > endPtr) break;
|
|
1891
|
+
}
|
|
1892
|
+
HEAP32[outPtr >> 2] = 0;
|
|
1893
|
+
return outPtr - startPtr;
|
|
1894
|
+
};
|
|
1895
|
+
var lengthBytesUTF32 = (str) => {
|
|
1896
|
+
var len = 0;
|
|
1897
|
+
for (var i = 0; i < str.length; ++i) {
|
|
1898
|
+
var codeUnit = str.charCodeAt(i);
|
|
1899
|
+
if (codeUnit >= 55296 && codeUnit <= 57343) ++i;
|
|
1900
|
+
len += 4;
|
|
1901
|
+
}
|
|
1902
|
+
return len;
|
|
1903
|
+
};
|
|
1904
|
+
var __embind_register_std_wstring = (rawType, charSize, name) => {
|
|
1905
|
+
name = readLatin1String(name);
|
|
1906
|
+
var decodeString, encodeString, readCharAt, lengthBytesUTF;
|
|
1907
|
+
if (charSize === 2) {
|
|
1908
|
+
decodeString = UTF16ToString;
|
|
1909
|
+
encodeString = stringToUTF16;
|
|
1910
|
+
lengthBytesUTF = lengthBytesUTF16;
|
|
1911
|
+
readCharAt = (pointer) => HEAPU16[pointer >> 1];
|
|
1912
|
+
} else if (charSize === 4) {
|
|
1913
|
+
decodeString = UTF32ToString;
|
|
1914
|
+
encodeString = stringToUTF32;
|
|
1915
|
+
lengthBytesUTF = lengthBytesUTF32;
|
|
1916
|
+
readCharAt = (pointer) => HEAPU32[pointer >> 2];
|
|
1917
|
+
}
|
|
1918
|
+
registerType(rawType, {
|
|
1919
|
+
name,
|
|
1920
|
+
fromWireType: (value) => {
|
|
1921
|
+
var length = HEAPU32[value >> 2];
|
|
1922
|
+
var str;
|
|
1923
|
+
var decodeStartPtr = value + 4;
|
|
1924
|
+
for (var i = 0; i <= length; ++i) {
|
|
1925
|
+
var currentBytePtr = value + 4 + i * charSize;
|
|
1926
|
+
if (i == length || readCharAt(currentBytePtr) == 0) {
|
|
1927
|
+
var maxReadBytes = currentBytePtr - decodeStartPtr;
|
|
1928
|
+
var stringSegment = decodeString(decodeStartPtr, maxReadBytes);
|
|
1929
|
+
if (str === void 0) str = stringSegment;
|
|
1930
|
+
else {
|
|
1931
|
+
str += String.fromCharCode(0);
|
|
1932
|
+
str += stringSegment;
|
|
1933
|
+
}
|
|
1934
|
+
decodeStartPtr = currentBytePtr + charSize;
|
|
1935
|
+
}
|
|
1936
|
+
}
|
|
1937
|
+
_free(value);
|
|
1938
|
+
return str;
|
|
1939
|
+
},
|
|
1940
|
+
toWireType: (destructors, value) => {
|
|
1941
|
+
if (!(typeof value == "string")) throwBindingError(`Cannot pass non-string to C++ string type ${name}`);
|
|
1942
|
+
var length = lengthBytesUTF(value);
|
|
1943
|
+
var ptr = _malloc(4 + length + charSize);
|
|
1944
|
+
HEAPU32[ptr >> 2] = length / charSize;
|
|
1945
|
+
encodeString(value, ptr + 4, length + charSize);
|
|
1946
|
+
if (destructors !== null) destructors.push(_free, ptr);
|
|
1947
|
+
return ptr;
|
|
1948
|
+
},
|
|
1949
|
+
argPackAdvance: GenericWireTypeSize,
|
|
1950
|
+
readValueFromPointer: readPointer,
|
|
1951
|
+
destructorFunction(ptr) {
|
|
1952
|
+
_free(ptr);
|
|
1953
|
+
}
|
|
1954
|
+
});
|
|
1955
|
+
};
|
|
1956
|
+
var __embind_register_void = (rawType, name) => {
|
|
1957
|
+
name = readLatin1String(name);
|
|
1958
|
+
registerType(rawType, {
|
|
1959
|
+
isVoid: true,
|
|
1960
|
+
name,
|
|
1961
|
+
argPackAdvance: 0,
|
|
1962
|
+
fromWireType: () => void 0,
|
|
1963
|
+
toWireType: (destructors, o) => void 0
|
|
1964
|
+
});
|
|
1965
|
+
};
|
|
1966
|
+
var requireRegisteredType = (rawType, humanName) => {
|
|
1967
|
+
var impl = registeredTypes[rawType];
|
|
1968
|
+
if (void 0 === impl) throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`);
|
|
1969
|
+
return impl;
|
|
1970
|
+
};
|
|
1971
|
+
var __emval_take_value = (type, arg) => {
|
|
1972
|
+
type = requireRegisteredType(type, "_emval_take_value");
|
|
1973
|
+
var v = type["readValueFromPointer"](arg);
|
|
1974
|
+
return Emval.toHandle(v);
|
|
1975
|
+
};
|
|
1976
|
+
var __tzset_js = (timezone, daylight, std_name, dst_name) => {
|
|
1977
|
+
var currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
1978
|
+
var winter = new Date(currentYear, 0, 1);
|
|
1979
|
+
var summer = new Date(currentYear, 6, 1);
|
|
1980
|
+
var winterOffset = winter.getTimezoneOffset();
|
|
1981
|
+
var summerOffset = summer.getTimezoneOffset();
|
|
1982
|
+
var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
|
|
1983
|
+
HEAPU32[timezone >> 2] = stdTimezoneOffset * 60;
|
|
1984
|
+
HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);
|
|
1985
|
+
var extractZone = (timezoneOffset) => {
|
|
1986
|
+
var sign = timezoneOffset >= 0 ? "-" : "+";
|
|
1987
|
+
var absOffset = Math.abs(timezoneOffset);
|
|
1988
|
+
return `UTC${sign}${String(Math.floor(absOffset / 60)).padStart(2, "0")}${String(absOffset % 60).padStart(2, "0")}`;
|
|
1989
|
+
};
|
|
1990
|
+
var winterName = extractZone(winterOffset);
|
|
1991
|
+
var summerName = extractZone(summerOffset);
|
|
1992
|
+
if (summerOffset < winterOffset) {
|
|
1993
|
+
stringToUTF8(winterName, std_name, 17);
|
|
1994
|
+
stringToUTF8(summerName, dst_name, 17);
|
|
1995
|
+
} else {
|
|
1996
|
+
stringToUTF8(winterName, dst_name, 17);
|
|
1997
|
+
stringToUTF8(summerName, std_name, 17);
|
|
1998
|
+
}
|
|
1999
|
+
};
|
|
2000
|
+
var readEmAsmArgsArray = [];
|
|
2001
|
+
var readEmAsmArgs = (sigPtr, buf) => {
|
|
2002
|
+
readEmAsmArgsArray.length = 0;
|
|
2003
|
+
var ch;
|
|
2004
|
+
while (ch = HEAPU8[sigPtr++]) {
|
|
2005
|
+
var wide = ch != 105;
|
|
2006
|
+
wide &= ch != 112;
|
|
2007
|
+
buf += wide && buf % 8 ? 4 : 0;
|
|
2008
|
+
readEmAsmArgsArray.push(ch == 112 ? HEAPU32[buf >> 2] : ch == 106 ? HEAP64[buf >> 3] : ch == 105 ? HEAP32[buf >> 2] : HEAPF64[buf >> 3]);
|
|
2009
|
+
buf += wide ? 8 : 4;
|
|
2010
|
+
}
|
|
2011
|
+
return readEmAsmArgsArray;
|
|
2012
|
+
};
|
|
2013
|
+
var runEmAsmFunction = (code, sigPtr, argbuf) => {
|
|
2014
|
+
var args = readEmAsmArgs(sigPtr, argbuf);
|
|
2015
|
+
return ASM_CONSTS[code](...args);
|
|
2016
|
+
};
|
|
2017
|
+
var _emscripten_asm_const_int = (code, sigPtr, argbuf) => runEmAsmFunction(code, sigPtr, argbuf);
|
|
2018
|
+
var abortOnCannotGrowMemory = (requestedSize) => {
|
|
2019
|
+
abort("OOM");
|
|
2020
|
+
};
|
|
2021
|
+
var _emscripten_resize_heap = (requestedSize) => {
|
|
2022
|
+
HEAPU8.length;
|
|
2023
|
+
requestedSize >>>= 0;
|
|
2024
|
+
abortOnCannotGrowMemory(requestedSize);
|
|
2025
|
+
};
|
|
2026
|
+
var ENV = {};
|
|
2027
|
+
var getExecutableName = () => thisProgram || "./this.program";
|
|
2028
|
+
var getEnvStrings = () => {
|
|
2029
|
+
if (!getEnvStrings.strings) {
|
|
2030
|
+
var env = {
|
|
2031
|
+
USER: "web_user",
|
|
2032
|
+
LOGNAME: "web_user",
|
|
2033
|
+
PATH: "/",
|
|
2034
|
+
PWD: "/",
|
|
2035
|
+
HOME: "/home/web_user",
|
|
2036
|
+
LANG: (typeof navigator == "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8",
|
|
2037
|
+
_: getExecutableName()
|
|
2038
|
+
};
|
|
2039
|
+
for (var x in ENV) if (ENV[x] === void 0) delete env[x];
|
|
2040
|
+
else env[x] = ENV[x];
|
|
2041
|
+
var strings = [];
|
|
2042
|
+
for (var x in env) strings.push(`${x}=${env[x]}`);
|
|
2043
|
+
getEnvStrings.strings = strings;
|
|
2044
|
+
}
|
|
2045
|
+
return getEnvStrings.strings;
|
|
2046
|
+
};
|
|
2047
|
+
var _environ_get = (__environ, environ_buf) => {
|
|
2048
|
+
var bufSize = 0;
|
|
2049
|
+
var envp = 0;
|
|
2050
|
+
for (var string of getEnvStrings()) {
|
|
2051
|
+
var ptr = environ_buf + bufSize;
|
|
2052
|
+
HEAPU32[__environ + envp >> 2] = ptr;
|
|
2053
|
+
bufSize += stringToUTF8(string, ptr, Infinity) + 1;
|
|
2054
|
+
envp += 4;
|
|
2055
|
+
}
|
|
2056
|
+
return 0;
|
|
2057
|
+
};
|
|
2058
|
+
var _environ_sizes_get = (penviron_count, penviron_buf_size) => {
|
|
2059
|
+
var strings = getEnvStrings();
|
|
2060
|
+
HEAPU32[penviron_count >> 2] = strings.length;
|
|
2061
|
+
var bufSize = 0;
|
|
2062
|
+
for (var string of strings) bufSize += lengthBytesUTF8(string) + 1;
|
|
2063
|
+
HEAPU32[penviron_buf_size >> 2] = bufSize;
|
|
2064
|
+
return 0;
|
|
2065
|
+
};
|
|
2066
|
+
var runtimeKeepaliveCounter = 0;
|
|
2067
|
+
var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;
|
|
2068
|
+
var _proc_exit = (code) => {
|
|
2069
|
+
if (!keepRuntimeAlive()) {
|
|
2070
|
+
Module["onExit"]?.(code);
|
|
2071
|
+
ABORT = true;
|
|
2072
|
+
}
|
|
2073
|
+
quit_(code, new ExitStatus(code));
|
|
2074
|
+
};
|
|
2075
|
+
var exitJS = (status, implicit) => {
|
|
2076
|
+
_proc_exit(status);
|
|
2077
|
+
};
|
|
2078
|
+
var _exit = exitJS;
|
|
2079
|
+
var getCFunc = (ident) => {
|
|
2080
|
+
return Module["_" + ident];
|
|
2081
|
+
};
|
|
2082
|
+
var writeArrayToMemory = (array, buffer) => {
|
|
2083
|
+
HEAP8.set(array, buffer);
|
|
2084
|
+
};
|
|
2085
|
+
var stackAlloc = (sz) => __emscripten_stack_alloc(sz);
|
|
2086
|
+
var stringToUTF8OnStack = (str) => {
|
|
2087
|
+
var size = lengthBytesUTF8(str) + 1;
|
|
2088
|
+
var ret = stackAlloc(size);
|
|
2089
|
+
stringToUTF8(str, ret, size);
|
|
2090
|
+
return ret;
|
|
2091
|
+
};
|
|
2092
|
+
var ccall = (ident, returnType, argTypes, args, opts) => {
|
|
2093
|
+
var toC = {
|
|
2094
|
+
string: (str) => {
|
|
2095
|
+
var ret = 0;
|
|
2096
|
+
if (str !== null && str !== void 0 && str !== 0) ret = stringToUTF8OnStack(str);
|
|
2097
|
+
return ret;
|
|
2098
|
+
},
|
|
2099
|
+
array: (arr) => {
|
|
2100
|
+
var ret = stackAlloc(arr.length);
|
|
2101
|
+
writeArrayToMemory(arr, ret);
|
|
2102
|
+
return ret;
|
|
2103
|
+
}
|
|
2104
|
+
};
|
|
2105
|
+
function convertReturnValue(ret) {
|
|
2106
|
+
if (returnType === "string") return UTF8ToString(ret);
|
|
2107
|
+
if (returnType === "boolean") return Boolean(ret);
|
|
2108
|
+
return ret;
|
|
2109
|
+
}
|
|
2110
|
+
var func = getCFunc(ident);
|
|
2111
|
+
var cArgs = [];
|
|
2112
|
+
var stack = 0;
|
|
2113
|
+
if (args) for (var i = 0; i < args.length; i++) {
|
|
2114
|
+
var converter = toC[argTypes[i]];
|
|
2115
|
+
if (converter) {
|
|
2116
|
+
if (stack === 0) stack = stackSave();
|
|
2117
|
+
cArgs[i] = converter(args[i]);
|
|
2118
|
+
} else cArgs[i] = args[i];
|
|
2119
|
+
}
|
|
2120
|
+
var ret = func(...cArgs);
|
|
2121
|
+
function onDone(ret) {
|
|
2122
|
+
if (stack !== 0) stackRestore(stack);
|
|
2123
|
+
return convertReturnValue(ret);
|
|
2124
|
+
}
|
|
2125
|
+
ret = onDone(ret);
|
|
2126
|
+
return ret;
|
|
2127
|
+
};
|
|
2128
|
+
var cwrap = (ident, returnType, argTypes, opts) => {
|
|
2129
|
+
var numericArgs = !argTypes || argTypes.every((type) => type === "number" || type === "boolean");
|
|
2130
|
+
if (returnType !== "string" && numericArgs && !opts) return getCFunc(ident);
|
|
2131
|
+
return (...args) => ccall(ident, returnType, argTypes, args, opts);
|
|
2132
|
+
};
|
|
2133
|
+
embind_init_charCodes();
|
|
2134
|
+
init_ClassHandle();
|
|
2135
|
+
init_RegisteredPointer();
|
|
2136
|
+
init_emval();
|
|
2137
|
+
if (Module["noExitRuntime"]) noExitRuntime = Module["noExitRuntime"];
|
|
2138
|
+
if (Module["print"]) Module["print"];
|
|
2139
|
+
if (Module["printErr"]) err = Module["printErr"];
|
|
2140
|
+
if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
|
|
2141
|
+
if (Module["arguments"]) Module["arguments"];
|
|
2142
|
+
if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
|
|
2143
|
+
Module["ccall"] = ccall;
|
|
2144
|
+
Module["cwrap"] = cwrap;
|
|
2145
|
+
var ASM_CONSTS = {
|
|
2146
|
+
22048: () => Module.getRandomValue(),
|
|
2147
|
+
22084: () => {
|
|
2148
|
+
if (Module.getRandomValue === void 0) try {
|
|
2149
|
+
var window_ = "object" === typeof window ? window : self;
|
|
2150
|
+
var crypto_ = typeof window_.crypto !== "undefined" ? window_.crypto : window_.msCrypto;
|
|
2151
|
+
crypto_ = crypto_ === void 0 ? crypto : crypto_;
|
|
2152
|
+
var randomValuesStandard = function() {
|
|
2153
|
+
var buf = new Uint32Array(1);
|
|
2154
|
+
crypto_.getRandomValues(buf);
|
|
2155
|
+
return buf[0] >>> 0;
|
|
2156
|
+
};
|
|
2157
|
+
randomValuesStandard();
|
|
2158
|
+
Module.getRandomValue = randomValuesStandard;
|
|
2159
|
+
} catch (e) {
|
|
2160
|
+
try {
|
|
2161
|
+
var crypto = require("crypto");
|
|
2162
|
+
var randomValueNodeJS = function() {
|
|
2163
|
+
var buf = crypto["randomBytes"](4);
|
|
2164
|
+
return (buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3]) >>> 0;
|
|
2165
|
+
};
|
|
2166
|
+
randomValueNodeJS();
|
|
2167
|
+
Module.getRandomValue = randomValueNodeJS;
|
|
2168
|
+
} catch (e) {
|
|
2169
|
+
throw "No secure random number generator found";
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
}
|
|
2173
|
+
};
|
|
2174
|
+
var wasmImports = {
|
|
2175
|
+
j: ___cxa_throw,
|
|
2176
|
+
s: __abort_js,
|
|
2177
|
+
l: __embind_register_bigint,
|
|
2178
|
+
n: __embind_register_bool,
|
|
2179
|
+
e: __embind_register_class,
|
|
2180
|
+
d: __embind_register_class_constructor,
|
|
2181
|
+
a: __embind_register_class_function,
|
|
2182
|
+
u: __embind_register_emval,
|
|
2183
|
+
k: __embind_register_float,
|
|
2184
|
+
c: __embind_register_integer,
|
|
2185
|
+
b: __embind_register_memory_view,
|
|
2186
|
+
g: __embind_register_optional,
|
|
2187
|
+
v: __embind_register_std_string,
|
|
2188
|
+
h: __embind_register_std_wstring,
|
|
2189
|
+
o: __embind_register_void,
|
|
2190
|
+
f: __emval_take_value,
|
|
2191
|
+
p: __tzset_js,
|
|
2192
|
+
m: _emscripten_asm_const_int,
|
|
2193
|
+
t: _emscripten_resize_heap,
|
|
2194
|
+
q: _environ_get,
|
|
2195
|
+
r: _environ_sizes_get,
|
|
2196
|
+
i: _exit
|
|
2197
|
+
};
|
|
2198
|
+
var wasmExports = await createWasm();
|
|
2199
|
+
wasmExports["x"];
|
|
2200
|
+
var _malloc = wasmExports["z"];
|
|
2201
|
+
var _free = wasmExports["A"];
|
|
2202
|
+
var ___getTypeName = wasmExports["B"];
|
|
2203
|
+
var __emscripten_stack_restore = wasmExports["C"];
|
|
2204
|
+
var __emscripten_stack_alloc = wasmExports["D"];
|
|
2205
|
+
var _emscripten_stack_get_current = wasmExports["E"];
|
|
2206
|
+
function run() {
|
|
2207
|
+
if (runDependencies > 0) {
|
|
2208
|
+
dependenciesFulfilled = run;
|
|
2209
|
+
return;
|
|
2210
|
+
}
|
|
2211
|
+
preRun();
|
|
2212
|
+
if (runDependencies > 0) {
|
|
2213
|
+
dependenciesFulfilled = run;
|
|
2214
|
+
return;
|
|
2215
|
+
}
|
|
2216
|
+
function doRun() {
|
|
2217
|
+
Module["calledRun"] = true;
|
|
2218
|
+
if (ABORT) return;
|
|
2219
|
+
initRuntime();
|
|
2220
|
+
readyPromiseResolve(Module);
|
|
2221
|
+
Module["onRuntimeInitialized"]?.();
|
|
2222
|
+
postRun();
|
|
2223
|
+
}
|
|
2224
|
+
if (Module["setStatus"]) {
|
|
2225
|
+
Module["setStatus"]("Running...");
|
|
2226
|
+
setTimeout(() => {
|
|
2227
|
+
setTimeout(() => Module["setStatus"](""), 1);
|
|
2228
|
+
doRun();
|
|
2229
|
+
}, 1);
|
|
2230
|
+
} else doRun();
|
|
2231
|
+
}
|
|
2232
|
+
function preInit() {
|
|
2233
|
+
if (Module["preInit"]) {
|
|
2234
|
+
if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]];
|
|
2235
|
+
while (Module["preInit"].length > 0) Module["preInit"].shift()();
|
|
2236
|
+
}
|
|
2237
|
+
}
|
|
2238
|
+
preInit();
|
|
2239
|
+
run();
|
|
2240
|
+
moduleRtn = readyPromise;
|
|
2241
|
+
return moduleRtn;
|
|
2242
|
+
});
|
|
2243
|
+
//#endregion
|
|
2244
|
+
//#region src/index.ts
|
|
2245
|
+
const MLKEM_ALGORITHM = { name: "ML-KEM-768" };
|
|
2246
|
+
function bytesToHexWithSpaces(bytes) {
|
|
2247
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join(" ");
|
|
2248
|
+
}
|
|
2249
|
+
function hexStringToBytes(hex) {
|
|
2250
|
+
const cleaned = hex.trim().replace(/^0x/i, "");
|
|
2251
|
+
if (!cleaned) return new Uint8Array();
|
|
2252
|
+
const parts = cleaned.includes(" ") ? cleaned.split(/\s+/) : null;
|
|
2253
|
+
if (parts) return Uint8Array.from(parts.map((p) => parseInt(p, 16)));
|
|
2254
|
+
if (cleaned.length % 2 !== 0) throw new TypeError("Hex string must have even length");
|
|
2255
|
+
const out = new Uint8Array(cleaned.length / 2);
|
|
2256
|
+
for (let i = 0; i < out.length; i++) out[i] = parseInt(cleaned.slice(i * 2, i * 2 + 2), 16);
|
|
2257
|
+
return out;
|
|
2258
|
+
}
|
|
2259
|
+
function bufferSourceToBytes(value) {
|
|
2260
|
+
if (value instanceof Uint8Array) {
|
|
2261
|
+
if (typeof SharedArrayBuffer !== "undefined" && value.buffer instanceof SharedArrayBuffer) return new Uint8Array(value);
|
|
2262
|
+
return value;
|
|
2263
|
+
}
|
|
2264
|
+
if (value instanceof ArrayBuffer) return new Uint8Array(value);
|
|
2265
|
+
if (ArrayBuffer.isView(value)) {
|
|
2266
|
+
const buffer = value.buffer;
|
|
2267
|
+
if (typeof SharedArrayBuffer !== "undefined" && buffer instanceof SharedArrayBuffer) {
|
|
2268
|
+
const view = value;
|
|
2269
|
+
const u8 = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
|
2270
|
+
return new Uint8Array(u8);
|
|
2271
|
+
}
|
|
2272
|
+
return new Uint8Array(buffer, value.byteOffset, value.byteLength);
|
|
2273
|
+
}
|
|
2274
|
+
throw new TypeError("Expected a BufferSource (ArrayBuffer or typed array)");
|
|
2275
|
+
}
|
|
2276
|
+
function bytesToArrayBuffer(bytes) {
|
|
2277
|
+
if (typeof SharedArrayBuffer !== "undefined" && bytes.buffer instanceof SharedArrayBuffer) return Uint8Array.from(bytes).buffer;
|
|
2278
|
+
return bytes.buffer;
|
|
2279
|
+
}
|
|
2280
|
+
async function secretToKeyBytes(secret) {
|
|
2281
|
+
const resolved = await secret;
|
|
2282
|
+
if (typeof resolved === "string") return hexStringToBytes(resolved);
|
|
2283
|
+
const bytes = bufferSourceToBytes(resolved);
|
|
2284
|
+
return new Uint8Array(bytes);
|
|
2285
|
+
}
|
|
2286
|
+
async function cryptoKeyToRawHex(key) {
|
|
2287
|
+
const format = key.type === "public" ? "raw-public" : "raw-seed";
|
|
2288
|
+
return bytesToHexWithSpaces(bufferSourceToBytes(await mlkem_default.exportKey(format, key)));
|
|
2289
|
+
}
|
|
2290
|
+
var MlKemWrapper = class {
|
|
2291
|
+
keypair() {
|
|
2292
|
+
const keyPairPromise = mlkem_default.generateKey(MLKEM_ALGORITHM, true, ["encapsulateBits", "decapsulateBits"]);
|
|
2293
|
+
return { get: (key) => keyPairPromise.then((kp) => key === "public_key" ? kp.publicKey : kp.privateKey) };
|
|
2294
|
+
}
|
|
2295
|
+
encrypt(public_key) {
|
|
2296
|
+
const encPromise = Promise.resolve(public_key).then((pk) => mlkem_default.encapsulateBits(MLKEM_ALGORITHM, pk));
|
|
2297
|
+
return { get: (key) => {
|
|
2298
|
+
if (key === "cyphertext") return encPromise.then((r) => r.ciphertext);
|
|
2299
|
+
if (key === "secret") return encPromise.then((r) => r.sharedKey);
|
|
2300
|
+
throw new Error(`Unknown encrypt result field: ${String(key)}`);
|
|
2301
|
+
} };
|
|
2302
|
+
}
|
|
2303
|
+
decrypt(cyphertext, private_key) {
|
|
2304
|
+
const ctPromise = Promise.resolve(cyphertext);
|
|
2305
|
+
const skPromise = Promise.resolve(private_key);
|
|
2306
|
+
return Promise.all([ctPromise, skPromise]).then(([ct, sk]) => mlkem_default.decapsulateBits(MLKEM_ALGORITHM, sk, ct));
|
|
2307
|
+
}
|
|
2308
|
+
buffer_to_string(buffer) {
|
|
2309
|
+
if (buffer && typeof buffer.then === "function") return buffer.then((b) => this.buffer_to_string(b));
|
|
2310
|
+
if (buffer instanceof CryptoKey) return cryptoKeyToRawHex(buffer);
|
|
2311
|
+
return bytesToHexWithSpaces(bufferSourceToBytes(buffer));
|
|
2312
|
+
}
|
|
2313
|
+
async encryptMessage(message, secret) {
|
|
2314
|
+
const secretKeyBuffer = bytesToArrayBuffer(await secretToKeyBytes(secret));
|
|
2315
|
+
const key = await crypto.subtle.importKey("raw", secretKeyBuffer, { name: "AES-GCM" }, false, ["encrypt"]);
|
|
2316
|
+
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
2317
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
2318
|
+
const encryptedData = await crypto.subtle.encrypt({
|
|
2319
|
+
name: "AES-GCM",
|
|
2320
|
+
iv
|
|
2321
|
+
}, key, messageBytes);
|
|
2322
|
+
const encryptedMessage = new Uint8Array(iv.length + encryptedData.byteLength);
|
|
2323
|
+
encryptedMessage.set(iv, 0);
|
|
2324
|
+
encryptedMessage.set(new Uint8Array(encryptedData), iv.length);
|
|
2325
|
+
return encryptedMessage;
|
|
2326
|
+
}
|
|
2327
|
+
async decryptMessage(encryptedMessage, secret) {
|
|
2328
|
+
const secretKeyBuffer = bytesToArrayBuffer(await secretToKeyBytes(secret));
|
|
2329
|
+
const iv = encryptedMessage.slice(0, 12);
|
|
2330
|
+
const encryptedData = encryptedMessage.slice(12);
|
|
2331
|
+
const key = await crypto.subtle.importKey("raw", secretKeyBuffer, { name: "AES-GCM" }, false, ["decrypt"]);
|
|
2332
|
+
const decryptedData = await crypto.subtle.decrypt({
|
|
2333
|
+
name: "AES-GCM",
|
|
2334
|
+
iv
|
|
2335
|
+
}, key, encryptedData);
|
|
2336
|
+
return new TextDecoder().decode(decryptedData);
|
|
2337
|
+
}
|
|
2338
|
+
delete() {}
|
|
2339
|
+
};
|
|
2340
|
+
async function loadMlKem1024() {
|
|
2341
|
+
return new KyberVariantWrapper(new (await (kyber_crystals_wasm_engine())).MlKem1024());
|
|
2342
|
+
}
|
|
2343
|
+
async function loadMlKem512() {
|
|
2344
|
+
return new KyberVariantWrapper(new (await (kyber_crystals_wasm_engine())).MlKem512());
|
|
2345
|
+
}
|
|
2346
|
+
async function loadMlKem768() {
|
|
2347
|
+
return new MlKemWrapper();
|
|
2348
|
+
}
|
|
2349
|
+
var KyberVariantWrapper = class {
|
|
2350
|
+
constructor(instance) {
|
|
2351
|
+
this.instance = instance;
|
|
2352
|
+
}
|
|
2353
|
+
keypair() {
|
|
2354
|
+
return this.instance.keypair();
|
|
2355
|
+
}
|
|
2356
|
+
encrypt(public_key) {
|
|
2357
|
+
return this.instance.encrypt(public_key);
|
|
2358
|
+
}
|
|
2359
|
+
async decrypt(cyphertext, private_key) {
|
|
2360
|
+
return this.instance.decrypt(cyphertext, private_key);
|
|
2361
|
+
}
|
|
2362
|
+
buffer_to_string(buffer) {
|
|
2363
|
+
return this.instance.buffer_to_string(buffer);
|
|
2364
|
+
}
|
|
2365
|
+
async toSecretBytes(secret) {
|
|
2366
|
+
const resolved = await secret;
|
|
2367
|
+
if (typeof resolved === "string") return hexStringToBytes(resolved);
|
|
2368
|
+
try {
|
|
2369
|
+
return await secretToKeyBytes(resolved);
|
|
2370
|
+
} catch {
|
|
2371
|
+
return hexStringToBytes(this.instance.buffer_to_string(resolved));
|
|
2372
|
+
}
|
|
2373
|
+
}
|
|
2374
|
+
async encryptMessage(message, secret) {
|
|
2375
|
+
const secretKeyBuffer = bytesToArrayBuffer(await this.toSecretBytes(secret));
|
|
2376
|
+
const key = await crypto.subtle.importKey("raw", secretKeyBuffer, { name: "AES-GCM" }, false, ["encrypt"]);
|
|
2377
|
+
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
2378
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
2379
|
+
const encryptedData = await crypto.subtle.encrypt({
|
|
2380
|
+
name: "AES-GCM",
|
|
2381
|
+
iv
|
|
2382
|
+
}, key, messageBytes);
|
|
2383
|
+
const encryptedMessage = new Uint8Array(iv.length + encryptedData.byteLength);
|
|
2384
|
+
encryptedMessage.set(iv, 0);
|
|
2385
|
+
encryptedMessage.set(new Uint8Array(encryptedData), iv.length);
|
|
2386
|
+
return encryptedMessage;
|
|
2387
|
+
}
|
|
2388
|
+
async decryptMessage(encryptedMessage, secret) {
|
|
2389
|
+
const secretKeyBuffer = bytesToArrayBuffer(await this.toSecretBytes(secret));
|
|
2390
|
+
const iv = encryptedMessage.slice(0, 12);
|
|
2391
|
+
const encryptedData = encryptedMessage.slice(12);
|
|
2392
|
+
const key = await crypto.subtle.importKey("raw", secretKeyBuffer, { name: "AES-GCM" }, false, ["decrypt"]);
|
|
2393
|
+
const decryptedData = await crypto.subtle.decrypt({
|
|
2394
|
+
name: "AES-GCM",
|
|
2395
|
+
iv
|
|
2396
|
+
}, key, encryptedData);
|
|
2397
|
+
return new TextDecoder().decode(decryptedData);
|
|
2398
|
+
}
|
|
2399
|
+
delete() {
|
|
2400
|
+
this.instance.delete();
|
|
2401
|
+
}
|
|
2402
|
+
};
|
|
2403
|
+
//#endregion
|
|
2404
|
+
export { loadMlKem1024, loadMlKem512, loadMlKem768 };
|