mldsa-wasm
Version:
ML-DSA-65 implementation using WebAssembly in a single JS file based on PQClean
452 lines (451 loc) • 64.9 kB
JavaScript
// src/build/wasm-module.js
async function MLDSA65Module(moduleArg = {}) {
var moduleRtn;
var Module = moduleArg;
var ENVIRONMENT_IS_WEB = typeof window == "object";
var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != "undefined";
var ENVIRONMENT_IS_NODE = typeof process == "object" && process.versions?.node && process.type != "renderer";
var quit_ = (status, toThrow) => {
throw toThrow;
};
var _scriptName = import.meta.url;
var scriptDirectory = "";
var readAsync, readBinary;
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
try {
scriptDirectory = new URL(".", _scriptName).href;
} catch {
}
{
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);
};
}
readAsync = async (url) => {
if (isFileURI(url)) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = () => {
if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
resolve(xhr.response);
return;
}
reject(xhr.status);
};
xhr.onerror = reject;
xhr.send(null);
});
}
var response = await fetch(url, { credentials: "same-origin" });
if (response.ok) {
return response.arrayBuffer();
}
throw new Error(response.status + " : " + response.url);
};
}
} else {
}
var out = console.log.bind(console);
var err = console.error.bind(console);
var wasmBinary;
var ABORT = false;
var EXITSTATUS;
var isFileURI = (filename) => filename.startsWith("file://");
var readyPromiseResolve, readyPromiseReject;
var wasmMemory;
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
var HEAP64, HEAPU64;
var runtimeInitialized = false;
function updateMemoryViews() {
var b = wasmMemory.buffer;
Module["HEAP8"] = HEAP8 = new Int8Array(b);
HEAP16 = new Int16Array(b);
Module["HEAPU8"] = HEAPU8 = new Uint8Array(b);
HEAPU16 = new Uint16Array(b);
HEAP32 = new Int32Array(b);
HEAPU32 = new Uint32Array(b);
HEAPF32 = new Float32Array(b);
HEAPF64 = new Float64Array(b);
HEAP64 = new BigInt64Array(b);
HEAPU64 = new BigUint64Array(b);
}
function preRun() {
}
function initRuntime() {
runtimeInitialized = true;
wasmExports["d"]();
}
function postRun() {
}
var runDependencies = 0;
var dependenciesFulfilled = null;
function addRunDependency(id) {
runDependencies++;
}
function removeRunDependency(id) {
runDependencies--;
if (runDependencies == 0) {
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 wasmBinaryFile;
function findWasmBinary() {
return base64Decode("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IAEgAiADajYCACABIAEoAgQiAiAGIAE0AkR+IgcgB0KAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AkQgASACIANqNgIEIAEgASgCCCICIAYgATQCSH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCSCABIAIgA2o2AgggASABKAIMIgIgBiABNAJMfiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgJMIAEgAiADajYCDCABIAEoAhAiAiAGIAE0AlB+IgcgB0KAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AlAgASACIANqNgIQIAEgASgCFCICIAYgATQCVH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCVCABIAIgA2o2AhQgASABKAIYIgIgBiABNAJYfiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgJYIAEgAiADajYCGCABIAEoAhwiAiAGIAE0Alx+IgcgB0KAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AlwgASACIANqNgIcIAEgASgCICICIAYgATQCYH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCYCABIAIgA2o2AiAgASABKAIkIgIgBiABNAJkfiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgJkIAEgAiADajYCJCABIAEoAigiAiAGIAE0Amh+IgcgB0KAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AmggASACIANqNgIoIAEgASgCLCICIAYgATQCbH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCbCABIAIgA2o2AiwgASABKAIwIgIgBiABNAJwfiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgJwIAEgAiADajYCMCABIAEoAjQiAiAGIAE0AnR+IgcgB0KAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AnQgASACIANqNgI0IAEgASgCOCICIAYgATQCeH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCeCABIAIgA2o2AjggASABKAI8IgIgBiABNAJ8fiIGIAZCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgJ8IAEgAiADajYCPCAEQeABSSAEQSBqIQQNAAtBACEEA0AgBUEBaiIFQQJ0NALACSIGIAAgBEECdGoiATQCIH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyECIAEgASgCACIDIAJrNgIgIAEgAiADajYCACABIAEoAgQiAiAGIAE0AiR+IgcgB0KAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AiQgASACIANqNgIEIAEgASgCCCICIAYgATQCKH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCKCABIAIgA2o2AgggASABKAIMIgIgBiABNAIsfiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgIsIAEgAiADajYCDCABIAEoAhAiAiAGIAE0AjB+IgcgB0KAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AjAgASACIANqNgIQIAEgASgCFCICIAYgATQCNH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCNCABIAIgA2o2AhQgASABKAIYIgIgBiABNAI4fiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgI4IAEgAiADajYCGCABIAEoAhwiAiAGIAE0Ajx+IgYgBkKAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AjwgASACIANqNgIcIARB8AFJIARBEGohBA0AC0EAIQQDQCAFQQFqIgVBAnQ0AsAJIgYgACAEQQJ0aiIBNAIQfiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIQIgASABKAIAIgMgAms2AhAgASACIANqNgIAIAEgASgCBCICIAYgATQCFH4iByAHQoCAgICQgIjAA35CIIdC/7+AfH58QiCIpyIDazYCFCABIAIgA2o2AgQgASABKAIIIgIgBiABNAIYfiIHIAdCgICAgJCAiMADfkIgh0L/v4B8fnxCIIinIgNrNgIYIAEgAiADajYCCCABIAEoAgwiAiAGIAE0Ahx+IgYgBkKAgICAkICIwAN+QiCHQv+/gHx+fEIgiKciA2s2AhwgASACIANqNgIMIARB+AFJIARBCGohBA0AC0EAIQQDQCAF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IAogAykDyAEiC1oNARogACACaiADIAogC30iC6dBqAFqQXhxaikDACALQgOGiDwAACAKQgF8IgogDFINAAsgAQshAiADIAMpA8gBIAKtfTcDyAEgASACayIEBEAgACACaiEAA0AgAxARQagBIAQgBEGoAU8bIgVBAXFBACECIARBAUcEQCAFQf4BcSEHQQAhAQNAIAAgAmogAyACQXhxaiIIKQMAIAJBA3RBMHGtiDwAACAAIAJBAXIiCWogCCkDACAJQQN0QThxrYg8AAAgAkECaiECIAFBAmoiASAHRw0ACwsEQCAAIAJqIAMgAkF4cWopAwAgAkEDdEE4ca2IPAAACyADQagBIAVrrTcDyAEgACAFaiEAIAQgBWsiBA0ACwsLTgAgACABEBIgAEGAAWogAUGACGoQEiAAQYACaiABQYAQahASIABBgANqIAFBgBhqEBIgAEGABGogAUGAIGoQEiAAQYAFaiABQYAoahASC1QBAX9BASECAkAgACABEAoNACAAQYAIaiABEAoNACAAQYAQaiABEAoNACAAQYAYaiABEAoNACAAQYAgaiABEAoNACAAQYAoaiABEApBAEchAgsgAgtuACAAIAEgAhAcIABBgAhqIAFBgAhqIAJBgAhqEBwgAEGAEGogAUGAEGogAkGAEGoQHCAAQYAYaiABQYAYaiACQYAYahAcIABBgCBqIAFBgCBqIAJBgCBqEBwgAEGAKGogAUGAKGogAkGAKGoQHAtuACAAIAEgAhADIABBgAhqIAFBgAhqIAJBgAhqEAMgAEGAEGogAUGAEGogAkGAEGoQAyAAQYAYaiABQYAYaiACQYAYahADIABBgCBqIAFBgCBqIAJBgCBqEAMgAEGAKGogAUGAKGogAkGAKGoQAwtSAQF/QQEhAQJAIABBvP4fEAoNACAAQYAIakG8/h8QCg0AIABBgBBqQbz+HxAKDQAgAEGAGGpBvP4fEAoNACAAQYAgakG8/h8QCkEARyEBCyABC/0CAgd+AX8gAa0iBiAAKQPIASIEIAOtIgh8WARAA0BBACELQgAhBSAEpyABRwRAA0AgACAEIAV8IgSnQXhxaiILIAspAwAgAiAFp2oxAAAgBEIDhoaFNwMAIAVCAXwiBSABIAApA8gBIgSnayILrVQNAAsLIABCADcDyAEgABARIAIgC2ohAiAAKQPIASIEIAMgC2siA60iCHwgBloNAAsLIAAgAwR+IAOtIgRCAYNCACEFIANBAUcEQCAEQv7///8PgyEJQgAhBANAIAAgACkDyAEgBXwiB6dBeHFqIgEgASkDACACIAWnajEAACAHQgOGhoU3AwAgACAFQgGEIgcgACkDyAF8IgqnQXhxaiIBIAEpAwAgAiAHp2oxAAAgCkIDhoaFNwMAIAVCAnwhBSAEQgJ8IgQgCVINAAsLpwRAIAAgACkDyAEgBXwiBKdBeHFqIgEgASkDACACIAWnajEAACAEQgOGhoU3AwALIAApA8gBBSAECyAIfDcDyAEL0wECA38BfiMAQaABayIDJAAgA0EMaiICEA8gAiABQTAQBSACEBAgA0EQakGIASACEA0gAykDECEFIABBAEGACPwLAEHPASEEQQghAQNAIAFBiAFPBEAgA0EQakGIASADQQxqEA1BACEBCyADQRBqIAFqIQIgAUEBaiEBIAQgAi0AACICSQ0AIAAgBEECdGogACACQQJ0aiICKAIANgIAIAJBASAFp0EBdEECcWs2AgAgBUIBiCEFIARBAWoiBEGAAkcNAAsgA0EMahAOIANBoAFqJAALEAAgACgCAEGoASABIAIQNQsGACAAECcLtRMBDH8jAEHQtwNrIgkkAAJAAkAgAUHtGUcNACAFQf8BSw0AIAlBsLEDaiIRIgEgBi0AADoAACABIAYtAAE6AAEgASAGLQACOgACIAEgBi0AAzoAAyABIAYtAAQ6AAQgASAGLQAFOgAFIAEgBi0ABjoABiABIAYtAAc6AAcgASAGLQAIOgAIIAEgBi0ACToACSABIAYtAAo6AAogASAGLQALOgALIAEgBi0ADDoADCABIAYtAA06AA0gASAGLQAOOgAOIAEgBi0ADzoADyABIAYtABA6ABAgASAGLQAROgARIAEgBi0AEjoAEiABIAYtABM6ABMgASAGLQAUOgAUIAEgBi0AFToAFSABIAYtABY6ABYgASAGLQAXOgAXIAEgBi0AGDoAGCABIAYtABk6ABkgASAGLQAaOgAaIAEgBi0AGzoAGyABIAYtABw6ABwgASAGLQAdOgAdIAEgBi0AHjoAHiABIAYtAB86AB8gCUGQ4ABqIg0iASAGQSBqEBUgAUGACGogBkHgAmoQFSABQYAQaiAGQaAFahAVIAFBgBhqIAZB4AdqEBUgAUGAIGogBkGgCmoQFSABQYAoaiAGQeAMahAVIAlBwLADaiISIgEgAC0AADoAACABIAAtAAE6AAEgASAALQACOgACIAEgAC0AAzoAAyABIAAtAAQ6AAQgASAALQAFOgAFIAEgAC0ABjoABiABIAAtAAc6AAcgASAALQAIOgAIIAEgAC0ACToACSABIAAtAAo6AAogASAALQALOgALIAEgAC0ADDoADCABIAAtAA06AA0gASAALQAOOgAOIAEgAC0ADzoADyABIAAtABA6ABAgASAALQAROgARIAEgAC0AEjoAEiABIAAtABM6ABMgASAALQAUOgAUIAEgAC0AFToAFSABIAAtABY6ABYgASAALQAXOgAXIAEgAC0AGDoAGCABIAAtABk6ABkgASAALQAaOgAaIAEgAC0AGzoAGyABIAAtABw6ABwgASAALQAdOgAdIAEgAC0AHjoAHiABIAAtAB86AB8gASAALQAgOgAgIAEgAC0AIToAISABIAAtACI6ACIgASAALQAjOgAjIAEgAC0AJDoAJCABIAAtACU6ACUgASAALQAmOgAmIAEgAC0AJzoAJyABIAAtACg6ACggASAALQApOgApIAEgAC0AKjoAKiABIAAtACs6ACsgASAALQAsOgAsIAEgAC0ALToALSABIAAtAC46AC4gASAALQAvOgAvIAlBkJABaiIQIgEgAEEwahAhIAFBgAhqIABBsAVqECEgAUGAEGogAEGwCmoQISABQYAYaiAAQbAPahAhIAFBgCBqIABBsBRqECEgCUEQaiILQQBBgAj8CwBBASEPAkAgAC0A5xkiB0E3Sw0AIABBsBlqIQwCQAJAIAdFDQBBASEBIAsgAC0AsBlBAnRqQQE2AgAgAC0A5xkiB0ECSQ0AA0AgASAMaiIHLQAAIgggB0EBay0AAE0NAiALIAhBAnRqQQE2AgAgAUEBaiIBIAAtAOcZIgdJDQALCyALQYAIaiIKQQBBgAj8CwAgAC0A6BkiCEE3Sw0BIAcgCEsNAQJAIAcgCE8NACAHIAxqLQAAQQJ0IApqQQE2AgAgB0EBaiIBIAAtAOgZIghPDQADQCABIAxqIg4tAAAhCCABIAdLBEAgCCAOQQFrLQAATQ0DCyAKIAhBAnRqQQE2AgAgAUEBaiIBIAAtAOgZIghJDQALCyALQYAQaiIKQQBB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IgUgBEHg0ANqIgNBABAJIAVBgAhqIANBARAJIAVBgBBqIANBAhAJIAVBgBhqIANBAxAJIAVBgCBqIANBBBAJIARBgOAAaiIFIANBBRAJIAVBgAhqIANBBhAJIAVBgBBqIANBBxAJIAVBgBhqIANBCBAJIAVBgCBqIANBCRAJIAVBgChqIANBChAJIARBgJABaiIGIAdBgCj8CgAAIAYQIyAEQYAwaiIDIAggBhArIAMQHyADEB4gAyADIAUQMyADECogAyAEIAMQGiADQYAIaiIGIARBgAhqIAYQGiADQYAQaiIIIARBgBBqIAgQGiADQYAYaiIJIARBgBhqIAkQGiADQYAgaiIKIARBgCBqIAoQGiADQYAoaiILIARBgChqIAsQGiAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgACACLQAEOgAEIAAgAi0ABToABSAAIAItAAY6AAYgACACLQAHOgAHIAAgAi0ACDoACCAAIAItAAk6AAkgACACLQAKOgAKIAAgAi0ACzoACyAAIAItAAw6AAwgACACLQANOgANIAAgAi0ADjoADiAAIAItAA86AA8gACACLQAQOgAQIAAgAi0AEToAESAAIAItABI6ABIgACACLQATOgATIAAgAi0AFDoAFCAAIAItABU6ABUgACACLQAWOgAWIAAgAi0AFzoAFyAAIAItABg6ABggACACLQAZOgAZIAAgAi0AGjoAGiAAIAItABs6ABsgACACLQAcOgAcIAAgAi0AHToAHSAAIAItAB46AB4gACACLQAfOgAfIABBIGogAxAWIABB4AJqIAYQFiAAQaAFaiAIEBYgAEHgB2ogCRAWIABBoApqIAoQFiAAQeAMaiALEBYgBEGA0ANqIgNBwAAgAEGgDxAkIAEgAi0AADoAACABIAItAAE6AAEgASACLQACOgACIAEgAi0AAzoAAyABIAItAAQ6AAQgASACLQAFOgAFIAEgAi0ABjoABiABIAItAAc6AAcgASACLQAIOgAIIAEgAi0ACToACSABIAItAAo6AAogASACLQALOgALIAEgAi0ADDoADCABIAItAA06AA0gASACLQAOOgAOIAEgAi0ADzoADyABIAItABA6ABAgASACLQAROgARIAEgAi0AEjoAEiABIAItABM6ABMgASACLQAUOgAUIAEgAi0AFToAFSABIAItABY6ABYgASACLQAXOgAXIAEgAi0AGDoAGCABIAItABk6ABkgASACLQAaOgAaIAEgAi0AGzoAGyABIAItABw6ABwgASACLQAdOgAdIAEgAi0AHjoAHiABIAItAB86AB8gASAEQaDRA2oiAC0AADoAICABIAAtAAE6ACEgASAALQACOgAiIAEgAC0AAzoAIyABIAAtAAQ6ACQgASAALQAFOgAlIAEgAC0ABjoAJiABIAAtAAc6ACcgASAALQAIOgAoIAEgAC0ACToAKSABIAAtAAo6ACogASAALQALOgArIAEgAC0ADDoALCABIAAtAA06AC0gASAALQAOOgAuIAEgAC0ADzoALyABIAAtABA6ADAgASAALQAROgAxIAEgAC0AEjoAMiABIAAtABM6ADMgASAALQAUOgA0IAEgAC0AFToANSABIAAtABY6ADYgASAALQAXOgA3IAEgAC0AGDoAOCABIAAtABk6ADkgASAALQAaOgA6IAEgAC0AGzoAOyABIAAtABw6ADwgASAALQAdOgA9IAEgAC0AHjoAPiABIAAtAB86AD8gAUFAayECQQAhAANAIAAgAmogACADai0AADoAACACIABBAXIiBmogAyAGai0AADoAACACIABBAnIiBmogAyAGai0AADoAACACIABBA3IiBmogAyAGai0AADoAACAAQQRqIgBBwABHDQALIAFBgAFqIAcQCCABQYACaiAHQYAIahAIIAFBgANqIAdBgBBqEAggAUGABGogB0GAGGoQCCABQYAFaiAHQYAgahAIIAFBgAZqIAUQCCABQYAHaiAFQYAIahAIIAFBgAhqIAVBgBBqEAggAUGACWogBUGAGGoQCCABQYAKaiAFQYAgahAIIAFBgAtqIAVBgChqEAggAUGADGogBBAUIAFBoA9qIARBgAhqEBQgAUHAEmogBEGAEGoQFCABQeAVaiAEQYAYahAUIAFBgBlqIARBgCBqEBQgAUGgHGogBEGAKGoQFCAEQcDRA2okAEEACzQBA38DQCAAQQR0IgEgAUHwEWoiAjYC9BEgASACNgL4ESAAQQFqIgBBwABHDQALQTAQLRoLC88JAgBBgAgLvwkBAAAAAAAAAIKAAAAAAAAAioAAAAAAAIAAgACAAAAAgIuAAAAAAAAAAQAAgAAAAACBgACAAAAAgAmAAAAAAACAigAAAAAAAACIAAAAAAAAAAmAAIAAAAAACgAAgAAAAACLgACAAAAAAIsAAAAAAACAiYAAAAAAAIADgAAAAAAAgAKAAAAAAACAgAAAAAAAAIAKgAAAAAAAAAoAAIAAAACAgYAAgAAAAICAgAAAAAAAgAEAAIAAAAAACIAAgAAAAIAAAAAA92QAAAIx2P8DFfj/RJ4DABgh9P8oofL/JB4HACveGwAr6SMArYT6/38U4P91mi8ACfvT/0l6LwAn5SgAWJYpAHCgDwCkhe//iLc2AJCd9/+g6u7/aPknAHvT3//Wrd//5xrF//ek6v+Y/M3/NdAaACK0//8BMj0AxUUEAGdKKQAgdgEAzfQuAMXeNQADpeb/LDDJ/9RH2f+vvjsAhRXF/3yO0f+WijYAQT7U/wAENgBNavv/nNYjAF3F9/89Eub/1urm/x5+NQBZr8X/P4Q1ABdW3/9clOf/jHM4AKhjDACaGwgAdo8OAFM4OwA0hTsAMPzY/1SdHwAtT9X/5QbE/4Gs6P/P4cf/GZjR/13W6f/uCTUAxzUhALvP5/91z+z/cpcdAHKwwf/2vPD/gFLP/67Sz//gkMj/yu8BAPIQNACF/vD/OMYgAJ9uKQCjt9L/S6TH/226+f8JNNr/gsL1/xNB7f87pv//9wns/90r+v/UlRQAY0UcAGIs6v/p+8z/8AoEABfEBwCIRS8AAK0AAL427/9EzQ0AWmc8AMorx/9+3v//SDkZAMBpzv9sdSQA38f8/6GYCwAI6Ov/bOQCAAjIyf/CNjAA9r/j/5M82//gSv3/BRMUAJJ3FAAlnhMA4NDn/0SZ8/8CCOr/ou7R/5zHxP9XoMj/2Zc6AJPqHwBa/zMA1FgjAPhBOgBy/8z/+z0iAJ+r2v8ipMn/9RIEAIclJQDwJO3/XZs1AKBIyv/8osb/Vrvt/95Fz/9evg0AGl4cAObgDQBafwwAg48HAIpi5/8EV////Ab4/yEA9v/2WtD/hAAfAIbvMAB9ucn/1vz3/5JF9P/CIcn/GTkFAAxhBABBzdr/G7A+AOdyNAA7AM3/x3waACQZAwDlXisAmREpADp62P9xTRMAHOE9AIQJEwBR8CUARloYABiFxv++FBMAkTgoAJDbyf+JUNL/P4UcAEsLHQCm9u//vqjr/xvhEgA+Xs3/Ly3q/+Qd+f/HBhQAg3IyAG4N4v9Teez/mUAdAHgl2f+tBev/BeQWAOfbCwDoHSIAz/gzADS59/8MytT/+H/m/1fR4/8bkdj/EizH/9gQCQAfXsb/WEbh/4sdJQC3cyUAj3z9/5jdHQCYaDMAu9QCAKeT7f++bM//HHwCAAiqGABx/S0ApVwMAJo3GQBnocf/PYzk/zyh0f85xTUAFQE7AMAdBAD3xCEA9Bvx/+c1GgAONAcARX35/9BMGgCufOT/aCYdAJiO5v8zJu//2gX8/9t/xf9kJ9P/r+Hd/92T+f8JHd3/k8wCAAUY8f8qnBgAqeXJ/1CK9/8szzsATkP//9826//KFTwAaF4VALYW8//OKR4AQcERCwINBA==");
}
function getBinarySync(file) {
if (ArrayBuffer.isView(file)) {
return file;
}
if (readBinary) {
return readBinary(file);
}
throw "both async and sync fetching of the wasm failed";
}
async function getWasmBinary(binaryFile) {
return getBinarySync(binaryFile);
}
async function instantiateArrayBuffer(binaryFile, imports) {
try {
var binary = await getWasmBinary(binaryFile);
var instance = await WebAssembly.instantiate(binary, imports);
return instance;
} catch (reason) {
err(`failed to asynchronously prepare wasm: ${reason}`);
abort(reason);
}
}
async function instantiateAsync(binary, binaryFile, imports) {
return instantiateArrayBuffer(binaryFile, imports);
}
function getWasmImports() {
return { a: wasmImports };
}
async function createWasm() {
function receiveInstance(instance, module) {
wasmExports = instance.exports;
wasmMemory = wasmExports["c"];
updateMemoryViews();
assignWasmExports(wasmExports);
removeRunDependency("wasm-instantiate");
return wasmExports;
}
addRunDependency("wasm-instantiate");
function receiveInstantiationResult(result2) {
return receiveInstance(result2["instance"]);
}
var info = getWasmImports();
wasmBinaryFile ??= findWasmBinary();
var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);
var exports = receiveInstantiationResult(result);
return exports;
}
class ExitStatus {
name = "ExitStatus";
constructor(status) {
this.message = `Program terminated with exit(${status})`;
this.status = status;
}
}
var base64Decode = (b64) => {
var b1, b2, i2 = 0, j = 0, bLength = b64.length;
var output = new Uint8Array((bLength * 3 >> 2) - (b64[bLength - 2] == "=") - (b64[bLength - 1] == "="));
for (; i2 < bLength; i2 += 4, j += 3) {
b1 = base64ReverseLookup[b64.charCodeAt(i2 + 1)];
b2 = base64ReverseLookup[b64.charCodeAt(i2 + 2)];
output[j] = base64ReverseLookup[b64.charCodeAt(i2)] << 2 | b1 >> 4;
output[j + 1] = b1 << 4 | b2 >> 2;
output[j + 2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i2 + 3)];
}
return output;
};
function getValue(ptr, type = "i8") {
if (type.endsWith("*")) type = "*";
switch (type) {
case "i1":
return HEAP8[ptr];
case "i8":
return HEAP8[ptr];
case "i16":
return HEAP16[ptr >> 1];
case "i32":
return HEAP32[ptr >> 2];
case "i64":
return HEAP64[ptr >> 3];
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] = value;
break;
case "i8":
HEAP8[ptr] = value;
break;
case "i16":
HEAP16[ptr >> 1] = value;
break;
case "i32":
HEAP32[ptr >> 2] = value;
break;
case "i64":
HEAP64[ptr >> 3] = BigInt(value);
break;
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 getHeapMax = () => 2147483648;
var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;
var growMemory = (size) => {
var oldHeapSize = wasmMemory.buffer.byteLength;
var pages = (size - oldHeapSize + 65535) / 65536 | 0;
try {
wasmMemory.grow(pages);
updateMemoryViews();
return 1;
} catch (e) {
}
};
var _emscripten_resize_heap = (requestedSize) => {
var oldSize = HEAPU8.length;
requestedSize >>>= 0;
var maxHeapSize = getHeapMax();
if (requestedSize > maxHeapSize) {
return false;
}
for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);
overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));
var replacement = growMemory(newSize);
if (replacement) {
return true;
}
}
return false;
};
var keepRuntimeAlive = () => true;
var _proc_exit = (code) => {
EXITSTATUS = code;
if (!keepRuntimeAlive()) {
ABORT = true;
}
quit_(code, new ExitStatus(code));
};
var exitJS = (status, implicit) => {
EXITSTATUS = status;
_proc_exit(status);
};
var _exit = exitJS;
for (var base64ReverseLookup = new Uint8Array(123), i = 25; i >= 0; --i) {
base64ReverseLookup[48 + i] = 52 + i;
base64ReverseLookup[65 + i] = i;
base64ReverseLookup[97 + i] = 26 + i;
}
base64ReverseLookup[43] = 62;
base64ReverseLookup[47] = 63;
{
}
Module["setValue"] = setValue;
Module["getValue"] = getValue;
var _malloc, _free, _mldsa65_keypair, _mldsa65_sign, _mldsa65_verify;
function assignWasmExports(wasmExports2) {
Module["_malloc"] = _malloc = wasmExports2["e"];
Module["_free"] = _free = wasmExports2["f"];
Module["_mldsa65_keypair"] = _mldsa65_keypair = wasmExports2["g"];
Module["_mldsa65_sign"] = _mldsa65_sign = wasmExports2["h"];
Module["_mldsa65_verify"] = _mldsa65_verify = wasmExports2["i"];
}
var wasmImports = { b: _emscripten_resize_heap, a: _exit };
var wasmExports = await createWasm();
function run() {
if (runDependencies > 0) {
dependenciesFulfilled = run;
return;
}
preRun();
if (runDependencies > 0) {
dependenciesFulfilled = run;
return;
}
function doRun() {
Module["calledRun"] = true;
if (ABORT) return;
initRuntime();
readyPromiseResolve?.(Module);
postRun();
}
{
doRun();
}
}
function preInit() {
}
preInit();
run();
if (runtimeInitialized) {
moduleRtn = Module;
} else {
moduleRtn = new Promise((resolve, reject) => {
readyPromiseResolve = resolve;
readyPromiseReject = reject;
});
}
;
return moduleRtn;
}
var wasm_module_default = MLDSA65Module;
// src/mldsa.ts
var ALGORITHM_NAME = "ML-DSA-65";
var JWK_ALG = "ML-DSA-65";
var KEY_USAGES = ["sign", "verify"];
var MlDsaOperationError = class extends Error {
constructor(message) {
super(message);
this.name = "OperationError";
}
};
var MlDsaInvalidAccessError = class extends Error {
constructor(message) {
super(message);
this.name = "InvalidAccessError";
}
};
var MlDsaNotSupportedError = class extends Error {
constructor(message) {
super(message);
this.name = "NotSupportedError";
}
};
var MlDsaDataError = class extends Error {
constructor(message) {
super(message);
this.name = "DataError";
}
};
var internalKeyData = /* @__PURE__ */ new WeakMap();
function getInternalKeyData(key) {
const keyData = internalKeyData.get(key);
if (!keyData) {
throw new TypeError("Unknown key object");
}
return keyData;
}
var cleanupRegistry = new FinalizationRegistry((keyData) => {
keyData.publicKeyData.fill(0);
keyData.privateSeedData?.fill(0);
keyData.privateSecretKeyData?.fill(0);
});
function getPublicKeyDataRef(key) {
const keyData = getInternalKeyData(key);
if (!keyData.publicKeyData) {
throw new MlDsaOperationError("Failed to get public key data");
}
return keyData.publicKeyData;
}
function getPrivateKeyDataRef(key) {
const keyData = getInternalKeyData(key);
if (!keyData.privateSeedData || !keyData.privateSecretKeyData) {
throw new MlDsaOperationError("Failed to get private key data");
}
return keyData;
}
var noClone = Symbol("CryptoKey created by mldsa-wasm cannot be cloned");
var keyIdKey = "_mldsa_wasm";
var emptyToJSON = () => ({});
function createKeyObject(type, extractable, usages, keyData) {
const key = {
type,
extractable,
algorithm: Object.freeze({ name: ALGORITHM_NAME }),
usages: Object.freeze(Array.from(usages)),
[keyIdKey]: noClone
// to prevent structured cloning
};
Object.defineProperty(key, "toJSON", {
value: emptyToJSON,
writable: false,
enumerable: false,
configurable: false
});
Object.setPrototypeOf(key, CryptoKey.prototype);
internalKeyData.set(key, keyData);
cleanupRegistry.register(key, keyData);
return Object.freeze(key);
}
function createPublicKey(publicKeyData, usages) {
return createKeyObject("public", true, usages, { publicKeyData });
}
function createPrivateKey(publicKeyData, privateSeedData, privateSecretKeyData, extractable, usages) {
return createKeyObject("private", extractable, usages, {
publicKeyData,
privateSeedData,
privateSecretKeyData
});
}
function _isSupportedCryptoKey(key) {
return key instanceof CryptoKey && keyIdKey in key && key[keyIdKey] == noClone && internalKeyData.has(key);
}
function toBase64url(data) {
return btoa(String.fromCharCode(...data)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
}
function fromBase64url(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 = 1952;
var SECRETKEY_BYTES = 4032;
var SIGNATURE_BYTES = 3309;
var KEYPAIR_SEED_BYTES = 32;
var SIGN_RANDOM_BYTES = 32;
var _module;
async function getModule() {
if (!_module) {
_module = await wasm_module_default();
}
return _module;
}
var getRandomValues = crypto.getRandomValues.bind(crypto);
function normalizeAlgorithm(algorithm) {
const name = typeof algorithm === "string" ? algorithm.toUpperCase() : typeof algorithm === "object" && algorithm !== null && "name" in algorithm && typeof algorithm.name === "string" ? algorithm.name.toUpperCase() : null;
if (name !== ALGORITHM_NAME) {
throw new TypeError("Unsuppo