/** SLH-DSA WASM exports. Mirrors the AssemblyScript surface in * `src/asm/slhdsa/index.ts`. The consumer-facing TS surface (SlhDsaBase and * its subclasses) calls slhKeygenInternal / slhSignInternal / * slhVerifyInternal directly; the lower-level hash family + ADRS helpers * are exported so the unit suite can drive each primitive layer in * isolation. */ export interface SlhDsaExports { memory: WebAssembly.Memory; getModuleId: () => number; getMemoryPages: () => number; getInputOffset: () => number; getOutOffset: () => number; getStateOffset: () => number; getScratchOffset: () => number; getAdrsOffset: () => number; getParamsOffset: () => number; getParamN: () => number; getParamM: () => number; getParamSet: () => number; slhSetParams128f: () => void; slhSetParams192f: () => void; slhSetParams256f: () => void; wipeBuffers: () => void; adrsClear: (adrs: number) => void; adrsCopy: (dst: number, src: number) => void; adrsSetLayerAddress: (adrs: number, layer: number) => void; adrsGetLayerAddress: (adrs: number) => number; adrsSetTreeAddr: (adrs: number, hi: number, mid: number, lo: number) => void; adrsGetTreeHi: (adrs: number) => number; adrsGetTreeMid: (adrs: number) => number; adrsGetTreeLo: (adrs: number) => number; adrsSetType: (adrs: number, typ: number) => void; adrsGetType: (adrs: number) => number; adrsSetKeyPairAddress: (adrs: number, kp: number) => void; adrsGetKeyPairAddress: (adrs: number) => number; adrsSetChainAddress: (adrs: number, chain: number) => void; adrsGetChainAddress: (adrs: number) => number; adrsSetHashAddress: (adrs: number, h: number) => void; adrsGetHashAddress: (adrs: number) => number; adrsSetTreeHeight: (adrs: number, height: number) => void; adrsGetTreeHeight: (adrs: number) => number; adrsSetTreeIndex: (adrs: number, index: number) => void; adrsGetTreeIndex: (adrs: number) => number; ADRS_WOTS_HASH: { value: number; }; ADRS_WOTS_PK: { value: number; }; ADRS_TREE: { value: number; }; ADRS_FORS_TREE: { value: number; }; ADRS_FORS_ROOTS: { value: number; }; ADRS_WOTS_PRF: { value: number; }; ADRS_FORS_PRF: { value: number; }; ADRS_BYTES: { value: number; }; slhHashF: (out: number, pkSeed: number, adrs: number, m1: number) => void; slhHashH: (out: number, pkSeed: number, adrs: number, m2: number) => void; slhHashTl: (out: number, pkSeed: number, adrs: number, m: number, mLen: number) => void; slhPRF: (out: number, pkSeed: number, skSeed: number, adrs: number) => void; slhPRFmsg: (out: number, prf: number, optRand: number, m: number, mLen: number) => void; slhHmsg: (out: number, r: number, pkSeed: number, pkRoot: number, m: number, mLen: number) => void; slhShake256: (out: number, outLen: number, in_: number, inLen: number) => void; shake128Init: () => void; shake256Init: () => void; keccakAbsorb: (len: number) => void; keccakAbsorbAt: (src: number, len: number) => void; keccakSqueezeTo: (dst: number, outLen: number) => void; shakeFinal: (outLen: number) => void; slhKeygenInternal: () => void; slhSignInternal: (msgLen: number) => void; slhVerifyInternal: (msgLen: number) => number; } /** SLH-DSA key pair returned by keygen / keygenDerand. */ export interface SlhDsaKeyPair { verificationKey: Uint8Array; signingKey: Uint8Array; } /** SLH-DSA WASM internal test exports. NOT part of the consumer surface, * NOT re-exported from src/ts/slhdsa/index.ts. Wired exclusively for the * unit suite (slhdsa-wots / slhdsa-fors / slhdsa-xmss / slhdsa-hypertree * tests) to drive each primitive layer in isolation. * * Tests obtain these via test/unit/slhdsa/helpers.ts which casts the * public SlhDsaExports to (SlhDsaExports & SlhDsaTestExports). The cast * is contained inside the test helpers, so consumer code never sees * the _test* surface. */ export interface SlhDsaTestExports { _testBase2b: (out: number, x: number, b: number, outLen: number) => void; _testWotsLen: () => number; _testWotsLen1: () => number; _testWotsTmpOffset: () => number; _testWotsSkOffset: () => number; _testWotsMsgOffset: () => number; _testWotsChain: (out: number, x: number, i: number, s: number, pkSeed: number, adrs: number) => void; _testWotsPkGen: (outPk: number, skSeed: number, pkSeed: number, adrs: number) => void; _testWotsSign: (outSig: number, m: number, skSeed: number, pkSeed: number, adrs: number) => void; _testWotsPkFromSig: (outPk: number, sig: number, m: number, pkSeed: number, adrs: number) => void; _testForsK: () => number; _testForsA: () => number; _testForsRootsOffset: () => number; _testForsLeafOffset: () => number; _testForsPairBase: () => number; _testForsSkGen: (out: number, skSeed: number, idx: number, pkSeed: number, adrs: number) => void; _testForsNode: (out: number, skSeed: number, i: number, z: number, pkSeed: number, adrs: number) => void; _testForsSign: (outSig: number, md: number, skSeed: number, pkSeed: number, adrs: number) => void; _testForsPkFromSig: (outPk: number, sig: number, md: number, pkSeed: number, adrs: number) => void; _testXmssHPrime: () => number; _testXmssPairBase: () => number; _testXmssNode: (out: number, skSeed: number, i: number, z: number, pkSeed: number, adrs: number) => void; _testXmssSign: (outSig: number, m: number, skSeed: number, idx: number, pkSeed: number, adrs: number) => void; _testXmssPkFromSig: (outRoot: number, idx: number, sig: number, m: number, pkSeed: number, adrs: number) => void; _testHtD: () => number; _testHtHPrime: () => number; _testHtRootOffset: () => number; _testHtSign: (outSig: number, m: number, skSeed: number, pkSeed: number, idxTreeHi: number, idxTreeLo: number, idxLeaf: number, adrs: number) => void; _testHtVerify: (m: number, sig: number, pkSeed: number, idxTreeHi: number, idxTreeLo: number, idxLeaf: number, pkRoot: number, adrs: number) => number; }