quantum-resistant-rustykey
Version:
WebAssembly post-quantum-resistant tools for web
560 lines • 2.75 MB
JavaScript
//#region src/vendor/mlkem.js
var wasm_module_default = (() => {
var _scriptDir = import.meta.url;
return (function(moduleArg = {}) {
var Module = moduleArg;
var readyPromiseResolve, readyPromiseReject;
Module["ready"] = new Promise((resolve, reject) => {
readyPromiseResolve = resolve;
readyPromiseReject = reject;
});
var moduleOverrides = Object.assign({}, Module);
var ENVIRONMENT_IS_WEB = typeof window == "object";
var ENVIRONMENT_IS_WORKER = typeof importScripts == "function";
typeof process == "object" && typeof process.versions == "object" && process.versions.node;
var scriptDirectory = "";
function locateFile(path) {
return scriptDirectory + path;
}
var readBinary;
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
if (ENVIRONMENT_IS_WORKER) scriptDirectory = self.location.href;
else if (typeof document != "undefined" && document.currentScript) scriptDirectory = document.currentScript.src;
if (_scriptDir) scriptDirectory = _scriptDir;
if (scriptDirectory.indexOf("blob:") !== 0) scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1);
else scriptDirectory = "";
if (ENVIRONMENT_IS_WORKER) readBinary = (url) => {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.responseType = "arraybuffer";
xhr.send(null);
return new Uint8Array(xhr.response);
};
}
console.log.bind(console);
var err = console.error.bind(console);
Object.assign(Module, moduleOverrides);
moduleOverrides = null;
var wasmBinary;
if (typeof WebAssembly != "object") abort("no native wasm support detected");
function intArrayFromBase64(s) {
var decoded = atob(s);
var bytes = new Uint8Array(decoded.length);
for (var i = 0; i < decoded.length; ++i) bytes[i] = decoded.charCodeAt(i);
return bytes;
}
function tryParseAsDataURI(filename) {
if (!isDataURI(filename)) return;
return intArrayFromBase64(filename.slice(dataURIPrefix.length));
}
var wasmMemory;
var ABORT = false, HEAP8, HEAPU8, HEAP16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
function updateMemoryViews() {
var b = wasmMemory.buffer;
Module["HEAP8"] = HEAP8 = new Int8Array(b);
Module["HEAP16"] = HEAP16 = new Int16Array(b);
Module["HEAPU8"] = HEAPU8 = new Uint8Array(b);
Module["HEAPU16"] = new Uint16Array(b);
Module["HEAP32"] = HEAP32 = new Int32Array(b);
Module["HEAPU32"] = HEAPU32 = new Uint32Array(b);
Module["HEAPF32"] = HEAPF32 = new Float32Array(b);
Module["HEAPF64"] = HEAPF64 = new Float64Array(b);
}
var __ATPRERUN__ = [];
var __ATINIT__ = [];
var __ATPOSTRUN__ = [];
function preRun() {
callRuntimeCallbacks(__ATPRERUN__);
}
function initRuntime() {
callRuntimeCallbacks(__ATINIT__);
}
function postRun() {
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null;
function addRunDependency(id) {
runDependencies++;
}
function removeRunDependency(id) {
runDependencies--;
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
}
if (dependenciesFulfilled) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null;
callback();
}
}
}
function abort(what) {
what = "Aborted(" + what + ")";
err(what);
ABORT = true;
what += ". Build with -sASSERTIONS for more info.";
var e = new WebAssembly.RuntimeError(what);
readyPromiseReject(e);
throw e;
}
var dataURIPrefix = "data:application/octet-stream;base64,";
var isDataURI = (filename) => filename.startsWith(dataURIPrefix);
var wasmBinaryFile = "data:application/octet-stream;base64,AGFzbQEAAAABXw5gAn9/AGABfwBgA39/fwBgBH9/f38AYAR/f39/AX9gA39/fwF/YAJ/fwF/YAV/f39/fwBgCX9/f39/f39/fwBgB39/f39/f38AYAAAYAZ/f39/f38AYAF/AX9gAAF/AgcBAWEBYQACAykoBgMBAwAAAQMBAgcIAQEAAQAJAAIAAAAAAAEACgQCCwIAAAwBDQUEBQQFAXABAQEFBgEBgAKAAgYJAX8BQdCLwAALByUJAWICAAFjABwBZAAoAWUAJwFmACYBZwEAAWgAJQFpACQBagAjCrafASjYAgECfwJAIAFFDQAgAEEAOgAAIAAgAWoiAkEBa0EAOgAAIAFBA0kNACAAQQA6AAIgAEEAOgABIAJBA2tBADoAACACQQJrQQA6AAAgAUEHSQ0AIABBADoAAyACQQRrQQA6AAAgAUEJSQ0AIABBACAAa0EDcSIDaiICQQA2AgAgAiABIANrQXxxIgNqIgFBBGtBADYCACADQQlJDQAgAkEANgIIIAJBADYCBCABQQhrQQA2AgAgAUEMa0EANgIAIANBGUkNACACQQA2AhggAkEANgIUIAJBADYCECACQQA2AgwgAUEQa0EANgIAIAFBFGtBADYCACABQRhrQQA2AgAgAUEca0EANgIAIAMgAkEEcUEYciIDayIBQSBJDQAgAiADaiECA0AgAkIANwMYIAJCADcDECACQgA3AwggAkIANwMAIAJBIGohAiABQSBrIgFBH0sNAAsLIAAL6QEBBX8CQCADRQ0AIAAgAmohACADQQNxIQZBACECIANBBE8EQCADQXxxIQhBACEDA0AgACACaiIEIAQtAAAgASACai0AAHM6AAAgACACQQFyIgRqIgUgBS0AACABIARqLQAAczoAACAAIAJBAnIiBGoiBSAFLQAAIAEgBGotAABzOgAAIAAgAkEDciIEaiIFIAUtAAAgASAEai0AAHM6AAAgAkEEaiECIANBBGoiAyAIRw0ACwsgBkUNAANAIAAgAmoiAyADLQAAIAEgAmotAABzOgAAIAJBAWohAiAHQQFqIgcgBkcNAAsLC+UMAi5+A38gACkDwAEhFiAAKQO4ASEXIAApA7ABIQEgACkDqAEhAiAAKQOgASEOIAApA5gBIQ8gACkDkAEhECAAKQOIASEIIAApA4ABIQMgACkDeCEEIAApA3Ah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czoAACAAIAVBAXIiCWoiCCAILQAAIAQgCWotAABzOgAAIAAgBUECciIJaiIIIAgtAAAgBCAJai0AAHM6AAAgACAFQQNyIglqIgggCC0AACAEIAlqLQAAczoAACAFQQRqIQUgAkEEaiICIAFHDQALCyAGQQNxIgFFDQADQCAAIAVqIgIgAi0AACAEIAVqLQAAczoAACAFQQFqIQUgA0EBaiIDIAFHDQALCwtRAQR/A0AgASACQQJ0aiIDLwECIQQgACACQQNsaiIFIAMvAQAiAzoAACAFIARBBHY6AAIgBSAEQQR0IANBCHZyOgABIAJBAWoiAkGAAUcNAAsLrgEBAX8jAEHQAWsiAyQAIANBBjoAzwEgA0HIARABIQMgAkHIAE8EQANAIAMgAUEAQcgAEAIgAUHIAGohASADEAMgAkHIAGsiAkHHAEsNAAsLIAMCfyACBEAgAyABQQAgAhACQYYBIAJBxwBGDQEaCyADIANBzwFqIAJBARACQYABCzoAzwEgAyADQc8BakHHAEEBEAIgAxADIAMgAEHAABAKIANByAEQAUHQAWokAAupAQECf0GgCSEDIwBB0AFrIgIkACACQQY6AM8BIAJByAEQASECA0AgAiABQQBBiAEQAiABQYgBaiEBIAIQAyADQYgBayIDQYcBSw0ACyACAn8gAwRAIAIgAUEAIAMQAkGGASADQYcBRg0BGgsgAiACQc8BaiADQQEQAkGAAQs6AM8BIAIgAkHPAWpBhwFBARACIAIQAyACIABBIBAKIAJByAEQAUHQAWokAAu2AQEGfwNAIAEgA0EFbGoiAi0AACEHIAItAAIhBSACLQABIQYgACADQQN0aiIEIAItAARBAnQgAi0AAyICQQZ2ckGBGmxBgARqQQp2OwEGIAQgBUEGdEHAB3EgBkECdnJBgRpsQYAEakEKdjsBAiAEIAcgBkEIdEGABnFyQYEabEGABGpBCnY7AQAgBCACQQR0QfAHcSAFQQR2ckGBGmxBgARqQQp2OwEEIANBAWoiA0HAAEcNAAsLJAAgACABEA8gAEGAAmogAUGABGoQDyAAQYAEaiABQYAIahAPCyQAIAAgARARIABBgARqIAFBgANqEBEgAEGACGogAUGABmoQEQskACAAIAEQEyAAQYADaiABQYAEahATIABBgAZqIAFBgAhqEBMLzBkBCH8D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384AbEGAgIBAa0EcdnI6AAEgAyAKQbDfzgBsQYCAgEBrQRh2QfABcSAMQbDfzgBsQYCAgEBrQRx2cjoAACADIAhBsN/OAGxBgICAQGtBGHZB8AFxIAlBsN/OAGxBgICAQGtBHHZyOgACIAMgBkGw384AbEGAgIBAa0EYdkHwAXEgB0Gw384AbEGAgIBAa0EcdnI6AAMgAkEBaiICQSBHDQALIARBgAYQASIAQYAGakGABBABGiAAQYAKakGABBABGiAAQYAOakGABBABGiAAQYASakGADBABGiAAQYAeakGADBABGiAAQYAqakGADBABGiAAQYA2akGADBABGiAAQYDCAGpBgCQQARogAEIANwOYZiAAQgA3A5BmIABCADcDiGYgAEIANwOAZiALJABBAAv8AwECfyACQYAETwRAIAAgASACEAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAEEDcUUEQCAAIQIMAQsgAkUEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgJBA3FFDQEgAiADSQ0ACwsCQCADQXxxIgBBwABJDQAgAiAAQUBqIgRLDQADQCACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAETQ0ACwsgACACTQ0BA0AgAiABKAIANgIAIAFBBGohASACQQRqIgIgAEkNAAsMAQsgA0EESQRAIAAhAgwBCyAAIANBBGsiBEsEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLIAIgA0kEQANAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANHDQALCwulBAEIfyAEBEADQCAFEAMgBUHIAWoQAyAFQZADahADIAVB2ARqEAMgACALaiEHIAEgC2ohCCACIAtqIQwgAyALaiENQQAhBkEAIQkDQCAGIAdqIAUgBmotAAA6AAAgByAGQQFyIgpqIAUgCmotAAA6AAAgByAGQQJyIgpqIAUgCmotAAA6AAAgByAGQQNyIgpqIAUgCmotAAA6AAAgBkEEaiEGIAlBBGoiCUGoAUcNAAsgBUHIAWohB0EAIQZBACEJA0AgBiAIaiAGIAdqLQAAOgAAIAggBkEBciIKaiAHIApqLQAAOgAAIAggBkECciIKaiAHIApqLQAAOgAAIAggBkEDciIKaiAHIApqLQAAOgAAIAZBBGohBiAJQQRqIglBqAFHDQALIAVBkANqIQdBACEGQQAhCQNAIAYgDGogBiAHai0AADoAACAMIAZBAXIiCGogByAIai0AADoAACAMIAZBAnIiCGogByAIai0AADoAACAMIAZBA3IiCGogByAIai0AADoAACAGQQRqIQYgCUEEaiIJQagBRw0ACyAFQdgEaiEHQQAhBkEAIQkDQCAGIA1qIAYgB2otAAA6AAAgDSAGQQFyIghqIAcgCGotAAA6AAAgDSAGQQJyIghqIAcgCGotAAA6AAAgDSAGQQNyIghqIAcgCGotAAA6AAAgBkEEaiEGIAlBBGoiCUGoAUcNAAsgC0GoAWohCyAEQQFrIgQNAAsLCygAIAEEQANAIAIQAyACIABBqAEQCiAAQagBaiEAIAFBAWsiAQ0ACwsLzwMBB38jACICIQggAkHgBWtBYHEiBCQAIwBBEGsiAiQAIAJBHzoADyAEQYAEaiIFQcgBEAEiAyABQQBBIhACIAMgAkEPaiIBQSJBARACIAJBgAE6AA8gAyABQacBQQEQAiACQRBqJAAgBEEDIAUQIEEAIQFBAyECQQAhAwNAIAMgBGoiAy0AASIFQQh0QYAecSADLQAAciIGQYAaTQRAIAAgAUEBdGogBjsBACABQQFqIQELAkAgAUH/AUsNACADLQACQQR0IAVBBHZyIgNBgBpLDQAgACABQQF0aiADOwEAIAFBAWohAQsgAUH/AU0EQCACIgNBA2ohAiADQfYDSQ0BCwsgAUGAAkkEQANAIARBASAEQYAEahAgQQAhAkEDIQMDQCACIARqIgItAAIhBSACLQAAIAItAAEiAkEIdEGAHnFyIgZBgBpNBEAgACABQQF0aiAGOwEAIAFBAWohAQsCQCABQf8BSw0AIAVBBHQgAkEEdnIiAkGAGksNACAAIAFBAXRqIAI7AQAgAUEBaiEBCyABQf8BSyIFRQRAIAMiAkEDaiEDIAJBpgFJDQELCyAFRQ0ACwsgBEGABGpB4AEQARogBEH4AxABGiAIJAALJAAgACABEAYgAEGABGogAUGABGoQBiAAQYAIaiABQYAIahAGCxAAIwAgAGtBcHEiACQAIAALBgAgACQACwQAIwALog8BKn8jACIDISwgA0HgCWtBYHEiByQAQX8hBCMAIghBIGtBYHEiAyQAIAMgAkGACWoiEBAVQQAgAy0AHyACLQC/EnMiCSADLQAeIAItAL4ScyIGIAMtAB0gAi0AvRJzIgwgAy0AHCACLQC8EnMiDSADLQAbIAItALsScyIFIAMtABogAi0AuhJzIgogAy0AGSACLQC5EnMiESADLQAYIAItALgScyISIAMtABcgAi0AtxJzIhMgAy0AFiACLQC2EnMiFCADLQAVIAItALUScyIVIAMtABQgAi0AtBJzIhYgAy0AEyACLQCzEnMiFyADLQASIAItALIScyIYIAMtABEgAi0AsRJzIhkgAy0AECACLQCwEnMiGiADLQAPIAItAK8ScyIbIAMtAA4gAi0ArhJzIhwgAy0ADSACLQCtEnMiHSADLQAMIAItAKwScyIeIAMtAAsgAi0AqxJzIh8gAy0ACiACLQCqEnMiICADLQAJIAItAKkScyIhIAMtAAggAi0AqBJzIiIgAy0AByACLQCnEnMiIyADLQAGIAItAKYScyIkIAMtAAUgAi0ApRJzIiUgAy0ABCACLQCkEnMiJiADLQADIAItAKMScyInIAMtAAIgAi0AohJzIiggAy0AASACLQChEnMiKSADLQAAIAItAKAScyIqcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycmshKyADQgA3AwAgA0IANwMIIANCADcDECADQgA3AxggCCQAAkBBf0EAIAkgBiAMIA0gBSAKIBEgEiATIBQgFSAWIBcgGCAZIBogGyAcIB0gHiAfICAgISAiICMgJCAlICYgJyAoICkgKnNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MiAyArQRB2c0H/AXEgA0H/AXFHGw0AIAdBoAlqIQwjACINQYAma0FgcSIIJAAgCEGAGmoiBiIDIAEQFiADQYAEaiABQcACahAWIANBgAhqIAFBgAVqEBYgCEGACmohCSABQcAHaiEEQQAhAwNAIAkgA0ECdGoiBSADIARqIgotAABBD3FBgRpsQQhqQQR2OwEAIAUgCi0AAEEEdkGBGmxBCGpBBHY7AQIgA0EBaiIDQYABRw0ACyAIQYAOaiIDIAIQGCAGEA4gCCAGEBcgCEGABmoiBCADIAYgCBAEIAQQCUEAIQMDQCAJIANBAXQiBmoiBSAFLwEAIAQgBmovAQBrOwEAIAkgBkECciIFaiIKIAovAQAgBCAFai8BAGs7AQAgCSAGQQRyIgVqIgogCi8BACAEIAVqLwEAazsBACAJIAZBBnIiBmoiBSAFLwEAIAQgBmovAQBrOwEAIANBBGoiA0GAAkcNAAsgCRAHQQAhAwNAIAMgDGoiBEEAOgAAIAQgCSADQQR0aiIGLgEAQbjfzgBsQYCAgIAEakEfdiIFOgAAIAQgBi4BAkG4384AbEGAgICABGpBHnZBAnEgBXIiBToAACAEIAUgBi4BBEG4384AbEGAgICABGpBHXZBBHFyIgU6AAAgBCAFIAYuAQZBuN/OAGxBgICAgARqQRx2QQhxciIFOgAAIAQgBSAGLgEIQbjfzgBsQYCAgIAEakEbdkEQcXIiBToAACAEIAUgBi4BCkG4384AbEGAgICABGpBGnZBIHFyIgU6AAAgBCAFIAYuAQxBuN/OAGxBgICAgARqQRl2QcAAcXIiBToAACAEIAUgBi4BDkG4384AbEGAgICABGpBGHZBgAFxcjoAACADQQFqIgNBIEcNAAsgCEGABhABIgNBgAZqQYAEEAEaIANBgApqQYAEEAEaIANBgA5qQYAMEAEaIANBgBpqQYAMEAEaIA0kAEEAIgQNACAHQdgJaiACQbgSaikAADcDACAHQdAJaiACQbASaikAADcDACAHQcgJaiACQagSaikAADcDACAHIAIpAKASNwPACSAHQeAIaiAMQcAAEBQgByAMIBAgB0GACWoQHSIEDQBBACEDA0AgByADQQFyIgRqLQAAIAEgBGotAABzIgQgAyAHai0AACABIANqLQAAcyIIIA5zcyEOIAQgCCALcnIhCyADQQJqIgNBwAhHDQALQQAhBCAHIAIpAMASNwMAIAcgAkHIEmopAAA3AwggByACQdASaikAADcDECAHIAJB2BJqKQAANwMYIAdBIGogAUHACBAeIABBICAHQeAIEAhBAEEAIAtB/wFxa0EQdkH/AXFrIQFBACEDA0AgACADaiICLQAAIQggAiABQRB2IgIgCCAHQeAIaiIJIANqLQAAIgZzcSAGczoAACAAIANBAXIiCGoiBi0AACELIAYgAiALIAggCWotAAAiCHNxIAhzOgAAIANBAmoiA0EgRw0ACwsgB0HgCBABIgBBmAlqQgA3AwAgAEGQCWpCADcDACAAQYgJakIANwMAIABBgAlqQgA3AwAgAEIANwP4CCAAQgA3A/AIIABCADcD6AggAEIANwPgCCAAQdgJakIANwMAIABB0AlqQgA3AwAgAEHICWpCADcDACAAQcAJakIANwMAIABCADcDuAkgAEIANwOwCSAAQgA3A6gJIABCADcDoAkgLCQAIAQL2gMBCX8jACIEIQwgBEGAFWtBYHEiBCQAIARBgAlqIgUgAhAYIAUQDSAEIAUQGUEAIQUDQCAEIAVBAmoiCGotAAAgAiAIai0AAHMiCCAEIAVBAWoiCWotAAAgAiAJai0AAHMiCSAEIAVqLQAAIAIgBWotAABzIgsgBnNzcyEGIAggCSAHIAtycnIhByAFQQNqIgVBgAlHDQALIARBgAkQASIEQYAJakGADBABGkF/IQUCQCAGQQAgB0H/AXFrQRB2c0H/AXEgBkH/AXFHDQAgBCADKQAANwOACSAEIAMpABg3A5gJIAQgAykAEDcDkAkgBCADKQAINwOICSAEQaAJaiACEBUgBCAEQYAJaiIDQcAAEBQgACADIAIgBEEgahAdIgUNACABIAQpAwA3AAAgASAEKQMYNwAYIAEgBCkDEDcAECABIAQpAwg3AAhBACEFCyAEQgA3AzggBEIANwMwIARCADcDKCAEQgA3AyAgBEIANwMYIARCADcDECAEQgA3AwggBEIANwMAIARBuAlqQgA3AwAgBEGwCWpCADcDACAEQagJakIANwMAIARBoAlqQgA3AwAgBEIANwOYCSAEQgA3A5AJIARCADcDiAkgBEIANwOACSAMJAAgBQvABwIKfwR+An8jACIIQYDPAGtBYHEiAyQAIAIpABghDSACKQAQIQ4gAikACCEPIAIpAAAhECADQaDOAGoiCUEDOgAAIAMgEDcDgE4gAyAPNwOITiADIA43A5BOIAMgDTcDmE4gA0HAzgBqIANBgM4AakEhEBQgA0HIHmogAykDyE4iDTcDACADQdAeaiADKQPQTiIONwMAIANB2B5qIAMpA9hOIg83AwAgA0GIH2ogDTcDACADQZAfaiAONwMAIANBmB9qIA83AwAgA0HYH2ogDzcDACADQdAfaiAONwMAIANByB9qIA03AwAgAyAPNwOYHiADIA43A5AeIAMgDTcDiB4gAyADKQPATiINNwOAHiADIA03A8AeIAMgDTcDgB8gAyANNwPAHyADQeAfaiIEQYACOwEAIANBoB9qIgVBAjsBACADQeAeaiIHQQE7AQAgA0EAOwGgHiADQYAqaiIKIANBgC5qIANBgDJqIANBgDZqIgsgA0GAHmoiBhALIARBgQQ7AQAgBUGABDsBACAHQYICOwEAIANBgQI7AaAeIANBgDpqIANBgD5qIANBgMIAaiIMIANBgMYAaiAGEAsgA0GCBDsBoB4gA0GAygBqIAYQISAGQYACEAEaIANBgAZqIgQgA0GACmogA0GADmpBACADQeDOAGoiB0EAQQFBAkH/ARAMIAYgA0GAImogA0GAJmpBACAHQQNBBEEFQf8BEAwgBBAOIAYQDiADIAQQFyADQYASaiIFIAogBCADEAQgA0GAFmogCyAEIAMQBCADQYAaaiAMIAQgAxAEIAUQECAFQYAEahAQIAVBgAhqEBAgBSAGECIgBRANIAQQDSABIAQQGSAAIAUQGSAAQZgJaiADKQPYTjcAACAAQZAJaiADKQPQTjcAACAAQYgJaiADKQPITjcAACAAIAMpA8BONwCACSADQYAGEAEiA0GABmpBgAwQARogA0GAEmpBgAwQARogA0GAHmpBgAwQARogA0GAKmpBgCQQARogCUEAOgAAIANCADcDmE4gA0IANwOQTiADQgA3A4hOIANCADcDgE4gA0H4zgBqQgA3AwAgA0HwzgBqQgA3AwAgA0HozgBqQgA3AwAgB0IANwMAIANCADcD2E4gA0IANwPQTiADQgA3A8hOIANCADcDwE4gCCQAIAFBgAlqIABBoAkQHiABQaASaiAAEBUgAUHYEmogAikAODcAACABQdASaiACKQAwNwAAIAFByBJqIAIpACg3AAAgASACKQAgNwDAEkEADAALCwvIAwEAQYAIC8AD7PsK/Zn+E/rVBY4FHwHKAFX/bgIpBrYAwgNO+z76vAU9AtP6CAF/AcP8sgW++X7/V/35A9wCYAL6+ZsBM//d+ccEjALY/fcD8/rTBeb++PkEAvj/wP5m/a75dvt+AL0Fq/ym//H+PgNrAHP6Cf9J/HL+wQMc+iv9wAHX+6UCBfux+64BKwJLAx37ZwMOBmkApgFLArEAFf/d/jT+JgZ1Bgr/CgOHBG3/9/zLBab9XwTK+YQCmPxdAaIBSQFk/7X/MQNJBFsCYgIqBfv6R/qAAUH7eP/CBMn6lvzcAF37hflf+wb6AvsaAxr6qvya/N4BlP/M/uQD3wO+A0z68gVcBgEAAAAAAAAAgoAAAAAAAACKgAAAAAAAgACAAIAAAACAi4AAAAAAAAABAACAAAAAAIGAAIAAAACACYAAAAAAAICKAAAAAAAAAIgAAAAAAAAACYAAgAAAAAAKAACAAAAAAIuAAIAAAAAAiwAAAAAAAICJgAAAAAAAgAOAAAAAAACAAoAAAAAAAICAAAAAAAAAgAqAAAAAAAAACgAAgAAAAICBgACAAAAAgICAAAAAAACAAQAAgAAAAAAIgACAAAAAgA==";
if (!isDataURI(wasmBinaryFile)) wasmBinaryFile = locateFile(wasmBinaryFile);
function getBinarySync(file) {
if (file == wasmBinaryFile && wasmBinary) return new Uint8Array(wasmBinary);
var binary = tryParseAsDataURI(file);
if (binary) return binary;
if (readBinary) return readBinary(file);
throw "both async and sync fetching of the wasm failed";
}
function getBinaryPromise(binaryFile) {
return Promise.resolve().then(() => getBinarySync(binaryFile));
}
function instantiateArrayBuffer(binaryFile, imports, receiver) {
return getBinaryPromise(binaryFile).then((binary) => WebAssembly.instantiate(binary, imports)).then((instance) => instance).then(receiver, (reason) => {
err(`failed to asynchronously prepare wasm: ${reason}`);
abort(reason);
});
}
function instantiateAsync(binary, binaryFile, imports, callback) {
return instantiateArrayBuffer(binaryFile, imports, callback);
}
function createWasm() {
var info = { "a": wasmImports };
function receiveInstance(instance, module) {
wasmExports = instance.exports;
wasmMemory = wasmExports["b"];
updateMemoryViews();
addOnInit(wasmExports["c"]);
removeRunDependency("wasm-instantiate");
return wasmExports;
}
addRunDependency("wasm-instantiate");
function receiveInstantiationResult(result) {
receiveInstance(result["instance"]);
}
instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(readyPromiseReject);
return {};
}
var callRuntimeCallbacks = (callbacks) => {
while (callbacks.length > 0) callbacks.shift()(Module);
};
function getValue(ptr, type = "i8") {
if (type.endsWith("*")) type = "*";
switch (type) {
case "i1": return HEAP8[ptr >> 0];
case "i8": return HEAP8[ptr >> 0];
case "i16": return HEAP16[ptr >> 1];
case "i32": return HEAP32[ptr >> 2];
case "i64": abort("to do getValue(i64) use WASM_BIGINT");
case "float": return HEAPF32[ptr >> 2];
case "double": return HEAPF64[ptr >> 3];
case "*": return HEAPU32[ptr >> 2];
default: abort(`invalid type for getValue: ${type}`);
}
}
function setValue(ptr, value, type = "i8") {
if (type.endsWith("*")) type = "*";
switch (type) {
case "i1":
HEAP8[ptr >> 0] = value;
break;
case "i8":
HEAP8[ptr >> 0] = value;
break;
case "i16":
HEAP16[ptr >> 1] = value;
break;
case "i32":
HEAP32[ptr >> 2] = value;
break;
case "i64": abort("to do setValue(i64) use WASM_BIGINT");
case "float":
HEAPF32[ptr >> 2] = value;
break;
case "double":
HEAPF64[ptr >> 3] = value;
break;
case "*":
HEAPU32[ptr >> 2] = value;
break;
default: abort(`invalid type for setValue: ${type}`);
}
}
var _emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);
var wasmImports = { a: _emscripten_memcpy_js };
var wasmExports = createWasm();
var ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports["c"])();
var _mlkem768_keypair_derand = Module["_mlkem768_keypair_derand"] = (a0, a1, a2) => (_mlkem768_keypair_derand = Module["_mlkem768_keypair_derand"] = wasmExports["d"])(a0, a1, a2);
var _mlkem768_enc_derand = Module["_mlkem768_enc_derand"] = (a0, a1, a2, a3) => (_mlkem768_enc_derand = Module["_mlkem768_enc_derand"] = wasmExports["e"])(a0, a1, a2, a3);
var _mlkem768_dec = Module["_mlkem768_dec"] = (a0, a1, a2) => (_mlkem768_dec = Module["_mlkem768_dec"] = wasmExports["f"])(a0, a1, a2);
var ___errno_location = () => (___errno_location = wasmExports["__errno_location"])();
var stackSave = () => (stackSave = wasmExports["h"])();
var stackRestore = (a0) => (stackRestore = wasmExports["i"])(a0);
var stackAlloc = (a0) => (stackAlloc = wasmExports["j"])(a0);
Module["stackAlloc"] = stackAlloc;
Module["stackSave"] = stackSave;
Module["stackRestore"] = stackRestore;
Module["setValue"] = setValue;
Module["getValue"] = getValue;
var calledRun;
dependenciesFulfilled = function runCaller() {
if (!calledRun) run();
if (!calledRun) dependenciesFulfilled = runCaller;
};
function run() {
if (runDependencies > 0) return;
preRun();
if (runDependencies > 0) return;
function doRun() {
if (calledRun) return;
calledRun = true;
Module["calledRun"] = true;
if (ABORT) return;
initRuntime();
readyPromiseResolve(Module);
postRun();
}
doRun();
}
run();
return moduleArg.ready;
});
})();
var ALGORITHM_NAME$2 = "ML-KEM-768";
var JWK_ALG$2 = "MLKEM768";
var KEY_USAGES$2 = [
"encapsulateKey",
"encapsulateBits",
"decapsulateKey",
"decapsulateBits"
];
var MlKemOperationError$2 = class extends Error {
constructor(message) {
super(message);
this.name = "OperationError";
}
};
var MlKemInvalidAccessError$2 = class extends Error {
constructor(message) {
super(message);
this.name = "InvalidAccessError";
}
};
var MlKemNotSupportedError$2 = class extends Error {
constructor(message) {
super(message);
this.name = "NotSupportedError";
}
};
var MlKemDataError$2 = class extends Error {
constructor(message) {
super(message);
this.name = "DataError";
}
};
var internalKeyData$2 = /* @__PURE__ */ new WeakMap();
function getInternalKeyData$2(key) {
const keyData = internalKeyData$2.get(key);
if (!keyData) throw new TypeError("Unknown key object");
return keyData;
}
var cleanupRegistry$2 = new FinalizationRegistry((keyData) => {
keyData.publicKeyData.fill(0);
keyData.privateSeedData?.fill(0);
keyData.privateSecretKeyData?.fill(0);
});
function getPublicKeyDataRef$2(key) {
const keyData = getInternalKeyData$2(key);
if (!keyData.publicKeyData) throw new MlKemOperationError$2("Failed to get public key data");
return keyData.publicKeyData;
}
function getPrivateKeyDataRef$2(key) {
const keyData = getInternalKeyData$2(key);
if (!keyData.privateSeedData || !keyData.privateSecretKeyData) throw new MlKemOperationError$2("Failed to get private key data");
return keyData;
}
var noClone$2 = /* @__PURE__ */ Symbol("CryptoKey created by mlkem-wasm cannot be cloned");
var keyIdKey$2 = "_mlkem_wasm";
var emptyToJSON$2 = () => ({});
function createKeyObject$2(type, extractable, usages, keyData) {
const key = {
type,
extractable,
algorithm: Object.freeze({ name: ALGORITHM_NAME$2 }),
usages: Object.freeze(Array.from(usages)),
[keyIdKey$2]: noClone$2
};
Object.defineProperty(key, "toJSON", {
value: emptyToJSON$2,
writable: false,
enumerable: false,
configurable: false
});
Object.setPrototypeOf(key, CryptoKey.prototype);
internalKeyData$2.set(key, keyData);
cleanupRegistry$2.register(key, keyData);
return Object.freeze(key);
}
function createPublicKey$2(publicKeyData, usages) {
return createKeyObject$2("public", true, usages, { publicKeyData });
}
function createPrivateKey$2(publicKeyData, privateSeedData, privateSecretKeyData, extractable, usages) {
return createKeyObject$2("private", extractable, usages, {
publicKeyData,
privateSeedData,
privateSecretKeyData
});
}
function _isSupportedCryptoKey$2(key) {
return key instanceof CryptoKey && keyIdKey$2 in key && key[keyIdKey$2] == noClone$2 && internalKeyData$2.has(key);
}
function toBase64url$2(data) {
return btoa(String.fromCharCode(...data)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
}
function fromBase64url$2(base64url) {
const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
const binary = atob(base64 + "===".slice((base64.length + 3) % 4));
return Uint8Array.from(binary, (c) => c.charCodeAt(0));
}
var PUBLICKEY_BYTES$2 = 1184;
var SECRETKEY_BYTES$2 = 2400;
var CIPHERTEXT_BYTES$2 = 1088;
var SHARED_SECRET_BYTES$2 = 32;
var KEYPAIR_RANDOM_BYTES$2 = 64;
var ENC_RANDOM_BYTES$2 = 32;
var _module$2;
async function getModule$2() {
if (!_module$2) _module$2 = await wasm_module_default();
return _module$2;
}
var getRandomValues$2 = crypto.getRandomValues.bind(crypto);
function checkAlgorithm$2(algorithm) {
if ((typeof algorithm === "string" ? algorithm.toUpperCase() : typeof algorithm === "object" && algorithm !== null && "name" in algorithm && typeof algorithm.name === "string" ? algorithm.name.toUpperCase() : null) !== ALGORITHM_NAME$2) throw new TypeError("Unsupported algorithm");
}
async function internalGenerateKeyPair$2(coins) {
const module = await getModule$2();
const stackSave = module.stackSave();
try {
const pkPtr = module.stackAlloc(PUBLICKEY_BYTES$2);
const skPtr = module.stackAlloc(SECRETKEY_BYTES$2);
const coinsPtr = module.stackAlloc(KEYPAIR_RANDOM_BYTES$2);
module.HEAPU8.set(coins, coinsPtr);
if (module._mlkem768_keypair_derand(pkPtr, skPtr, coinsPtr) !== 0) throw new MlKemOperationError$2("Key generation failed");
const rawPublicKey = new Uint8Array(PUBLICKEY_BYTES$2);
const rawSecretKey = new Uint8Array(SECRETKEY_BYTES$2);
const rawSeed = new Uint8Array(coins);
rawPublicKey.set(module.HEAPU8.subarray(pkPtr, pkPtr + PUBLICKEY_BYTES$2));
rawSecretKey.set(module.HEAPU8.subarray(skPtr, skPtr + SECRETKEY_BYTES$2));
module.HEAPU8.fill(0, pkPtr, pkPtr + PUBLICKEY_BYTES$2);
module.HEAPU8.fill(0, skPtr, skPtr + SECRETKEY_BYTES$2);
module.HEAPU8.fill(0, coinsPtr, coinsPtr + KEYPAIR_RANDOM_BYTES$2);
return {
rawPublicKey,
rawSecretKey,
rawSeed
};
} finally {
module.stackRestore(stackSave);
}
}
async function generateKey$2(keyAlgorithm, extractable, usages) {
checkAlgorithm$2(keyAlgorithm);
if (!Array.isArray(usages) || usages.some((usage) => !KEY_USAGES$2.includes(usage))) throw new SyntaxError("Invalid key usages");
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair$2(getRandomValues$2(new Uint8Array(KEYPAIR_RANDOM_BYTES$2)));
return {
publicKey: createPublicKey$2(rawPublicKey, usages.filter((usage) => usage === "encapsulateKey" || usage === "encapsulateBits")),
privateKey: createPrivateKey$2(rawPublicKey, rawSeed, rawSecretKey, extractable, usages.filter((usage) => usage === "decapsulateKey" || usage === "decapsulateBits"))
};
}
async function exportKey$2(format, key) {
if (!(key instanceof CryptoKey)) throw new TypeError("Expected key to be an instance of CryptoKey");
checkAlgorithm$2(key.algorithm);
if (!key.extractable) throw new MlKemOperationError$2("Key is not extractable");
if (format === "spki") {
if (key.type !== "public") throw new TypeError("Expected key type to be 'public'");
return rawToDer$2(MLKEM768_SPKI, getPublicKeyDataRef$2(key)).buffer;
}
if (format === "pkcs8") {
if (key.type !== "private") throw new MlKemInvalidAccessError$2("Expected key type to be 'private'");
return rawToDer$2(MLKEM768_PKCS8, getPrivateKeyDataRef$2(key).privateSeedData).buffer;
}
if (format === "raw-public") {
if (key.type !== "public") throw new TypeError("Expected key type to be 'public'");
return new Uint8Array(getPublicKeyDataRef$2(key)).buffer;
}
if (format === "raw-seed") {
if (key.type !== "private") throw new MlKemInvalidAccessError$2("Expected key type to be 'private'");
return new Uint8Array(getPrivateKeyDataRef$2(key).privateSeedData).buffer;
}
if (format === "jwk") {
const jwk = {
kty: "AKP",
alg: JWK_ALG$2,
pub: toBase64url$2(getPublicKeyDataRef$2(key))
};
if (key.type === "private") jwk.priv = toBase64url$2(getPrivateKeyDataRef$2(key).privateSeedData);
jwk.key_ops = key.usages;
jwk.ext = key.extractable;
return jwk;
}
throw new MlKemNotSupportedError$2("Format not supported");
}
function bufferSourcetoUint8Array$2(value) {
if (ArrayBuffer.isView(value) && value.buffer instanceof ArrayBuffer) return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
else if (value instanceof ArrayBuffer) return new Uint8Array(value);
else throw new TypeError("Value must be a BufferSource");
}
function bufferSourcetoUint8ArrayCopy$2(value) {
return bufferSourcetoUint8Array$2(value).slice();
}
var MLKEM768_SPKI = {
fullLength: 1206,
prefix: new Uint8Array([
48,
130,
4,
178,
48,
11,
6,
9,
96,
134,
72,
1,
101,
3,
4,
4,
2,
3,
130,
4,
161,
0
])
};
var MLKEM768_PKCS8 = {
fullLength: 86,
prefix: new Uint8Array([
48,
84,
2,
1,
0,
48,
11,
6,
9,
96,
134,
72,
1,
101,
3,
4,
4,
2,
4,
66,
128,
64
])
};
function bytesEqual$2(a, b) {
if (a.length !== b.length) return false;
let diff = 0;
for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];
return diff === 0;
}
function derToRaw$2(encoding, der) {
if (der.length !== encoding.fullLength) throw new MlKemDataError$2("Invalid encoding");
if (!bytesEqual$2(der.subarray(0, encoding.prefix.length), encoding.prefix)) throw new MlKemNotSupportedError$2("Unsupported encoding");
return der.slice(encoding.prefix.length);
}
function rawToDer$2(encoding, raw) {
const der = new Uint8Array(encoding.fullLength);
der.set(encoding.prefix);
der.set(raw, encoding.prefix.length);
return der;
}
async function importKey$2(format, keyData, algorithm, extractable, usages) {
checkAlgorithm$2(algorithm);
if (format === "spki") {
if (!Array.isArray(usages) || usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages for public key");
const data = derToRaw$2(MLKEM768_SPKI, bufferSourcetoUint8Array$2(keyData));
if (data.length !== PUBLICKEY_BYTES$2) throw new MlKemDataError$2("Invalid key length");
return createPublicKey$2(data, usages);
}
if (format === "pkcs8") {
if (!Array.isArray(usages) || usages.some((usage) => usage !== "decapsulateKey" && usage !== "decapsulateBits")) throw new SyntaxError("Invalid key usages for private key");
const data = derToRaw$2(MLKEM768_PKCS8, bufferSourcetoUint8Array$2(keyData));
if (data.length !== KEYPAIR_RANDOM_BYTES$2) throw new MlKemDataError$2("Invalid key length");
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair$2(data);
return createPrivateKey$2(rawPublicKey, rawSeed, rawSecretKey, extractable, usages);
}
if (format === "raw-public") {
if (!Array.isArray(usages) || usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages for public key");
return createPublicKey$2(bufferSourcetoUint8ArrayCopy$2(keyData), usages);
}
if (format === "raw-seed") {
if (!Array.isArray(usages) || usages.some((usage) => usage !== "decapsulateKey" && usage !== "decapsulateBits")) throw new SyntaxError("Invalid key usages for private key");
const data = bufferSourcetoUint8ArrayCopy$2(keyData);
if (data.length !== KEYPAIR_RANDOM_BYTES$2) throw new MlKemDataError$2("Invalid key length");
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair$2(data);
return createPrivateKey$2(rawPublicKey, rawSeed, rawSecretKey, extractable, usages);
}
if (format === "jwk") {
if (typeof keyData !== "object" || keyData === null) throw new MlKemDataError$2("Expected keyData to be a JsonWebKey dictionary");
const jwk = keyData;
if (jwk.priv && usages.some((usage) => usage !== "decapsulateKey" && usage !== "decapsulateBits")) throw new SyntaxError("Invalid key usages for private key");
if (!jwk.priv && usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages for public key");
if (jwk.kty !== "AKP") throw new MlKemDataError$2("Invalid key type");
if (jwk.alg !== JWK_ALG$2 && jwk.alg !== "ML-KEM-768+A192KW") throw new MlKemDataError$2("Invalid algorithm");
if (usages.length > 0 && jwk.use && jwk.use !== "enc") throw new MlKemDataError$2("Invalid key usage");
if (jwk.key_ops && Array.isArray(jwk.key_ops) && !Array.prototype.every.call(jwk.key_ops, (op) => KEY_USAGES$2.includes(op)) || !Array.isArray(jwk.key_ops)) throw new MlKemDataError$2("Invalid key operations");
if (jwk.ext === false && extractable) throw new MlKemDataError$2("Invalid key extractability");
if (jwk.priv) try {
const seedData = fromBase64url$2(jwk.priv);
if (seedData.length !== KEYPAIR_RANDOM_BYTES$2) throw new MlKemDataError$2("Invalid private key length");
const { rawPublicKey, rawSecretKey, rawSeed } = await internalGenerateKeyPair$2(seedData);
const key = createPrivateKey$2(rawPublicKey, rawSeed, rawSecretKey, extractable, usages);
if (toBase64url$2(rawPublicKey) !== jwk.pub) throw new MlKemDataError$2("Invalid public key data");
return key;
} catch {
throw new MlKemDataError$2("Invalid private key format");
}
else try {
const publicKeyData = fromBase64url$2(jwk.pub);
if (publicKeyData.length !== PUBLICKEY_BYTES$2) throw new MlKemDataError$2("Invalid public key data");
return createPublicKey$2(publicKeyData, usages);
} catch {
throw new MlKemDataError$2("Invalid public key format");
}
}
throw new MlKemNotSupportedError$2("Unsupported key format");
}
async function getPublicKey$2(key, usages) {
if (!(key instanceof CryptoKey)) throw new TypeError("Expected key to be an instance of CryptoKey");
checkAlgorithm$2(key.algorithm);
if (key.type !== "private") throw new MlKemInvalidAccessError$2("Expected key type to be 'private'");
if (!Array.isArray(usages) || usages.some((usage) => usage !== "encapsulateKey" && usage !== "encapsulateBits")) throw new SyntaxError("Invalid key usages");
const keyData = getInternalKeyData$2(key);
if (!keyData.publicKeyData) throw new MlKemOperationError$2("Failed to get public key data");
return createPublicKey$2(new Uint8Array(keyData.publicKeyData), usages);
}
async function internalEncapsulate$2(algorithm, encapsulationKey, usage) {
const module = await getModule$2();
checkAlgorithm$2(algorithm);
if (!(encapsulationKey instanceof CryptoKey) || encapsulationKey.type !== "public") throw new MlKemInvalidAccessError$2("Expected publicKey to be an instance of MlKemCryptoKey with type 'public'");
if (!encapsulationKey.usages.includes(usage)) throw new MlKemInvalidAccessError$2(`Key usages don't include '${usage}'`);
const publicKeyDa