@monolythium/core-sdk 0.4.22 → 0.4.24

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto/bincode.ts","../../src/crypto/bytes.ts","../../src/crypto/tx.ts","../../src/crypto/ml-dsa.ts","../../src/crypto/pqm1.ts","../../src/crypto/envelope.ts","../../src/crypto/lythiumseal.ts","../../src/crypto/seal.ts","../../src/crypto/submission.ts"],"names":["bincodeMlDsa65OpaqueInto","keccak_256","ml_kem768","shake256","chacha20poly1305","keccak256","bytesEqual"],"mappings":"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","file":"index.js","sourcesContent":["export class BincodeWriter {\n #chunks: number[] = [];\n\n u8(value: number): void {\n this.#int(value, 1);\n }\n\n u16(value: number): void {\n this.#int(value, 2);\n }\n\n u32(value: number): void {\n this.#int(value, 4);\n }\n\n u64(value: bigint | number): void {\n this.#big(value, 8);\n }\n\n u128(value: bigint | number): void {\n this.#big(value, 16);\n }\n\n enumVariant(value: number): void {\n this.u32(value);\n }\n\n rawBytes(bytes: Uint8Array): void {\n for (const b of bytes) this.#chunks.push(b);\n }\n\n bytes(bytes: Uint8Array): void {\n this.u64(BigInt(bytes.length));\n this.rawBytes(bytes);\n }\n\n optionBytes(bytes: Uint8Array | null): void {\n if (bytes === null) {\n this.u8(0);\n return;\n }\n this.u8(1);\n this.rawBytes(bytes);\n }\n\n toBytes(): Uint8Array {\n return Uint8Array.from(this.#chunks);\n }\n\n #int(value: number, bytes: number): void {\n if (!Number.isSafeInteger(value) || value < 0 || value >= 2 ** (bytes * 8)) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push((value >> (8 * i)) & 0xff);\n }\n }\n\n #big(value: bigint | number, bytes: number): void {\n let v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v >= (1n << BigInt(bytes * 8))) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push(Number(v & 0xffn));\n v >>= 8n;\n }\n }\n}\n","export function concatBytes(...chunks: Uint8Array[]): Uint8Array {\n const len = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(len);\n let off = 0;\n for (const chunk of chunks) {\n out.set(chunk, off);\n off += chunk.length;\n }\n return out;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let out = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i]!.toString(16).padStart(2, \"0\");\n }\n return out;\n}\n\nexport function hexToBytes(hex: string, label = \"hex\"): Uint8Array {\n const stripped = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n if (stripped.length % 2 !== 0) {\n throw new Error(`${label} must have even length`);\n }\n const out = new Uint8Array(stripped.length / 2);\n for (let i = 0; i < out.length; i++) {\n const b = Number.parseInt(stripped.slice(i * 2, i * 2 + 2), 16);\n if (Number.isNaN(b)) {\n throw new Error(`${label} contains invalid hex`);\n }\n out[i] = b;\n }\n return out;\n}\n\nexport function expectBytes(value: Uint8Array | readonly number[], len: number, label: string): Uint8Array {\n if (value.length !== len) {\n throw new Error(`${label} must be ${len} bytes, got ${value.length}`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nexport function bigintToBeBytes(value: bigint, bytes: number, label: string): Uint8Array {\n if (value < 0n || value >= (1n << BigInt(bytes * 8))) {\n throw new Error(`${label} out of ${bytes * 8}-bit range`);\n }\n const out = new Uint8Array(bytes);\n let v = value;\n for (let i = bytes - 1; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nexport function parseBigint(value: bigint | number | string | undefined, label: string): bigint {\n if (value === undefined) throw new Error(`${label} missing`);\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);\n return BigInt(value);\n }\n if (value.startsWith(\"0x\") || value.startsWith(\"0X\")) return BigInt(value);\n return BigInt(value);\n}\n","import { BincodeWriter } from \"./bincode.js\";\nimport { bigintToBeBytes, concatBytes, expectBytes, hexToBytes, parseBigint } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nexport interface NativeEvmTxFields {\n chainId: bigint | number | string;\n nonce: bigint | number | string;\n maxPriorityFeePerGas: bigint | number | string;\n maxFeePerGas: bigint | number | string;\n gasLimit: bigint | number | string;\n to: Uint8Array | readonly number[] | string | null;\n value: bigint | number | string;\n input?: Uint8Array | readonly number[] | string;\n extensions?: readonly NativeTxExtensionLike[];\n}\n\nexport interface NativeTxExtension {\n kind: number;\n body: Uint8Array | readonly number[] | string;\n}\n\nexport interface NativeTxExtensionDescriptor {\n kind: number;\n bodyHex: string;\n}\n\nexport type NativeTxExtensionLike = NativeTxExtension | NativeTxExtensionDescriptor;\n\nexport function encodeTransactionForHash(fields: NativeEvmTxFields, tag: 0x01 | 0x02): Uint8Array {\n const n = normalizeTxFields(fields);\n return concatBytes(\n Uint8Array.of(tag),\n bigintToBeBytes(n.chainId, 8, \"chainId\"),\n bigintToBeBytes(n.nonce, 8, \"nonce\"),\n bigintToBeBytes(n.maxPriorityFeePerGas, 32, \"maxPriorityFeePerGas\"),\n bigintToBeBytes(n.maxFeePerGas, 32, \"maxFeePerGas\"),\n bigintToBeBytes(n.gasLimit, 8, \"gasLimit\"),\n n.to === null ? Uint8Array.of(0) : concatBytes(Uint8Array.of(1), n.to),\n bigintToBeBytes(n.value, 32, \"value\"),\n bigintToBeBytes(BigInt(n.input.length), 4, \"input.length\"),\n n.input,\n new Uint8Array(4), // access_list length\n encodeExtensionsForHash(n.extensions),\n );\n}\n\nexport function bincodeSignedTransaction(\n fields: NativeEvmTxFields,\n signature: Uint8Array | readonly number[],\n publicKey: Uint8Array | readonly number[],\n): Uint8Array {\n const n = normalizeTxFields(fields);\n const sig = expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\");\n const pk = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n const w = new BincodeWriter();\n w.u64(n.chainId);\n w.u64(n.nonce);\n // Amount(U256) goes through alloy's ruint serde, which emits\n // `serialize_bytes(&to_be_bytes_vec())` for non-human-readable\n // serializers. bincode 1.x renders that as `u64(len) || 32 bytes BE`.\n // Address inside Option<Address> takes the same `serialize_bytes`\n // path via alloy's FixedBytes impl, so admin-tag(1) is followed by a\n // length-prefixed 20-byte payload, not a raw 20-byte run.\n w.bytes(uint256Be(n.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"));\n w.bytes(uint256Be(n.maxFeePerGas, \"maxFeePerGas\"));\n w.u64(n.gasLimit);\n if (n.to === null) {\n w.u8(0);\n } else {\n w.u8(1);\n w.bytes(n.to);\n }\n w.bytes(uint256Be(n.value, \"value\"));\n w.bytes(n.input);\n w.u64(0n); // access_list length\n w.u64(BigInt(n.extensions.length));\n for (const ext of n.extensions) bincodeTypedExtensionInto(w, ext);\n bincodeMlDsa65OpaqueInto(w, sig);\n bincodeMlDsa65OpaqueInto(w, pk);\n return w.toBytes();\n}\n\ninterface NormalizedNativeTxExtension {\n kind: number;\n body: Uint8Array;\n}\n\ninterface NormalizedNativeEvmTxFields {\n chainId: bigint;\n nonce: bigint;\n maxPriorityFeePerGas: bigint;\n maxFeePerGas: bigint;\n gasLimit: bigint;\n to: Uint8Array | null;\n value: bigint;\n input: Uint8Array;\n extensions: NormalizedNativeTxExtension[];\n}\n\nfunction normalizeTxFields(fields: NativeEvmTxFields): NormalizedNativeEvmTxFields {\n return {\n chainId: parseBigint(fields.chainId, \"chainId\"),\n nonce: parseBigint(fields.nonce, \"nonce\"),\n maxPriorityFeePerGas: parseBigint(fields.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n maxFeePerGas: parseBigint(fields.maxFeePerGas, \"maxFeePerGas\"),\n gasLimit: parseBigint(fields.gasLimit, \"gasLimit\"),\n to: normalizeTo(fields.to),\n value: parseBigint(fields.value, \"value\"),\n input: normalizeBytes(fields.input ?? new Uint8Array(0), \"input\"),\n extensions: normalizeExtensions(fields.extensions),\n };\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n const bytes = normalizeBytes(value, \"to\");\n return expectBytes(bytes, 20, \"to\");\n}\n\nfunction normalizeBytes(value: Uint8Array | readonly number[] | string, label: string): Uint8Array {\n if (typeof value === \"string\") return hexToBytes(value, label);\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nfunction normalizeExtensions(value: NativeEvmTxFields[\"extensions\"]): NormalizedNativeTxExtension[] {\n if (value === undefined) return [];\n return value.map((ext, index) => {\n if (!Number.isInteger(ext.kind) || ext.kind < 0 || ext.kind > 0xff) {\n throw new Error(`extensions[${index}].kind out of u8 range`);\n }\n const body = normalizeBytes(\"bodyHex\" in ext ? ext.bodyHex : ext.body, `extensions[${index}].body`);\n if (body.length > 0xffff_ffff) {\n throw new Error(`extensions[${index}].body exceeds u32 length`);\n }\n return { kind: ext.kind, body };\n });\n}\n\nfunction encodeExtensionsForHash(extensions: readonly NormalizedNativeTxExtension[]): Uint8Array {\n const chunks: Uint8Array[] = [bigintToBeBytes(BigInt(extensions.length), 4, \"extensions.length\")];\n for (const ext of extensions) {\n chunks.push(\n Uint8Array.of(ext.kind),\n bigintToBeBytes(BigInt(ext.body.length), 4, \"extension.body.length\"),\n ext.body,\n );\n }\n return concatBytes(...chunks);\n}\n\nfunction uint256Be(value: bigint, label: string): Uint8Array {\n if (value < 0n || value >= 1n << 256n) throw new Error(`${label} out of u256 range`);\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 31; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n\nfunction bincodeTypedExtensionInto(w: BincodeWriter, ext: NormalizedNativeTxExtension): void {\n w.u8(ext.kind);\n w.bytes(ext.body);\n}\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\nimport { blake3 } from \"@noble/hashes/blake3.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { bigintToBeBytes, bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport { bincodeSignedTransaction, encodeTransactionForHash, type NativeEvmTxFields } from \"./tx.js\";\n\nexport const ML_DSA_65_SEED_LEN = 32;\nexport const ML_DSA_65_SIGNING_KEY_LEN = 4032;\nexport const ML_DSA_65_PUBLIC_KEY_LEN = 1952;\nexport const ML_DSA_65_SIGNATURE_LEN = 3309;\nexport const STANDARD_ALGO_NUMBER_ML_DSA_65 = 1001;\nexport const ENUM_VARIANT_INDEX_ML_DSA_65 = 3;\nexport const ADDRESS_DERIVATION_DOMAIN = \"MONO_ADDRESS_BLAKE3_20_V1\";\n\nconst ADDRESS_DERIVATION_DOMAIN_BYTES = new TextEncoder().encode(ADDRESS_DERIVATION_DOMAIN);\n\nexport class MlDsa65Backend {\n readonly #secretKey: Uint8Array;\n readonly #publicKey: Uint8Array;\n readonly #addressBytes: Uint8Array;\n #disposed = false;\n\n private constructor(secretKey: Uint8Array, publicKey: Uint8Array) {\n this.#secretKey = expectBytes(secretKey, ML_DSA_65_SIGNING_KEY_LEN, \"ML-DSA-65 secret key\").slice();\n this.#publicKey = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\").slice();\n this.#addressBytes = mlDsa65AddressBytes(this.#publicKey);\n }\n\n static fromSeed(seed: Uint8Array | readonly number[]): MlDsa65Backend {\n const kp = ml_dsa65.keygen(expectBytes(seed, ML_DSA_65_SEED_LEN, \"ML-DSA-65 seed\"));\n return new MlDsa65Backend(kp.secretKey, kp.publicKey);\n }\n\n publicKey(): Uint8Array {\n return this.#publicKey.slice();\n }\n\n addressBytes(): Uint8Array {\n return this.#addressBytes.slice();\n }\n\n getAddress(): string {\n return bytesToHex(this.#addressBytes);\n }\n\n sign(message: Uint8Array): Uint8Array {\n if (this.#disposed) {\n throw new Error(\"MlDsa65Backend disposed\");\n }\n return ml_dsa65.sign(message, this.#secretKey, { extraEntropy: false });\n }\n\n /**\n * Best-effort deterministic wipe of the in-memory secret key. Zeroes the\n * SDK-held `#secretKey` copy and makes any subsequent `sign()` /\n * `signPrehash()` / `signEvmTx()` throw `\"MlDsa65Backend disposed\"` rather\n * than signing with a zeroed key. Idempotent. Public material\n * (`publicKey()` / `getAddress()` / `verify()`) stays usable.\n *\n * Defense-in-depth (S1-01): narrows the post-lock residency window of the\n * ML-DSA-65 secret in the JS heap. `@noble/post-quantum`'s internal\n * transient keygen/sign buffers are out of scope; the SDK-held copy is the\n * meaningful residency win.\n */\n dispose(): void {\n this.#secretKey.fill(0);\n this.#disposed = true;\n }\n\n /** Alias for {@link dispose}. */\n zeroize(): void {\n this.dispose();\n }\n\n /** Whether {@link dispose} has been called (the secret key is wiped). */\n get disposed(): boolean {\n return this.#disposed;\n }\n\n signPrehash(digest: Uint8Array): Uint8Array {\n return this.sign(expectBytes(digest, 32, \"prehash\"));\n }\n\n verify(message: Uint8Array, signature: Uint8Array): boolean {\n return ml_dsa65.verify(\n expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\"),\n message,\n this.#publicKey,\n );\n }\n\n signEvmTx(fields: NativeEvmTxFields): {\n wireHex: string;\n wireBytes: Uint8Array;\n sighash: Uint8Array;\n txHash: Uint8Array;\n } {\n const txHashPreimage = encodeTransactionForHash(fields, 0x01);\n const sighash = keccak_256(txHashPreimage);\n const signature = this.sign(sighash);\n const wireBytes = bincodeSignedTransaction(fields, signature, this.#publicKey);\n const txHash = keccak_256(\n concatBytes(\n encodeTransactionForHash(fields, 0x02),\n signature,\n this.#publicKey,\n ),\n );\n return {\n wireHex: bytesToHex(wireBytes).slice(2),\n wireBytes,\n sighash,\n txHash,\n };\n }\n}\n\nexport function mlDsa65AddressFromPublicKey(publicKey: Uint8Array | readonly number[]): string {\n return bytesToHex(mlDsa65AddressBytes(publicKey));\n}\n\nexport function mlDsa65AddressBytes(publicKey: Uint8Array | readonly number[]): Uint8Array {\n const bytes = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n return blake3(concatBytes(\n ADDRESS_DERIVATION_DOMAIN_BYTES,\n bigintToBeBytes(BigInt(STANDARD_ALGO_NUMBER_ML_DSA_65), 2, \"ML-DSA-65 algo id\"),\n bytes,\n )).slice(0, 20);\n}\n\nexport function encodeMlDsa65Opaque(raw: Uint8Array | readonly number[]): Uint8Array {\n const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);\n const len = bytes.length === ML_DSA_65_PUBLIC_KEY_LEN ? ML_DSA_65_PUBLIC_KEY_LEN : ML_DSA_65_SIGNATURE_LEN;\n expectBytes(bytes, len, \"ML-DSA-65 opaque bytes\");\n const out = new Uint8Array(4 + 2 + 8 + bytes.length);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, ENUM_VARIANT_INDEX_ML_DSA_65, true);\n dv.setUint16(4, STANDARD_ALGO_NUMBER_ML_DSA_65, true);\n dv.setBigUint64(6, BigInt(bytes.length), true);\n out.set(bytes, 14);\n return out;\n}\n\nexport function uint256Bytes(value: bigint | number | string, label: string): Uint8Array {\n const v = typeof value === \"bigint\" ? value : typeof value === \"number\" ? BigInt(value) : BigInt(value);\n return bigintToBeBytes(v, 32, label);\n}\n","import { shake256 } from \"@noble/hashes/sha3.js\";\nimport { entropyToMnemonic, mnemonicToEntropy } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { concatBytes, expectBytes } from \"./bytes.js\";\nimport { ML_DSA_65_SEED_LEN, MlDsa65Backend } from \"./ml-dsa.js\";\n\nexport const PQM1_ALGO_TAG_MLDSA65 = 0x01;\nexport const PQM1_ALGO_TAG_MLDSA87_RESERVED = 0x02;\nexport const PQM1_ALGO_TAG_SLHDSA128S_RESERVED = 0x03;\nexport const PQM1_ALGO_TAG_FALCON512_RESERVED = 0x04;\nexport const PQM1_VERSION_V1 = 0x01;\nexport const PQM1_PAYLOAD_LEN = 32;\nexport const PQM1_ENTROPY_LEN = 30;\nexport const PQM1_V1_MNEMONIC_WORDS = 24;\nexport const PQM1_V1_MLDSA65_DOMAIN_TAG = \"monolythium.pqm1.v1.mldsa65\";\n\nexport type Pqm1ErrorKind =\n | \"badWordCount\"\n | \"bip39Decode\"\n | \"badPayloadLength\"\n | \"unsupportedAlgorithm\"\n | \"unsupportedVersion\"\n | \"missingRandom\";\n\nexport class Pqm1Error extends Error {\n constructor(\n readonly kind: Pqm1ErrorKind,\n message: string,\n ) {\n super(message);\n this.name = \"Pqm1Error\";\n }\n}\n\nexport interface Pqm1Payload {\n algoTag: typeof PQM1_ALGO_TAG_MLDSA65;\n version: typeof PQM1_VERSION_V1;\n entropy: Uint8Array;\n bytes: Uint8Array;\n}\n\nexport type Pqm1Rng = (bytes: Uint8Array) => void;\n\nconst DOMAIN_BYTES = new TextEncoder().encode(PQM1_V1_MLDSA65_DOMAIN_TAG);\n\nfunction normalizeMnemonic(mnemonic: string): string {\n return mnemonic.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nfunction ensureSupportedPayload(bytes: Uint8Array): void {\n if (bytes.length !== PQM1_PAYLOAD_LEN) {\n throw new Pqm1Error(\"badPayloadLength\", `PQM-1 payload must be ${PQM1_PAYLOAD_LEN} bytes, got ${bytes.length}`);\n }\n if (bytes[0] !== PQM1_ALGO_TAG_MLDSA65) {\n throw new Pqm1Error(\"unsupportedAlgorithm\", `unsupported PQM-1 algorithm tag 0x${bytes[0]!.toString(16).padStart(2, \"0\")}`);\n }\n if (bytes[1] !== PQM1_VERSION_V1) {\n throw new Pqm1Error(\"unsupportedVersion\", `unsupported PQM-1 version 0x${bytes[1]!.toString(16).padStart(2, \"0\")}`);\n }\n}\n\nfunction defaultRandomFill(bytes: Uint8Array): void {\n const cryptoObj = globalThis.crypto;\n if (!cryptoObj?.getRandomValues) {\n throw new Pqm1Error(\"missingRandom\", \"globalThis.crypto.getRandomValues is unavailable\");\n }\n cryptoObj.getRandomValues(bytes);\n}\n\nexport function assemblePqm1Payload(entropy: Uint8Array | readonly number[]): Uint8Array {\n const ent = expectBytes(entropy, PQM1_ENTROPY_LEN, \"PQM-1 entropy\");\n const payload = new Uint8Array(PQM1_PAYLOAD_LEN);\n payload[0] = PQM1_ALGO_TAG_MLDSA65;\n payload[1] = PQM1_VERSION_V1;\n payload.set(ent, 2);\n return payload;\n}\n\nexport function parsePqm1Payload(payload: Uint8Array | readonly number[]): Pqm1Payload {\n const bytes = expectBytes(payload, PQM1_PAYLOAD_LEN, \"PQM-1 payload\").slice();\n ensureSupportedPayload(bytes);\n return {\n algoTag: PQM1_ALGO_TAG_MLDSA65,\n version: PQM1_VERSION_V1,\n entropy: bytes.slice(2),\n bytes,\n };\n}\n\nexport function pqm1PayloadToMnemonic(payload: Uint8Array | readonly number[]): string {\n const parsed = parsePqm1Payload(payload);\n return entropyToMnemonic(parsed.bytes, wordlist);\n}\n\nexport function pqm1MnemonicToPayload(mnemonic: string): Pqm1Payload {\n const normalized = normalizeMnemonic(mnemonic);\n const words = normalized.length === 0 ? [] : normalized.split(\" \");\n if (words.length !== PQM1_V1_MNEMONIC_WORDS) {\n throw new Pqm1Error(\"badWordCount\", `PQM-1 mnemonic must be ${PQM1_V1_MNEMONIC_WORDS} words, got ${words.length}`);\n }\n let payload: Uint8Array;\n try {\n payload = mnemonicToEntropy(normalized, wordlist);\n } catch (e) {\n throw new Pqm1Error(\"bip39Decode\", `invalid PQM-1 mnemonic: ${(e as Error).message}`);\n }\n return parsePqm1Payload(payload);\n}\n\nexport function derivePqm1MlDsa65SeedFromPayload(payload: Uint8Array | readonly number[]): Uint8Array {\n const parsed = parsePqm1Payload(payload);\n return shake256(concatBytes(DOMAIN_BYTES, parsed.bytes), { dkLen: ML_DSA_65_SEED_LEN });\n}\n\nexport function pqm1MnemonicToMlDsa65Seed(mnemonic: string): Uint8Array {\n return derivePqm1MlDsa65SeedFromPayload(pqm1MnemonicToPayload(mnemonic).bytes);\n}\n\nexport function pqm1MnemonicToMlDsa65Backend(mnemonic: string): MlDsa65Backend {\n return MlDsa65Backend.fromSeed(pqm1MnemonicToMlDsa65Seed(mnemonic));\n}\n\nexport function pqm1MnemonicToAddress(mnemonic: string): string {\n return pqm1MnemonicToMlDsa65Backend(mnemonic).getAddress();\n}\n\nexport function generatePqm1Mnemonic(rng: Pqm1Rng = defaultRandomFill): string {\n const entropy = new Uint8Array(PQM1_ENTROPY_LEN);\n rng(entropy);\n return pqm1PayloadToMnemonic(assemblePqm1Payload(entropy));\n}\n","import { ml_kem768 } from \"@noble/post-quantum/ml-kem.js\";\nimport { chacha20poly1305 } from \"@noble/ciphers/chacha.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { BincodeWriter } from \"./bincode.js\";\nimport { bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nconst DKG_AEAD_DOMAIN_TAG = new TextEncoder().encode(\"protocore/v2/mempool/dkg-mlkem768/1\");\n\nexport const ML_KEM_768_CIPHERTEXT_LEN = 1088;\nexport const ML_KEM_768_ENCAPSULATION_KEY_LEN = 1184;\nexport const ML_KEM_768_SHARED_SECRET_LEN = 32;\nexport const DKG_NONCE_LEN = 12;\nexport const DKG_AEAD_TAG_LEN = 16;\n\nexport const MempoolClass = {\n Transfer: 0,\n ContractCall: 1,\n PrivacyOp: 2,\n CLOBOp: 3,\n AgentOp: 4,\n FoundationOp: 5,\n /** @deprecated Use FoundationOp. */\n GovernanceOp: 5,\n RWAOp: 6,\n} as const;\nexport type MempoolClass = (typeof MempoolClass)[keyof typeof MempoolClass];\n\nexport interface NonceAad {\n sender: Uint8Array;\n nonce: bigint;\n chainId: bigint;\n class: MempoolClass;\n maxFeePerGas: bigint;\n maxPriorityFeePerGas: bigint;\n gasLimit: bigint;\n}\n\nexport interface DecryptHint {\n epoch: bigint;\n scheme: number;\n}\n\nexport interface EncryptedEnvelope {\n nonceAad: NonceAad;\n ciphertext: Uint8Array;\n decryptionHint: DecryptHint;\n senderPubkey: Uint8Array;\n outerSignature: Uint8Array;\n sender: Uint8Array;\n}\n\nexport function bincodeNonceAad(aad: NonceAad): Uint8Array {\n const w = new BincodeWriter();\n w.bytes(expectBytes(aad.sender, 20, \"NonceAad.sender\"));\n w.u64(aad.nonce);\n w.u64(aad.chainId);\n w.enumVariant(aad.class);\n w.u128(aad.maxFeePerGas);\n w.u128(aad.maxPriorityFeePerGas);\n w.u64(aad.gasLimit);\n return w.toBytes();\n}\n\nexport function bincodeDecryptHint(hint: DecryptHint): Uint8Array {\n const w = new BincodeWriter();\n w.u64(hint.epoch);\n w.u16(hint.scheme);\n return w.toBytes();\n}\n\nexport function bincodeEncryptedEnvelope(env: EncryptedEnvelope): Uint8Array {\n const w = new BincodeWriter();\n w.rawBytes(bincodeNonceAad(env.nonceAad));\n w.bytes(env.ciphertext);\n w.rawBytes(bincodeDecryptHint(env.decryptionHint));\n bincodeMlDsa65OpaqueInto(w, expectBytes(env.senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\"));\n bincodeMlDsa65OpaqueInto(w, expectBytes(env.outerSignature, ML_DSA_65_SIGNATURE_LEN, \"outerSignature\"));\n w.bytes(expectBytes(env.sender, 20, \"sender\"));\n return w.toBytes();\n}\n\nexport function encryptInnerTx(\n signedInnerTxBincode: Uint8Array,\n nonceAad: NonceAad,\n kemEncapsulationKey: Uint8Array,\n): Uint8Array {\n expectBytes(kemEncapsulationKey, ML_KEM_768_ENCAPSULATION_KEY_LEN, \"kemEncapsulationKey\");\n const { cipherText: kemCt, sharedSecret } = ml_kem768.encapsulate(kemEncapsulationKey);\n const nonce = randomBytes(DKG_NONCE_LEN);\n const cipher = chacha20poly1305(sharedSecret, nonce, aadFor(nonceAad));\n const aeadCt = cipher.encrypt(signedInnerTxBincode);\n sharedSecret.fill(0);\n return concatBytes(kemCt, nonce, aeadCt);\n}\n\nexport function outerSigDigest(\n nonceAad: NonceAad,\n ciphertext: Uint8Array,\n decryptionHint: DecryptHint,\n senderPubkey: Uint8Array,\n): Uint8Array {\n const aad = bincodeNonceAad(nonceAad);\n const hint = bincodeDecryptHint(decryptionHint);\n return keccak_256(concatBytes(aad, ciphertext, hint, expectBytes(senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\")));\n}\n\nexport async function buildEncryptedEnvelope(args: {\n signedInnerTxBincode: Uint8Array;\n nonceAad: NonceAad;\n decryptionHint: DecryptHint;\n kemEncapsulationKey: Uint8Array;\n senderAddress: Uint8Array;\n senderPubkey: Uint8Array;\n signOuterDigest: (digest: Uint8Array) => Promise<Uint8Array> | Uint8Array;\n}): Promise<{ envelope: EncryptedEnvelope; wireBytes: Uint8Array; wireHex: string }> {\n const ciphertext = encryptInnerTx(args.signedInnerTxBincode, args.nonceAad, args.kemEncapsulationKey);\n const digest = outerSigDigest(args.nonceAad, ciphertext, args.decryptionHint, args.senderPubkey);\n const outerSignature = await args.signOuterDigest(digest);\n const envelope: EncryptedEnvelope = {\n nonceAad: args.nonceAad,\n ciphertext,\n decryptionHint: args.decryptionHint,\n senderPubkey: expectBytes(args.senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\"),\n outerSignature: expectBytes(outerSignature, ML_DSA_65_SIGNATURE_LEN, \"outerSignature\"),\n sender: expectBytes(args.senderAddress, 20, \"senderAddress\"),\n };\n const wireBytes = bincodeEncryptedEnvelope(envelope);\n return { envelope, wireBytes, wireHex: bytesToHex(wireBytes) };\n}\n\nfunction aadFor(aad: NonceAad): Uint8Array {\n return concatBytes(DKG_AEAD_DOMAIN_TAG, bincodeNonceAad(aad));\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n","/**\n * LythiumSeal scheme-3 client-side seal primitive.\n *\n * Post-quantum cluster-threshold encrypted-mempool sealing:\n * cluster-ML-KEM-768 (FIPS-203) + information-theoretic GF(256) Shamir\n * `t`-of-`n` + committing ChaCha20-Poly1305 (with an explicit SHAKE256\n * key-commitment). A signed transaction body is sealed to a committee of\n * `n` operators such that any `t` of them, each holding only its own\n * ML-KEM decapsulation key, must cooperate to recover the plaintext. No\n * single operator (and no minority of `< t`) can read the body.\n *\n * This is a byte-exact port of the standalone `lythiumseal` Rust crate\n * (github.com/monolythium/lythiumseal) plus the chain-side\n * `LythiumSealEnvelope` wire shape from `mono-core`'s mempool\n * (`seal_to_cluster`). Byte-compatibility is proven by a cross-language\n * KAT (`tests/lythiumseal-kat.test.ts`) against vectors generated from the\n * Rust reference: the same fixed roster + deterministic draw order\n * reproduces the exact envelope bincode bytes the chain accepts, and a\n * Rust-sealed envelope round-trips through the TS decoder.\n *\n * The cryptography is standardized: ML-KEM-768 from `@noble/post-quantum`,\n * ChaCha20-Poly1305 from `@noble/ciphers`, and SHAKE256 from\n * `@noble/hashes`. The GF(256) Shamir layer is the AES field (reduction\n * polynomial 0x11b) implemented in-module to match the crate exactly.\n */\n\nimport { ml_kem768 } from \"@noble/post-quantum/ml-kem.js\";\nimport { chacha20poly1305 } from \"@noble/ciphers/chacha.js\";\nimport { shake256 } from \"@noble/hashes/sha3.js\";\nimport { concatBytes, expectBytes } from \"./bytes.js\";\n\n// ---------------------------------------------------------------------------\n// Sizes (FIPS-203 ML-KEM-768 + AEAD + Shamir).\n\n/** ML-KEM-768 encapsulation-key byte length. */\nexport const SEAL_EK_LEN = 1184;\n/** ML-KEM-768 decapsulation-key byte length. */\nexport const SEAL_DK_LEN = 2400;\n/** ML-KEM-768 ciphertext byte length. */\nexport const SEAL_KEM_CT_LEN = 1088;\n/** ML-KEM-768 keygen seed length (`d || z`, FIPS-203). */\nexport const SEAL_KEM_SEED_LEN = 64;\n/** AEAD key length (ChaCha20-Poly1305 / body key). */\nexport const SEAL_KEY_LEN = 32;\n/** AEAD nonce length (96-bit). */\nexport const SEAL_NONCE_LEN = 12;\n/** Poly1305 tag length. */\nexport const SEAL_TAG_LEN = 16;\n/** Explicit SHAKE256 key-commitment length. */\nexport const SEAL_COMMIT_LEN = 32;\n/** Shamir secret length (the body key). */\nexport const SEAL_SECRET_LEN = 32;\n/** Shamir share wire length (`index || value`). */\nexport const SEAL_SHARE_LEN = 1 + SEAL_SECRET_LEN;\n\n/** Scheme selector for the cluster-ML-KEM + Shamir threshold body. */\nexport const CLUSTER_MLKEM_SHAMIR = 3;\n\n// Domain separators (byte-identical to the Rust crate).\nconst COMMIT_DOMAIN = new TextEncoder().encode(\"lythiumseal/commit/v1\");\nconst KEK_DOMAIN = new TextEncoder().encode(\"lythiumseal/kek/v1\");\nconst NONCE_DOMAIN = new TextEncoder().encode(\"lythiumseal/nonce/v1\");\nconst BODY_AAD_DOMAIN = new TextEncoder().encode(\"lythiumseal/body/v1\");\nconst SHARE_AAD_DOMAIN = new TextEncoder().encode(\"lythiumseal/share/v1\");\nconst ROSTER_DOMAIN = new TextEncoder().encode(\"lythiumseal/roster/v1\");\n\n// ---------------------------------------------------------------------------\n// Deterministic randomness source for the seal.\n\n/**\n * Random source for a seal: fills `dest` with random bytes. Production\n * callers pass a CSPRNG-backed source ({@link cryptoRandomSource}); the\n * KAT passes a deterministic source so the seal bytes are reproducible.\n *\n * Each call must consume the source the same way the Rust reference does:\n * the deterministic source models `rand_core`'s `fill_bytes`, which fills\n * in 8-byte chunks (one `u64` per chunk) and discards the unused tail of\n * the final chunk of each call.\n */\nexport interface SealRandomSource {\n fillBytes(dest: Uint8Array): void;\n}\n\n/** CSPRNG-backed source (WebCrypto). The default for production seals. */\nexport function cryptoRandomSource(): SealRandomSource {\n return {\n fillBytes(dest: Uint8Array): void {\n crypto.getRandomValues(dest);\n },\n };\n}\n\nexport interface OperatorSealKeypair {\n /** ML-KEM-768 encapsulation key, published to node-registry. */\n encapsulationKey: Uint8Array;\n /** ML-KEM-768 decapsulation key, retained by the operator node only. */\n decapsulationKey: Uint8Array;\n}\n\n/** Generate one independent ML-KEM-768 keypair for LythiumSeal operator use. */\nexport function generateOperatorSealKeypair(): OperatorSealKeypair {\n const { publicKey, secretKey } = ml_kem768.keygen();\n return {\n encapsulationKey: expectBytes(publicKey, SEAL_EK_LEN, \"encapsulationKey\").slice(),\n decapsulationKey: expectBytes(secretKey, SEAL_DK_LEN, \"decapsulationKey\").slice(),\n };\n}\n\n// ---------------------------------------------------------------------------\n// SHAKE-based derivations (byte-identical to lythiumseal/src/aead.rs).\n\nfunction u32le(n: number): Uint8Array {\n const out = new Uint8Array(4);\n out[0] = n & 0xff;\n out[1] = (n >>> 8) & 0xff;\n out[2] = (n >>> 16) & 0xff;\n out[3] = (n >>> 24) & 0xff;\n return out;\n}\n\nfunction u64le(n: bigint): Uint8Array {\n const out = new Uint8Array(8);\n let v = n;\n for (let i = 0; i < 8; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\n/** Length-prefix (`u32_le` length) framing, matching `absorb_framed`. */\nfunction framed(field: Uint8Array): Uint8Array {\n return concatBytes(u32le(field.length), field);\n}\n\n/** `SHAKE256(framed(COMMIT_DOMAIN) || key)[..32]`. */\nfunction keyCommitment(key: Uint8Array): Uint8Array {\n return shake256(concatBytes(framed(COMMIT_DOMAIN), key), { dkLen: SEAL_COMMIT_LEN });\n}\n\n/**\n * `SHAKE256(framed(KEK_DOMAIN) || framed(shared_secret) || framed(domain)\n * || cluster_id_le || epoch_le || op_index)[..32]`.\n */\nfunction deriveKek(\n sharedSecret: Uint8Array,\n domain: Uint8Array,\n clusterId: number,\n epoch: bigint,\n opIndex: number,\n): Uint8Array {\n const input = concatBytes(\n framed(KEK_DOMAIN),\n framed(sharedSecret),\n framed(domain),\n u32le(clusterId),\n u64le(epoch),\n Uint8Array.of(opIndex),\n );\n return shake256(input, { dkLen: SEAL_KEY_LEN });\n}\n\n/** `SHAKE256(framed(NONCE_DOMAIN) || framed(domain) || framed(context))[..12]`. */\nfunction deriveNonce(domain: Uint8Array, context: Uint8Array): Uint8Array {\n const input = concatBytes(framed(NONCE_DOMAIN), framed(domain), framed(context));\n return shake256(input, { dkLen: SEAL_NONCE_LEN });\n}\n\n// ---------------------------------------------------------------------------\n// Binding context AAD (byte-identical to lythiumseal/src/seal.rs).\n\ninterface BindingContext {\n clusterId: number;\n epoch: bigint;\n rosterHash: Uint8Array;\n}\n\nfunction bodyAad(ctx: BindingContext, k: number, n: number): Uint8Array {\n return concatBytes(\n BODY_AAD_DOMAIN,\n u32le(ctx.clusterId),\n u64le(ctx.epoch),\n Uint8Array.of(k),\n Uint8Array.of(n),\n ctx.rosterHash,\n );\n}\n\nfunction shareAad(ctx: BindingContext, opIndex: number): Uint8Array {\n return concatBytes(\n SHARE_AAD_DOMAIN,\n u32le(ctx.clusterId),\n u64le(ctx.epoch),\n Uint8Array.of(opIndex),\n ctx.rosterHash,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Committing AEAD body.\n\ninterface CommittingBody {\n nonce: Uint8Array;\n ct: Uint8Array;\n commitment: Uint8Array;\n}\n\nfunction aeadSeal(\n key: Uint8Array,\n nonce: Uint8Array,\n plaintext: Uint8Array,\n aad: Uint8Array,\n): CommittingBody {\n const cipher = chacha20poly1305(key, nonce, aad);\n const ct = cipher.encrypt(plaintext);\n return { nonce, ct, commitment: keyCommitment(key) };\n}\n\n// ---------------------------------------------------------------------------\n// GF(256) Shamir (AES field, reduction polynomial 0x11b).\n\nfunction gfMul(a: number, b: number): number {\n let product = 0;\n let x = a & 0xff;\n let y = b & 0xff;\n for (let i = 0; i < 8; i++) {\n const mask = -(y & 1) & 0xff;\n product ^= x & mask;\n const high = -((x >> 7) & 1) & 0xff;\n x = (x << 1) & 0xff;\n x ^= 0x1b & high;\n y >>= 1;\n }\n return product & 0xff;\n}\n\nfunction polyEval(coeffs: Uint8Array, x: number): number {\n let acc = 0;\n for (let i = coeffs.length - 1; i >= 0; i--) {\n acc = gfMul(acc, x) ^ coeffs[i]!;\n }\n return acc & 0xff;\n}\n\ninterface Share {\n index: number;\n value: Uint8Array;\n}\n\n/**\n * GF(256) Shamir `t`-of-`n` split of a 32-byte secret. One independent\n * degree `t-1` polynomial per secret byte; the `t-1` higher coefficients\n * per byte come from `rng` (drawn one `fill` call per secret byte, exactly\n * as the Rust crate does, so the deterministic-source draw order matches).\n */\nfunction shamirSplit(secret: Uint8Array, t: number, n: number, rng: SealRandomSource): Share[] {\n const byteCoeffs: Uint8Array[] = [];\n for (let j = 0; j < SEAL_SECRET_LEN; j++) {\n const c = new Uint8Array(t);\n c[0] = secret[j]!;\n if (t > 1) {\n const tail = new Uint8Array(t - 1);\n rng.fillBytes(tail);\n c.set(tail, 1);\n }\n byteCoeffs.push(c);\n }\n const shares: Share[] = [];\n for (let k = 0; k < n; k++) {\n const x = (k + 1) & 0xff;\n const value = new Uint8Array(SEAL_SECRET_LEN);\n for (let j = 0; j < SEAL_SECRET_LEN; j++) {\n value[j] = polyEval(byteCoeffs[j]!, x);\n }\n shares.push({ index: x, value });\n }\n return shares;\n}\n\nfunction shareToBytes(s: Share): Uint8Array {\n const out = new Uint8Array(SEAL_SHARE_LEN);\n out[0] = s.index;\n out.set(s.value, 1);\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Canonical roster hash (== runtime::providers::seal_roster_hash).\n\n/**\n * `keccak256(domain || cluster_id_le || t || n || concat(idx || ek)...)`.\n * Commits to the exact recipient ek set + order. Operators and wallets\n * MUST compute it identically; this is the single canonical site.\n *\n * keccak256 is taken from the ml-dsa module's hash import to avoid a second\n * keccak dependency; passed in by the caller to keep this module\n * cipher-only.\n */\nexport function sealRosterHash(\n keccak256: (input: Uint8Array) => Uint8Array,\n clusterId: number,\n t: number,\n n: number,\n roster: ReadonlyArray<{ operatorIndex: number; ek: Uint8Array }>,\n): Uint8Array {\n const chunks: Uint8Array[] = [ROSTER_DOMAIN, u32le(clusterId), Uint8Array.of(t), Uint8Array.of(n)];\n for (const { operatorIndex, ek } of roster) {\n chunks.push(Uint8Array.of(operatorIndex), ek);\n }\n return keccak256(concatBytes(...chunks));\n}\n\n// ---------------------------------------------------------------------------\n// Scheme-3 LythiumSeal envelope (the inner ciphertext body).\n\n/** One recipient slot in the scheme-3 envelope. */\nexport interface SealRecipient {\n operatorIndex: number;\n kemCt: Uint8Array;\n wrapped: CommittingBody;\n}\n\n/**\n * Scheme-3 LythiumSeal envelope - the encrypted-tx body for the\n * cluster-ML-KEM + Shamir threshold path. Bincode-encodes into the bytes\n * that ride inside `EncryptedEnvelope.ciphertext`.\n */\nexport interface LythiumSealEnvelope {\n clusterId: number;\n epoch: bigint;\n rosterHash: Uint8Array;\n t: number;\n n: number;\n aeadBody: CommittingBody;\n recipients: SealRecipient[];\n}\n\n/**\n * Bincode-encode (bincode 1.3 defaults: LE fixint, `u64` length prefixes,\n * raw fixed-size arrays) the envelope into the `EncryptedEnvelope.ciphertext`\n * body bytes. Byte-identical to `LythiumSealEnvelope::encode` in mono-core.\n */\nexport function encodeSealEnvelope(env: LythiumSealEnvelope): Uint8Array {\n const chunks: Uint8Array[] = [];\n chunks.push(u32le(env.clusterId));\n chunks.push(u64le(env.epoch));\n chunks.push(expectBytes(env.rosterHash, 32, \"rosterHash\")); // [u8; 32] raw\n chunks.push(Uint8Array.of(env.t));\n chunks.push(Uint8Array.of(env.n));\n pushAeadBody(chunks, env.aeadBody);\n chunks.push(u64le(BigInt(env.recipients.length))); // Vec length\n for (const r of env.recipients) {\n chunks.push(Uint8Array.of(r.operatorIndex));\n chunks.push(u64le(BigInt(r.kemCt.length)));\n chunks.push(r.kemCt);\n pushAeadBody(chunks, r.wrapped);\n }\n return concatBytes(...chunks);\n}\n\nfunction pushAeadBody(chunks: Uint8Array[], body: CommittingBody): void {\n chunks.push(expectBytes(body.nonce, SEAL_NONCE_LEN, \"aead nonce\")); // [u8; 12] raw\n chunks.push(u64le(BigInt(body.ct.length))); // Vec<u8> length\n chunks.push(body.ct);\n chunks.push(expectBytes(body.commitment, SEAL_COMMIT_LEN, \"aead commitment\")); // [u8; 32] raw\n}\n\n// ---------------------------------------------------------------------------\n// The seal.\n\n/**\n * Seal `plaintext` to the cluster's ordered `recipientEks` (`n` operators)\n * at reconstruction threshold `t`, bound to `(clusterId, epoch,\n * rosterHash)`. Draws a fresh body key for every call (nonce safety rests\n * on body-key freshness, not nonce uniqueness - see the crate invariants),\n * GF(256) Shamir `t`-of-`n` splits it, and ML-KEM-encapsulates one share\n * to each operator's encapsulation key under a KDF-bound member KEK.\n *\n * The result is the `LythiumSealEnvelope` (scheme 3) that nests inside the\n * outer `EncryptedEnvelope.ciphertext`. Recovering the plaintext requires\n * `t` operators to each decapsulate their own slot; no single operator can.\n *\n * @param rng deterministic source for the KAT; defaults to a CSPRNG.\n */\nexport function sealToCluster(args: {\n plaintext: Uint8Array;\n recipientEks: ReadonlyArray<Uint8Array>;\n t: number;\n clusterId: number;\n epoch: bigint;\n rosterHash: Uint8Array;\n rng?: SealRandomSource;\n}): LythiumSealEnvelope {\n const { plaintext, recipientEks, t, clusterId } = args;\n const epoch = args.epoch;\n const rosterHash = expectBytes(args.rosterHash, 32, \"rosterHash\");\n const rng = args.rng ?? cryptoRandomSource();\n const n = recipientEks.length;\n if (!Number.isInteger(t) || t < 1 || t > n || n < 1 || n > 0xff) {\n throw new Error(`invalid threshold/recipient count: t=${t} n=${n}`);\n }\n for (let i = 0; i < n; i++) {\n expectBytes(recipientEks[i]!, SEAL_EK_LEN, `recipientEks[${i}]`);\n }\n const ctx: BindingContext = { clusterId, epoch, rosterHash };\n\n // 1) Fresh random body key K.\n const bodyKey = new Uint8Array(SEAL_KEY_LEN);\n rng.fillBytes(bodyKey);\n\n // 2) Committing-AEAD seal the plaintext under K.\n const aad = bodyAad(ctx, t, n);\n const bodyNonce = deriveNonce(new TextEncoder().encode(\"body\"), aad);\n const aeadBody = aeadSeal(bodyKey, bodyNonce, plaintext, aad);\n\n // 3) Shamir t-of-n split K.\n const shares = shamirSplit(bodyKey, t, n, rng);\n\n // 4) Per operator: ML-KEM encapsulate -> derive KEK -> wrap its share.\n const recipients: SealRecipient[] = [];\n for (let i = 0; i < n; i++) {\n const opIndex = (i + 1) & 0xff;\n // ML-KEM-768 encapsulation. The Rust reference draws a fresh 32-byte\n // message `m` from the RNG and computes `encaps_internal(ek, m)`;\n // noble's deterministic `encapsulate(ek, m)` is byte-identical for the\n // same `m`. Drawing `m` here keeps the deterministic draw order aligned.\n const m = new Uint8Array(32);\n rng.fillBytes(m);\n const { cipherText: kemCt, sharedSecret } = ml_kem768.encapsulate(recipientEks[i]!, m);\n\n const kek = deriveKek(sharedSecret, rosterHash, clusterId, epoch, opIndex);\n const sAad = shareAad(ctx, opIndex);\n const wrapNonce = deriveNonce(new TextEncoder().encode(\"share\"), sAad);\n const wrapped = aeadSeal(kek, wrapNonce, shareToBytes(shares[i]!), sAad);\n\n recipients.push({ operatorIndex: opIndex, kemCt, wrapped });\n sharedSecret.fill(0);\n kek.fill(0);\n }\n bodyKey.fill(0);\n\n return {\n clusterId,\n epoch,\n rosterHash,\n t,\n n,\n aeadBody,\n recipients,\n };\n}\n","/**\n * Client-side scheme-3 LythiumSeal seal path for the wallet/SDK.\n *\n * `getClusterSealKeys` reads the cluster seal roster (per-operator ML-KEM-768\n * encapsulation keys + `(t, n)` + roster hash + epoch). `sealTransaction`\n * turns a signed inner transaction into the scheme-3 `LythiumSealEnvelope`,\n * wraps it in an `EncryptedEnvelope` with the outer ML-DSA-65 signature, and\n * yields the wire bytes mono-core's `lyth_submitEncrypted` accepts.\n *\n * Byte-compatibility with the chain is proven by the cross-language KAT in\n * `tests/lythiumseal-kat.test.ts`.\n */\n\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { RpcClient } from \"../client.js\";\nimport { bytesToHex, expectBytes, hexToBytes } from \"./bytes.js\";\nimport {\n bincodeEncryptedEnvelope,\n outerSigDigest,\n MempoolClass,\n type DecryptHint,\n type EncryptedEnvelope,\n type NonceAad,\n} from \"./envelope.js\";\nimport {\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n} from \"./ml-dsa.js\";\nimport {\n CLUSTER_MLKEM_SHAMIR,\n encodeSealEnvelope,\n SEAL_EK_LEN,\n sealRosterHash,\n sealToCluster,\n type SealRandomSource,\n} from \"./lythiumseal.js\";\n\n/** Algorithm tag the node serves for the scheme-3 seal path. */\nexport const CLUSTER_MLKEM_SHAMIR_ALGO = \"cluster-mlkem768-shamir\";\n\n/**\n * The cluster seal roster the SDK seals a transaction body to.\n *\n * Built from the `lyth_getClusterSealKeys(clusterId)` RPC response (or read\n * from genesis when that RPC is disabled on the public profile): the ordered\n * per-operator ML-KEM-768 encapsulation keys + the `(t, n)` threshold + the\n * roster hash + the epoch.\n */\nexport interface ClusterSealKeys {\n algo: string;\n clusterId: number;\n epoch: bigint;\n /** 32-byte roster hash the seal context binds. */\n rosterHash: Uint8Array;\n /** Reconstruction threshold `t`. */\n t: number;\n /** Total operators `n`. */\n n: number;\n /** Per-operator 1184-byte ML-KEM-768 encapsulation keys, ordered `1..=n`. */\n recipientEks: Uint8Array[];\n}\n\n/** One operator's entry in a roster source (RPC JSON or genesis). */\nexport interface ClusterSealKeyEntryInput {\n operatorIndex: number;\n /** `0x`-hex of the operator's 1184-byte ML-KEM-768 encapsulation key. */\n mlKemEk: string;\n}\n\n/** A cluster seal roster as served by the RPC or read from genesis. */\nexport interface ClusterSealKeysSource {\n algo?: string;\n clusterId: number;\n epoch: number | string | bigint;\n /** `0x`-hex of the 32-byte roster hash (optional; recomputed + verified). */\n rosterHash?: string;\n t: number;\n n: number;\n roster: ClusterSealKeyEntryInput[];\n}\n\n/**\n * Normalize a roster source into the typed {@link ClusterSealKeys} the SDK\n * seals against. The roster hash is RECOMPUTED from the ordered ek set via\n * the canonical `seal_roster_hash` and, when the source carries one, the\n * recomputed value must match - so a wallet can never seal under a roster\n * hash that does not commit to the exact recipient set it is sealing to.\n *\n * @throws if the roster is empty, an ek has the wrong length, the operator\n * indices are not the contiguous `1..=n` order, the threshold is out of\n * `2 <= t <= n`, or a supplied roster hash does not match the recomputed one.\n */\nexport function parseClusterSealKeys(source: ClusterSealKeysSource): ClusterSealKeys {\n const n = source.roster.length;\n if (n === 0) {\n throw new Error(\"cluster seal roster is empty\");\n }\n if (source.n !== n) {\n throw new Error(`cluster seal roster n=${source.n} disagrees with ${n} entries`);\n }\n if (!Number.isInteger(source.t) || source.t < 2 || source.t > n) {\n throw new Error(`cluster seal threshold t=${source.t} out of range 2..=${n}`);\n }\n // Sort by operator index so the roster-hash input is canonical, then\n // require the indices to be exactly the contiguous 1..=n set.\n const sorted = [...source.roster].sort((a, b) => a.operatorIndex - b.operatorIndex);\n const recipientEks: Uint8Array[] = [];\n const hashInput: { operatorIndex: number; ek: Uint8Array }[] = [];\n for (let i = 0; i < n; i++) {\n const entry = sorted[i]!;\n if (entry.operatorIndex !== i + 1) {\n throw new Error(\n `cluster seal roster operator indices must be 1..=${n}; got ${entry.operatorIndex} at slot ${i + 1}`,\n );\n }\n const ek = expectBytes(hexToBytes(entry.mlKemEk, `operator ${entry.operatorIndex} mlKemEk`), SEAL_EK_LEN, `operator ${entry.operatorIndex} ek`);\n recipientEks.push(ek);\n hashInput.push({ operatorIndex: entry.operatorIndex, ek });\n }\n const recomputed = sealRosterHash(keccak256, source.clusterId, source.t, n, hashInput);\n if (source.rosterHash !== undefined) {\n const supplied = expectBytes(hexToBytes(source.rosterHash, \"rosterHash\"), 32, \"rosterHash\");\n if (!bytesEqual(supplied, recomputed)) {\n throw new Error(\n `cluster seal roster hash mismatch: source ${bytesToHex(supplied)} != recomputed ${bytesToHex(recomputed)} (the roster hash does not commit to this ek set)`,\n );\n }\n }\n return {\n algo: source.algo ?? CLUSTER_MLKEM_SHAMIR_ALGO,\n clusterId: source.clusterId,\n epoch: toBigInt(source.epoch),\n rosterHash: recomputed,\n t: source.t,\n n,\n recipientEks,\n };\n}\n\n/**\n * Fetch the cluster seal roster from a running node via\n * `lyth_getClusterSealKeys(clusterId)`.\n *\n * NOTE: this RPC is DISABLED on the public node profile. When it returns\n * \"method not found\" / \"unavailable\", read the roster from genesis instead\n * and pass it through {@link parseClusterSealKeys} - the roster lives in the\n * genesis `[[clusters.members]]` `seal_ek` fields, which is exactly what the\n * RPC would otherwise serve.\n *\n * @throws if the RPC is unavailable (carry the roster as input instead) or\n * the served roster does not validate.\n */\nexport async function getClusterSealKeys(client: RpcClient, clusterId = 0): Promise<ClusterSealKeys> {\n const result = await client.call<ClusterSealKeysSource & { clusterId?: number }>(\n \"lyth_getClusterSealKeys\",\n [clusterId],\n );\n return parseClusterSealKeys({ ...result, clusterId: result.clusterId ?? clusterId });\n}\n\n/** A built scheme-3 encrypted submission, ready for `lyth_submitEncrypted`. */\nexport interface SealedSubmission {\n /** Bincode `EncryptedEnvelope` wire bytes, `0x`-prefixed hex. */\n envelopeWireHex: string;\n /** Bincode `EncryptedEnvelope` wire bytes. */\n envelopeWireBytes: Uint8Array;\n /** Length of the inner scheme-3 ciphertext body in bytes. */\n ciphertextBytes: number;\n}\n\n/**\n * Seal a signed inner transaction to the cluster and wrap it in an\n * `EncryptedEnvelope` with the outer ML-DSA-65 signature.\n *\n * `signedTxBincode` is the bincode `SignedTransaction` wire bytes (the body\n * `mesh_submitTx` would otherwise carry in the clear). `aad` is the\n * authenticated envelope header; per Law §3.6 / R3-H08 its fee fields MUST\n * mirror the inner tx's fee fields exactly, so the chain's `verify_inner_match`\n * passes on reveal - the caller is responsible for building it from the same\n * fields it signed.\n *\n * The outer signature is taken over the canonical preimage\n * `keccak256(bincode(aad) || ciphertext || bincode(hint) || sender_pubkey)`,\n * identical to mono-core's `EncryptedEnvelope::signed_digest`.\n *\n * @param rng deterministic source for the KAT; defaults to a CSPRNG.\n */\nexport async function sealTransaction(args: {\n signedTxBincode: Uint8Array;\n clusterSealKeys: ClusterSealKeys;\n aad: NonceAad;\n senderAddress: Uint8Array;\n senderPubkey: Uint8Array;\n signOuterDigest: (digest: Uint8Array) => Promise<Uint8Array> | Uint8Array;\n rng?: SealRandomSource;\n}): Promise<SealedSubmission> {\n const keys = args.clusterSealKeys;\n const senderPubkey = expectBytes(args.senderPubkey, ML_DSA_65_PUBLIC_KEY_LEN, \"senderPubkey\");\n const senderAddress = expectBytes(args.senderAddress, 20, \"senderAddress\");\n\n const env = sealToCluster({\n plaintext: args.signedTxBincode,\n recipientEks: keys.recipientEks,\n t: keys.t,\n clusterId: keys.clusterId,\n epoch: keys.epoch,\n rosterHash: keys.rosterHash,\n rng: args.rng,\n });\n const ciphertext = encodeSealEnvelope(env);\n\n const decryptionHint: DecryptHint = { epoch: keys.epoch, scheme: CLUSTER_MLKEM_SHAMIR };\n const digest = outerSigDigest(args.aad, ciphertext, decryptionHint, senderPubkey);\n const outerSignature = expectBytes(\n await args.signOuterDigest(digest),\n ML_DSA_65_SIGNATURE_LEN,\n \"outerSignature\",\n );\n\n const envelope: EncryptedEnvelope = {\n nonceAad: args.aad,\n ciphertext,\n decryptionHint,\n senderPubkey,\n outerSignature,\n sender: senderAddress,\n };\n const envelopeWireBytes = bincodeEncryptedEnvelope(envelope);\n return {\n envelopeWireHex: `0x${bytesToHex(envelopeWireBytes).slice(2)}`,\n envelopeWireBytes,\n ciphertextBytes: ciphertext.length,\n };\n}\n\n/**\n * Submit a built scheme-3 encrypted envelope through `lyth_submitEncrypted`.\n *\n * @returns the mempool tx hash the node assigns on admission.\n */\nexport async function submitSealedTransaction(\n client: RpcClient,\n submission: SealedSubmission,\n): Promise<string> {\n return client.call<string>(\"lyth_submitEncrypted\", [submission.envelopeWireHex]);\n}\n\n/** Re-export so callers can build the AAD with the right class enum. */\nexport { MempoolClass };\n\nfunction keccak256(input: Uint8Array): Uint8Array {\n return keccak_256(input);\n}\n\nfunction toBigInt(value: number | string | bigint): bigint {\n if (typeof value === \"bigint\") return value;\n return BigInt(value);\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n","import { bytesToHex, hexToBytes, parseBigint } from \"./bytes.js\";\nimport { MempoolClass, type NonceAad } from \"./envelope.js\";\nimport type { MlDsa65Backend } from \"./ml-dsa.js\";\nimport {\n parseClusterSealKeys,\n sealTransaction,\n type ClusterSealKeys,\n type ClusterSealKeysSource,\n} from \"./seal.js\";\nimport type { NativeEvmTxFields } from \"./tx.js\";\n\nexport interface JsonRpcCallClient {\n call<T>(method: string, params?: unknown): Promise<T>;\n}\n\nexport interface EncryptionKey {\n algo: string;\n epoch: bigint;\n encapsulationKey: Uint8Array;\n}\n\nexport interface EncryptedSubmission {\n envelopeWireHex: string;\n innerSighashHex: string;\n innerTxHashHex: string;\n innerWireBytes: number;\n}\n\n/**\n * A built plaintext submission — the bincode-encoded chain-side\n * `SignedTransaction` (`0x`-prefixed hex) ready to hand to\n * `mesh_submitTx`, plus the canonical hashes the wallet validates the\n * node echo against.\n *\n * Mirrors the chain-side artefacts produced by the Rust SDK's\n * `build_chain_signed_tx` (`mono-core/crates/core/sdk/src/tx.rs`): the\n * ML-DSA-65 signature is taken over the canonical chain-side `sighash`\n * (keccak-256 of the 0x01-tagged preimage) and the canonical native tx\n * hash is the keccak-256 of the 0x02-tagged preimage with the signature\n * and public key appended.\n */\nexport interface PlaintextSubmission {\n /** Bincode `SignedTransaction` wire bytes, `0x`-prefixed. */\n signedTxWireHex: string;\n /** Canonical native tx hash the node echoes on admission. */\n innerTxHashHex: string;\n /** Canonical chain-side sighash that was signed. */\n innerSighashHex: string;\n /** Length in bytes of the bincode `SignedTransaction`. */\n innerWireBytes: number;\n}\n\nexport async function fetchEncryptionKey(client: JsonRpcCallClient): Promise<EncryptionKey> {\n const result = await client.call<{ algo?: string; epoch: number | string; encapsulationKey: string }>(\n \"lyth_getEncryptionKey\",\n [],\n );\n return {\n algo: result.algo ?? \"ml-kem-768\",\n epoch: typeof result.epoch === \"string\" ? BigInt(result.epoch) : BigInt(result.epoch),\n encapsulationKey: hexToBytes(result.encapsulationKey, \"encapsulationKey\"),\n };\n}\n\n/**\n * Error message returned when an encrypted-mempool submission is attempted.\n *\n * Scheme-3 encrypted submission needs a cluster seal roster. Public node\n * profiles may keep `lyth_getClusterSealKeys` disabled, in which case callers\n * should pass a roster source from the pinned genesis/chain registry.\n */\nexport const ENCRYPTED_SUBMISSION_UNAVAILABLE_MESSAGE =\n \"private submission requires cluster seal keys; pass clusterSealKeysSource or enable lyth_getClusterSealKeys\";\n\n/**\n * Build a scheme-3 LythiumSeal encrypted-mempool submission.\n *\n * The caller may pass already parsed cluster keys, a JSON roster source, or\n * allow the SDK to fetch `lyth_getClusterSealKeys(clusterId)`. The single-key\n * envelope path stays retired; this function only emits the threshold\n * cluster-sealed envelope accepted by `lyth_submitEncrypted`.\n */\nexport async function buildEncryptedSubmission(args: {\n client?: JsonRpcCallClient;\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n encryptionKey?: EncryptionKey;\n clusterId?: number;\n clusterSealKeys?: ClusterSealKeys;\n clusterSealKeysSource?: ClusterSealKeysSource;\n class?: MempoolClass;\n}): Promise<EncryptedSubmission> {\n const signed = args.backend.signEvmTx(args.tx);\n const clusterSealKeys = await resolveClusterSealKeys(args);\n const aad = nonceAadForTx(args.tx, args.backend.addressBytes(), args.class);\n const sealed = await sealTransaction({\n signedTxBincode: signed.wireBytes,\n clusterSealKeys,\n aad,\n senderAddress: args.backend.addressBytes(),\n senderPubkey: args.backend.publicKey(),\n signOuterDigest: (digest) => args.backend.signPrehash(digest),\n });\n return {\n envelopeWireHex: sealed.envelopeWireHex,\n innerSighashHex: bytesToHex(signed.sighash),\n innerTxHashHex: bytesToHex(signed.txHash),\n innerWireBytes: signed.wireBytes.length,\n };\n}\n\nexport async function submitEncryptedEnvelope(\n client: JsonRpcCallClient,\n envelopeWireHex: string,\n): Promise<string> {\n return client.call(\"lyth_submitEncrypted\", [envelopeWireHex]);\n}\n\n/**\n * Build a PLAINTEXT submission — the opt-OUT-of-privacy counterpart to\n * {@link buildEncryptedSubmission}.\n *\n * Unlike the encrypted path, this never engages the Ferveo\n * threshold-decrypt pipeline. It re-shapes the native tx into the\n * chain-side `SignedTransaction`, signs over the canonical `sighash`\n * with the ML-DSA-65 backend, bincode-serializes the result, and\n * `0x`-hex-encodes it. The bytes are forwarded verbatim through\n * `mesh_submitTx` (the node routes them to `MempoolTx::plaintext` via\n * `submit_raw`) — the functional inclusion path on a chain running with\n * `encrypted_mempool_required = false`.\n *\n * Mirrors `TxClient::submit_plaintext` in the Rust SDK.\n */\nexport function buildPlaintextSubmission(args: {\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n}): PlaintextSubmission {\n const signed = args.backend.signEvmTx(args.tx);\n return {\n signedTxWireHex: `0x${signed.wireHex}`,\n innerTxHashHex: bytesToHex(signed.txHash),\n innerSighashHex: bytesToHex(signed.sighash),\n innerWireBytes: signed.wireBytes.length,\n };\n}\n\n/**\n * Submit a bincode-encoded chain-side `SignedTransaction` (`0x`-hex)\n * through the plaintext `mesh_submitTx` path and validate the node's\n * echoed canonical tx hash against the locally computed one.\n *\n * Mirrors the validation in `TxClient::submit_plaintext`: the node\n * echoes the 32-byte canonical native tx hash on admission, and any\n * mismatch (or non-32-byte response) is rejected loud so a wallet never\n * trusts a hash it did not derive itself.\n *\n * @returns the validated canonical native tx hash (`0x`-prefixed).\n */\nexport async function submitPlaintextTransaction(\n client: JsonRpcCallClient,\n signedTxWireHex: string,\n expectedTxHashHex: string,\n): Promise<string> {\n const returned = await client.call<string>(\"mesh_submitTx\", [signedTxWireHex]);\n const returnedBytes = hexToBytes(returned, \"mesh_submitTx tx hash\");\n if (returnedBytes.length !== 32) {\n throw new Error(\n `mesh_submitTx tx hash must be 32 bytes, got ${returnedBytes.length}`,\n );\n }\n const expectedBytes = hexToBytes(expectedTxHashHex, \"expected tx hash\");\n if (!bytesEqual(returnedBytes, expectedBytes)) {\n throw new Error(\n `mesh_submitTx returned tx hash ${bytesToHex(returnedBytes)} but the locally computed canonical hash is ${bytesToHex(expectedBytes)}`,\n );\n }\n return bytesToHex(returnedBytes);\n}\n\n/**\n * Build, sign, and submit a native transaction with an explicit\n * encryption toggle. `private == false` routes through the plaintext\n * `mesh_submitTx` path; `private == true` routes through the scheme-3\n * LythiumSeal encrypted pipeline.\n *\n * Mirrors `TxClient::build_sign_submit_with_privacy` in the Rust SDK.\n *\n * @returns for the plaintext path, the node-echoed-and-validated canonical\n * native tx hash (`0x`-prefixed); for the private path, the locally computed\n * inner native tx hash after the encrypted envelope is admitted.\n */\nexport async function submitTransactionWithPrivacy(args: {\n client: JsonRpcCallClient;\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n private: boolean;\n encryptionKey?: EncryptionKey;\n clusterId?: number;\n clusterSealKeys?: ClusterSealKeys;\n clusterSealKeysSource?: ClusterSealKeysSource;\n class?: MempoolClass;\n}): Promise<string> {\n if (args.private) {\n const built = await buildEncryptedSubmission({\n client: args.client,\n backend: args.backend,\n tx: args.tx,\n encryptionKey: args.encryptionKey,\n clusterId: args.clusterId,\n clusterSealKeys: args.clusterSealKeys,\n clusterSealKeysSource: args.clusterSealKeysSource,\n class: args.class,\n });\n const returned = await submitEncryptedEnvelope(args.client, built.envelopeWireHex);\n assertRpcHash(returned, \"lyth_submitEncrypted tx hash\");\n return built.innerTxHashHex;\n }\n const plaintext = buildPlaintextSubmission({ backend: args.backend, tx: args.tx });\n return submitPlaintextTransaction(\n args.client,\n plaintext.signedTxWireHex,\n plaintext.innerTxHashHex,\n );\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nasync function resolveClusterSealKeys(args: {\n client?: JsonRpcCallClient;\n clusterId?: number;\n clusterSealKeys?: ClusterSealKeys;\n clusterSealKeysSource?: ClusterSealKeysSource;\n}): Promise<ClusterSealKeys> {\n if (args.clusterSealKeys !== undefined) return args.clusterSealKeys;\n if (args.clusterSealKeysSource !== undefined) {\n return parseClusterSealKeys(args.clusterSealKeysSource);\n }\n if (args.client === undefined) {\n throw new Error(ENCRYPTED_SUBMISSION_UNAVAILABLE_MESSAGE);\n }\n const clusterId = args.clusterId ?? 0;\n const result = await args.client.call<ClusterSealKeysSource & { clusterId?: number }>(\n \"lyth_getClusterSealKeys\",\n [clusterId],\n );\n return parseClusterSealKeys({ ...result, clusterId: result.clusterId ?? clusterId });\n}\n\nfunction nonceAadForTx(\n tx: NativeEvmTxFields,\n sender: Uint8Array,\n mempoolClass?: MempoolClass,\n): NonceAad {\n return {\n sender,\n nonce: parseBigint(tx.nonce, \"nonce\"),\n chainId: parseBigint(tx.chainId, \"chainId\"),\n class: mempoolClass ?? inferMempoolClass(tx),\n maxFeePerGas: parseBigint(tx.maxFeePerGas, \"maxFeePerGas\"),\n maxPriorityFeePerGas: parseBigint(tx.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n gasLimit: parseBigint(tx.gasLimit, \"gasLimit\"),\n };\n}\n\nfunction inferMempoolClass(tx: NativeEvmTxFields): MempoolClass {\n if (tx.to === null || hasInput(tx.input)) return MempoolClass.ContractCall;\n return MempoolClass.Transfer;\n}\n\nfunction hasInput(input: NativeEvmTxFields[\"input\"]): boolean {\n if (input === undefined) return false;\n if (typeof input === \"string\") {\n const stripped = input.startsWith(\"0x\") || input.startsWith(\"0X\") ? input.slice(2) : input;\n return stripped.length > 0;\n }\n return input.length > 0;\n}\n\nfunction assertRpcHash(value: string, label: string): void {\n const bytes = hexToBytes(value, label);\n if (bytes.length !== 32) {\n throw new Error(`${label} must be 32 bytes, got ${bytes.length}`);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/crypto/bincode.ts","../../src/crypto/bytes.ts","../../src/crypto/tx.ts","../../src/crypto/ml-dsa.ts","../../src/crypto/pqm1.ts","../../src/crypto/envelope.ts","../../src/crypto/submission.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export class BincodeWriter {\n #chunks: number[] = [];\n\n u8(value: number): void {\n this.#int(value, 1);\n }\n\n u16(value: number): void {\n this.#int(value, 2);\n }\n\n u32(value: number): void {\n this.#int(value, 4);\n }\n\n u64(value: bigint | number): void {\n this.#big(value, 8);\n }\n\n u128(value: bigint | number): void {\n this.#big(value, 16);\n }\n\n enumVariant(value: number): void {\n this.u32(value);\n }\n\n rawBytes(bytes: Uint8Array): void {\n for (const b of bytes) this.#chunks.push(b);\n }\n\n bytes(bytes: Uint8Array): void {\n this.u64(BigInt(bytes.length));\n this.rawBytes(bytes);\n }\n\n optionBytes(bytes: Uint8Array | null): void {\n if (bytes === null) {\n this.u8(0);\n return;\n }\n this.u8(1);\n this.rawBytes(bytes);\n }\n\n toBytes(): Uint8Array {\n return Uint8Array.from(this.#chunks);\n }\n\n #int(value: number, bytes: number): void {\n if (!Number.isSafeInteger(value) || value < 0 || value >= 2 ** (bytes * 8)) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push((value >> (8 * i)) & 0xff);\n }\n }\n\n #big(value: bigint | number, bytes: number): void {\n let v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v >= (1n << BigInt(bytes * 8))) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push(Number(v & 0xffn));\n v >>= 8n;\n }\n }\n}\n","export function concatBytes(...chunks: Uint8Array[]): Uint8Array {\n const len = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(len);\n let off = 0;\n for (const chunk of chunks) {\n out.set(chunk, off);\n off += chunk.length;\n }\n return out;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let out = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i]!.toString(16).padStart(2, \"0\");\n }\n return out;\n}\n\nexport function hexToBytes(hex: string, label = \"hex\"): Uint8Array {\n const stripped = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n if (stripped.length % 2 !== 0) {\n throw new Error(`${label} must have even length`);\n }\n const out = new Uint8Array(stripped.length / 2);\n for (let i = 0; i < out.length; i++) {\n const b = Number.parseInt(stripped.slice(i * 2, i * 2 + 2), 16);\n if (Number.isNaN(b)) {\n throw new Error(`${label} contains invalid hex`);\n }\n out[i] = b;\n }\n return out;\n}\n\nexport function expectBytes(value: Uint8Array | readonly number[], len: number, label: string): Uint8Array {\n if (value.length !== len) {\n throw new Error(`${label} must be ${len} bytes, got ${value.length}`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nexport function bigintToBeBytes(value: bigint, bytes: number, label: string): Uint8Array {\n if (value < 0n || value >= (1n << BigInt(bytes * 8))) {\n throw new Error(`${label} out of ${bytes * 8}-bit range`);\n }\n const out = new Uint8Array(bytes);\n let v = value;\n for (let i = bytes - 1; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nexport function parseBigint(value: bigint | number | string | undefined, label: string): bigint {\n if (value === undefined) throw new Error(`${label} missing`);\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);\n return BigInt(value);\n }\n if (value.startsWith(\"0x\") || value.startsWith(\"0X\")) return BigInt(value);\n return BigInt(value);\n}\n","import { BincodeWriter } from \"./bincode.js\";\nimport { bigintToBeBytes, concatBytes, expectBytes, hexToBytes, parseBigint } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nexport interface NativeEvmTxFields {\n chainId: bigint | number | string;\n nonce: bigint | number | string;\n maxPriorityFeePerGas: bigint | number | string;\n maxFeePerGas: bigint | number | string;\n gasLimit: bigint | number | string;\n to: Uint8Array | readonly number[] | string | null;\n value: bigint | number | string;\n input?: Uint8Array | readonly number[] | string;\n extensions?: readonly NativeTxExtensionLike[];\n}\n\nexport interface NativeTxExtension {\n kind: number;\n body: Uint8Array | readonly number[] | string;\n}\n\nexport interface NativeTxExtensionDescriptor {\n kind: number;\n bodyHex: string;\n}\n\nexport type NativeTxExtensionLike = NativeTxExtension | NativeTxExtensionDescriptor;\n\nexport function encodeTransactionForHash(fields: NativeEvmTxFields, tag: 0x01 | 0x02): Uint8Array {\n const n = normalizeTxFields(fields);\n return concatBytes(\n Uint8Array.of(tag),\n bigintToBeBytes(n.chainId, 8, \"chainId\"),\n bigintToBeBytes(n.nonce, 8, \"nonce\"),\n bigintToBeBytes(n.maxPriorityFeePerGas, 32, \"maxPriorityFeePerGas\"),\n bigintToBeBytes(n.maxFeePerGas, 32, \"maxFeePerGas\"),\n bigintToBeBytes(n.gasLimit, 8, \"gasLimit\"),\n n.to === null ? Uint8Array.of(0) : concatBytes(Uint8Array.of(1), n.to),\n bigintToBeBytes(n.value, 32, \"value\"),\n bigintToBeBytes(BigInt(n.input.length), 4, \"input.length\"),\n n.input,\n new Uint8Array(4), // access_list length\n encodeExtensionsForHash(n.extensions),\n );\n}\n\nexport function bincodeSignedTransaction(\n fields: NativeEvmTxFields,\n signature: Uint8Array | readonly number[],\n publicKey: Uint8Array | readonly number[],\n): Uint8Array {\n const n = normalizeTxFields(fields);\n const sig = expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\");\n const pk = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n const w = new BincodeWriter();\n w.u64(n.chainId);\n w.u64(n.nonce);\n // Amount(U256) goes through alloy's ruint serde, which emits\n // `serialize_bytes(&to_be_bytes_vec())` for non-human-readable\n // serializers. bincode 1.x renders that as `u64(len) || 32 bytes BE`.\n // Address inside Option<Address> takes the same `serialize_bytes`\n // path via alloy's FixedBytes impl, so admin-tag(1) is followed by a\n // length-prefixed 20-byte payload, not a raw 20-byte run.\n w.bytes(uint256Be(n.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"));\n w.bytes(uint256Be(n.maxFeePerGas, \"maxFeePerGas\"));\n w.u64(n.gasLimit);\n if (n.to === null) {\n w.u8(0);\n } else {\n w.u8(1);\n w.bytes(n.to);\n }\n w.bytes(uint256Be(n.value, \"value\"));\n w.bytes(n.input);\n w.u64(0n); // access_list length\n w.u64(BigInt(n.extensions.length));\n for (const ext of n.extensions) bincodeTypedExtensionInto(w, ext);\n bincodeMlDsa65OpaqueInto(w, sig);\n bincodeMlDsa65OpaqueInto(w, pk);\n return w.toBytes();\n}\n\ninterface NormalizedNativeTxExtension {\n kind: number;\n body: Uint8Array;\n}\n\ninterface NormalizedNativeEvmTxFields {\n chainId: bigint;\n nonce: bigint;\n maxPriorityFeePerGas: bigint;\n maxFeePerGas: bigint;\n gasLimit: bigint;\n to: Uint8Array | null;\n value: bigint;\n input: Uint8Array;\n extensions: NormalizedNativeTxExtension[];\n}\n\nfunction normalizeTxFields(fields: NativeEvmTxFields): NormalizedNativeEvmTxFields {\n return {\n chainId: parseBigint(fields.chainId, \"chainId\"),\n nonce: parseBigint(fields.nonce, \"nonce\"),\n maxPriorityFeePerGas: parseBigint(fields.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n maxFeePerGas: parseBigint(fields.maxFeePerGas, \"maxFeePerGas\"),\n gasLimit: parseBigint(fields.gasLimit, \"gasLimit\"),\n to: normalizeTo(fields.to),\n value: parseBigint(fields.value, \"value\"),\n input: normalizeBytes(fields.input ?? new Uint8Array(0), \"input\"),\n extensions: normalizeExtensions(fields.extensions),\n };\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n const bytes = normalizeBytes(value, \"to\");\n return expectBytes(bytes, 20, \"to\");\n}\n\nfunction normalizeBytes(value: Uint8Array | readonly number[] | string, label: string): Uint8Array {\n if (typeof value === \"string\") return hexToBytes(value, label);\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nfunction normalizeExtensions(value: NativeEvmTxFields[\"extensions\"]): NormalizedNativeTxExtension[] {\n if (value === undefined) return [];\n return value.map((ext, index) => {\n if (!Number.isInteger(ext.kind) || ext.kind < 0 || ext.kind > 0xff) {\n throw new Error(`extensions[${index}].kind out of u8 range`);\n }\n const body = normalizeBytes(\"bodyHex\" in ext ? ext.bodyHex : ext.body, `extensions[${index}].body`);\n if (body.length > 0xffff_ffff) {\n throw new Error(`extensions[${index}].body exceeds u32 length`);\n }\n return { kind: ext.kind, body };\n });\n}\n\nfunction encodeExtensionsForHash(extensions: readonly NormalizedNativeTxExtension[]): Uint8Array {\n const chunks: Uint8Array[] = [bigintToBeBytes(BigInt(extensions.length), 4, \"extensions.length\")];\n for (const ext of extensions) {\n chunks.push(\n Uint8Array.of(ext.kind),\n bigintToBeBytes(BigInt(ext.body.length), 4, \"extension.body.length\"),\n ext.body,\n );\n }\n return concatBytes(...chunks);\n}\n\nfunction uint256Be(value: bigint, label: string): Uint8Array {\n if (value < 0n || value >= 1n << 256n) throw new Error(`${label} out of u256 range`);\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 31; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n\nfunction bincodeTypedExtensionInto(w: BincodeWriter, ext: NormalizedNativeTxExtension): void {\n w.u8(ext.kind);\n w.bytes(ext.body);\n}\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\nimport { blake3 } from \"@noble/hashes/blake3.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { bigintToBeBytes, bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport { bincodeSignedTransaction, encodeTransactionForHash, type NativeEvmTxFields } from \"./tx.js\";\n\nexport const ML_DSA_65_SEED_LEN = 32;\nexport const ML_DSA_65_SIGNING_KEY_LEN = 4032;\nexport const ML_DSA_65_PUBLIC_KEY_LEN = 1952;\nexport const ML_DSA_65_SIGNATURE_LEN = 3309;\nexport const STANDARD_ALGO_NUMBER_ML_DSA_65 = 1001;\nexport const ENUM_VARIANT_INDEX_ML_DSA_65 = 3;\nexport const ADDRESS_DERIVATION_DOMAIN = \"MONO_ADDRESS_BLAKE3_20_V1\";\n\nconst ADDRESS_DERIVATION_DOMAIN_BYTES = new TextEncoder().encode(ADDRESS_DERIVATION_DOMAIN);\n\nexport class MlDsa65Backend {\n readonly #secretKey: Uint8Array;\n readonly #publicKey: Uint8Array;\n readonly #addressBytes: Uint8Array;\n #disposed = false;\n\n private constructor(secretKey: Uint8Array, publicKey: Uint8Array) {\n this.#secretKey = expectBytes(secretKey, ML_DSA_65_SIGNING_KEY_LEN, \"ML-DSA-65 secret key\").slice();\n this.#publicKey = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\").slice();\n this.#addressBytes = mlDsa65AddressBytes(this.#publicKey);\n }\n\n static fromSeed(seed: Uint8Array | readonly number[]): MlDsa65Backend {\n const kp = ml_dsa65.keygen(expectBytes(seed, ML_DSA_65_SEED_LEN, \"ML-DSA-65 seed\"));\n return new MlDsa65Backend(kp.secretKey, kp.publicKey);\n }\n\n publicKey(): Uint8Array {\n return this.#publicKey.slice();\n }\n\n addressBytes(): Uint8Array {\n return this.#addressBytes.slice();\n }\n\n getAddress(): string {\n return bytesToHex(this.#addressBytes);\n }\n\n sign(message: Uint8Array): Uint8Array {\n if (this.#disposed) {\n throw new Error(\"MlDsa65Backend disposed\");\n }\n return ml_dsa65.sign(message, this.#secretKey, { extraEntropy: false });\n }\n\n /**\n * Best-effort deterministic wipe of the in-memory secret key. Zeroes the\n * SDK-held `#secretKey` copy and makes any subsequent `sign()` /\n * `signPrehash()` / `signEvmTx()` throw `\"MlDsa65Backend disposed\"` rather\n * than signing with a zeroed key. Idempotent. Public material\n * (`publicKey()` / `getAddress()` / `verify()`) stays usable.\n *\n * Defense-in-depth (S1-01): narrows the post-lock residency window of the\n * ML-DSA-65 secret in the JS heap. `@noble/post-quantum`'s internal\n * transient keygen/sign buffers are out of scope; the SDK-held copy is the\n * meaningful residency win.\n */\n dispose(): void {\n this.#secretKey.fill(0);\n this.#disposed = true;\n }\n\n /** Alias for {@link dispose}. */\n zeroize(): void {\n this.dispose();\n }\n\n /** Whether {@link dispose} has been called (the secret key is wiped). */\n get disposed(): boolean {\n return this.#disposed;\n }\n\n signPrehash(digest: Uint8Array): Uint8Array {\n return this.sign(expectBytes(digest, 32, \"prehash\"));\n }\n\n verify(message: Uint8Array, signature: Uint8Array): boolean {\n return ml_dsa65.verify(\n expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\"),\n message,\n this.#publicKey,\n );\n }\n\n signEvmTx(fields: NativeEvmTxFields): {\n wireHex: string;\n wireBytes: Uint8Array;\n sighash: Uint8Array;\n txHash: Uint8Array;\n } {\n const txHashPreimage = encodeTransactionForHash(fields, 0x01);\n const sighash = keccak_256(txHashPreimage);\n const signature = this.sign(sighash);\n const wireBytes = bincodeSignedTransaction(fields, signature, this.#publicKey);\n const txHash = keccak_256(\n concatBytes(\n encodeTransactionForHash(fields, 0x02),\n signature,\n this.#publicKey,\n ),\n );\n return {\n wireHex: bytesToHex(wireBytes).slice(2),\n wireBytes,\n sighash,\n txHash,\n };\n }\n}\n\nexport function mlDsa65AddressFromPublicKey(publicKey: Uint8Array | readonly number[]): string {\n return bytesToHex(mlDsa65AddressBytes(publicKey));\n}\n\nexport function mlDsa65AddressBytes(publicKey: Uint8Array | readonly number[]): Uint8Array {\n const bytes = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n return blake3(concatBytes(\n ADDRESS_DERIVATION_DOMAIN_BYTES,\n bigintToBeBytes(BigInt(STANDARD_ALGO_NUMBER_ML_DSA_65), 2, \"ML-DSA-65 algo id\"),\n bytes,\n )).slice(0, 20);\n}\n\nexport function encodeMlDsa65Opaque(raw: Uint8Array | readonly number[]): Uint8Array {\n const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);\n const len = bytes.length === ML_DSA_65_PUBLIC_KEY_LEN ? ML_DSA_65_PUBLIC_KEY_LEN : ML_DSA_65_SIGNATURE_LEN;\n expectBytes(bytes, len, \"ML-DSA-65 opaque bytes\");\n const out = new Uint8Array(4 + 2 + 8 + bytes.length);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, ENUM_VARIANT_INDEX_ML_DSA_65, true);\n dv.setUint16(4, STANDARD_ALGO_NUMBER_ML_DSA_65, true);\n dv.setBigUint64(6, BigInt(bytes.length), true);\n out.set(bytes, 14);\n return out;\n}\n\nexport function uint256Bytes(value: bigint | number | string, label: string): Uint8Array {\n const v = typeof value === \"bigint\" ? value : typeof value === \"number\" ? BigInt(value) : BigInt(value);\n return bigintToBeBytes(v, 32, label);\n}\n","import { shake256 } from \"@noble/hashes/sha3.js\";\nimport { entropyToMnemonic, mnemonicToEntropy } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { concatBytes, expectBytes } from \"./bytes.js\";\nimport { ML_DSA_65_SEED_LEN, MlDsa65Backend } from \"./ml-dsa.js\";\n\nexport const PQM1_ALGO_TAG_MLDSA65 = 0x01;\nexport const PQM1_ALGO_TAG_MLDSA87_RESERVED = 0x02;\nexport const PQM1_ALGO_TAG_SLHDSA128S_RESERVED = 0x03;\nexport const PQM1_ALGO_TAG_FALCON512_RESERVED = 0x04;\nexport const PQM1_VERSION_V1 = 0x01;\nexport const PQM1_PAYLOAD_LEN = 32;\nexport const PQM1_ENTROPY_LEN = 30;\nexport const PQM1_V1_MNEMONIC_WORDS = 24;\nexport const PQM1_V1_MLDSA65_DOMAIN_TAG = \"monolythium.pqm1.v1.mldsa65\";\n\nexport type Pqm1ErrorKind =\n | \"badWordCount\"\n | \"bip39Decode\"\n | \"badPayloadLength\"\n | \"unsupportedAlgorithm\"\n | \"unsupportedVersion\"\n | \"missingRandom\";\n\nexport class Pqm1Error extends Error {\n constructor(\n readonly kind: Pqm1ErrorKind,\n message: string,\n ) {\n super(message);\n this.name = \"Pqm1Error\";\n }\n}\n\nexport interface Pqm1Payload {\n algoTag: typeof PQM1_ALGO_TAG_MLDSA65;\n version: typeof PQM1_VERSION_V1;\n entropy: Uint8Array;\n bytes: Uint8Array;\n}\n\nexport type Pqm1Rng = (bytes: Uint8Array) => void;\n\nconst DOMAIN_BYTES = new TextEncoder().encode(PQM1_V1_MLDSA65_DOMAIN_TAG);\n\nfunction normalizeMnemonic(mnemonic: string): string {\n return mnemonic.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nfunction ensureSupportedPayload(bytes: Uint8Array): void {\n if (bytes.length !== PQM1_PAYLOAD_LEN) {\n throw new Pqm1Error(\"badPayloadLength\", `PQM-1 payload must be ${PQM1_PAYLOAD_LEN} bytes, got ${bytes.length}`);\n }\n if (bytes[0] !== PQM1_ALGO_TAG_MLDSA65) {\n throw new Pqm1Error(\"unsupportedAlgorithm\", `unsupported PQM-1 algorithm tag 0x${bytes[0]!.toString(16).padStart(2, \"0\")}`);\n }\n if (bytes[1] !== PQM1_VERSION_V1) {\n throw new Pqm1Error(\"unsupportedVersion\", `unsupported PQM-1 version 0x${bytes[1]!.toString(16).padStart(2, \"0\")}`);\n }\n}\n\nfunction defaultRandomFill(bytes: Uint8Array): void {\n const cryptoObj = globalThis.crypto;\n if (!cryptoObj?.getRandomValues) {\n throw new Pqm1Error(\"missingRandom\", \"globalThis.crypto.getRandomValues is unavailable\");\n }\n cryptoObj.getRandomValues(bytes);\n}\n\nexport function assemblePqm1Payload(entropy: Uint8Array | readonly number[]): Uint8Array {\n const ent = expectBytes(entropy, PQM1_ENTROPY_LEN, \"PQM-1 entropy\");\n const payload = new Uint8Array(PQM1_PAYLOAD_LEN);\n payload[0] = PQM1_ALGO_TAG_MLDSA65;\n payload[1] = PQM1_VERSION_V1;\n payload.set(ent, 2);\n return payload;\n}\n\nexport function parsePqm1Payload(payload: Uint8Array | readonly number[]): Pqm1Payload {\n const bytes = expectBytes(payload, PQM1_PAYLOAD_LEN, \"PQM-1 payload\").slice();\n ensureSupportedPayload(bytes);\n return {\n algoTag: PQM1_ALGO_TAG_MLDSA65,\n version: PQM1_VERSION_V1,\n entropy: bytes.slice(2),\n bytes,\n };\n}\n\nexport function pqm1PayloadToMnemonic(payload: Uint8Array | readonly number[]): string {\n const parsed = parsePqm1Payload(payload);\n return entropyToMnemonic(parsed.bytes, wordlist);\n}\n\nexport function pqm1MnemonicToPayload(mnemonic: string): Pqm1Payload {\n const normalized = normalizeMnemonic(mnemonic);\n const words = normalized.length === 0 ? [] : normalized.split(\" \");\n if (words.length !== PQM1_V1_MNEMONIC_WORDS) {\n throw new Pqm1Error(\"badWordCount\", `PQM-1 mnemonic must be ${PQM1_V1_MNEMONIC_WORDS} words, got ${words.length}`);\n }\n let payload: Uint8Array;\n try {\n payload = mnemonicToEntropy(normalized, wordlist);\n } catch (e) {\n throw new Pqm1Error(\"bip39Decode\", `invalid PQM-1 mnemonic: ${(e as Error).message}`);\n }\n return parsePqm1Payload(payload);\n}\n\nexport function derivePqm1MlDsa65SeedFromPayload(payload: Uint8Array | readonly number[]): Uint8Array {\n const parsed = parsePqm1Payload(payload);\n return shake256(concatBytes(DOMAIN_BYTES, parsed.bytes), { dkLen: ML_DSA_65_SEED_LEN });\n}\n\nexport function pqm1MnemonicToMlDsa65Seed(mnemonic: string): Uint8Array {\n return derivePqm1MlDsa65SeedFromPayload(pqm1MnemonicToPayload(mnemonic).bytes);\n}\n\nexport function pqm1MnemonicToMlDsa65Backend(mnemonic: string): MlDsa65Backend {\n return MlDsa65Backend.fromSeed(pqm1MnemonicToMlDsa65Seed(mnemonic));\n}\n\nexport function pqm1MnemonicToAddress(mnemonic: string): string {\n return pqm1MnemonicToMlDsa65Backend(mnemonic).getAddress();\n}\n\nexport function generatePqm1Mnemonic(rng: Pqm1Rng = defaultRandomFill): string {\n const entropy = new Uint8Array(PQM1_ENTROPY_LEN);\n rng(entropy);\n return pqm1PayloadToMnemonic(assemblePqm1Payload(entropy));\n}\n","/**\n * Mempool transaction-class tags.\n *\n * The encrypted-mempool (LythiumSeal) envelope was removed at the v2\n * re-genesis; plaintext submission is the sole submit path. This module now\n * carries only the {@link MempoolClass} tag the node uses to classify a\n * transaction for ordering/admission.\n */\n\nexport const MempoolClass = {\n Transfer: 0,\n ContractCall: 1,\n PrivacyOp: 2,\n CLOBOp: 3,\n AgentOp: 4,\n FoundationOp: 5,\n /** @deprecated Use FoundationOp. */\n GovernanceOp: 5,\n RWAOp: 6,\n} as const;\nexport type MempoolClass = (typeof MempoolClass)[keyof typeof MempoolClass];\n","import { bytesToHex, hexToBytes } from \"./bytes.js\";\nimport type { MlDsa65Backend } from \"./ml-dsa.js\";\nimport type { NativeEvmTxFields } from \"./tx.js\";\n\nexport interface JsonRpcCallClient {\n call<T>(method: string, params?: unknown): Promise<T>;\n}\n\n/**\n * A built plaintext submission — the bincode-encoded chain-side\n * `SignedTransaction` (`0x`-prefixed hex) ready to hand to\n * `mesh_submitTx`, plus the canonical hashes the wallet validates the\n * node echo against.\n *\n * Mirrors the chain-side artefacts produced by the Rust SDK's\n * `build_chain_signed_tx` (`mono-core/crates/core/sdk/src/tx.rs`): the\n * ML-DSA-65 signature is taken over the canonical chain-side `sighash`\n * (keccak-256 of the 0x01-tagged preimage) and the canonical native tx\n * hash is the keccak-256 of the 0x02-tagged preimage with the signature\n * and public key appended.\n */\nexport interface PlaintextSubmission {\n /** Bincode `SignedTransaction` wire bytes, `0x`-prefixed. */\n signedTxWireHex: string;\n /** Canonical native tx hash the node echoes on admission. */\n innerTxHashHex: string;\n /** Canonical chain-side sighash that was signed. */\n innerSighashHex: string;\n /** Length in bytes of the bincode `SignedTransaction`. */\n innerWireBytes: number;\n}\n\n/**\n * Build a PLAINTEXT submission — the sole submit path since the v2\n * re-genesis dropped the encrypted (LythiumSeal) mempool.\n *\n * It re-shapes the native tx into the chain-side `SignedTransaction`,\n * signs over the canonical `sighash` with the ML-DSA-65 backend,\n * bincode-serializes the result, and `0x`-hex-encodes it. The bytes are\n * forwarded verbatim through `mesh_submitTx` (the node routes them to\n * `MempoolTx::plaintext` via `submit_raw`).\n *\n * Mirrors `TxClient::submit_plaintext` in the Rust SDK.\n */\nexport function buildPlaintextSubmission(args: {\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n}): PlaintextSubmission {\n const signed = args.backend.signEvmTx(args.tx);\n return {\n signedTxWireHex: `0x${signed.wireHex}`,\n innerTxHashHex: bytesToHex(signed.txHash),\n innerSighashHex: bytesToHex(signed.sighash),\n innerWireBytes: signed.wireBytes.length,\n };\n}\n\n/**\n * Submit a bincode-encoded chain-side `SignedTransaction` (`0x`-hex)\n * through the plaintext `mesh_submitTx` path and validate the node's\n * echoed canonical tx hash against the locally computed one.\n *\n * Mirrors the validation in `TxClient::submit_plaintext`: the node\n * echoes the 32-byte canonical native tx hash on admission, and any\n * mismatch (or non-32-byte response) is rejected loud so a wallet never\n * trusts a hash it did not derive itself.\n *\n * @returns the validated canonical native tx hash (`0x`-prefixed).\n */\nexport async function submitPlaintextTransaction(\n client: JsonRpcCallClient,\n signedTxWireHex: string,\n expectedTxHashHex: string,\n): Promise<string> {\n const returned = await client.call<string>(\"mesh_submitTx\", [signedTxWireHex]);\n const returnedBytes = hexToBytes(returned, \"mesh_submitTx tx hash\");\n if (returnedBytes.length !== 32) {\n throw new Error(\n `mesh_submitTx tx hash must be 32 bytes, got ${returnedBytes.length}`,\n );\n }\n const expectedBytes = hexToBytes(expectedTxHashHex, \"expected tx hash\");\n if (!bytesEqual(returnedBytes, expectedBytes)) {\n throw new Error(\n `mesh_submitTx returned tx hash ${bytesToHex(returnedBytes)} but the locally computed canonical hash is ${bytesToHex(expectedBytes)}`,\n );\n }\n return bytesToHex(returnedBytes);\n}\n\n/**\n * Build, sign, and submit a native transaction through the plaintext\n * `mesh_submitTx` path.\n *\n * Mirrors `TxClient::build_sign_submit` in the Rust SDK. The encrypted\n * (LythiumSeal) submit path was removed at the v2 re-genesis, so this is\n * the single build-sign-submit entry point.\n *\n * @returns the node-echoed-and-validated canonical native tx hash\n * (`0x`-prefixed).\n */\nexport async function submitTransaction(args: {\n client: JsonRpcCallClient;\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n}): Promise<string> {\n const plaintext = buildPlaintextSubmission({ backend: args.backend, tx: args.tx });\n return submitPlaintextTransaction(\n args.client,\n plaintext.signedTxWireHex,\n plaintext.innerTxHashHex,\n );\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n"]}