@maatara/core-pqc 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +92 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +92 -7
- package/dist/index.mjs.map +1 -1
- package/dist/src/index.d.ts +9 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/tests/anchoring.test.d.ts +2 -0
- package/dist/tests/anchoring.test.d.ts.map +1 -0
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -522,6 +522,7 @@ async function getElasticHashConfig(capacity, loadFactor = 0.95) {
|
|
|
522
522
|
// WASM bindings for anchoring functions
|
|
523
523
|
const wasm_anchor_chains_info = wasmPkg__namespace.anchor_chains_info;
|
|
524
524
|
const wasm_create_accumulator_leaf = wasmPkg__namespace.create_accumulator_leaf;
|
|
525
|
+
const wasm_create_accumulator_leaf_with_alg = wasmPkg__namespace.create_accumulator_leaf_with_alg;
|
|
525
526
|
const wasm_compute_merkle_root = wasmPkg__namespace.compute_merkle_root;
|
|
526
527
|
const wasm_generate_evm_anchor_calldata = wasmPkg__namespace.generate_evm_anchor_calldata;
|
|
527
528
|
const wasm_generate_bitcoin_anchor_payload = wasmPkg__namespace.generate_bitcoin_anchor_payload;
|
|
@@ -542,11 +543,69 @@ async function getAnchorChainsInfo() {
|
|
|
542
543
|
* @param userId - User ID (64 hex chars)
|
|
543
544
|
* @param chainId - Chain identifier within user's chains
|
|
544
545
|
* @param blockHash - Hash of the latest block (64 hex chars)
|
|
545
|
-
* @param blockIndex - Block height/index
|
|
546
|
+
* @param blockIndex - Block height/index (number or bigint)
|
|
547
|
+
* @param hashAlg - Hash algorithm for leaf hash ('sha256' or 'sha3-384')
|
|
548
|
+
* @throws Error if inputs are invalid
|
|
546
549
|
*/
|
|
547
|
-
async function createAccumulatorLeaf(userId, chainId, blockHash, blockIndex) {
|
|
550
|
+
async function createAccumulatorLeaf(userId, chainId, blockHash, blockIndex, hashAlg = 'sha3-384') {
|
|
548
551
|
await initWasm();
|
|
549
|
-
|
|
552
|
+
// Input validation with helpful error messages
|
|
553
|
+
if (typeof userId !== 'string' || userId.length !== 64) {
|
|
554
|
+
throw new Error(`Invalid userId: must be 64 hex characters (got ${typeof userId === 'string' ? userId.length : typeof userId})`);
|
|
555
|
+
}
|
|
556
|
+
if (!/^[0-9a-fA-F]{64}$/.test(userId)) {
|
|
557
|
+
throw new Error('Invalid userId: must contain only hex characters (0-9, a-f, A-F)');
|
|
558
|
+
}
|
|
559
|
+
if (typeof chainId !== 'string' || chainId.length === 0) {
|
|
560
|
+
throw new Error('Invalid chainId: must be a non-empty string');
|
|
561
|
+
}
|
|
562
|
+
if (typeof blockHash !== 'string' || blockHash.length !== 64) {
|
|
563
|
+
throw new Error(`Invalid blockHash: must be 64 hex characters (got ${typeof blockHash === 'string' ? blockHash.length : typeof blockHash})`);
|
|
564
|
+
}
|
|
565
|
+
if (!/^[0-9a-fA-F]{64}$/.test(blockHash)) {
|
|
566
|
+
throw new Error('Invalid blockHash: must contain only hex characters (0-9, a-f, A-F)');
|
|
567
|
+
}
|
|
568
|
+
// Convert blockIndex to bigint (WASM expects bigint for u64)
|
|
569
|
+
let indexBigInt;
|
|
570
|
+
if (typeof blockIndex === 'bigint') {
|
|
571
|
+
indexBigInt = blockIndex;
|
|
572
|
+
}
|
|
573
|
+
else if (typeof blockIndex === 'number') {
|
|
574
|
+
if (!Number.isInteger(blockIndex) || blockIndex < 0) {
|
|
575
|
+
throw new Error('Invalid blockIndex: must be a non-negative integer');
|
|
576
|
+
}
|
|
577
|
+
if (!Number.isSafeInteger(blockIndex)) {
|
|
578
|
+
throw new Error('Invalid blockIndex: number exceeds MAX_SAFE_INTEGER; use bigint instead');
|
|
579
|
+
}
|
|
580
|
+
indexBigInt = BigInt(blockIndex);
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
throw new Error(`Invalid blockIndex: must be a number or bigint (got ${typeof blockIndex})`);
|
|
584
|
+
}
|
|
585
|
+
if (indexBigInt < 0n) {
|
|
586
|
+
throw new Error('Invalid blockIndex: must be non-negative');
|
|
587
|
+
}
|
|
588
|
+
try {
|
|
589
|
+
const result = typeof wasm_create_accumulator_leaf_with_alg === 'function'
|
|
590
|
+
? wasm_create_accumulator_leaf_with_alg(userId, chainId, blockHash, indexBigInt, hashAlg)
|
|
591
|
+
: wasm_create_accumulator_leaf(userId, chainId, blockHash, indexBigInt);
|
|
592
|
+
const parsed = JSON.parse(result);
|
|
593
|
+
if (parsed.error) {
|
|
594
|
+
throw new Error(parsed.error);
|
|
595
|
+
}
|
|
596
|
+
return parsed;
|
|
597
|
+
}
|
|
598
|
+
catch (e) {
|
|
599
|
+
if (e instanceof Error) {
|
|
600
|
+
// Re-throw our validation errors
|
|
601
|
+
if (e.message.startsWith('Invalid ')) {
|
|
602
|
+
throw e;
|
|
603
|
+
}
|
|
604
|
+
// Wrap WASM errors
|
|
605
|
+
throw new Error(`WASM error in createAccumulatorLeaf: ${e.message}`);
|
|
606
|
+
}
|
|
607
|
+
throw new Error(`Unknown error in createAccumulatorLeaf: ${String(e)}`);
|
|
608
|
+
}
|
|
550
609
|
}
|
|
551
610
|
/**
|
|
552
611
|
* Compute Merkle root from an array of leaf hashes.
|
|
@@ -563,22 +622,48 @@ async function computeMerkleRoot(leaves, hashAlg = 'sha256') {
|
|
|
563
622
|
* Ready to use in an Ethereum transaction.
|
|
564
623
|
*
|
|
565
624
|
* @param rootHex - 32-byte Merkle root (64 hex chars, with or without 0x prefix)
|
|
566
|
-
* @param epoch - Epoch number
|
|
625
|
+
* @param epoch - Epoch number (number or bigint)
|
|
567
626
|
*/
|
|
568
627
|
async function generateEvmAnchorCalldata(rootHex, epoch) {
|
|
569
628
|
await initWasm();
|
|
570
|
-
|
|
629
|
+
let epochBigInt;
|
|
630
|
+
if (typeof epoch === 'bigint') {
|
|
631
|
+
epochBigInt = epoch;
|
|
632
|
+
}
|
|
633
|
+
else {
|
|
634
|
+
if (!Number.isInteger(epoch) || epoch < 0) {
|
|
635
|
+
throw new Error('Invalid epoch: must be a non-negative integer');
|
|
636
|
+
}
|
|
637
|
+
if (!Number.isSafeInteger(epoch)) {
|
|
638
|
+
throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');
|
|
639
|
+
}
|
|
640
|
+
epochBigInt = BigInt(epoch);
|
|
641
|
+
}
|
|
642
|
+
return JSON.parse(wasm_generate_evm_anchor_calldata(rootHex, epochBigInt));
|
|
571
643
|
}
|
|
572
644
|
/**
|
|
573
645
|
* Generate Bitcoin OP_RETURN payload for anchoring.
|
|
574
646
|
* 45 bytes: "MTARA" (5) + epoch (8) + root32 (32)
|
|
575
647
|
*
|
|
576
648
|
* @param rootHex - 32-byte Merkle root (64 hex chars)
|
|
577
|
-
* @param epoch - Epoch number
|
|
649
|
+
* @param epoch - Epoch number (number or bigint)
|
|
578
650
|
*/
|
|
579
651
|
async function generateBitcoinAnchorPayload(rootHex, epoch) {
|
|
580
652
|
await initWasm();
|
|
581
|
-
|
|
653
|
+
let epochBigInt;
|
|
654
|
+
if (typeof epoch === 'bigint') {
|
|
655
|
+
epochBigInt = epoch;
|
|
656
|
+
}
|
|
657
|
+
else {
|
|
658
|
+
if (!Number.isInteger(epoch) || epoch < 0) {
|
|
659
|
+
throw new Error('Invalid epoch: must be a non-negative integer');
|
|
660
|
+
}
|
|
661
|
+
if (!Number.isSafeInteger(epoch)) {
|
|
662
|
+
throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');
|
|
663
|
+
}
|
|
664
|
+
epochBigInt = BigInt(epoch);
|
|
665
|
+
}
|
|
666
|
+
return JSON.parse(wasm_generate_bitcoin_anchor_payload(rootHex, epochBigInt));
|
|
582
667
|
}
|
|
583
668
|
/**
|
|
584
669
|
* Decode a Bitcoin OP_RETURN anchor payload.
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\n// Post-Quantum Cryptography for Browser and Node.js\n// \n// SECURITY NOTICE: This library implements FIPS 204 (ML-DSA) and FIPS 203 (ML-KEM)\n// post-quantum cryptographic algorithms. Key material should be:\n// 1. Stored securely (encrypted at rest)\n// 2. Transmitted only over secure channels\n// 3. Zeroized after use when possible\n// 4. Protected by hardware security modules for high-value operations\n//\n// See docs/WASM_SECURITY_MODEL.md for browser-specific security considerations.\n\n// ============================================================================\n// SECURITY CONSTANTS\n// ============================================================================\nconst MAX_MESSAGE_SIZE = 16 * 1024 * 1024; // 16MB - prevent memory exhaustion\nconst MAX_KEY_SIZE = 1024 * 1024; // 1MB - reasonable for PQC keys\nconst MAX_ATTESTATION_COUNT = 100; // Prevent DoS from large attestation arrays\n\nexport interface KyberKeypair {\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface KyberEncap {\n kem_ct_b64u: string;\n shared_b64u: string;\n}\n\nexport interface AesGcmWrap {\n iv_b64u: string;\n ct_b64u: string;\n}\n\nexport interface DilithiumKeypair {\n algorithm: string;\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface DilithiumSignResult {\n signature_b64u: string;\n algorithm: string;\n}\n\nexport interface DilithiumVerifyResult {\n is_valid: boolean;\n algorithm: string;\n}\n\nexport interface HkdfResult {\n key_b64u: string;\n}\n\nexport interface AesGcmUnwrapResult {\n dek_b64u: string;\n}\n\n// Import WASM functions (namespace import for better bundler compatibility)\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\n\n// Deterministic/canonicalization and governance helpers\nexport interface CanonicalOut { canonical: string; msg_b64u?: string; msgB64u?: string }\n\n// Initialize WASM\nlet wasmReady = false;\n\n/**\n * Initialize the underlying WASM module.\n * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.\n * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.\n */\nexport async function initWasm(wasmInput?: any): Promise<void> {\n if (wasmReady) return;\n const maybeInit = (wasmPkg as any).default;\n if (typeof maybeInit === 'function') {\n // Some environments require a URL/Module/bytes for initialization.\n // We forward the optional value if provided; otherwise let the glue resolve it.\n if (wasmInput !== undefined) {\n await maybeInit(wasmInput);\n } else {\n await maybeInit();\n }\n }\n wasmReady = true;\n}\n\n// Kyber functions\nexport async function kyberKeygen(): Promise<KyberKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// HKDF functions\nexport async function hkdfSha256(\n secretB64u: string,\n infoB64u: string,\n saltB64u?: string,\n len: number = 32\n): Promise<HkdfResult> {\n await initWasm();\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// AES-GCM functions\nexport async function aesGcmWrap(\n keyB64u: string,\n dekB64u: string,\n aadB64u: string\n): Promise<AesGcmWrap> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function aesGcmUnwrap(\n keyB64u: string,\n ivB64u: string,\n ctB64u: string,\n aadB64u: string\n): Promise<AesGcmUnwrapResult> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// Dilithium functions\n\n/**\n * Generate a new ML-DSA-65 (Dilithium) keypair.\n * SECURITY: Keys should be stored encrypted at rest.\n * For high-value operations, consider hardware security modules.\n */\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_dilithium_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Sign a message using ML-DSA-65 (Dilithium).\n * @param messageB64u - Base64url-encoded message to sign\n * @param secretB64u - Base64url-encoded secret key\n * SECURITY: Secret key should be zeroized after use if possible.\n */\nexport async function dilithiumSign(\n messageB64u: string,\n secretB64u: string\n): Promise<DilithiumSignResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (secretB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Secret key exceeds maximum size of ${MAX_KEY_SIZE} bytes`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Verify a ML-DSA-65 (Dilithium) signature.\n * @param messageB64u - Base64url-encoded message\n * @param signatureB64u - Base64url-encoded signature\n * @param publicB64u - Base64url-encoded public key\n */\nexport async function dilithiumVerify(\n messageB64u: string,\n signatureB64u: string,\n publicB64u: string\n): Promise<DilithiumVerifyResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (signatureB64u.length > MAX_KEY_SIZE || publicB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Signature or public key exceeds maximum size`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// ---- Deterministic helpers (multisig/art token) ----\nexport async function jcsCanonicalize(json: unknown): Promise<string> {\n await initWasm();\n const raw = (wasmPkg as any).jcs_canonicalize(JSON.stringify(json));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return out.canonical as string;\n}\n\nexport async function buildPolicyPreimage(policy: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_governance(JSON.stringify(policy));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildMintPreimage(header: unknown, asset: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildTransferPreimage(header: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_transfer(JSON.stringify(header));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildAnchorPreimage(userId: string, rootHex: string, epoch: string, chains: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\n// ---- Veritas Block Preimage (NEW v2 JCS canonical form) ----\n// We migrate block signing to a canonical (JCS) JSON similar to other preimages.\n// Legacy (v1) blocks used a hand-crafted JSON.stringify of a plain object with fixed insertion order.\n// This helper produces a canonical JSON string and msg_b64u = b64url(UTF-8(canonical JSON)).\n// NOTE: We intentionally EXCLUDE signature, encryptionKeyHash, and any runtime-only fields.\n// Fields included (ordered via JCS lexical ordering):\n// contentType, dataHash, index, metadataHash, ownerPublicKey, previousHash, signatureAlg, timestamp, version\n// index & timestamp MUST be strings representing decimal integers (BigInt safe) – caller responsibility.\nexport interface BlockPreimageInput {\n index: string | number | bigint;\n timestamp: string | number | bigint;\n previousHash: string;\n dataHash: string;\n metadataHash: string;\n signatureAlg: string; // e.g. 'dilithium2'\n ownerPublicKey: string; // Dilithium public key (base64url)\n contentType?: string; // default 'application/json'\n version: number; // block format / protocol version\n}\n\nexport async function buildBlockPreimage(block: BlockPreimageInput): Promise<CanonicalOut> {\n await initWasm();\n // Normalize fields per spec\n const normalized = {\n contentType: block.contentType || 'application/json',\n dataHash: block.dataHash,\n index: block.index.toString(),\n metadataHash: block.metadataHash,\n ownerPublicKey: block.ownerPublicKey,\n previousHash: block.previousHash,\n signatureAlg: block.signatureAlg,\n timestamp: block.timestamp.toString(),\n version: block.version,\n };\n // Use JCS canonicalization via wasm jcs_canonicalize (already exposed through jcsCanonicalize helper)\n const canonical = await jcsCanonicalize(normalized);\n const msg_b64u = b64uEncode(new TextEncoder().encode(canonical));\n return { canonical, msg_b64u, msgB64u: msg_b64u };\n}\n\nexport async function validateRoyalty(receiver: string, bps: number): Promise<boolean> {\n await initWasm();\n const raw = (wasmPkg as any).validate_royalty(receiver, bps);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) return false;\n return !!out.ok;\n}\n\nexport async function verifyAttestations(msgB64u: string, attestations: Array<{ alg: string; publicKeyB64u: string; signatureB64u: string }>, allowedPublicKeys?: string[]): Promise<number> {\n await initWasm();\n const raw = (wasmPkg as any).verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return Number(out.valid_count || 0);\n}\n\n// Utility functions\n// Cross-env base64url helpers (browser + Node)\nfunction _fromByteArray(bytes: Uint8Array): string {\n if (typeof btoa === 'function') {\n // Browser\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n }\n // Node\n return Buffer.from(bytes).toString('base64');\n}\n\nfunction _toByteArray(b64: string): Uint8Array {\n if (typeof atob === 'function') {\n const binary = atob(b64);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n }\n return new Uint8Array(Buffer.from(b64, 'base64'));\n}\n\nexport function b64uEncode(data: Uint8Array): string {\n return _fromByteArray(data)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+/g, '');\n}\n\nexport function b64uDecode(str: string): Uint8Array {\n const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');\n return _toByteArray(b64);\n}\n\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result |= a[i] ^ b[i];\n }\n return result === 0;\n}\n\n// ============================================================================\n// THRESHOLD SIGNATURES & GOVERNANCE\n// ============================================================================\n\nexport interface GovernancePolicy {\n policyId: string;\n version: number;\n chainId: string;\n threshold: number;\n signers: Array<{\n publicKeyB64u: string;\n keyId: string;\n weight: number;\n role: 'owner' | 'guardian' | 'delegate' | 'recovery';\n }>;\n operations: Array<{\n action: string;\n requiredThreshold?: number;\n requiredRoles?: string[];\n maxValue?: string;\n timelock?: number;\n }>;\n validFrom: number;\n validUntil: number;\n createdAt: number;\n createdBy: string;\n policySignature: string;\n}\n\nexport interface Attestation {\n signerKeyId: string;\n signerPublicKeyB64u: string;\n operationHash: string;\n operationType: string;\n attestedAt: number;\n expiresAt: number;\n signatureAlg: 'dilithium2';\n signatureB64u: string;\n}\n\nexport interface AggregatedSignature {\n policyId: string;\n policyVersion: number;\n operationHash: string;\n attestations: Attestation[];\n totalWeight: number;\n thresholdMet: boolean;\n verifiedAt: number;\n}\n\n/**\n * Create an attestation for a threshold signature operation.\n */\nexport async function createAttestation(\n operation: { type: string; payload: unknown },\n signerKeys: { keyId: string; publicKeyB64u: string; secretKeyB64u: string },\n expiresInSeconds: number = 3600\n): Promise<Attestation> {\n await initWasm();\n \n // Build deterministic preimage for the operation\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const operationHash = await sha256B64u(preimageBytes);\n const msgB64u = b64uEncode(preimageBytes);\n \n // Sign the preimage\n const sig = await dilithiumSign(msgB64u, signerKeys.secretKeyB64u);\n \n return {\n signerKeyId: signerKeys.keyId,\n signerPublicKeyB64u: signerKeys.publicKeyB64u,\n operationHash,\n operationType: operation.type,\n attestedAt: Date.now(),\n expiresAt: Date.now() + expiresInSeconds * 1000,\n signatureAlg: 'dilithium2',\n signatureB64u: sig.signature_b64u\n };\n}\n\n/**\n * Verify an attestation signature.\n */\nexport async function verifyAttestation(\n attestation: Attestation,\n operation: { type: string; payload: unknown }\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Rebuild expected operation hash\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const expectedHash = await sha256B64u(preimageBytes);\n \n if (attestation.operationHash !== expectedHash) {\n return { valid: false, error: 'Operation hash mismatch' };\n }\n \n // Check expiry\n if (attestation.expiresAt < Date.now()) {\n return { valid: false, error: 'Attestation expired' };\n }\n \n // Verify signature\n const msgB64u = b64uEncode(preimageBytes);\n const result = await dilithiumVerify(msgB64u, attestation.signatureB64u, attestation.signerPublicKeyB64u);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that an aggregated signature meets the threshold policy.\n */\nexport async function verifyThreshold(\n aggregated: AggregatedSignature,\n operation: { type: string; payload: unknown },\n policy: GovernancePolicy\n): Promise<{ valid: boolean; errors: string[] }> {\n const errors: string[] = [];\n \n // Check policy match\n if (aggregated.policyId !== policy.policyId) {\n errors.push('Policy ID mismatch');\n }\n \n // Verify each attestation and compute weight\n let validWeight = 0;\n for (const attestation of aggregated.attestations) {\n const signer = policy.signers.find(s => s.publicKeyB64u === attestation.signerPublicKeyB64u);\n if (!signer) {\n errors.push(`Signer ${attestation.signerKeyId} not in policy`);\n continue;\n }\n \n const result = await verifyAttestation(attestation, operation);\n if (!result.valid) {\n errors.push(`Attestation from ${attestation.signerKeyId}: ${result.error}`);\n continue;\n }\n \n validWeight += signer.weight;\n }\n \n // Check threshold\n if (validWeight < policy.threshold) {\n errors.push(`Threshold not met: weight ${validWeight} < required ${policy.threshold}`);\n }\n \n return { valid: errors.length === 0, errors };\n}\n\n// ============================================================================\n// PRE-REGISTRATION COMMITMENT SCHEME\n// ============================================================================\n\nexport interface ProvenanceCommitment {\n type: 'ProvenanceCommitment';\n version: 1;\n commitmentHash: string;\n creatorPublicKey: string;\n timestamp: number;\n signature: string;\n}\n\nexport interface CommitmentReveal {\n commitmentHash: string;\n salt: string;\n assetHash: string;\n}\n\n/**\n * Create a provenance commitment for an asset before public disclosure.\n * This establishes a timestamped claim without revealing the asset content.\n */\nexport async function createProvenanceCommitment(\n assetBytes: Uint8Array,\n keys: { publicKeyB64u: string; secretKeyB64u: string }\n): Promise<{ commitment: ProvenanceCommitment; reveal: CommitmentReveal }> {\n await initWasm();\n \n // Generate random salt\n const salt = crypto.getRandomValues(new Uint8Array(32));\n \n // Compute commitment hash = SHA256(asset || salt || publicKey)\n const publicKeyBytes = b64uDecode(keys.publicKeyB64u);\n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const commitmentHash = await sha256B64u(preimage);\n const assetHash = await sha256B64u(assetBytes);\n \n // Build commitment object (without signature)\n const commitmentData = {\n type: 'ProvenanceCommitment' as const,\n version: 1 as const,\n commitmentHash,\n creatorPublicKey: keys.publicKeyB64u,\n timestamp: Date.now()\n };\n \n // Sign the commitment\n const canonical = await jcsCanonicalize(commitmentData);\n const sig = await dilithiumSign(b64uEncode(new TextEncoder().encode(canonical)), keys.secretKeyB64u);\n \n const commitment: ProvenanceCommitment = {\n ...commitmentData,\n signature: sig.signature_b64u\n };\n \n const reveal: CommitmentReveal = {\n commitmentHash,\n salt: b64uEncode(salt),\n assetHash\n };\n \n return { commitment, reveal };\n}\n\n/**\n * Verify a provenance commitment signature.\n */\nexport async function verifyProvenanceCommitment(\n commitment: ProvenanceCommitment\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Reconstruct the signed data (without signature field)\n const commitmentData = {\n type: commitment.type,\n version: commitment.version,\n commitmentHash: commitment.commitmentHash,\n creatorPublicKey: commitment.creatorPublicKey,\n timestamp: commitment.timestamp\n };\n \n const canonical = await jcsCanonicalize(commitmentData);\n const msgB64u = b64uEncode(new TextEncoder().encode(canonical));\n \n const result = await dilithiumVerify(msgB64u, commitment.signature, commitment.creatorPublicKey);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid commitment signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that a revealed asset matches a commitment.\n */\nexport async function verifyCommitmentReveal(\n commitment: ProvenanceCommitment,\n assetBytes: Uint8Array,\n reveal: CommitmentReveal\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // First verify the commitment signature\n const sigResult = await verifyProvenanceCommitment(commitment);\n if (!sigResult.valid) {\n return { valid: false, error: `Commitment signature invalid: ${sigResult.error}` };\n }\n \n // Verify asset hash matches\n const computedAssetHash = await sha256B64u(assetBytes);\n if (computedAssetHash !== reveal.assetHash) {\n return { valid: false, error: 'Asset hash does not match reveal' };\n }\n \n // Reconstruct commitment hash\n const salt = b64uDecode(reveal.salt);\n const publicKeyBytes = b64uDecode(commitment.creatorPublicKey);\n \n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const computedCommitmentHash = await sha256B64u(preimage);\n \n if (computedCommitmentHash !== commitment.commitmentHash) {\n return { valid: false, error: 'Commitment hash does not match reveal' };\n }\n \n return { valid: true };\n}\n\n// ============================================================================\n// HELPER: SHA-256 with base64url output\n// ============================================================================\n\nasync function sha256B64u(data: Uint8Array): Promise<string> {\n const hashBuffer = await crypto.subtle.digest('SHA-256', data as unknown as BufferSource);\n return b64uEncode(new Uint8Array(hashBuffer));\n}\n\n// ============================================================================\n// ALGORITHMIC OPTIMIZATIONS (arXiv:2501.02305, arXiv:2504.17033)\n// ============================================================================\n// High-performance data structures for verification operations\n\n// WASM bindings for algorithm functions\nconst wasm_create_nonce_cache = (wasmPkg as any).create_nonce_cache as (capacity: number, ttl_ms: number) => string;\nconst wasm_nonce_cache_info = (wasmPkg as any).nonce_cache_info as () => string;\nconst wasm_sssp_config = (wasmPkg as any).sssp_config as (nodes: number) => string;\nconst wasm_provenance_path_config = (wasmPkg as any).provenance_path_config as (chain_length: number, branches: number) => string;\nconst wasm_elastic_hash_config = (wasmPkg as any).elastic_hash_config as (capacity: number, load_factor: number) => string;\n\n/**\n * Nonce Cache Configuration\n * Uses Elastic Hashing (arXiv:2501.02305) for O(1) amortized lookup\n */\nexport interface NonceCacheConfig {\n type: string;\n capacity: number;\n ttl_ms: number;\n algorithm: string;\n complexity: string;\n}\n\n/**\n * Create a nonce cache configuration for replay attack prevention.\n * Based on Elastic Hashing - O(1) amortized, O(log(1/δ)) worst-case.\n * \n * @param capacity - Maximum number of nonces to track\n * @param ttlMs - Time-to-live in milliseconds before nonces expire\n */\nexport async function createNonceCacheConfig(capacity: number, ttlMs: number): Promise<NonceCacheConfig> {\n await initWasm();\n return JSON.parse(wasm_create_nonce_cache(capacity, ttlMs));\n}\n\n/**\n * Get information about the nonce cache algorithm.\n */\nexport async function getNonceCacheInfo(): Promise<{\n name: string;\n paper: string;\n probe_complexity: string;\n load_factor: number;\n features: string[];\n}> {\n await initWasm();\n return JSON.parse(wasm_nonce_cache_info());\n}\n\n/**\n * SSSP (Single-Source Shortest Path) Configuration\n * Uses Frontier-Reduced algorithm (arXiv:2504.17033)\n */\nexport interface SSSPConfig {\n name: string;\n paper: string;\n complexity: string;\n nodes: number;\n pivots_k: number;\n batch_t: number;\n use_cases: string[];\n}\n\n/**\n * Get optimal SSSP configuration for graph verification.\n * Uses Frontier-Reduced SSSP - O(m × log^(2/3)(n)) complexity.\n * \n * @param nodes - Expected number of nodes in the graph\n */\nexport async function getSSSPConfig(nodes: number): Promise<SSSPConfig> {\n await initWasm();\n return JSON.parse(wasm_sssp_config(nodes));\n}\n\n/**\n * Provenance Path Configuration\n * Optimized parameters for chain of custody verification\n */\nexport interface ProvenancePathConfig {\n algorithm: string;\n chain_length: number;\n branches: number;\n estimated_nodes: number;\n estimated_edges: number;\n pivots_k: number;\n batch_t: number;\n complexity: string;\n verification_mode: string;\n}\n\n/**\n * Get optimized configuration for provenance chain verification.\n * \n * @param chainLength - Number of blocks in the provenance chain\n * @param branches - Average number of branches per block\n */\nexport async function getProvenancePathConfig(chainLength: number, branches: number): Promise<ProvenancePathConfig> {\n await initWasm();\n return JSON.parse(wasm_provenance_path_config(chainLength, branches));\n}\n\n/**\n * Elastic Hash Configuration\n * High-performance hash table for key caching\n */\nexport interface ElasticHashConfig {\n algorithm: string;\n paper: string;\n capacity: number;\n load_factor: number;\n levels: number;\n probe_complexity: {\n amortized: string;\n worst_case: string;\n };\n use_cases: string[];\n}\n\n/**\n * Get elastic hash table configuration for key caching.\n * Optimal for PQC public key caching with O(1) amortized lookups.\n * \n * @param capacity - Maximum number of entries\n * @param loadFactor - Target load factor (0.0 to 1.0, recommend 0.95)\n */\nexport async function getElasticHashConfig(capacity: number, loadFactor: number = 0.95): Promise<ElasticHashConfig> {\n await initWasm();\n return JSON.parse(wasm_elastic_hash_config(capacity, loadFactor));\n}\n\n// ============================================================================\n// CROSS-CHAIN ANCHORING (Roadmap M8)\n// ============================================================================\n// Merkle root submission to Ethereum, Bitcoin, and L2s for timestamping\n\n// WASM bindings for anchoring functions\nconst wasm_anchor_chains_info = (wasmPkg as any).anchor_chains_info as () => string;\nconst wasm_create_accumulator_leaf = (wasmPkg as any).create_accumulator_leaf as (userId: string, chainId: string, blockHash: string, blockIndex: number) => string;\nconst wasm_compute_merkle_root = (wasmPkg as any).compute_merkle_root as (leavesJson: string, hashAlg: string) => string;\nconst wasm_generate_evm_anchor_calldata = (wasmPkg as any).generate_evm_anchor_calldata as (rootHex: string, epoch: number) => string;\nconst wasm_generate_bitcoin_anchor_payload = (wasmPkg as any).generate_bitcoin_anchor_payload as (rootHex: string, epoch: number) => string;\nconst wasm_decode_bitcoin_anchor_payload = (wasmPkg as any).decode_bitcoin_anchor_payload as (payloadHex: string) => string;\nconst wasm_truncate_to_bytes32 = (wasmPkg as any).truncate_to_bytes32 as (hashHex: string) => string;\nconst wasm_anchor_config_info = (wasmPkg as any).anchor_config_info as () => string;\n\n/**\n * Supported blockchain chains for anchoring\n */\nexport interface AnchorChainInfo {\n id: string;\n name: string;\n chain_id?: number;\n type: 'evm' | 'evm_l2' | 'bitcoin';\n contract?: string;\n method?: string;\n payload_size?: number;\n}\n\n/**\n * Get information about supported anchor chains\n */\nexport async function getAnchorChainsInfo(): Promise<{ chains: AnchorChainInfo[] }> {\n await initWasm();\n return JSON.parse(wasm_anchor_chains_info());\n}\n\n/**\n * Accumulator leaf representing a chain's current state\n */\nexport interface AccumulatorLeaf {\n user_id: string;\n chain_id: string;\n block_hash: string;\n block_index: number;\n timestamp: number;\n leaf_hash: string;\n}\n\n/**\n * Create a Merkle accumulator leaf for a chain state.\n * This is the fundamental unit for batching chain updates into super-roots.\n * \n * @param userId - User ID (64 hex chars)\n * @param chainId - Chain identifier within user's chains\n * @param blockHash - Hash of the latest block (64 hex chars)\n * @param blockIndex - Block height/index\n */\nexport async function createAccumulatorLeaf(\n userId: string,\n chainId: string,\n blockHash: string,\n blockIndex: number\n): Promise<AccumulatorLeaf> {\n await initWasm();\n return JSON.parse(wasm_create_accumulator_leaf(userId, chainId, blockHash, blockIndex));\n}\n\n/**\n * Merkle root computation result\n */\nexport interface MerkleRootResult {\n root: string;\n leaf_count: number;\n hash_alg: string;\n}\n\n/**\n * Compute Merkle root from an array of leaf hashes.\n * \n * @param leaves - Array of hex hash strings\n * @param hashAlg - Hash algorithm ('sha256' or 'sha3-384')\n */\nexport async function computeMerkleRoot(\n leaves: string[],\n hashAlg: 'sha256' | 'sha3-384' = 'sha256'\n): Promise<MerkleRootResult> {\n await initWasm();\n return JSON.parse(wasm_compute_merkle_root(JSON.stringify(leaves), hashAlg));\n}\n\n/**\n * EVM anchor calldata for AnchorRegistry contract\n */\nexport interface EvmAnchorCalldata {\n calldata: string;\n root: string;\n epoch: number;\n method: string;\n selector: string;\n}\n\n/**\n * Generate EVM calldata for AnchorRegistry.anchor(bytes32, uint256).\n * Ready to use in an Ethereum transaction.\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars, with or without 0x prefix)\n * @param epoch - Epoch number\n */\nexport async function generateEvmAnchorCalldata(\n rootHex: string,\n epoch: number\n): Promise<EvmAnchorCalldata> {\n await initWasm();\n return JSON.parse(wasm_generate_evm_anchor_calldata(rootHex, epoch));\n}\n\n/**\n * Bitcoin OP_RETURN anchor payload\n */\nexport interface BitcoinAnchorPayload {\n payload_hex: string;\n payload_size: number;\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Generate Bitcoin OP_RETURN payload for anchoring.\n * 45 bytes: \"MTARA\" (5) + epoch (8) + root32 (32)\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars)\n * @param epoch - Epoch number\n */\nexport async function generateBitcoinAnchorPayload(\n rootHex: string,\n epoch: number\n): Promise<BitcoinAnchorPayload> {\n await initWasm();\n return JSON.parse(wasm_generate_bitcoin_anchor_payload(rootHex, epoch));\n}\n\n/**\n * Decoded Bitcoin anchor payload\n */\nexport interface DecodedBitcoinPayload {\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Decode a Bitcoin OP_RETURN anchor payload.\n * \n * @param payloadHex - Hex-encoded payload bytes\n */\nexport async function decodeBitcoinAnchorPayload(\n payloadHex: string\n): Promise<DecodedBitcoinPayload> {\n await initWasm();\n return JSON.parse(wasm_decode_bitcoin_anchor_payload(payloadHex));\n}\n\n/**\n * Truncation result for SHA3-384 to bytes32\n */\nexport interface TruncationResult {\n original: string;\n original_bytes: number;\n truncated: string;\n truncated_bytes: number;\n}\n\n/**\n * Truncate a hash to 32 bytes for EVM compatibility.\n * Used when anchoring SHA3-384 hashes to Ethereum.\n * \n * @param hashHex - Hash to truncate (with or without 0x prefix)\n */\nexport async function truncateToBytes32(hashHex: string): Promise<TruncationResult> {\n await initWasm();\n return JSON.parse(wasm_truncate_to_bytes32(hashHex));\n}\n\n/**\n * Anchor configuration and estimates\n */\nexport interface AnchorConfigInfo {\n accumulator: {\n max_leaves_per_epoch: number;\n hash_algorithms: string[];\n default_hash: string;\n };\n ethereum: {\n contract: string;\n function: string;\n selector: string;\n estimated_gas: number;\n calldata_size: number;\n };\n bitcoin: {\n method: string;\n magic: string;\n payload_size: number;\n estimated_fee_sats: number;\n };\n recommended_schedule: {\n production: string;\n high_frequency: string;\n };\n}\n\n/**\n * Get anchor configuration and gas/fee estimates.\n */\nexport async function getAnchorConfigInfo(): Promise<AnchorConfigInfo> {\n await initWasm();\n return JSON.parse(wasm_anchor_config_info());\n}\n"],"names":["wasmPkg"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\n// Post-Quantum Cryptography for Browser and Node.js\n// \n// SECURITY NOTICE: This library implements FIPS 204 (ML-DSA) and FIPS 203 (ML-KEM)\n// post-quantum cryptographic algorithms. Key material should be:\n// 1. Stored securely (encrypted at rest)\n// 2. Transmitted only over secure channels\n// 3. Zeroized after use when possible\n// 4. Protected by hardware security modules for high-value operations\n//\n// See docs/WASM_SECURITY_MODEL.md for browser-specific security considerations.\n\n// ============================================================================\n// SECURITY CONSTANTS\n// ============================================================================\nconst MAX_MESSAGE_SIZE = 16 * 1024 * 1024; // 16MB - prevent memory exhaustion\nconst MAX_KEY_SIZE = 1024 * 1024; // 1MB - reasonable for PQC keys\nconst MAX_ATTESTATION_COUNT = 100; // Prevent DoS from large attestation arrays\n\nexport interface KyberKeypair {\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface KyberEncap {\n kem_ct_b64u: string;\n shared_b64u: string;\n}\n\nexport interface AesGcmWrap {\n iv_b64u: string;\n ct_b64u: string;\n}\n\nexport interface DilithiumKeypair {\n algorithm: string;\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface DilithiumSignResult {\n signature_b64u: string;\n algorithm: string;\n}\n\nexport interface DilithiumVerifyResult {\n is_valid: boolean;\n algorithm: string;\n}\n\nexport interface HkdfResult {\n key_b64u: string;\n}\n\nexport interface AesGcmUnwrapResult {\n dek_b64u: string;\n}\n\n// Import WASM functions (namespace import for better bundler compatibility)\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\n\n// Deterministic/canonicalization and governance helpers\nexport interface CanonicalOut { canonical: string; msg_b64u?: string; msgB64u?: string }\n\n// Initialize WASM\nlet wasmReady = false;\n\n/**\n * Initialize the underlying WASM module.\n * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.\n * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.\n */\nexport async function initWasm(wasmInput?: any): Promise<void> {\n if (wasmReady) return;\n const maybeInit = (wasmPkg as any).default;\n if (typeof maybeInit === 'function') {\n // Some environments require a URL/Module/bytes for initialization.\n // We forward the optional value if provided; otherwise let the glue resolve it.\n if (wasmInput !== undefined) {\n await maybeInit(wasmInput);\n } else {\n await maybeInit();\n }\n }\n wasmReady = true;\n}\n\n// Kyber functions\nexport async function kyberKeygen(): Promise<KyberKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// HKDF functions\nexport async function hkdfSha256(\n secretB64u: string,\n infoB64u: string,\n saltB64u?: string,\n len: number = 32\n): Promise<HkdfResult> {\n await initWasm();\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// AES-GCM functions\nexport async function aesGcmWrap(\n keyB64u: string,\n dekB64u: string,\n aadB64u: string\n): Promise<AesGcmWrap> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function aesGcmUnwrap(\n keyB64u: string,\n ivB64u: string,\n ctB64u: string,\n aadB64u: string\n): Promise<AesGcmUnwrapResult> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// Dilithium functions\n\n/**\n * Generate a new ML-DSA-65 (Dilithium) keypair.\n * SECURITY: Keys should be stored encrypted at rest.\n * For high-value operations, consider hardware security modules.\n */\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_dilithium_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Sign a message using ML-DSA-65 (Dilithium).\n * @param messageB64u - Base64url-encoded message to sign\n * @param secretB64u - Base64url-encoded secret key\n * SECURITY: Secret key should be zeroized after use if possible.\n */\nexport async function dilithiumSign(\n messageB64u: string,\n secretB64u: string\n): Promise<DilithiumSignResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (secretB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Secret key exceeds maximum size of ${MAX_KEY_SIZE} bytes`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Verify a ML-DSA-65 (Dilithium) signature.\n * @param messageB64u - Base64url-encoded message\n * @param signatureB64u - Base64url-encoded signature\n * @param publicB64u - Base64url-encoded public key\n */\nexport async function dilithiumVerify(\n messageB64u: string,\n signatureB64u: string,\n publicB64u: string\n): Promise<DilithiumVerifyResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (signatureB64u.length > MAX_KEY_SIZE || publicB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Signature or public key exceeds maximum size`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// ---- Deterministic helpers (multisig/art token) ----\nexport async function jcsCanonicalize(json: unknown): Promise<string> {\n await initWasm();\n const raw = (wasmPkg as any).jcs_canonicalize(JSON.stringify(json));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return out.canonical as string;\n}\n\nexport async function buildPolicyPreimage(policy: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_governance(JSON.stringify(policy));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildMintPreimage(header: unknown, asset: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildTransferPreimage(header: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_transfer(JSON.stringify(header));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildAnchorPreimage(userId: string, rootHex: string, epoch: string, chains: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\n// ---- Veritas Block Preimage (NEW v2 JCS canonical form) ----\n// We migrate block signing to a canonical (JCS) JSON similar to other preimages.\n// Legacy (v1) blocks used a hand-crafted JSON.stringify of a plain object with fixed insertion order.\n// This helper produces a canonical JSON string and msg_b64u = b64url(UTF-8(canonical JSON)).\n// NOTE: We intentionally EXCLUDE signature, encryptionKeyHash, and any runtime-only fields.\n// Fields included (ordered via JCS lexical ordering):\n// contentType, dataHash, index, metadataHash, ownerPublicKey, previousHash, signatureAlg, timestamp, version\n// index & timestamp MUST be strings representing decimal integers (BigInt safe) – caller responsibility.\nexport interface BlockPreimageInput {\n index: string | number | bigint;\n timestamp: string | number | bigint;\n previousHash: string;\n dataHash: string;\n metadataHash: string;\n signatureAlg: string; // e.g. 'dilithium2'\n ownerPublicKey: string; // Dilithium public key (base64url)\n contentType?: string; // default 'application/json'\n version: number; // block format / protocol version\n}\n\nexport async function buildBlockPreimage(block: BlockPreimageInput): Promise<CanonicalOut> {\n await initWasm();\n // Normalize fields per spec\n const normalized = {\n contentType: block.contentType || 'application/json',\n dataHash: block.dataHash,\n index: block.index.toString(),\n metadataHash: block.metadataHash,\n ownerPublicKey: block.ownerPublicKey,\n previousHash: block.previousHash,\n signatureAlg: block.signatureAlg,\n timestamp: block.timestamp.toString(),\n version: block.version,\n };\n // Use JCS canonicalization via wasm jcs_canonicalize (already exposed through jcsCanonicalize helper)\n const canonical = await jcsCanonicalize(normalized);\n const msg_b64u = b64uEncode(new TextEncoder().encode(canonical));\n return { canonical, msg_b64u, msgB64u: msg_b64u };\n}\n\nexport async function validateRoyalty(receiver: string, bps: number): Promise<boolean> {\n await initWasm();\n const raw = (wasmPkg as any).validate_royalty(receiver, bps);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) return false;\n return !!out.ok;\n}\n\nexport async function verifyAttestations(msgB64u: string, attestations: Array<{ alg: string; publicKeyB64u: string; signatureB64u: string }>, allowedPublicKeys?: string[]): Promise<number> {\n await initWasm();\n const raw = (wasmPkg as any).verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return Number(out.valid_count || 0);\n}\n\n// Utility functions\n// Cross-env base64url helpers (browser + Node)\nfunction _fromByteArray(bytes: Uint8Array): string {\n if (typeof btoa === 'function') {\n // Browser\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n }\n // Node\n return Buffer.from(bytes).toString('base64');\n}\n\nfunction _toByteArray(b64: string): Uint8Array {\n if (typeof atob === 'function') {\n const binary = atob(b64);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n }\n return new Uint8Array(Buffer.from(b64, 'base64'));\n}\n\nexport function b64uEncode(data: Uint8Array): string {\n return _fromByteArray(data)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+/g, '');\n}\n\nexport function b64uDecode(str: string): Uint8Array {\n const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');\n return _toByteArray(b64);\n}\n\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result |= a[i] ^ b[i];\n }\n return result === 0;\n}\n\n// ============================================================================\n// THRESHOLD SIGNATURES & GOVERNANCE\n// ============================================================================\n\nexport interface GovernancePolicy {\n policyId: string;\n version: number;\n chainId: string;\n threshold: number;\n signers: Array<{\n publicKeyB64u: string;\n keyId: string;\n weight: number;\n role: 'owner' | 'guardian' | 'delegate' | 'recovery';\n }>;\n operations: Array<{\n action: string;\n requiredThreshold?: number;\n requiredRoles?: string[];\n maxValue?: string;\n timelock?: number;\n }>;\n validFrom: number;\n validUntil: number;\n createdAt: number;\n createdBy: string;\n policySignature: string;\n}\n\nexport interface Attestation {\n signerKeyId: string;\n signerPublicKeyB64u: string;\n operationHash: string;\n operationType: string;\n attestedAt: number;\n expiresAt: number;\n signatureAlg: 'dilithium2';\n signatureB64u: string;\n}\n\nexport interface AggregatedSignature {\n policyId: string;\n policyVersion: number;\n operationHash: string;\n attestations: Attestation[];\n totalWeight: number;\n thresholdMet: boolean;\n verifiedAt: number;\n}\n\n/**\n * Create an attestation for a threshold signature operation.\n */\nexport async function createAttestation(\n operation: { type: string; payload: unknown },\n signerKeys: { keyId: string; publicKeyB64u: string; secretKeyB64u: string },\n expiresInSeconds: number = 3600\n): Promise<Attestation> {\n await initWasm();\n \n // Build deterministic preimage for the operation\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const operationHash = await sha256B64u(preimageBytes);\n const msgB64u = b64uEncode(preimageBytes);\n \n // Sign the preimage\n const sig = await dilithiumSign(msgB64u, signerKeys.secretKeyB64u);\n \n return {\n signerKeyId: signerKeys.keyId,\n signerPublicKeyB64u: signerKeys.publicKeyB64u,\n operationHash,\n operationType: operation.type,\n attestedAt: Date.now(),\n expiresAt: Date.now() + expiresInSeconds * 1000,\n signatureAlg: 'dilithium2',\n signatureB64u: sig.signature_b64u\n };\n}\n\n/**\n * Verify an attestation signature.\n */\nexport async function verifyAttestation(\n attestation: Attestation,\n operation: { type: string; payload: unknown }\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Rebuild expected operation hash\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const expectedHash = await sha256B64u(preimageBytes);\n \n if (attestation.operationHash !== expectedHash) {\n return { valid: false, error: 'Operation hash mismatch' };\n }\n \n // Check expiry\n if (attestation.expiresAt < Date.now()) {\n return { valid: false, error: 'Attestation expired' };\n }\n \n // Verify signature\n const msgB64u = b64uEncode(preimageBytes);\n const result = await dilithiumVerify(msgB64u, attestation.signatureB64u, attestation.signerPublicKeyB64u);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that an aggregated signature meets the threshold policy.\n */\nexport async function verifyThreshold(\n aggregated: AggregatedSignature,\n operation: { type: string; payload: unknown },\n policy: GovernancePolicy\n): Promise<{ valid: boolean; errors: string[] }> {\n const errors: string[] = [];\n \n // Check policy match\n if (aggregated.policyId !== policy.policyId) {\n errors.push('Policy ID mismatch');\n }\n \n // Verify each attestation and compute weight\n let validWeight = 0;\n for (const attestation of aggregated.attestations) {\n const signer = policy.signers.find(s => s.publicKeyB64u === attestation.signerPublicKeyB64u);\n if (!signer) {\n errors.push(`Signer ${attestation.signerKeyId} not in policy`);\n continue;\n }\n \n const result = await verifyAttestation(attestation, operation);\n if (!result.valid) {\n errors.push(`Attestation from ${attestation.signerKeyId}: ${result.error}`);\n continue;\n }\n \n validWeight += signer.weight;\n }\n \n // Check threshold\n if (validWeight < policy.threshold) {\n errors.push(`Threshold not met: weight ${validWeight} < required ${policy.threshold}`);\n }\n \n return { valid: errors.length === 0, errors };\n}\n\n// ============================================================================\n// PRE-REGISTRATION COMMITMENT SCHEME\n// ============================================================================\n\nexport interface ProvenanceCommitment {\n type: 'ProvenanceCommitment';\n version: 1;\n commitmentHash: string;\n creatorPublicKey: string;\n timestamp: number;\n signature: string;\n}\n\nexport interface CommitmentReveal {\n commitmentHash: string;\n salt: string;\n assetHash: string;\n}\n\n/**\n * Create a provenance commitment for an asset before public disclosure.\n * This establishes a timestamped claim without revealing the asset content.\n */\nexport async function createProvenanceCommitment(\n assetBytes: Uint8Array,\n keys: { publicKeyB64u: string; secretKeyB64u: string }\n): Promise<{ commitment: ProvenanceCommitment; reveal: CommitmentReveal }> {\n await initWasm();\n \n // Generate random salt\n const salt = crypto.getRandomValues(new Uint8Array(32));\n \n // Compute commitment hash = SHA256(asset || salt || publicKey)\n const publicKeyBytes = b64uDecode(keys.publicKeyB64u);\n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const commitmentHash = await sha256B64u(preimage);\n const assetHash = await sha256B64u(assetBytes);\n \n // Build commitment object (without signature)\n const commitmentData = {\n type: 'ProvenanceCommitment' as const,\n version: 1 as const,\n commitmentHash,\n creatorPublicKey: keys.publicKeyB64u,\n timestamp: Date.now()\n };\n \n // Sign the commitment\n const canonical = await jcsCanonicalize(commitmentData);\n const sig = await dilithiumSign(b64uEncode(new TextEncoder().encode(canonical)), keys.secretKeyB64u);\n \n const commitment: ProvenanceCommitment = {\n ...commitmentData,\n signature: sig.signature_b64u\n };\n \n const reveal: CommitmentReveal = {\n commitmentHash,\n salt: b64uEncode(salt),\n assetHash\n };\n \n return { commitment, reveal };\n}\n\n/**\n * Verify a provenance commitment signature.\n */\nexport async function verifyProvenanceCommitment(\n commitment: ProvenanceCommitment\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Reconstruct the signed data (without signature field)\n const commitmentData = {\n type: commitment.type,\n version: commitment.version,\n commitmentHash: commitment.commitmentHash,\n creatorPublicKey: commitment.creatorPublicKey,\n timestamp: commitment.timestamp\n };\n \n const canonical = await jcsCanonicalize(commitmentData);\n const msgB64u = b64uEncode(new TextEncoder().encode(canonical));\n \n const result = await dilithiumVerify(msgB64u, commitment.signature, commitment.creatorPublicKey);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid commitment signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that a revealed asset matches a commitment.\n */\nexport async function verifyCommitmentReveal(\n commitment: ProvenanceCommitment,\n assetBytes: Uint8Array,\n reveal: CommitmentReveal\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // First verify the commitment signature\n const sigResult = await verifyProvenanceCommitment(commitment);\n if (!sigResult.valid) {\n return { valid: false, error: `Commitment signature invalid: ${sigResult.error}` };\n }\n \n // Verify asset hash matches\n const computedAssetHash = await sha256B64u(assetBytes);\n if (computedAssetHash !== reveal.assetHash) {\n return { valid: false, error: 'Asset hash does not match reveal' };\n }\n \n // Reconstruct commitment hash\n const salt = b64uDecode(reveal.salt);\n const publicKeyBytes = b64uDecode(commitment.creatorPublicKey);\n \n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const computedCommitmentHash = await sha256B64u(preimage);\n \n if (computedCommitmentHash !== commitment.commitmentHash) {\n return { valid: false, error: 'Commitment hash does not match reveal' };\n }\n \n return { valid: true };\n}\n\n// ============================================================================\n// HELPER: SHA-256 with base64url output\n// ============================================================================\n\nasync function sha256B64u(data: Uint8Array): Promise<string> {\n const hashBuffer = await crypto.subtle.digest('SHA-256', data as unknown as BufferSource);\n return b64uEncode(new Uint8Array(hashBuffer));\n}\n\n// ============================================================================\n// ALGORITHMIC OPTIMIZATIONS (arXiv:2501.02305, arXiv:2504.17033)\n// ============================================================================\n// High-performance data structures for verification operations\n\n// WASM bindings for algorithm functions\nconst wasm_create_nonce_cache = (wasmPkg as any).create_nonce_cache as (capacity: number, ttl_ms: number) => string;\nconst wasm_nonce_cache_info = (wasmPkg as any).nonce_cache_info as () => string;\nconst wasm_sssp_config = (wasmPkg as any).sssp_config as (nodes: number) => string;\nconst wasm_provenance_path_config = (wasmPkg as any).provenance_path_config as (chain_length: number, branches: number) => string;\nconst wasm_elastic_hash_config = (wasmPkg as any).elastic_hash_config as (capacity: number, load_factor: number) => string;\n\n/**\n * Nonce Cache Configuration\n * Uses Elastic Hashing (arXiv:2501.02305) for O(1) amortized lookup\n */\nexport interface NonceCacheConfig {\n type: string;\n capacity: number;\n ttl_ms: number;\n algorithm: string;\n complexity: string;\n}\n\n/**\n * Create a nonce cache configuration for replay attack prevention.\n * Based on Elastic Hashing - O(1) amortized, O(log(1/δ)) worst-case.\n * \n * @param capacity - Maximum number of nonces to track\n * @param ttlMs - Time-to-live in milliseconds before nonces expire\n */\nexport async function createNonceCacheConfig(capacity: number, ttlMs: number): Promise<NonceCacheConfig> {\n await initWasm();\n return JSON.parse(wasm_create_nonce_cache(capacity, ttlMs));\n}\n\n/**\n * Get information about the nonce cache algorithm.\n */\nexport async function getNonceCacheInfo(): Promise<{\n name: string;\n paper: string;\n probe_complexity: string;\n load_factor: number;\n features: string[];\n}> {\n await initWasm();\n return JSON.parse(wasm_nonce_cache_info());\n}\n\n/**\n * SSSP (Single-Source Shortest Path) Configuration\n * Uses Frontier-Reduced algorithm (arXiv:2504.17033)\n */\nexport interface SSSPConfig {\n name: string;\n paper: string;\n complexity: string;\n nodes: number;\n pivots_k: number;\n batch_t: number;\n use_cases: string[];\n}\n\n/**\n * Get optimal SSSP configuration for graph verification.\n * Uses Frontier-Reduced SSSP - O(m × log^(2/3)(n)) complexity.\n * \n * @param nodes - Expected number of nodes in the graph\n */\nexport async function getSSSPConfig(nodes: number): Promise<SSSPConfig> {\n await initWasm();\n return JSON.parse(wasm_sssp_config(nodes));\n}\n\n/**\n * Provenance Path Configuration\n * Optimized parameters for chain of custody verification\n */\nexport interface ProvenancePathConfig {\n algorithm: string;\n chain_length: number;\n branches: number;\n estimated_nodes: number;\n estimated_edges: number;\n pivots_k: number;\n batch_t: number;\n complexity: string;\n verification_mode: string;\n}\n\n/**\n * Get optimized configuration for provenance chain verification.\n * \n * @param chainLength - Number of blocks in the provenance chain\n * @param branches - Average number of branches per block\n */\nexport async function getProvenancePathConfig(chainLength: number, branches: number): Promise<ProvenancePathConfig> {\n await initWasm();\n return JSON.parse(wasm_provenance_path_config(chainLength, branches));\n}\n\n/**\n * Elastic Hash Configuration\n * High-performance hash table for key caching\n */\nexport interface ElasticHashConfig {\n algorithm: string;\n paper: string;\n capacity: number;\n load_factor: number;\n levels: number;\n probe_complexity: {\n amortized: string;\n worst_case: string;\n };\n use_cases: string[];\n}\n\n/**\n * Get elastic hash table configuration for key caching.\n * Optimal for PQC public key caching with O(1) amortized lookups.\n * \n * @param capacity - Maximum number of entries\n * @param loadFactor - Target load factor (0.0 to 1.0, recommend 0.95)\n */\nexport async function getElasticHashConfig(capacity: number, loadFactor: number = 0.95): Promise<ElasticHashConfig> {\n await initWasm();\n return JSON.parse(wasm_elastic_hash_config(capacity, loadFactor));\n}\n\n// ============================================================================\n// CROSS-CHAIN ANCHORING (Roadmap M8)\n// ============================================================================\n// Merkle root submission to Ethereum, Bitcoin, and L2s for timestamping\n\n// WASM bindings for anchoring functions\nconst wasm_anchor_chains_info = (wasmPkg as any).anchor_chains_info as () => string;\nconst wasm_create_accumulator_leaf = (wasmPkg as any).create_accumulator_leaf as (userId: string, chainId: string, blockHash: string, blockIndex: bigint) => string;\nconst wasm_create_accumulator_leaf_with_alg = (wasmPkg as any).create_accumulator_leaf_with_alg as (userId: string, chainId: string, blockHash: string, blockIndex: bigint, hashAlg: string) => string;\nconst wasm_compute_merkle_root = (wasmPkg as any).compute_merkle_root as (leavesJson: string, hashAlg: string) => string;\nconst wasm_generate_evm_anchor_calldata = (wasmPkg as any).generate_evm_anchor_calldata as (rootHex: string, epoch: bigint) => string;\nconst wasm_generate_bitcoin_anchor_payload = (wasmPkg as any).generate_bitcoin_anchor_payload as (rootHex: string, epoch: bigint) => string;\nconst wasm_decode_bitcoin_anchor_payload = (wasmPkg as any).decode_bitcoin_anchor_payload as (payloadHex: string) => string;\nconst wasm_truncate_to_bytes32 = (wasmPkg as any).truncate_to_bytes32 as (hashHex: string) => string;\nconst wasm_anchor_config_info = (wasmPkg as any).anchor_config_info as () => string;\n\n/**\n * Supported blockchain chains for anchoring\n */\nexport interface AnchorChainInfo {\n id: string;\n name: string;\n chain_id?: number;\n type: 'evm' | 'evm_l2' | 'bitcoin';\n contract?: string;\n method?: string;\n payload_size?: number;\n}\n\n/**\n * Get information about supported anchor chains\n */\nexport async function getAnchorChainsInfo(): Promise<{ chains: AnchorChainInfo[] }> {\n await initWasm();\n return JSON.parse(wasm_anchor_chains_info());\n}\n\n/**\n * Accumulator leaf representing a chain's current state\n */\nexport interface AccumulatorLeaf {\n user_id: string;\n chain_id: string;\n block_hash: string;\n block_index: number;\n timestamp: number;\n leaf_hash: string;\n hash_alg?: string;\n}\n\n/**\n * Create a Merkle accumulator leaf for a chain state.\n * This is the fundamental unit for batching chain updates into super-roots.\n * \n * @param userId - User ID (64 hex chars)\n * @param chainId - Chain identifier within user's chains\n * @param blockHash - Hash of the latest block (64 hex chars)\n * @param blockIndex - Block height/index (number or bigint)\n * @param hashAlg - Hash algorithm for leaf hash ('sha256' or 'sha3-384')\n * @throws Error if inputs are invalid\n */\nexport async function createAccumulatorLeaf(\n userId: string,\n chainId: string,\n blockHash: string,\n blockIndex: number | bigint,\n hashAlg: 'sha256' | 'sha3-384' = 'sha3-384'\n): Promise<AccumulatorLeaf> {\n await initWasm();\n \n // Input validation with helpful error messages\n if (typeof userId !== 'string' || userId.length !== 64) {\n throw new Error(`Invalid userId: must be 64 hex characters (got ${typeof userId === 'string' ? userId.length : typeof userId})`);\n }\n if (!/^[0-9a-fA-F]{64}$/.test(userId)) {\n throw new Error('Invalid userId: must contain only hex characters (0-9, a-f, A-F)');\n }\n \n if (typeof chainId !== 'string' || chainId.length === 0) {\n throw new Error('Invalid chainId: must be a non-empty string');\n }\n \n if (typeof blockHash !== 'string' || blockHash.length !== 64) {\n throw new Error(`Invalid blockHash: must be 64 hex characters (got ${typeof blockHash === 'string' ? blockHash.length : typeof blockHash})`);\n }\n if (!/^[0-9a-fA-F]{64}$/.test(blockHash)) {\n throw new Error('Invalid blockHash: must contain only hex characters (0-9, a-f, A-F)');\n }\n \n // Convert blockIndex to bigint (WASM expects bigint for u64)\n let indexBigInt: bigint;\n if (typeof blockIndex === 'bigint') {\n indexBigInt = blockIndex;\n } else if (typeof blockIndex === 'number') {\n if (!Number.isInteger(blockIndex) || blockIndex < 0) {\n throw new Error('Invalid blockIndex: must be a non-negative integer');\n }\n if (!Number.isSafeInteger(blockIndex)) {\n throw new Error('Invalid blockIndex: number exceeds MAX_SAFE_INTEGER; use bigint instead');\n }\n indexBigInt = BigInt(blockIndex);\n } else {\n throw new Error(`Invalid blockIndex: must be a number or bigint (got ${typeof blockIndex})`);\n }\n \n if (indexBigInt < 0n) {\n throw new Error('Invalid blockIndex: must be non-negative');\n }\n \n try {\n const result = typeof wasm_create_accumulator_leaf_with_alg === 'function'\n ? wasm_create_accumulator_leaf_with_alg(userId, chainId, blockHash, indexBigInt, hashAlg)\n : wasm_create_accumulator_leaf(userId, chainId, blockHash, indexBigInt);\n const parsed = JSON.parse(result);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n return parsed;\n } catch (e) {\n if (e instanceof Error) {\n // Re-throw our validation errors\n if (e.message.startsWith('Invalid ')) {\n throw e;\n }\n // Wrap WASM errors\n throw new Error(`WASM error in createAccumulatorLeaf: ${e.message}`);\n }\n throw new Error(`Unknown error in createAccumulatorLeaf: ${String(e)}`);\n }\n}\n\n/**\n * Merkle root computation result\n */\nexport interface MerkleRootResult {\n root: string;\n leaf_count: number;\n hash_alg: string;\n}\n\n/**\n * Compute Merkle root from an array of leaf hashes.\n * \n * @param leaves - Array of hex hash strings\n * @param hashAlg - Hash algorithm ('sha256' or 'sha3-384')\n */\nexport async function computeMerkleRoot(\n leaves: string[],\n hashAlg: 'sha256' | 'sha3-384' = 'sha256'\n): Promise<MerkleRootResult> {\n await initWasm();\n return JSON.parse(wasm_compute_merkle_root(JSON.stringify(leaves), hashAlg));\n}\n\n/**\n * EVM anchor calldata for AnchorRegistry contract\n */\nexport interface EvmAnchorCalldata {\n calldata: string;\n root: string;\n epoch: number;\n method: string;\n selector: string;\n}\n\n/**\n * Generate EVM calldata for AnchorRegistry.anchor(bytes32, uint256).\n * Ready to use in an Ethereum transaction.\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars, with or without 0x prefix)\n * @param epoch - Epoch number (number or bigint)\n */\nexport async function generateEvmAnchorCalldata(\n rootHex: string,\n epoch: number | bigint\n): Promise<EvmAnchorCalldata> {\n await initWasm();\n let epochBigInt: bigint;\n if (typeof epoch === 'bigint') {\n epochBigInt = epoch;\n } else {\n if (!Number.isInteger(epoch) || epoch < 0) {\n throw new Error('Invalid epoch: must be a non-negative integer');\n }\n if (!Number.isSafeInteger(epoch)) {\n throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');\n }\n epochBigInt = BigInt(epoch);\n }\n return JSON.parse(wasm_generate_evm_anchor_calldata(rootHex, epochBigInt));\n}\n\n/**\n * Bitcoin OP_RETURN anchor payload\n */\nexport interface BitcoinAnchorPayload {\n payload_hex: string;\n payload_size: number;\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Generate Bitcoin OP_RETURN payload for anchoring.\n * 45 bytes: \"MTARA\" (5) + epoch (8) + root32 (32)\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars)\n * @param epoch - Epoch number (number or bigint)\n */\nexport async function generateBitcoinAnchorPayload(\n rootHex: string,\n epoch: number | bigint\n): Promise<BitcoinAnchorPayload> {\n await initWasm();\n let epochBigInt: bigint;\n if (typeof epoch === 'bigint') {\n epochBigInt = epoch;\n } else {\n if (!Number.isInteger(epoch) || epoch < 0) {\n throw new Error('Invalid epoch: must be a non-negative integer');\n }\n if (!Number.isSafeInteger(epoch)) {\n throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');\n }\n epochBigInt = BigInt(epoch);\n }\n return JSON.parse(wasm_generate_bitcoin_anchor_payload(rootHex, epochBigInt));\n}\n\n/**\n * Decoded Bitcoin anchor payload\n */\nexport interface DecodedBitcoinPayload {\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Decode a Bitcoin OP_RETURN anchor payload.\n * \n * @param payloadHex - Hex-encoded payload bytes\n */\nexport async function decodeBitcoinAnchorPayload(\n payloadHex: string\n): Promise<DecodedBitcoinPayload> {\n await initWasm();\n return JSON.parse(wasm_decode_bitcoin_anchor_payload(payloadHex));\n}\n\n/**\n * Truncation result for SHA3-384 to bytes32\n */\nexport interface TruncationResult {\n original: string;\n original_bytes: number;\n truncated: string;\n truncated_bytes: number;\n}\n\n/**\n * Truncate a hash to 32 bytes for EVM compatibility.\n * Used when anchoring SHA3-384 hashes to Ethereum.\n * \n * @param hashHex - Hash to truncate (with or without 0x prefix)\n */\nexport async function truncateToBytes32(hashHex: string): Promise<TruncationResult> {\n await initWasm();\n return JSON.parse(wasm_truncate_to_bytes32(hashHex));\n}\n\n/**\n * Anchor configuration and estimates\n */\nexport interface AnchorConfigInfo {\n accumulator: {\n max_leaves_per_epoch: number;\n hash_algorithms: string[];\n default_hash: string;\n };\n ethereum: {\n contract: string;\n function: string;\n selector: string;\n estimated_gas: number;\n calldata_size: number;\n };\n bitcoin: {\n method: string;\n magic: string;\n payload_size: number;\n estimated_fee_sats: number;\n };\n recommended_schedule: {\n production: string;\n high_frequency: string;\n };\n}\n\n/**\n * Get anchor configuration and gas/fee estimates.\n */\nexport async function getAnchorConfigInfo(): Promise<AnchorConfigInfo> {\n await initWasm();\n return JSON.parse(wasm_anchor_config_info());\n}\n"],"names":["wasmPkg"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -501,6 +501,7 @@ async function getElasticHashConfig(capacity, loadFactor = 0.95) {
|
|
|
501
501
|
// WASM bindings for anchoring functions
|
|
502
502
|
const wasm_anchor_chains_info = wasmPkg.anchor_chains_info;
|
|
503
503
|
const wasm_create_accumulator_leaf = wasmPkg.create_accumulator_leaf;
|
|
504
|
+
const wasm_create_accumulator_leaf_with_alg = wasmPkg.create_accumulator_leaf_with_alg;
|
|
504
505
|
const wasm_compute_merkle_root = wasmPkg.compute_merkle_root;
|
|
505
506
|
const wasm_generate_evm_anchor_calldata = wasmPkg.generate_evm_anchor_calldata;
|
|
506
507
|
const wasm_generate_bitcoin_anchor_payload = wasmPkg.generate_bitcoin_anchor_payload;
|
|
@@ -521,11 +522,69 @@ async function getAnchorChainsInfo() {
|
|
|
521
522
|
* @param userId - User ID (64 hex chars)
|
|
522
523
|
* @param chainId - Chain identifier within user's chains
|
|
523
524
|
* @param blockHash - Hash of the latest block (64 hex chars)
|
|
524
|
-
* @param blockIndex - Block height/index
|
|
525
|
+
* @param blockIndex - Block height/index (number or bigint)
|
|
526
|
+
* @param hashAlg - Hash algorithm for leaf hash ('sha256' or 'sha3-384')
|
|
527
|
+
* @throws Error if inputs are invalid
|
|
525
528
|
*/
|
|
526
|
-
async function createAccumulatorLeaf(userId, chainId, blockHash, blockIndex) {
|
|
529
|
+
async function createAccumulatorLeaf(userId, chainId, blockHash, blockIndex, hashAlg = 'sha3-384') {
|
|
527
530
|
await initWasm();
|
|
528
|
-
|
|
531
|
+
// Input validation with helpful error messages
|
|
532
|
+
if (typeof userId !== 'string' || userId.length !== 64) {
|
|
533
|
+
throw new Error(`Invalid userId: must be 64 hex characters (got ${typeof userId === 'string' ? userId.length : typeof userId})`);
|
|
534
|
+
}
|
|
535
|
+
if (!/^[0-9a-fA-F]{64}$/.test(userId)) {
|
|
536
|
+
throw new Error('Invalid userId: must contain only hex characters (0-9, a-f, A-F)');
|
|
537
|
+
}
|
|
538
|
+
if (typeof chainId !== 'string' || chainId.length === 0) {
|
|
539
|
+
throw new Error('Invalid chainId: must be a non-empty string');
|
|
540
|
+
}
|
|
541
|
+
if (typeof blockHash !== 'string' || blockHash.length !== 64) {
|
|
542
|
+
throw new Error(`Invalid blockHash: must be 64 hex characters (got ${typeof blockHash === 'string' ? blockHash.length : typeof blockHash})`);
|
|
543
|
+
}
|
|
544
|
+
if (!/^[0-9a-fA-F]{64}$/.test(blockHash)) {
|
|
545
|
+
throw new Error('Invalid blockHash: must contain only hex characters (0-9, a-f, A-F)');
|
|
546
|
+
}
|
|
547
|
+
// Convert blockIndex to bigint (WASM expects bigint for u64)
|
|
548
|
+
let indexBigInt;
|
|
549
|
+
if (typeof blockIndex === 'bigint') {
|
|
550
|
+
indexBigInt = blockIndex;
|
|
551
|
+
}
|
|
552
|
+
else if (typeof blockIndex === 'number') {
|
|
553
|
+
if (!Number.isInteger(blockIndex) || blockIndex < 0) {
|
|
554
|
+
throw new Error('Invalid blockIndex: must be a non-negative integer');
|
|
555
|
+
}
|
|
556
|
+
if (!Number.isSafeInteger(blockIndex)) {
|
|
557
|
+
throw new Error('Invalid blockIndex: number exceeds MAX_SAFE_INTEGER; use bigint instead');
|
|
558
|
+
}
|
|
559
|
+
indexBigInt = BigInt(blockIndex);
|
|
560
|
+
}
|
|
561
|
+
else {
|
|
562
|
+
throw new Error(`Invalid blockIndex: must be a number or bigint (got ${typeof blockIndex})`);
|
|
563
|
+
}
|
|
564
|
+
if (indexBigInt < 0n) {
|
|
565
|
+
throw new Error('Invalid blockIndex: must be non-negative');
|
|
566
|
+
}
|
|
567
|
+
try {
|
|
568
|
+
const result = typeof wasm_create_accumulator_leaf_with_alg === 'function'
|
|
569
|
+
? wasm_create_accumulator_leaf_with_alg(userId, chainId, blockHash, indexBigInt, hashAlg)
|
|
570
|
+
: wasm_create_accumulator_leaf(userId, chainId, blockHash, indexBigInt);
|
|
571
|
+
const parsed = JSON.parse(result);
|
|
572
|
+
if (parsed.error) {
|
|
573
|
+
throw new Error(parsed.error);
|
|
574
|
+
}
|
|
575
|
+
return parsed;
|
|
576
|
+
}
|
|
577
|
+
catch (e) {
|
|
578
|
+
if (e instanceof Error) {
|
|
579
|
+
// Re-throw our validation errors
|
|
580
|
+
if (e.message.startsWith('Invalid ')) {
|
|
581
|
+
throw e;
|
|
582
|
+
}
|
|
583
|
+
// Wrap WASM errors
|
|
584
|
+
throw new Error(`WASM error in createAccumulatorLeaf: ${e.message}`);
|
|
585
|
+
}
|
|
586
|
+
throw new Error(`Unknown error in createAccumulatorLeaf: ${String(e)}`);
|
|
587
|
+
}
|
|
529
588
|
}
|
|
530
589
|
/**
|
|
531
590
|
* Compute Merkle root from an array of leaf hashes.
|
|
@@ -542,22 +601,48 @@ async function computeMerkleRoot(leaves, hashAlg = 'sha256') {
|
|
|
542
601
|
* Ready to use in an Ethereum transaction.
|
|
543
602
|
*
|
|
544
603
|
* @param rootHex - 32-byte Merkle root (64 hex chars, with or without 0x prefix)
|
|
545
|
-
* @param epoch - Epoch number
|
|
604
|
+
* @param epoch - Epoch number (number or bigint)
|
|
546
605
|
*/
|
|
547
606
|
async function generateEvmAnchorCalldata(rootHex, epoch) {
|
|
548
607
|
await initWasm();
|
|
549
|
-
|
|
608
|
+
let epochBigInt;
|
|
609
|
+
if (typeof epoch === 'bigint') {
|
|
610
|
+
epochBigInt = epoch;
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
if (!Number.isInteger(epoch) || epoch < 0) {
|
|
614
|
+
throw new Error('Invalid epoch: must be a non-negative integer');
|
|
615
|
+
}
|
|
616
|
+
if (!Number.isSafeInteger(epoch)) {
|
|
617
|
+
throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');
|
|
618
|
+
}
|
|
619
|
+
epochBigInt = BigInt(epoch);
|
|
620
|
+
}
|
|
621
|
+
return JSON.parse(wasm_generate_evm_anchor_calldata(rootHex, epochBigInt));
|
|
550
622
|
}
|
|
551
623
|
/**
|
|
552
624
|
* Generate Bitcoin OP_RETURN payload for anchoring.
|
|
553
625
|
* 45 bytes: "MTARA" (5) + epoch (8) + root32 (32)
|
|
554
626
|
*
|
|
555
627
|
* @param rootHex - 32-byte Merkle root (64 hex chars)
|
|
556
|
-
* @param epoch - Epoch number
|
|
628
|
+
* @param epoch - Epoch number (number or bigint)
|
|
557
629
|
*/
|
|
558
630
|
async function generateBitcoinAnchorPayload(rootHex, epoch) {
|
|
559
631
|
await initWasm();
|
|
560
|
-
|
|
632
|
+
let epochBigInt;
|
|
633
|
+
if (typeof epoch === 'bigint') {
|
|
634
|
+
epochBigInt = epoch;
|
|
635
|
+
}
|
|
636
|
+
else {
|
|
637
|
+
if (!Number.isInteger(epoch) || epoch < 0) {
|
|
638
|
+
throw new Error('Invalid epoch: must be a non-negative integer');
|
|
639
|
+
}
|
|
640
|
+
if (!Number.isSafeInteger(epoch)) {
|
|
641
|
+
throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');
|
|
642
|
+
}
|
|
643
|
+
epochBigInt = BigInt(epoch);
|
|
644
|
+
}
|
|
645
|
+
return JSON.parse(wasm_generate_bitcoin_anchor_payload(rootHex, epochBigInt));
|
|
561
646
|
}
|
|
562
647
|
/**
|
|
563
648
|
* Decode a Bitcoin OP_RETURN anchor payload.
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\n// Post-Quantum Cryptography for Browser and Node.js\n// \n// SECURITY NOTICE: This library implements FIPS 204 (ML-DSA) and FIPS 203 (ML-KEM)\n// post-quantum cryptographic algorithms. Key material should be:\n// 1. Stored securely (encrypted at rest)\n// 2. Transmitted only over secure channels\n// 3. Zeroized after use when possible\n// 4. Protected by hardware security modules for high-value operations\n//\n// See docs/WASM_SECURITY_MODEL.md for browser-specific security considerations.\n\n// ============================================================================\n// SECURITY CONSTANTS\n// ============================================================================\nconst MAX_MESSAGE_SIZE = 16 * 1024 * 1024; // 16MB - prevent memory exhaustion\nconst MAX_KEY_SIZE = 1024 * 1024; // 1MB - reasonable for PQC keys\nconst MAX_ATTESTATION_COUNT = 100; // Prevent DoS from large attestation arrays\n\nexport interface KyberKeypair {\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface KyberEncap {\n kem_ct_b64u: string;\n shared_b64u: string;\n}\n\nexport interface AesGcmWrap {\n iv_b64u: string;\n ct_b64u: string;\n}\n\nexport interface DilithiumKeypair {\n algorithm: string;\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface DilithiumSignResult {\n signature_b64u: string;\n algorithm: string;\n}\n\nexport interface DilithiumVerifyResult {\n is_valid: boolean;\n algorithm: string;\n}\n\nexport interface HkdfResult {\n key_b64u: string;\n}\n\nexport interface AesGcmUnwrapResult {\n dek_b64u: string;\n}\n\n// Import WASM functions (namespace import for better bundler compatibility)\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\n\n// Deterministic/canonicalization and governance helpers\nexport interface CanonicalOut { canonical: string; msg_b64u?: string; msgB64u?: string }\n\n// Initialize WASM\nlet wasmReady = false;\n\n/**\n * Initialize the underlying WASM module.\n * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.\n * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.\n */\nexport async function initWasm(wasmInput?: any): Promise<void> {\n if (wasmReady) return;\n const maybeInit = (wasmPkg as any).default;\n if (typeof maybeInit === 'function') {\n // Some environments require a URL/Module/bytes for initialization.\n // We forward the optional value if provided; otherwise let the glue resolve it.\n if (wasmInput !== undefined) {\n await maybeInit(wasmInput);\n } else {\n await maybeInit();\n }\n }\n wasmReady = true;\n}\n\n// Kyber functions\nexport async function kyberKeygen(): Promise<KyberKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// HKDF functions\nexport async function hkdfSha256(\n secretB64u: string,\n infoB64u: string,\n saltB64u?: string,\n len: number = 32\n): Promise<HkdfResult> {\n await initWasm();\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// AES-GCM functions\nexport async function aesGcmWrap(\n keyB64u: string,\n dekB64u: string,\n aadB64u: string\n): Promise<AesGcmWrap> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function aesGcmUnwrap(\n keyB64u: string,\n ivB64u: string,\n ctB64u: string,\n aadB64u: string\n): Promise<AesGcmUnwrapResult> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// Dilithium functions\n\n/**\n * Generate a new ML-DSA-65 (Dilithium) keypair.\n * SECURITY: Keys should be stored encrypted at rest.\n * For high-value operations, consider hardware security modules.\n */\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_dilithium_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Sign a message using ML-DSA-65 (Dilithium).\n * @param messageB64u - Base64url-encoded message to sign\n * @param secretB64u - Base64url-encoded secret key\n * SECURITY: Secret key should be zeroized after use if possible.\n */\nexport async function dilithiumSign(\n messageB64u: string,\n secretB64u: string\n): Promise<DilithiumSignResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (secretB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Secret key exceeds maximum size of ${MAX_KEY_SIZE} bytes`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Verify a ML-DSA-65 (Dilithium) signature.\n * @param messageB64u - Base64url-encoded message\n * @param signatureB64u - Base64url-encoded signature\n * @param publicB64u - Base64url-encoded public key\n */\nexport async function dilithiumVerify(\n messageB64u: string,\n signatureB64u: string,\n publicB64u: string\n): Promise<DilithiumVerifyResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (signatureB64u.length > MAX_KEY_SIZE || publicB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Signature or public key exceeds maximum size`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// ---- Deterministic helpers (multisig/art token) ----\nexport async function jcsCanonicalize(json: unknown): Promise<string> {\n await initWasm();\n const raw = (wasmPkg as any).jcs_canonicalize(JSON.stringify(json));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return out.canonical as string;\n}\n\nexport async function buildPolicyPreimage(policy: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_governance(JSON.stringify(policy));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildMintPreimage(header: unknown, asset: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildTransferPreimage(header: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_transfer(JSON.stringify(header));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildAnchorPreimage(userId: string, rootHex: string, epoch: string, chains: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\n// ---- Veritas Block Preimage (NEW v2 JCS canonical form) ----\n// We migrate block signing to a canonical (JCS) JSON similar to other preimages.\n// Legacy (v1) blocks used a hand-crafted JSON.stringify of a plain object with fixed insertion order.\n// This helper produces a canonical JSON string and msg_b64u = b64url(UTF-8(canonical JSON)).\n// NOTE: We intentionally EXCLUDE signature, encryptionKeyHash, and any runtime-only fields.\n// Fields included (ordered via JCS lexical ordering):\n// contentType, dataHash, index, metadataHash, ownerPublicKey, previousHash, signatureAlg, timestamp, version\n// index & timestamp MUST be strings representing decimal integers (BigInt safe) – caller responsibility.\nexport interface BlockPreimageInput {\n index: string | number | bigint;\n timestamp: string | number | bigint;\n previousHash: string;\n dataHash: string;\n metadataHash: string;\n signatureAlg: string; // e.g. 'dilithium2'\n ownerPublicKey: string; // Dilithium public key (base64url)\n contentType?: string; // default 'application/json'\n version: number; // block format / protocol version\n}\n\nexport async function buildBlockPreimage(block: BlockPreimageInput): Promise<CanonicalOut> {\n await initWasm();\n // Normalize fields per spec\n const normalized = {\n contentType: block.contentType || 'application/json',\n dataHash: block.dataHash,\n index: block.index.toString(),\n metadataHash: block.metadataHash,\n ownerPublicKey: block.ownerPublicKey,\n previousHash: block.previousHash,\n signatureAlg: block.signatureAlg,\n timestamp: block.timestamp.toString(),\n version: block.version,\n };\n // Use JCS canonicalization via wasm jcs_canonicalize (already exposed through jcsCanonicalize helper)\n const canonical = await jcsCanonicalize(normalized);\n const msg_b64u = b64uEncode(new TextEncoder().encode(canonical));\n return { canonical, msg_b64u, msgB64u: msg_b64u };\n}\n\nexport async function validateRoyalty(receiver: string, bps: number): Promise<boolean> {\n await initWasm();\n const raw = (wasmPkg as any).validate_royalty(receiver, bps);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) return false;\n return !!out.ok;\n}\n\nexport async function verifyAttestations(msgB64u: string, attestations: Array<{ alg: string; publicKeyB64u: string; signatureB64u: string }>, allowedPublicKeys?: string[]): Promise<number> {\n await initWasm();\n const raw = (wasmPkg as any).verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return Number(out.valid_count || 0);\n}\n\n// Utility functions\n// Cross-env base64url helpers (browser + Node)\nfunction _fromByteArray(bytes: Uint8Array): string {\n if (typeof btoa === 'function') {\n // Browser\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n }\n // Node\n return Buffer.from(bytes).toString('base64');\n}\n\nfunction _toByteArray(b64: string): Uint8Array {\n if (typeof atob === 'function') {\n const binary = atob(b64);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n }\n return new Uint8Array(Buffer.from(b64, 'base64'));\n}\n\nexport function b64uEncode(data: Uint8Array): string {\n return _fromByteArray(data)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+/g, '');\n}\n\nexport function b64uDecode(str: string): Uint8Array {\n const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');\n return _toByteArray(b64);\n}\n\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result |= a[i] ^ b[i];\n }\n return result === 0;\n}\n\n// ============================================================================\n// THRESHOLD SIGNATURES & GOVERNANCE\n// ============================================================================\n\nexport interface GovernancePolicy {\n policyId: string;\n version: number;\n chainId: string;\n threshold: number;\n signers: Array<{\n publicKeyB64u: string;\n keyId: string;\n weight: number;\n role: 'owner' | 'guardian' | 'delegate' | 'recovery';\n }>;\n operations: Array<{\n action: string;\n requiredThreshold?: number;\n requiredRoles?: string[];\n maxValue?: string;\n timelock?: number;\n }>;\n validFrom: number;\n validUntil: number;\n createdAt: number;\n createdBy: string;\n policySignature: string;\n}\n\nexport interface Attestation {\n signerKeyId: string;\n signerPublicKeyB64u: string;\n operationHash: string;\n operationType: string;\n attestedAt: number;\n expiresAt: number;\n signatureAlg: 'dilithium2';\n signatureB64u: string;\n}\n\nexport interface AggregatedSignature {\n policyId: string;\n policyVersion: number;\n operationHash: string;\n attestations: Attestation[];\n totalWeight: number;\n thresholdMet: boolean;\n verifiedAt: number;\n}\n\n/**\n * Create an attestation for a threshold signature operation.\n */\nexport async function createAttestation(\n operation: { type: string; payload: unknown },\n signerKeys: { keyId: string; publicKeyB64u: string; secretKeyB64u: string },\n expiresInSeconds: number = 3600\n): Promise<Attestation> {\n await initWasm();\n \n // Build deterministic preimage for the operation\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const operationHash = await sha256B64u(preimageBytes);\n const msgB64u = b64uEncode(preimageBytes);\n \n // Sign the preimage\n const sig = await dilithiumSign(msgB64u, signerKeys.secretKeyB64u);\n \n return {\n signerKeyId: signerKeys.keyId,\n signerPublicKeyB64u: signerKeys.publicKeyB64u,\n operationHash,\n operationType: operation.type,\n attestedAt: Date.now(),\n expiresAt: Date.now() + expiresInSeconds * 1000,\n signatureAlg: 'dilithium2',\n signatureB64u: sig.signature_b64u\n };\n}\n\n/**\n * Verify an attestation signature.\n */\nexport async function verifyAttestation(\n attestation: Attestation,\n operation: { type: string; payload: unknown }\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Rebuild expected operation hash\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const expectedHash = await sha256B64u(preimageBytes);\n \n if (attestation.operationHash !== expectedHash) {\n return { valid: false, error: 'Operation hash mismatch' };\n }\n \n // Check expiry\n if (attestation.expiresAt < Date.now()) {\n return { valid: false, error: 'Attestation expired' };\n }\n \n // Verify signature\n const msgB64u = b64uEncode(preimageBytes);\n const result = await dilithiumVerify(msgB64u, attestation.signatureB64u, attestation.signerPublicKeyB64u);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that an aggregated signature meets the threshold policy.\n */\nexport async function verifyThreshold(\n aggregated: AggregatedSignature,\n operation: { type: string; payload: unknown },\n policy: GovernancePolicy\n): Promise<{ valid: boolean; errors: string[] }> {\n const errors: string[] = [];\n \n // Check policy match\n if (aggregated.policyId !== policy.policyId) {\n errors.push('Policy ID mismatch');\n }\n \n // Verify each attestation and compute weight\n let validWeight = 0;\n for (const attestation of aggregated.attestations) {\n const signer = policy.signers.find(s => s.publicKeyB64u === attestation.signerPublicKeyB64u);\n if (!signer) {\n errors.push(`Signer ${attestation.signerKeyId} not in policy`);\n continue;\n }\n \n const result = await verifyAttestation(attestation, operation);\n if (!result.valid) {\n errors.push(`Attestation from ${attestation.signerKeyId}: ${result.error}`);\n continue;\n }\n \n validWeight += signer.weight;\n }\n \n // Check threshold\n if (validWeight < policy.threshold) {\n errors.push(`Threshold not met: weight ${validWeight} < required ${policy.threshold}`);\n }\n \n return { valid: errors.length === 0, errors };\n}\n\n// ============================================================================\n// PRE-REGISTRATION COMMITMENT SCHEME\n// ============================================================================\n\nexport interface ProvenanceCommitment {\n type: 'ProvenanceCommitment';\n version: 1;\n commitmentHash: string;\n creatorPublicKey: string;\n timestamp: number;\n signature: string;\n}\n\nexport interface CommitmentReveal {\n commitmentHash: string;\n salt: string;\n assetHash: string;\n}\n\n/**\n * Create a provenance commitment for an asset before public disclosure.\n * This establishes a timestamped claim without revealing the asset content.\n */\nexport async function createProvenanceCommitment(\n assetBytes: Uint8Array,\n keys: { publicKeyB64u: string; secretKeyB64u: string }\n): Promise<{ commitment: ProvenanceCommitment; reveal: CommitmentReveal }> {\n await initWasm();\n \n // Generate random salt\n const salt = crypto.getRandomValues(new Uint8Array(32));\n \n // Compute commitment hash = SHA256(asset || salt || publicKey)\n const publicKeyBytes = b64uDecode(keys.publicKeyB64u);\n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const commitmentHash = await sha256B64u(preimage);\n const assetHash = await sha256B64u(assetBytes);\n \n // Build commitment object (without signature)\n const commitmentData = {\n type: 'ProvenanceCommitment' as const,\n version: 1 as const,\n commitmentHash,\n creatorPublicKey: keys.publicKeyB64u,\n timestamp: Date.now()\n };\n \n // Sign the commitment\n const canonical = await jcsCanonicalize(commitmentData);\n const sig = await dilithiumSign(b64uEncode(new TextEncoder().encode(canonical)), keys.secretKeyB64u);\n \n const commitment: ProvenanceCommitment = {\n ...commitmentData,\n signature: sig.signature_b64u\n };\n \n const reveal: CommitmentReveal = {\n commitmentHash,\n salt: b64uEncode(salt),\n assetHash\n };\n \n return { commitment, reveal };\n}\n\n/**\n * Verify a provenance commitment signature.\n */\nexport async function verifyProvenanceCommitment(\n commitment: ProvenanceCommitment\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Reconstruct the signed data (without signature field)\n const commitmentData = {\n type: commitment.type,\n version: commitment.version,\n commitmentHash: commitment.commitmentHash,\n creatorPublicKey: commitment.creatorPublicKey,\n timestamp: commitment.timestamp\n };\n \n const canonical = await jcsCanonicalize(commitmentData);\n const msgB64u = b64uEncode(new TextEncoder().encode(canonical));\n \n const result = await dilithiumVerify(msgB64u, commitment.signature, commitment.creatorPublicKey);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid commitment signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that a revealed asset matches a commitment.\n */\nexport async function verifyCommitmentReveal(\n commitment: ProvenanceCommitment,\n assetBytes: Uint8Array,\n reveal: CommitmentReveal\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // First verify the commitment signature\n const sigResult = await verifyProvenanceCommitment(commitment);\n if (!sigResult.valid) {\n return { valid: false, error: `Commitment signature invalid: ${sigResult.error}` };\n }\n \n // Verify asset hash matches\n const computedAssetHash = await sha256B64u(assetBytes);\n if (computedAssetHash !== reveal.assetHash) {\n return { valid: false, error: 'Asset hash does not match reveal' };\n }\n \n // Reconstruct commitment hash\n const salt = b64uDecode(reveal.salt);\n const publicKeyBytes = b64uDecode(commitment.creatorPublicKey);\n \n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const computedCommitmentHash = await sha256B64u(preimage);\n \n if (computedCommitmentHash !== commitment.commitmentHash) {\n return { valid: false, error: 'Commitment hash does not match reveal' };\n }\n \n return { valid: true };\n}\n\n// ============================================================================\n// HELPER: SHA-256 with base64url output\n// ============================================================================\n\nasync function sha256B64u(data: Uint8Array): Promise<string> {\n const hashBuffer = await crypto.subtle.digest('SHA-256', data as unknown as BufferSource);\n return b64uEncode(new Uint8Array(hashBuffer));\n}\n\n// ============================================================================\n// ALGORITHMIC OPTIMIZATIONS (arXiv:2501.02305, arXiv:2504.17033)\n// ============================================================================\n// High-performance data structures for verification operations\n\n// WASM bindings for algorithm functions\nconst wasm_create_nonce_cache = (wasmPkg as any).create_nonce_cache as (capacity: number, ttl_ms: number) => string;\nconst wasm_nonce_cache_info = (wasmPkg as any).nonce_cache_info as () => string;\nconst wasm_sssp_config = (wasmPkg as any).sssp_config as (nodes: number) => string;\nconst wasm_provenance_path_config = (wasmPkg as any).provenance_path_config as (chain_length: number, branches: number) => string;\nconst wasm_elastic_hash_config = (wasmPkg as any).elastic_hash_config as (capacity: number, load_factor: number) => string;\n\n/**\n * Nonce Cache Configuration\n * Uses Elastic Hashing (arXiv:2501.02305) for O(1) amortized lookup\n */\nexport interface NonceCacheConfig {\n type: string;\n capacity: number;\n ttl_ms: number;\n algorithm: string;\n complexity: string;\n}\n\n/**\n * Create a nonce cache configuration for replay attack prevention.\n * Based on Elastic Hashing - O(1) amortized, O(log(1/δ)) worst-case.\n * \n * @param capacity - Maximum number of nonces to track\n * @param ttlMs - Time-to-live in milliseconds before nonces expire\n */\nexport async function createNonceCacheConfig(capacity: number, ttlMs: number): Promise<NonceCacheConfig> {\n await initWasm();\n return JSON.parse(wasm_create_nonce_cache(capacity, ttlMs));\n}\n\n/**\n * Get information about the nonce cache algorithm.\n */\nexport async function getNonceCacheInfo(): Promise<{\n name: string;\n paper: string;\n probe_complexity: string;\n load_factor: number;\n features: string[];\n}> {\n await initWasm();\n return JSON.parse(wasm_nonce_cache_info());\n}\n\n/**\n * SSSP (Single-Source Shortest Path) Configuration\n * Uses Frontier-Reduced algorithm (arXiv:2504.17033)\n */\nexport interface SSSPConfig {\n name: string;\n paper: string;\n complexity: string;\n nodes: number;\n pivots_k: number;\n batch_t: number;\n use_cases: string[];\n}\n\n/**\n * Get optimal SSSP configuration for graph verification.\n * Uses Frontier-Reduced SSSP - O(m × log^(2/3)(n)) complexity.\n * \n * @param nodes - Expected number of nodes in the graph\n */\nexport async function getSSSPConfig(nodes: number): Promise<SSSPConfig> {\n await initWasm();\n return JSON.parse(wasm_sssp_config(nodes));\n}\n\n/**\n * Provenance Path Configuration\n * Optimized parameters for chain of custody verification\n */\nexport interface ProvenancePathConfig {\n algorithm: string;\n chain_length: number;\n branches: number;\n estimated_nodes: number;\n estimated_edges: number;\n pivots_k: number;\n batch_t: number;\n complexity: string;\n verification_mode: string;\n}\n\n/**\n * Get optimized configuration for provenance chain verification.\n * \n * @param chainLength - Number of blocks in the provenance chain\n * @param branches - Average number of branches per block\n */\nexport async function getProvenancePathConfig(chainLength: number, branches: number): Promise<ProvenancePathConfig> {\n await initWasm();\n return JSON.parse(wasm_provenance_path_config(chainLength, branches));\n}\n\n/**\n * Elastic Hash Configuration\n * High-performance hash table for key caching\n */\nexport interface ElasticHashConfig {\n algorithm: string;\n paper: string;\n capacity: number;\n load_factor: number;\n levels: number;\n probe_complexity: {\n amortized: string;\n worst_case: string;\n };\n use_cases: string[];\n}\n\n/**\n * Get elastic hash table configuration for key caching.\n * Optimal for PQC public key caching with O(1) amortized lookups.\n * \n * @param capacity - Maximum number of entries\n * @param loadFactor - Target load factor (0.0 to 1.0, recommend 0.95)\n */\nexport async function getElasticHashConfig(capacity: number, loadFactor: number = 0.95): Promise<ElasticHashConfig> {\n await initWasm();\n return JSON.parse(wasm_elastic_hash_config(capacity, loadFactor));\n}\n\n// ============================================================================\n// CROSS-CHAIN ANCHORING (Roadmap M8)\n// ============================================================================\n// Merkle root submission to Ethereum, Bitcoin, and L2s for timestamping\n\n// WASM bindings for anchoring functions\nconst wasm_anchor_chains_info = (wasmPkg as any).anchor_chains_info as () => string;\nconst wasm_create_accumulator_leaf = (wasmPkg as any).create_accumulator_leaf as (userId: string, chainId: string, blockHash: string, blockIndex: number) => string;\nconst wasm_compute_merkle_root = (wasmPkg as any).compute_merkle_root as (leavesJson: string, hashAlg: string) => string;\nconst wasm_generate_evm_anchor_calldata = (wasmPkg as any).generate_evm_anchor_calldata as (rootHex: string, epoch: number) => string;\nconst wasm_generate_bitcoin_anchor_payload = (wasmPkg as any).generate_bitcoin_anchor_payload as (rootHex: string, epoch: number) => string;\nconst wasm_decode_bitcoin_anchor_payload = (wasmPkg as any).decode_bitcoin_anchor_payload as (payloadHex: string) => string;\nconst wasm_truncate_to_bytes32 = (wasmPkg as any).truncate_to_bytes32 as (hashHex: string) => string;\nconst wasm_anchor_config_info = (wasmPkg as any).anchor_config_info as () => string;\n\n/**\n * Supported blockchain chains for anchoring\n */\nexport interface AnchorChainInfo {\n id: string;\n name: string;\n chain_id?: number;\n type: 'evm' | 'evm_l2' | 'bitcoin';\n contract?: string;\n method?: string;\n payload_size?: number;\n}\n\n/**\n * Get information about supported anchor chains\n */\nexport async function getAnchorChainsInfo(): Promise<{ chains: AnchorChainInfo[] }> {\n await initWasm();\n return JSON.parse(wasm_anchor_chains_info());\n}\n\n/**\n * Accumulator leaf representing a chain's current state\n */\nexport interface AccumulatorLeaf {\n user_id: string;\n chain_id: string;\n block_hash: string;\n block_index: number;\n timestamp: number;\n leaf_hash: string;\n}\n\n/**\n * Create a Merkle accumulator leaf for a chain state.\n * This is the fundamental unit for batching chain updates into super-roots.\n * \n * @param userId - User ID (64 hex chars)\n * @param chainId - Chain identifier within user's chains\n * @param blockHash - Hash of the latest block (64 hex chars)\n * @param blockIndex - Block height/index\n */\nexport async function createAccumulatorLeaf(\n userId: string,\n chainId: string,\n blockHash: string,\n blockIndex: number\n): Promise<AccumulatorLeaf> {\n await initWasm();\n return JSON.parse(wasm_create_accumulator_leaf(userId, chainId, blockHash, blockIndex));\n}\n\n/**\n * Merkle root computation result\n */\nexport interface MerkleRootResult {\n root: string;\n leaf_count: number;\n hash_alg: string;\n}\n\n/**\n * Compute Merkle root from an array of leaf hashes.\n * \n * @param leaves - Array of hex hash strings\n * @param hashAlg - Hash algorithm ('sha256' or 'sha3-384')\n */\nexport async function computeMerkleRoot(\n leaves: string[],\n hashAlg: 'sha256' | 'sha3-384' = 'sha256'\n): Promise<MerkleRootResult> {\n await initWasm();\n return JSON.parse(wasm_compute_merkle_root(JSON.stringify(leaves), hashAlg));\n}\n\n/**\n * EVM anchor calldata for AnchorRegistry contract\n */\nexport interface EvmAnchorCalldata {\n calldata: string;\n root: string;\n epoch: number;\n method: string;\n selector: string;\n}\n\n/**\n * Generate EVM calldata for AnchorRegistry.anchor(bytes32, uint256).\n * Ready to use in an Ethereum transaction.\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars, with or without 0x prefix)\n * @param epoch - Epoch number\n */\nexport async function generateEvmAnchorCalldata(\n rootHex: string,\n epoch: number\n): Promise<EvmAnchorCalldata> {\n await initWasm();\n return JSON.parse(wasm_generate_evm_anchor_calldata(rootHex, epoch));\n}\n\n/**\n * Bitcoin OP_RETURN anchor payload\n */\nexport interface BitcoinAnchorPayload {\n payload_hex: string;\n payload_size: number;\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Generate Bitcoin OP_RETURN payload for anchoring.\n * 45 bytes: \"MTARA\" (5) + epoch (8) + root32 (32)\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars)\n * @param epoch - Epoch number\n */\nexport async function generateBitcoinAnchorPayload(\n rootHex: string,\n epoch: number\n): Promise<BitcoinAnchorPayload> {\n await initWasm();\n return JSON.parse(wasm_generate_bitcoin_anchor_payload(rootHex, epoch));\n}\n\n/**\n * Decoded Bitcoin anchor payload\n */\nexport interface DecodedBitcoinPayload {\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Decode a Bitcoin OP_RETURN anchor payload.\n * \n * @param payloadHex - Hex-encoded payload bytes\n */\nexport async function decodeBitcoinAnchorPayload(\n payloadHex: string\n): Promise<DecodedBitcoinPayload> {\n await initWasm();\n return JSON.parse(wasm_decode_bitcoin_anchor_payload(payloadHex));\n}\n\n/**\n * Truncation result for SHA3-384 to bytes32\n */\nexport interface TruncationResult {\n original: string;\n original_bytes: number;\n truncated: string;\n truncated_bytes: number;\n}\n\n/**\n * Truncate a hash to 32 bytes for EVM compatibility.\n * Used when anchoring SHA3-384 hashes to Ethereum.\n * \n * @param hashHex - Hash to truncate (with or without 0x prefix)\n */\nexport async function truncateToBytes32(hashHex: string): Promise<TruncationResult> {\n await initWasm();\n return JSON.parse(wasm_truncate_to_bytes32(hashHex));\n}\n\n/**\n * Anchor configuration and estimates\n */\nexport interface AnchorConfigInfo {\n accumulator: {\n max_leaves_per_epoch: number;\n hash_algorithms: string[];\n default_hash: string;\n };\n ethereum: {\n contract: string;\n function: string;\n selector: string;\n estimated_gas: number;\n calldata_size: number;\n };\n bitcoin: {\n method: string;\n magic: string;\n payload_size: number;\n estimated_fee_sats: number;\n };\n recommended_schedule: {\n production: string;\n high_frequency: string;\n };\n}\n\n/**\n * Get anchor configuration and gas/fee estimates.\n */\nexport async function getAnchorConfigInfo(): Promise<AnchorConfigInfo> {\n await initWasm();\n return JSON.parse(wasm_anchor_config_info());\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\n// Post-Quantum Cryptography for Browser and Node.js\n// \n// SECURITY NOTICE: This library implements FIPS 204 (ML-DSA) and FIPS 203 (ML-KEM)\n// post-quantum cryptographic algorithms. Key material should be:\n// 1. Stored securely (encrypted at rest)\n// 2. Transmitted only over secure channels\n// 3. Zeroized after use when possible\n// 4. Protected by hardware security modules for high-value operations\n//\n// See docs/WASM_SECURITY_MODEL.md for browser-specific security considerations.\n\n// ============================================================================\n// SECURITY CONSTANTS\n// ============================================================================\nconst MAX_MESSAGE_SIZE = 16 * 1024 * 1024; // 16MB - prevent memory exhaustion\nconst MAX_KEY_SIZE = 1024 * 1024; // 1MB - reasonable for PQC keys\nconst MAX_ATTESTATION_COUNT = 100; // Prevent DoS from large attestation arrays\n\nexport interface KyberKeypair {\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface KyberEncap {\n kem_ct_b64u: string;\n shared_b64u: string;\n}\n\nexport interface AesGcmWrap {\n iv_b64u: string;\n ct_b64u: string;\n}\n\nexport interface DilithiumKeypair {\n algorithm: string;\n public_b64u: string;\n secret_b64u: string;\n}\n\nexport interface DilithiumSignResult {\n signature_b64u: string;\n algorithm: string;\n}\n\nexport interface DilithiumVerifyResult {\n is_valid: boolean;\n algorithm: string;\n}\n\nexport interface HkdfResult {\n key_b64u: string;\n}\n\nexport interface AesGcmUnwrapResult {\n dek_b64u: string;\n}\n\n// Import WASM functions (namespace import for better bundler compatibility)\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\n\n// Deterministic/canonicalization and governance helpers\nexport interface CanonicalOut { canonical: string; msg_b64u?: string; msgB64u?: string }\n\n// Initialize WASM\nlet wasmReady = false;\n\n/**\n * Initialize the underlying WASM module.\n * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.\n * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.\n */\nexport async function initWasm(wasmInput?: any): Promise<void> {\n if (wasmReady) return;\n const maybeInit = (wasmPkg as any).default;\n if (typeof maybeInit === 'function') {\n // Some environments require a URL/Module/bytes for initialization.\n // We forward the optional value if provided; otherwise let the glue resolve it.\n if (wasmInput !== undefined) {\n await maybeInit(wasmInput);\n } else {\n await maybeInit();\n }\n }\n wasmReady = true;\n}\n\n// Kyber functions\nexport async function kyberKeygen(): Promise<KyberKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\n await initWasm();\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// HKDF functions\nexport async function hkdfSha256(\n secretB64u: string,\n infoB64u: string,\n saltB64u?: string,\n len: number = 32\n): Promise<HkdfResult> {\n await initWasm();\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// AES-GCM functions\nexport async function aesGcmWrap(\n keyB64u: string,\n dekB64u: string,\n aadB64u: string\n): Promise<AesGcmWrap> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\nexport async function aesGcmUnwrap(\n keyB64u: string,\n ivB64u: string,\n ctB64u: string,\n aadB64u: string\n): Promise<AesGcmUnwrapResult> {\n await initWasm();\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// Dilithium functions\n\n/**\n * Generate a new ML-DSA-65 (Dilithium) keypair.\n * SECURITY: Keys should be stored encrypted at rest.\n * For high-value operations, consider hardware security modules.\n */\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\n await initWasm();\n const result = JSON.parse(wasm_dilithium_keygen());\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Sign a message using ML-DSA-65 (Dilithium).\n * @param messageB64u - Base64url-encoded message to sign\n * @param secretB64u - Base64url-encoded secret key\n * SECURITY: Secret key should be zeroized after use if possible.\n */\nexport async function dilithiumSign(\n messageB64u: string,\n secretB64u: string\n): Promise<DilithiumSignResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (secretB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Secret key exceeds maximum size of ${MAX_KEY_SIZE} bytes`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n/**\n * Verify a ML-DSA-65 (Dilithium) signature.\n * @param messageB64u - Base64url-encoded message\n * @param signatureB64u - Base64url-encoded signature\n * @param publicB64u - Base64url-encoded public key\n */\nexport async function dilithiumVerify(\n messageB64u: string,\n signatureB64u: string,\n publicB64u: string\n): Promise<DilithiumVerifyResult> {\n // Input validation - prevent memory exhaustion attacks\n if (messageB64u.length > MAX_MESSAGE_SIZE) {\n throw new Error(`Message exceeds maximum size of ${MAX_MESSAGE_SIZE} bytes`);\n }\n if (signatureB64u.length > MAX_KEY_SIZE || publicB64u.length > MAX_KEY_SIZE) {\n throw new Error(`Signature or public key exceeds maximum size`);\n }\n \n await initWasm();\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\n if (result.error) throw new Error(result.error);\n return result;\n}\n\n// ---- Deterministic helpers (multisig/art token) ----\nexport async function jcsCanonicalize(json: unknown): Promise<string> {\n await initWasm();\n const raw = (wasmPkg as any).jcs_canonicalize(JSON.stringify(json));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return out.canonical as string;\n}\n\nexport async function buildPolicyPreimage(policy: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_governance(JSON.stringify(policy));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildMintPreimage(header: unknown, asset: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildTransferPreimage(header: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_asset_transfer(JSON.stringify(header));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\nexport async function buildAnchorPreimage(userId: string, rootHex: string, epoch: string, chains: unknown): Promise<CanonicalOut> {\n await initWasm();\n const raw = (wasmPkg as any).preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\n}\n\n// ---- Veritas Block Preimage (NEW v2 JCS canonical form) ----\n// We migrate block signing to a canonical (JCS) JSON similar to other preimages.\n// Legacy (v1) blocks used a hand-crafted JSON.stringify of a plain object with fixed insertion order.\n// This helper produces a canonical JSON string and msg_b64u = b64url(UTF-8(canonical JSON)).\n// NOTE: We intentionally EXCLUDE signature, encryptionKeyHash, and any runtime-only fields.\n// Fields included (ordered via JCS lexical ordering):\n// contentType, dataHash, index, metadataHash, ownerPublicKey, previousHash, signatureAlg, timestamp, version\n// index & timestamp MUST be strings representing decimal integers (BigInt safe) – caller responsibility.\nexport interface BlockPreimageInput {\n index: string | number | bigint;\n timestamp: string | number | bigint;\n previousHash: string;\n dataHash: string;\n metadataHash: string;\n signatureAlg: string; // e.g. 'dilithium2'\n ownerPublicKey: string; // Dilithium public key (base64url)\n contentType?: string; // default 'application/json'\n version: number; // block format / protocol version\n}\n\nexport async function buildBlockPreimage(block: BlockPreimageInput): Promise<CanonicalOut> {\n await initWasm();\n // Normalize fields per spec\n const normalized = {\n contentType: block.contentType || 'application/json',\n dataHash: block.dataHash,\n index: block.index.toString(),\n metadataHash: block.metadataHash,\n ownerPublicKey: block.ownerPublicKey,\n previousHash: block.previousHash,\n signatureAlg: block.signatureAlg,\n timestamp: block.timestamp.toString(),\n version: block.version,\n };\n // Use JCS canonicalization via wasm jcs_canonicalize (already exposed through jcsCanonicalize helper)\n const canonical = await jcsCanonicalize(normalized);\n const msg_b64u = b64uEncode(new TextEncoder().encode(canonical));\n return { canonical, msg_b64u, msgB64u: msg_b64u };\n}\n\nexport async function validateRoyalty(receiver: string, bps: number): Promise<boolean> {\n await initWasm();\n const raw = (wasmPkg as any).validate_royalty(receiver, bps);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) return false;\n return !!out.ok;\n}\n\nexport async function verifyAttestations(msgB64u: string, attestations: Array<{ alg: string; publicKeyB64u: string; signatureB64u: string }>, allowedPublicKeys?: string[]): Promise<number> {\n await initWasm();\n const raw = (wasmPkg as any).verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\n if (out?.error) throw new Error(out.error);\n return Number(out.valid_count || 0);\n}\n\n// Utility functions\n// Cross-env base64url helpers (browser + Node)\nfunction _fromByteArray(bytes: Uint8Array): string {\n if (typeof btoa === 'function') {\n // Browser\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n }\n // Node\n return Buffer.from(bytes).toString('base64');\n}\n\nfunction _toByteArray(b64: string): Uint8Array {\n if (typeof atob === 'function') {\n const binary = atob(b64);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n }\n return new Uint8Array(Buffer.from(b64, 'base64'));\n}\n\nexport function b64uEncode(data: Uint8Array): string {\n return _fromByteArray(data)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+/g, '');\n}\n\nexport function b64uDecode(str: string): Uint8Array {\n const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');\n return _toByteArray(b64);\n}\n\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result |= a[i] ^ b[i];\n }\n return result === 0;\n}\n\n// ============================================================================\n// THRESHOLD SIGNATURES & GOVERNANCE\n// ============================================================================\n\nexport interface GovernancePolicy {\n policyId: string;\n version: number;\n chainId: string;\n threshold: number;\n signers: Array<{\n publicKeyB64u: string;\n keyId: string;\n weight: number;\n role: 'owner' | 'guardian' | 'delegate' | 'recovery';\n }>;\n operations: Array<{\n action: string;\n requiredThreshold?: number;\n requiredRoles?: string[];\n maxValue?: string;\n timelock?: number;\n }>;\n validFrom: number;\n validUntil: number;\n createdAt: number;\n createdBy: string;\n policySignature: string;\n}\n\nexport interface Attestation {\n signerKeyId: string;\n signerPublicKeyB64u: string;\n operationHash: string;\n operationType: string;\n attestedAt: number;\n expiresAt: number;\n signatureAlg: 'dilithium2';\n signatureB64u: string;\n}\n\nexport interface AggregatedSignature {\n policyId: string;\n policyVersion: number;\n operationHash: string;\n attestations: Attestation[];\n totalWeight: number;\n thresholdMet: boolean;\n verifiedAt: number;\n}\n\n/**\n * Create an attestation for a threshold signature operation.\n */\nexport async function createAttestation(\n operation: { type: string; payload: unknown },\n signerKeys: { keyId: string; publicKeyB64u: string; secretKeyB64u: string },\n expiresInSeconds: number = 3600\n): Promise<Attestation> {\n await initWasm();\n \n // Build deterministic preimage for the operation\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const operationHash = await sha256B64u(preimageBytes);\n const msgB64u = b64uEncode(preimageBytes);\n \n // Sign the preimage\n const sig = await dilithiumSign(msgB64u, signerKeys.secretKeyB64u);\n \n return {\n signerKeyId: signerKeys.keyId,\n signerPublicKeyB64u: signerKeys.publicKeyB64u,\n operationHash,\n operationType: operation.type,\n attestedAt: Date.now(),\n expiresAt: Date.now() + expiresInSeconds * 1000,\n signatureAlg: 'dilithium2',\n signatureB64u: sig.signature_b64u\n };\n}\n\n/**\n * Verify an attestation signature.\n */\nexport async function verifyAttestation(\n attestation: Attestation,\n operation: { type: string; payload: unknown }\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Rebuild expected operation hash\n const preimage = await jcsCanonicalize({ type: operation.type, payload: operation.payload });\n const preimageBytes = new TextEncoder().encode(preimage);\n const expectedHash = await sha256B64u(preimageBytes);\n \n if (attestation.operationHash !== expectedHash) {\n return { valid: false, error: 'Operation hash mismatch' };\n }\n \n // Check expiry\n if (attestation.expiresAt < Date.now()) {\n return { valid: false, error: 'Attestation expired' };\n }\n \n // Verify signature\n const msgB64u = b64uEncode(preimageBytes);\n const result = await dilithiumVerify(msgB64u, attestation.signatureB64u, attestation.signerPublicKeyB64u);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that an aggregated signature meets the threshold policy.\n */\nexport async function verifyThreshold(\n aggregated: AggregatedSignature,\n operation: { type: string; payload: unknown },\n policy: GovernancePolicy\n): Promise<{ valid: boolean; errors: string[] }> {\n const errors: string[] = [];\n \n // Check policy match\n if (aggregated.policyId !== policy.policyId) {\n errors.push('Policy ID mismatch');\n }\n \n // Verify each attestation and compute weight\n let validWeight = 0;\n for (const attestation of aggregated.attestations) {\n const signer = policy.signers.find(s => s.publicKeyB64u === attestation.signerPublicKeyB64u);\n if (!signer) {\n errors.push(`Signer ${attestation.signerKeyId} not in policy`);\n continue;\n }\n \n const result = await verifyAttestation(attestation, operation);\n if (!result.valid) {\n errors.push(`Attestation from ${attestation.signerKeyId}: ${result.error}`);\n continue;\n }\n \n validWeight += signer.weight;\n }\n \n // Check threshold\n if (validWeight < policy.threshold) {\n errors.push(`Threshold not met: weight ${validWeight} < required ${policy.threshold}`);\n }\n \n return { valid: errors.length === 0, errors };\n}\n\n// ============================================================================\n// PRE-REGISTRATION COMMITMENT SCHEME\n// ============================================================================\n\nexport interface ProvenanceCommitment {\n type: 'ProvenanceCommitment';\n version: 1;\n commitmentHash: string;\n creatorPublicKey: string;\n timestamp: number;\n signature: string;\n}\n\nexport interface CommitmentReveal {\n commitmentHash: string;\n salt: string;\n assetHash: string;\n}\n\n/**\n * Create a provenance commitment for an asset before public disclosure.\n * This establishes a timestamped claim without revealing the asset content.\n */\nexport async function createProvenanceCommitment(\n assetBytes: Uint8Array,\n keys: { publicKeyB64u: string; secretKeyB64u: string }\n): Promise<{ commitment: ProvenanceCommitment; reveal: CommitmentReveal }> {\n await initWasm();\n \n // Generate random salt\n const salt = crypto.getRandomValues(new Uint8Array(32));\n \n // Compute commitment hash = SHA256(asset || salt || publicKey)\n const publicKeyBytes = b64uDecode(keys.publicKeyB64u);\n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const commitmentHash = await sha256B64u(preimage);\n const assetHash = await sha256B64u(assetBytes);\n \n // Build commitment object (without signature)\n const commitmentData = {\n type: 'ProvenanceCommitment' as const,\n version: 1 as const,\n commitmentHash,\n creatorPublicKey: keys.publicKeyB64u,\n timestamp: Date.now()\n };\n \n // Sign the commitment\n const canonical = await jcsCanonicalize(commitmentData);\n const sig = await dilithiumSign(b64uEncode(new TextEncoder().encode(canonical)), keys.secretKeyB64u);\n \n const commitment: ProvenanceCommitment = {\n ...commitmentData,\n signature: sig.signature_b64u\n };\n \n const reveal: CommitmentReveal = {\n commitmentHash,\n salt: b64uEncode(salt),\n assetHash\n };\n \n return { commitment, reveal };\n}\n\n/**\n * Verify a provenance commitment signature.\n */\nexport async function verifyProvenanceCommitment(\n commitment: ProvenanceCommitment\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // Reconstruct the signed data (without signature field)\n const commitmentData = {\n type: commitment.type,\n version: commitment.version,\n commitmentHash: commitment.commitmentHash,\n creatorPublicKey: commitment.creatorPublicKey,\n timestamp: commitment.timestamp\n };\n \n const canonical = await jcsCanonicalize(commitmentData);\n const msgB64u = b64uEncode(new TextEncoder().encode(canonical));\n \n const result = await dilithiumVerify(msgB64u, commitment.signature, commitment.creatorPublicKey);\n \n if (!result.is_valid) {\n return { valid: false, error: 'Invalid commitment signature' };\n }\n \n return { valid: true };\n}\n\n/**\n * Verify that a revealed asset matches a commitment.\n */\nexport async function verifyCommitmentReveal(\n commitment: ProvenanceCommitment,\n assetBytes: Uint8Array,\n reveal: CommitmentReveal\n): Promise<{ valid: boolean; error?: string }> {\n await initWasm();\n \n // First verify the commitment signature\n const sigResult = await verifyProvenanceCommitment(commitment);\n if (!sigResult.valid) {\n return { valid: false, error: `Commitment signature invalid: ${sigResult.error}` };\n }\n \n // Verify asset hash matches\n const computedAssetHash = await sha256B64u(assetBytes);\n if (computedAssetHash !== reveal.assetHash) {\n return { valid: false, error: 'Asset hash does not match reveal' };\n }\n \n // Reconstruct commitment hash\n const salt = b64uDecode(reveal.salt);\n const publicKeyBytes = b64uDecode(commitment.creatorPublicKey);\n \n const preimage = new Uint8Array(assetBytes.length + salt.length + publicKeyBytes.length);\n preimage.set(assetBytes, 0);\n preimage.set(salt, assetBytes.length);\n preimage.set(publicKeyBytes, assetBytes.length + salt.length);\n \n const computedCommitmentHash = await sha256B64u(preimage);\n \n if (computedCommitmentHash !== commitment.commitmentHash) {\n return { valid: false, error: 'Commitment hash does not match reveal' };\n }\n \n return { valid: true };\n}\n\n// ============================================================================\n// HELPER: SHA-256 with base64url output\n// ============================================================================\n\nasync function sha256B64u(data: Uint8Array): Promise<string> {\n const hashBuffer = await crypto.subtle.digest('SHA-256', data as unknown as BufferSource);\n return b64uEncode(new Uint8Array(hashBuffer));\n}\n\n// ============================================================================\n// ALGORITHMIC OPTIMIZATIONS (arXiv:2501.02305, arXiv:2504.17033)\n// ============================================================================\n// High-performance data structures for verification operations\n\n// WASM bindings for algorithm functions\nconst wasm_create_nonce_cache = (wasmPkg as any).create_nonce_cache as (capacity: number, ttl_ms: number) => string;\nconst wasm_nonce_cache_info = (wasmPkg as any).nonce_cache_info as () => string;\nconst wasm_sssp_config = (wasmPkg as any).sssp_config as (nodes: number) => string;\nconst wasm_provenance_path_config = (wasmPkg as any).provenance_path_config as (chain_length: number, branches: number) => string;\nconst wasm_elastic_hash_config = (wasmPkg as any).elastic_hash_config as (capacity: number, load_factor: number) => string;\n\n/**\n * Nonce Cache Configuration\n * Uses Elastic Hashing (arXiv:2501.02305) for O(1) amortized lookup\n */\nexport interface NonceCacheConfig {\n type: string;\n capacity: number;\n ttl_ms: number;\n algorithm: string;\n complexity: string;\n}\n\n/**\n * Create a nonce cache configuration for replay attack prevention.\n * Based on Elastic Hashing - O(1) amortized, O(log(1/δ)) worst-case.\n * \n * @param capacity - Maximum number of nonces to track\n * @param ttlMs - Time-to-live in milliseconds before nonces expire\n */\nexport async function createNonceCacheConfig(capacity: number, ttlMs: number): Promise<NonceCacheConfig> {\n await initWasm();\n return JSON.parse(wasm_create_nonce_cache(capacity, ttlMs));\n}\n\n/**\n * Get information about the nonce cache algorithm.\n */\nexport async function getNonceCacheInfo(): Promise<{\n name: string;\n paper: string;\n probe_complexity: string;\n load_factor: number;\n features: string[];\n}> {\n await initWasm();\n return JSON.parse(wasm_nonce_cache_info());\n}\n\n/**\n * SSSP (Single-Source Shortest Path) Configuration\n * Uses Frontier-Reduced algorithm (arXiv:2504.17033)\n */\nexport interface SSSPConfig {\n name: string;\n paper: string;\n complexity: string;\n nodes: number;\n pivots_k: number;\n batch_t: number;\n use_cases: string[];\n}\n\n/**\n * Get optimal SSSP configuration for graph verification.\n * Uses Frontier-Reduced SSSP - O(m × log^(2/3)(n)) complexity.\n * \n * @param nodes - Expected number of nodes in the graph\n */\nexport async function getSSSPConfig(nodes: number): Promise<SSSPConfig> {\n await initWasm();\n return JSON.parse(wasm_sssp_config(nodes));\n}\n\n/**\n * Provenance Path Configuration\n * Optimized parameters for chain of custody verification\n */\nexport interface ProvenancePathConfig {\n algorithm: string;\n chain_length: number;\n branches: number;\n estimated_nodes: number;\n estimated_edges: number;\n pivots_k: number;\n batch_t: number;\n complexity: string;\n verification_mode: string;\n}\n\n/**\n * Get optimized configuration for provenance chain verification.\n * \n * @param chainLength - Number of blocks in the provenance chain\n * @param branches - Average number of branches per block\n */\nexport async function getProvenancePathConfig(chainLength: number, branches: number): Promise<ProvenancePathConfig> {\n await initWasm();\n return JSON.parse(wasm_provenance_path_config(chainLength, branches));\n}\n\n/**\n * Elastic Hash Configuration\n * High-performance hash table for key caching\n */\nexport interface ElasticHashConfig {\n algorithm: string;\n paper: string;\n capacity: number;\n load_factor: number;\n levels: number;\n probe_complexity: {\n amortized: string;\n worst_case: string;\n };\n use_cases: string[];\n}\n\n/**\n * Get elastic hash table configuration for key caching.\n * Optimal for PQC public key caching with O(1) amortized lookups.\n * \n * @param capacity - Maximum number of entries\n * @param loadFactor - Target load factor (0.0 to 1.0, recommend 0.95)\n */\nexport async function getElasticHashConfig(capacity: number, loadFactor: number = 0.95): Promise<ElasticHashConfig> {\n await initWasm();\n return JSON.parse(wasm_elastic_hash_config(capacity, loadFactor));\n}\n\n// ============================================================================\n// CROSS-CHAIN ANCHORING (Roadmap M8)\n// ============================================================================\n// Merkle root submission to Ethereum, Bitcoin, and L2s for timestamping\n\n// WASM bindings for anchoring functions\nconst wasm_anchor_chains_info = (wasmPkg as any).anchor_chains_info as () => string;\nconst wasm_create_accumulator_leaf = (wasmPkg as any).create_accumulator_leaf as (userId: string, chainId: string, blockHash: string, blockIndex: bigint) => string;\nconst wasm_create_accumulator_leaf_with_alg = (wasmPkg as any).create_accumulator_leaf_with_alg as (userId: string, chainId: string, blockHash: string, blockIndex: bigint, hashAlg: string) => string;\nconst wasm_compute_merkle_root = (wasmPkg as any).compute_merkle_root as (leavesJson: string, hashAlg: string) => string;\nconst wasm_generate_evm_anchor_calldata = (wasmPkg as any).generate_evm_anchor_calldata as (rootHex: string, epoch: bigint) => string;\nconst wasm_generate_bitcoin_anchor_payload = (wasmPkg as any).generate_bitcoin_anchor_payload as (rootHex: string, epoch: bigint) => string;\nconst wasm_decode_bitcoin_anchor_payload = (wasmPkg as any).decode_bitcoin_anchor_payload as (payloadHex: string) => string;\nconst wasm_truncate_to_bytes32 = (wasmPkg as any).truncate_to_bytes32 as (hashHex: string) => string;\nconst wasm_anchor_config_info = (wasmPkg as any).anchor_config_info as () => string;\n\n/**\n * Supported blockchain chains for anchoring\n */\nexport interface AnchorChainInfo {\n id: string;\n name: string;\n chain_id?: number;\n type: 'evm' | 'evm_l2' | 'bitcoin';\n contract?: string;\n method?: string;\n payload_size?: number;\n}\n\n/**\n * Get information about supported anchor chains\n */\nexport async function getAnchorChainsInfo(): Promise<{ chains: AnchorChainInfo[] }> {\n await initWasm();\n return JSON.parse(wasm_anchor_chains_info());\n}\n\n/**\n * Accumulator leaf representing a chain's current state\n */\nexport interface AccumulatorLeaf {\n user_id: string;\n chain_id: string;\n block_hash: string;\n block_index: number;\n timestamp: number;\n leaf_hash: string;\n hash_alg?: string;\n}\n\n/**\n * Create a Merkle accumulator leaf for a chain state.\n * This is the fundamental unit for batching chain updates into super-roots.\n * \n * @param userId - User ID (64 hex chars)\n * @param chainId - Chain identifier within user's chains\n * @param blockHash - Hash of the latest block (64 hex chars)\n * @param blockIndex - Block height/index (number or bigint)\n * @param hashAlg - Hash algorithm for leaf hash ('sha256' or 'sha3-384')\n * @throws Error if inputs are invalid\n */\nexport async function createAccumulatorLeaf(\n userId: string,\n chainId: string,\n blockHash: string,\n blockIndex: number | bigint,\n hashAlg: 'sha256' | 'sha3-384' = 'sha3-384'\n): Promise<AccumulatorLeaf> {\n await initWasm();\n \n // Input validation with helpful error messages\n if (typeof userId !== 'string' || userId.length !== 64) {\n throw new Error(`Invalid userId: must be 64 hex characters (got ${typeof userId === 'string' ? userId.length : typeof userId})`);\n }\n if (!/^[0-9a-fA-F]{64}$/.test(userId)) {\n throw new Error('Invalid userId: must contain only hex characters (0-9, a-f, A-F)');\n }\n \n if (typeof chainId !== 'string' || chainId.length === 0) {\n throw new Error('Invalid chainId: must be a non-empty string');\n }\n \n if (typeof blockHash !== 'string' || blockHash.length !== 64) {\n throw new Error(`Invalid blockHash: must be 64 hex characters (got ${typeof blockHash === 'string' ? blockHash.length : typeof blockHash})`);\n }\n if (!/^[0-9a-fA-F]{64}$/.test(blockHash)) {\n throw new Error('Invalid blockHash: must contain only hex characters (0-9, a-f, A-F)');\n }\n \n // Convert blockIndex to bigint (WASM expects bigint for u64)\n let indexBigInt: bigint;\n if (typeof blockIndex === 'bigint') {\n indexBigInt = blockIndex;\n } else if (typeof blockIndex === 'number') {\n if (!Number.isInteger(blockIndex) || blockIndex < 0) {\n throw new Error('Invalid blockIndex: must be a non-negative integer');\n }\n if (!Number.isSafeInteger(blockIndex)) {\n throw new Error('Invalid blockIndex: number exceeds MAX_SAFE_INTEGER; use bigint instead');\n }\n indexBigInt = BigInt(blockIndex);\n } else {\n throw new Error(`Invalid blockIndex: must be a number or bigint (got ${typeof blockIndex})`);\n }\n \n if (indexBigInt < 0n) {\n throw new Error('Invalid blockIndex: must be non-negative');\n }\n \n try {\n const result = typeof wasm_create_accumulator_leaf_with_alg === 'function'\n ? wasm_create_accumulator_leaf_with_alg(userId, chainId, blockHash, indexBigInt, hashAlg)\n : wasm_create_accumulator_leaf(userId, chainId, blockHash, indexBigInt);\n const parsed = JSON.parse(result);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n return parsed;\n } catch (e) {\n if (e instanceof Error) {\n // Re-throw our validation errors\n if (e.message.startsWith('Invalid ')) {\n throw e;\n }\n // Wrap WASM errors\n throw new Error(`WASM error in createAccumulatorLeaf: ${e.message}`);\n }\n throw new Error(`Unknown error in createAccumulatorLeaf: ${String(e)}`);\n }\n}\n\n/**\n * Merkle root computation result\n */\nexport interface MerkleRootResult {\n root: string;\n leaf_count: number;\n hash_alg: string;\n}\n\n/**\n * Compute Merkle root from an array of leaf hashes.\n * \n * @param leaves - Array of hex hash strings\n * @param hashAlg - Hash algorithm ('sha256' or 'sha3-384')\n */\nexport async function computeMerkleRoot(\n leaves: string[],\n hashAlg: 'sha256' | 'sha3-384' = 'sha256'\n): Promise<MerkleRootResult> {\n await initWasm();\n return JSON.parse(wasm_compute_merkle_root(JSON.stringify(leaves), hashAlg));\n}\n\n/**\n * EVM anchor calldata for AnchorRegistry contract\n */\nexport interface EvmAnchorCalldata {\n calldata: string;\n root: string;\n epoch: number;\n method: string;\n selector: string;\n}\n\n/**\n * Generate EVM calldata for AnchorRegistry.anchor(bytes32, uint256).\n * Ready to use in an Ethereum transaction.\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars, with or without 0x prefix)\n * @param epoch - Epoch number (number or bigint)\n */\nexport async function generateEvmAnchorCalldata(\n rootHex: string,\n epoch: number | bigint\n): Promise<EvmAnchorCalldata> {\n await initWasm();\n let epochBigInt: bigint;\n if (typeof epoch === 'bigint') {\n epochBigInt = epoch;\n } else {\n if (!Number.isInteger(epoch) || epoch < 0) {\n throw new Error('Invalid epoch: must be a non-negative integer');\n }\n if (!Number.isSafeInteger(epoch)) {\n throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');\n }\n epochBigInt = BigInt(epoch);\n }\n return JSON.parse(wasm_generate_evm_anchor_calldata(rootHex, epochBigInt));\n}\n\n/**\n * Bitcoin OP_RETURN anchor payload\n */\nexport interface BitcoinAnchorPayload {\n payload_hex: string;\n payload_size: number;\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Generate Bitcoin OP_RETURN payload for anchoring.\n * 45 bytes: \"MTARA\" (5) + epoch (8) + root32 (32)\n * \n * @param rootHex - 32-byte Merkle root (64 hex chars)\n * @param epoch - Epoch number (number or bigint)\n */\nexport async function generateBitcoinAnchorPayload(\n rootHex: string,\n epoch: number | bigint\n): Promise<BitcoinAnchorPayload> {\n await initWasm();\n let epochBigInt: bigint;\n if (typeof epoch === 'bigint') {\n epochBigInt = epoch;\n } else {\n if (!Number.isInteger(epoch) || epoch < 0) {\n throw new Error('Invalid epoch: must be a non-negative integer');\n }\n if (!Number.isSafeInteger(epoch)) {\n throw new Error('Invalid epoch: number exceeds MAX_SAFE_INTEGER; use bigint instead');\n }\n epochBigInt = BigInt(epoch);\n }\n return JSON.parse(wasm_generate_bitcoin_anchor_payload(rootHex, epochBigInt));\n}\n\n/**\n * Decoded Bitcoin anchor payload\n */\nexport interface DecodedBitcoinPayload {\n magic: string;\n epoch: number;\n root: string;\n}\n\n/**\n * Decode a Bitcoin OP_RETURN anchor payload.\n * \n * @param payloadHex - Hex-encoded payload bytes\n */\nexport async function decodeBitcoinAnchorPayload(\n payloadHex: string\n): Promise<DecodedBitcoinPayload> {\n await initWasm();\n return JSON.parse(wasm_decode_bitcoin_anchor_payload(payloadHex));\n}\n\n/**\n * Truncation result for SHA3-384 to bytes32\n */\nexport interface TruncationResult {\n original: string;\n original_bytes: number;\n truncated: string;\n truncated_bytes: number;\n}\n\n/**\n * Truncate a hash to 32 bytes for EVM compatibility.\n * Used when anchoring SHA3-384 hashes to Ethereum.\n * \n * @param hashHex - Hash to truncate (with or without 0x prefix)\n */\nexport async function truncateToBytes32(hashHex: string): Promise<TruncationResult> {\n await initWasm();\n return JSON.parse(wasm_truncate_to_bytes32(hashHex));\n}\n\n/**\n * Anchor configuration and estimates\n */\nexport interface AnchorConfigInfo {\n accumulator: {\n max_leaves_per_epoch: number;\n hash_algorithms: string[];\n default_hash: string;\n };\n ethereum: {\n contract: string;\n function: string;\n selector: string;\n estimated_gas: number;\n calldata_size: number;\n };\n bitcoin: {\n method: string;\n magic: string;\n payload_size: number;\n estimated_fee_sats: number;\n };\n recommended_schedule: {\n production: string;\n high_frequency: string;\n };\n}\n\n/**\n * Get anchor configuration and gas/fee estimates.\n */\nexport async function getAnchorConfigInfo(): Promise<AnchorConfigInfo> {\n await initWasm();\n return JSON.parse(wasm_anchor_config_info());\n}\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;AA4CjC,MAAM,iBAAiB,GAAI,OAAe,CAAC,YAA4B;AACvE,MAAM,iBAAiB,GAAI,OAAe,CAAC,YAAqC;AAChF,MAAM,iBAAiB,GAAI,OAAe,CAAC,YAAgD;AAC3F,MAAM,gBAAgB,GAAI,OAAe,CAAC,WAA4E;AACtH,MAAM,iBAAiB,GAAI,OAAe,CAAC,YAA2D;AACtG,MAAM,mBAAmB,GAAI,OAAe,CAAC,cAA0E;AACvH,MAAM,qBAAqB,GAAI,OAAe,CAAC,gBAAgC;AAC/E,MAAM,mBAAmB,GAAI,OAAe,CAAC,cAAkD;AAC/F,MAAM,qBAAqB,GAAI,OAAe,CAAC,gBAAiE;AAKhH;AACA,IAAI,SAAS,GAAG,KAAK;AAErB;;;;AAIG;AACI,eAAe,QAAQ,CAAC,SAAe,EAAA;AAC5C,IAAA,IAAI,SAAS;QAAE;AACf,IAAA,MAAM,SAAS,GAAI,OAAe,CAAC,OAAO;AAC1C,IAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;;;AAGnC,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,MAAM,SAAS,CAAC,SAAS,CAAC;QAC5B;aAAO;YACL,MAAM,SAAS,EAAE;QACnB;IACF;IACA,SAAS,GAAG,IAAI;AAClB;AAEA;AACO,eAAe,WAAW,GAAA;IAC/B,MAAM,QAAQ,EAAE;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC9C,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEO,eAAe,WAAW,CAAC,UAAkB,EAAA;IAClD,MAAM,QAAQ,EAAE;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEO,eAAe,WAAW,CAAC,UAAkB,EAAE,SAAiB,EAAA;IACrE,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEA;AACO,eAAe,UAAU,CAC9B,UAAkB,EAClB,QAAgB,EAChB,QAAiB,EACjB,GAAA,GAAc,EAAE,EAAA;IAEhB,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChF,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEA;AACO,eAAe,UAAU,CAC9B,OAAe,EACf,OAAe,EACf,OAAe,EAAA;IAEf,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEO,eAAe,YAAY,CAChC,OAAe,EACf,MAAc,EACd,MAAc,EACd,OAAe,EAAA;IAEf,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAChF,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEA;AAEA;;;;AAIG;AACI,eAAe,eAAe,GAAA;IACnC,MAAM,QAAQ,EAAE;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;IAClD,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEA;;;;;AAKG;AACI,eAAe,aAAa,CACjC,WAAmB,EACnB,UAAkB,EAAA;;AAGlB,IAAA,IAAI,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE;AACzC,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,gBAAgB,CAAA,MAAA,CAAQ,CAAC;IAC9E;AACA,IAAA,IAAI,UAAU,CAAC,MAAM,GAAG,YAAY,EAAE;AACpC,QAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,CAAA,MAAA,CAAQ,CAAC;IAC7E;IAEA,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEA;;;;;AAKG;AACI,eAAe,eAAe,CACnC,WAAmB,EACnB,aAAqB,EACrB,UAAkB,EAAA;;AAGlB,IAAA,IAAI,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE;AACzC,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,gBAAgB,CAAA,MAAA,CAAQ,CAAC;IAC9E;AACA,IAAA,IAAI,aAAa,CAAC,MAAM,GAAG,YAAY,IAAI,UAAU,CAAC,MAAM,GAAG,YAAY,EAAE;AAC3E,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,4CAAA,CAA8C,CAAC;IACjE;IAEA,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,IAAA,OAAO,MAAM;AACf;AAEA;AACO,eAAe,eAAe,CAAC,IAAa,EAAA;IACjD,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,GAAG,GAAI,OAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACnE,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAC3D,IAAI,GAAG,EAAE,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1C,OAAO,GAAG,CAAC,SAAmB;AAChC;AAEO,eAAe,mBAAmB,CAAC,MAAe,EAAA;IACvD,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,GAAG,GAAI,OAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACxE,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAC3D,IAAI,GAAG,EAAE,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,IAAA,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE;AACpF;AAEO,eAAe,iBAAiB,CAAC,MAAe,EAAE,KAAc,EAAA;IACrE,MAAM,QAAQ,EAAE;IAChB,MAAM,GAAG,GAAI,OAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/F,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAC3D,IAAI,GAAG,EAAE,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,IAAA,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE;AACpF;AAEO,eAAe,qBAAqB,CAAC,MAAe,EAAA;IACzD,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,GAAG,GAAI,OAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5E,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAC3D,IAAI,GAAG,EAAE,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,IAAA,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE;AACpF;AAEO,eAAe,mBAAmB,CAAC,MAAc,EAAE,OAAe,EAAE,KAAa,EAAE,MAAe,EAAA;IACvG,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,GAAG,GAAI,OAAe,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5F,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAC3D,IAAI,GAAG,EAAE,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,IAAA,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE;AACpF;AAsBO,eAAe,kBAAkB,CAAC,KAAyB,EAAA;IAChE,MAAM,QAAQ,EAAE;;AAEhB,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,kBAAkB;QACpD,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,QAAA,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;QAC7B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,YAAY;AAChC,QAAA,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;QACrC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;;AAED,IAAA,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC;AACnD,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;AACnD;AAEO,eAAe,eAAe,CAAC,QAAgB,EAAE,GAAW,EAAA;IACjE,MAAM,QAAQ,EAAE;IAChB,MAAM,GAAG,GAAI,OAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC5D,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAC3D,IAAI,GAAG,EAAE,KAAK;AAAE,QAAA,OAAO,KAAK;AAC5B,IAAA,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE;AACjB;AAEO,eAAe,kBAAkB,CAAC,OAAe,EAAE,YAAkF,EAAE,iBAA4B,EAAA;IACxK,MAAM,QAAQ,EAAE;AAChB,IAAA,MAAM,GAAG,GAAI,OAAe,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;AAC1J,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAC3D,IAAI,GAAG,EAAE,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;AACrC;AAEA;AACA;AACA,SAAS,cAAc,CAAC,KAAiB,EAAA;AACvC,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;;QAE9B,IAAI,CAAC,GAAG,EAAE;AACV,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC;IAChB;;IAEA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9C;AAEA,SAAS,YAAY,CAAC,GAAW,EAAA;AAC/B,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AACzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AACrE,QAAA,OAAO,GAAG;IACZ;AACA,IAAA,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnD;AAEM,SAAU,UAAU,CAAC,IAAgB,EAAA;IACzC,OAAO,cAAc,CAAC,IAAI;AACvB,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG;AAClB,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG;AAClB,SAAA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACvB;AAEM,SAAU,UAAU,CAAC,GAAW,EAAA;AACpC,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;AAChG,IAAA,OAAO,YAAY,CAAC,GAAG,CAAC;AAC1B;AAEM,SAAU,iBAAiB,CAAC,CAAa,EAAE,CAAa,EAAA;AAC5D,IAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;IACvC,IAAI,MAAM,GAAG,CAAC;AACd,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB;IACA,OAAO,MAAM,KAAK,CAAC;AACrB;AAoDA;;AAEG;AACI,eAAe,iBAAiB,CACrC,SAA6C,EAC7C,UAA2E,EAC3E,gBAAA,GAA2B,IAAI,EAAA;IAE/B,MAAM,QAAQ,EAAE;;AAGhB,IAAA,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5F,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxD,IAAA,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC;AACrD,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC;;IAGzC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC;IAElE,OAAO;QACL,WAAW,EAAE,UAAU,CAAC,KAAK;QAC7B,mBAAmB,EAAE,UAAU,CAAC,aAAa;QAC7C,aAAa;QACb,aAAa,EAAE,SAAS,CAAC,IAAI;AAC7B,QAAA,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,GAAG,IAAI;AAC/C,QAAA,YAAY,EAAE,YAAY;QAC1B,aAAa,EAAE,GAAG,CAAC;KACpB;AACH;AAEA;;AAEG;AACI,eAAe,iBAAiB,CACrC,WAAwB,EACxB,SAA6C,EAAA;IAE7C,MAAM,QAAQ,EAAE;;AAGhB,IAAA,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5F,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxD,IAAA,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC;AAEpD,IAAA,IAAI,WAAW,CAAC,aAAa,KAAK,YAAY,EAAE;QAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE;IAC3D;;IAGA,IAAI,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE;IACvD;;AAGA,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC;AACzC,IAAA,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,mBAAmB,CAAC;AAEzG,IAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACrD;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AACxB;AAEA;;AAEG;AACI,eAAe,eAAe,CACnC,UAA+B,EAC/B,SAA6C,EAC7C,MAAwB,EAAA;IAExB,MAAM,MAAM,GAAa,EAAE;;IAG3B,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE;AAC3C,QAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACnC;;IAGA,IAAI,WAAW,GAAG,CAAC;AACnB,IAAA,KAAK,MAAM,WAAW,IAAI,UAAU,CAAC,YAAY,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,KAAK,WAAW,CAAC,mBAAmB,CAAC;QAC5F,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,WAAW,CAAC,WAAW,CAAA,cAAA,CAAgB,CAAC;YAC9D;QACF;QAEA,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC;AAC9D,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,WAAW,CAAC,WAAW,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAA,CAAE,CAAC;YAC3E;QACF;AAEA,QAAA,WAAW,IAAI,MAAM,CAAC,MAAM;IAC9B;;AAGA,IAAA,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE;QAClC,MAAM,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,WAAW,CAAA,YAAA,EAAe,MAAM,CAAC,SAAS,CAAA,CAAE,CAAC;IACxF;IAEA,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE;AAC/C;AAqBA;;;AAGG;AACI,eAAe,0BAA0B,CAC9C,UAAsB,EACtB,IAAsD,EAAA;IAEtD,MAAM,QAAQ,EAAE;;AAGhB,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;;IAGvD,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;AACrD,IAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;AACxF,IAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;AACrC,IAAA,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE7D,IAAA,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;AACjD,IAAA,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC;;AAG9C,IAAA,MAAM,cAAc,GAAG;AACrB,QAAA,IAAI,EAAE,sBAA+B;AACrC,QAAA,OAAO,EAAE,CAAU;QACnB,cAAc;QACd,gBAAgB,EAAE,IAAI,CAAC,aAAa;AACpC,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG;KACpB;;AAGD,IAAA,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AAEpG,IAAA,MAAM,UAAU,GAAyB;AACvC,QAAA,GAAG,cAAc;QACjB,SAAS,EAAE,GAAG,CAAC;KAChB;AAED,IAAA,MAAM,MAAM,GAAqB;QAC/B,cAAc;AACd,QAAA,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;QACtB;KACD;AAED,IAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;AAC/B;AAEA;;AAEG;AACI,eAAe,0BAA0B,CAC9C,UAAgC,EAAA;IAEhC,MAAM,QAAQ,EAAE;;AAGhB,IAAA,MAAM,cAAc,GAAG;QACrB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,cAAc,EAAE,UAAU,CAAC,cAAc;QACzC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,SAAS,EAAE,UAAU,CAAC;KACvB;AAED,IAAA,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC;AACvD,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAE/D,IAAA,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,gBAAgB,CAAC;AAEhG,IAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE;IAChE;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AACxB;AAEA;;AAEG;AACI,eAAe,sBAAsB,CAC1C,UAAgC,EAChC,UAAsB,EACtB,MAAwB,EAAA;IAExB,MAAM,QAAQ,EAAE;;AAGhB,IAAA,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,UAAU,CAAC;AAC9D,IAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACpB,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA,8BAAA,EAAiC,SAAS,CAAC,KAAK,CAAA,CAAE,EAAE;IACpF;;AAGA,IAAA,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC;AACtD,IAAA,IAAI,iBAAiB,KAAK,MAAM,CAAC,SAAS,EAAE;QAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE;IACpE;;IAGA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC;AAE9D,IAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;AACxF,IAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;AACrC,IAAA,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE7D,IAAA,MAAM,sBAAsB,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;AAEzD,IAAA,IAAI,sBAAsB,KAAK,UAAU,CAAC,cAAc,EAAE;QACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE;IACzE;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AACxB;AAEA;AACA;AACA;AAEA,eAAe,UAAU,CAAC,IAAgB,EAAA;AACxC,IAAA,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAA+B,CAAC;IACzF,OAAO,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/C;AAEA;AACA;AACA;AACA;AAEA;AACA,MAAM,uBAAuB,GAAI,OAAe,CAAC,kBAAkE;AACnH,MAAM,qBAAqB,GAAI,OAAe,CAAC,gBAAgC;AAC/E,MAAM,gBAAgB,GAAI,OAAe,CAAC,WAAwC;AAClF,MAAM,2BAA2B,GAAI,OAAe,CAAC,sBAA4E;AACjI,MAAM,wBAAwB,GAAI,OAAe,CAAC,mBAAwE;AAc1H;;;;;;AAMG;AACI,eAAe,sBAAsB,CAAC,QAAgB,EAAE,KAAa,EAAA;IAC1E,MAAM,QAAQ,EAAE;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7D;AAEA;;AAEG;AACI,eAAe,iBAAiB,GAAA;IAOrC,MAAM,QAAQ,EAAE;AAChB,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;AAC5C;AAgBA;;;;;AAKG;AACI,eAAe,aAAa,CAAC,KAAa,EAAA;IAC/C,MAAM,QAAQ,EAAE;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC5C;AAkBA;;;;;AAKG;AACI,eAAe,uBAAuB,CAAC,WAAmB,EAAE,QAAgB,EAAA;IACjF,MAAM,QAAQ,EAAE;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACvE;AAmBA;;;;;;AAMG;AACI,eAAe,oBAAoB,CAAC,QAAgB,EAAE,aAAqB,IAAI,EAAA;IACpF,MAAM,QAAQ,EAAE;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACnE;AAEA;AACA;AACA;AACA;AAEA;AACA,MAAM,uBAAuB,GAAI,OAAe,CAAC,kBAAkC;AACnF,MAAM,4BAA4B,GAAI,OAAe,CAAC,uBAA6G;AACnK,MAAM,qCAAqC,GAAI,OAAe,CAAC,gCAAuI;AACtM,MAAM,wBAAwB,GAAI,OAAe,CAAC,mBAAsE;AACxH,MAAM,iCAAiC,GAAI,OAAe,CAAC,4BAA0E;AACrI,MAAM,oCAAoC,GAAI,OAAe,CAAC,+BAA6E;AAC3I,MAAM,kCAAkC,GAAI,OAAe,CAAC,6BAA+D;AAC3H,MAAM,wBAAwB,GAAI,OAAe,CAAC,mBAAkD;AACpG,MAAM,uBAAuB,GAAI,OAAe,CAAC,kBAAkC;AAenF;;AAEG;AACI,eAAe,mBAAmB,GAAA;IACvC,MAAM,QAAQ,EAAE;AAChB,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;AAC9C;AAeA;;;;;;;;;;AAUG;AACI,eAAe,qBAAqB,CACzC,MAAc,EACd,OAAe,EACf,SAAiB,EACjB,UAA2B,EAC3B,UAAiC,UAAU,EAAA;IAE3C,MAAM,QAAQ,EAAE;;IAGhB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE;QACtD,MAAM,IAAI,KAAK,CAAC,CAAA,+CAAA,EAAkD,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,MAAM,CAAA,CAAA,CAAG,CAAC;IAClI;IACA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,QAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC;IACrF;IAEA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACvD,QAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;IAChE;IAEA,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE;QAC5D,MAAM,IAAI,KAAK,CAAC,CAAA,kDAAA,EAAqD,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,OAAO,SAAS,CAAA,CAAA,CAAG,CAAC;IAC9I;IACA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxC,QAAA,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC;IACxF;;AAGA,IAAA,IAAI,WAAmB;AACvB,IAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAClC,WAAW,GAAG,UAAU;IAC1B;AAAO,SAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE;AACnD,YAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;QACvE;QACA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC;QAC5F;AACA,QAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAClC;SAAO;QACL,MAAM,IAAI,KAAK,CAAC,CAAA,oDAAA,EAAuD,OAAO,UAAU,CAAA,CAAA,CAAG,CAAC;IAC9F;AAEA,IAAA,IAAI,WAAW,GAAG,EAAE,EAAE;AACpB,QAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;IAC7D;AAEA,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,OAAO,qCAAqC,KAAK;AAC9D,cAAE,qCAAqC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;cACtF,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/B;AACA,QAAA,OAAO,MAAM;IACf;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,IAAI,CAAC,YAAY,KAAK,EAAE;;YAEtB,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AACpC,gBAAA,MAAM,CAAC;YACT;;YAEA,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,CAAC,CAAC,OAAO,CAAA,CAAE,CAAC;QACtE;QACA,MAAM,IAAI,KAAK,CAAC,CAAA,wCAAA,EAA2C,MAAM,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;IACzE;AACF;AAWA;;;;;AAKG;AACI,eAAe,iBAAiB,CACrC,MAAgB,EAChB,UAAiC,QAAQ,EAAA;IAEzC,MAAM,QAAQ,EAAE;AAChB,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E;AAaA;;;;;;AAMG;AACI,eAAe,yBAAyB,CAC7C,OAAe,EACf,KAAsB,EAAA;IAEtB,MAAM,QAAQ,EAAE;AAChB,IAAA,IAAI,WAAmB;AACvB,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,WAAW,GAAG,KAAK;IACrB;SAAO;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;QAClE;QACA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC;QACvF;AACA,QAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7B;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC5E;AAaA;;;;;;AAMG;AACI,eAAe,4BAA4B,CAChD,OAAe,EACf,KAAsB,EAAA;IAEtB,MAAM,QAAQ,EAAE;AAChB,IAAA,IAAI,WAAmB;AACvB,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,WAAW,GAAG,KAAK;IACrB;SAAO;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;QAClE;QACA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC;QACvF;AACA,QAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7B;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC/E;AAWA;;;;AAIG;AACI,eAAe,0BAA0B,CAC9C,UAAkB,EAAA;IAElB,MAAM,QAAQ,EAAE;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,UAAU,CAAC,CAAC;AACnE;AAYA;;;;;AAKG;AACI,eAAe,iBAAiB,CAAC,OAAe,EAAA;IACrD,MAAM,QAAQ,EAAE;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACtD;AA8BA;;AAEG;AACI,eAAe,mBAAmB,GAAA;IACvC,MAAM,QAAQ,EAAE;AAChB,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;AAC9C;;;;"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -329,6 +329,7 @@ export interface AccumulatorLeaf {
|
|
|
329
329
|
block_index: number;
|
|
330
330
|
timestamp: number;
|
|
331
331
|
leaf_hash: string;
|
|
332
|
+
hash_alg?: string;
|
|
332
333
|
}
|
|
333
334
|
/**
|
|
334
335
|
* Create a Merkle accumulator leaf for a chain state.
|
|
@@ -337,9 +338,11 @@ export interface AccumulatorLeaf {
|
|
|
337
338
|
* @param userId - User ID (64 hex chars)
|
|
338
339
|
* @param chainId - Chain identifier within user's chains
|
|
339
340
|
* @param blockHash - Hash of the latest block (64 hex chars)
|
|
340
|
-
* @param blockIndex - Block height/index
|
|
341
|
+
* @param blockIndex - Block height/index (number or bigint)
|
|
342
|
+
* @param hashAlg - Hash algorithm for leaf hash ('sha256' or 'sha3-384')
|
|
343
|
+
* @throws Error if inputs are invalid
|
|
341
344
|
*/
|
|
342
|
-
export declare function createAccumulatorLeaf(userId: string, chainId: string, blockHash: string, blockIndex: number): Promise<AccumulatorLeaf>;
|
|
345
|
+
export declare function createAccumulatorLeaf(userId: string, chainId: string, blockHash: string, blockIndex: number | bigint, hashAlg?: 'sha256' | 'sha3-384'): Promise<AccumulatorLeaf>;
|
|
343
346
|
/**
|
|
344
347
|
* Merkle root computation result
|
|
345
348
|
*/
|
|
@@ -370,9 +373,9 @@ export interface EvmAnchorCalldata {
|
|
|
370
373
|
* Ready to use in an Ethereum transaction.
|
|
371
374
|
*
|
|
372
375
|
* @param rootHex - 32-byte Merkle root (64 hex chars, with or without 0x prefix)
|
|
373
|
-
* @param epoch - Epoch number
|
|
376
|
+
* @param epoch - Epoch number (number or bigint)
|
|
374
377
|
*/
|
|
375
|
-
export declare function generateEvmAnchorCalldata(rootHex: string, epoch: number): Promise<EvmAnchorCalldata>;
|
|
378
|
+
export declare function generateEvmAnchorCalldata(rootHex: string, epoch: number | bigint): Promise<EvmAnchorCalldata>;
|
|
376
379
|
/**
|
|
377
380
|
* Bitcoin OP_RETURN anchor payload
|
|
378
381
|
*/
|
|
@@ -388,9 +391,9 @@ export interface BitcoinAnchorPayload {
|
|
|
388
391
|
* 45 bytes: "MTARA" (5) + epoch (8) + root32 (32)
|
|
389
392
|
*
|
|
390
393
|
* @param rootHex - 32-byte Merkle root (64 hex chars)
|
|
391
|
-
* @param epoch - Epoch number
|
|
394
|
+
* @param epoch - Epoch number (number or bigint)
|
|
392
395
|
*/
|
|
393
|
-
export declare function generateBitcoinAnchorPayload(rootHex: string, epoch: number): Promise<BitcoinAnchorPayload>;
|
|
396
|
+
export declare function generateBitcoinAnchorPayload(rootHex: string, epoch: number | bigint): Promise<BitcoinAnchorPayload>;
|
|
394
397
|
/**
|
|
395
398
|
* Decoded Bitcoin anchor payload
|
|
396
399
|
*/
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAeD,MAAM,WAAW,YAAY;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAKxF;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAa7D;AAGD,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,CAKzD;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAKzE;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAKzG;AAGD,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,GAAG,GAAE,MAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAKrB;AAGD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CAK7B;AAID;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAKjE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAa9B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAahC;AAGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpE;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAMhF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAM9F;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAMlF;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAMhI;AAUD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAkBzF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMrF;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAM3L;AAyBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAKnD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAGlD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAOvE;AAMD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;KACtD,CAAC,CAAC;IACH,UAAU,EAAE,KAAK,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAC7C,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAC3E,gBAAgB,GAAE,MAAa,GAC9B,OAAO,CAAC,WAAW,CAAC,CAsBtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC5C,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B7C;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAC7C,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgC/C;AAMD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAAC;IAAE,UAAU,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAyCzE;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB7C;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,oBAAoB,EAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B7C;AAuBD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGvG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAGD;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGtE;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAGlH;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,MAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAGlH;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchoring.test.d.ts","sourceRoot":"","sources":["../../tests/anchoring.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maatara/core-pqc",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Ma'atara Post-Quantum Cryptography Toolkit for Browser and Node.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -45,6 +45,6 @@
|
|
|
45
45
|
"typescript": "^5.9.3"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@maatara/core-pqc-wasm": "^0.4.
|
|
48
|
+
"@maatara/core-pqc-wasm": "^0.4.3"
|
|
49
49
|
}
|
|
50
50
|
}
|