@cardanowall/poe-standard 0.3.0 → 0.5.0
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/carriage.cjs +1972 -0
- package/dist/carriage.cjs.map +1 -0
- package/dist/carriage.d.cts +55 -0
- package/dist/carriage.d.ts +55 -0
- package/dist/carriage.js +1967 -0
- package/dist/carriage.js.map +1 -0
- package/dist/encoder.cjs +29 -77
- package/dist/encoder.cjs.map +1 -1
- package/dist/encoder.d.cts +10 -0
- package/dist/encoder.d.ts +10 -0
- package/dist/encoder.js +29 -77
- package/dist/encoder.js.map +1 -1
- package/dist/error-codes.cjs +129 -37
- package/dist/error-codes.cjs.map +1 -1
- package/dist/error-codes.d.cts +11 -6
- package/dist/error-codes.d.ts +11 -6
- package/dist/error-codes.js +126 -38
- package/dist/error-codes.js.map +1 -1
- package/dist/index.cjs +1085 -838
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -58
- package/dist/index.d.ts +4 -58
- package/dist/index.js +1074 -833
- package/dist/index.js.map +1 -1
- package/dist/schema.cjs +101 -87
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +69 -47
- package/dist/schema.d.ts +69 -47
- package/dist/schema.js +99 -86
- package/dist/schema.js.map +1 -1
- package/dist/validator.cjs +927 -577
- package/dist/validator.cjs.map +1 -1
- package/dist/validator.d.cts +48 -7
- package/dist/validator.d.ts +48 -7
- package/dist/validator.js +927 -578
- package/dist/validator.js.map +1 -1
- package/package.json +8 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema.ts","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/constants.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/tag.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/box.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/utils.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/typeEncoderMap.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/sorts.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/writer.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/float.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/errors.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/const.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/decode.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/encode.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/encoder.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/options.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/simple.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/decodeStream.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/container.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/diagnostic.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/comment.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/types.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/decoder.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/index.js","../../crypto-core/src/cbor/errors.ts","../../crypto-core/src/cbor/canonical.ts","../src/encoder.ts","../../../node_modules/.pnpm/@noble+ed25519@3.1.0/node_modules/@noble/ed25519/index.js","../../crypto-core/src/sig/ed25519.ts","../../crypto-core/src/cose/errors.ts","../../crypto-core/src/cose/sign1.ts","../../crypto-core/src/sealed-poe/transcript.ts","../../crypto-core/src/sealed-poe/wrap.ts","../src/chunked.ts","../src/error-codes.ts","../src/validator.ts"],"names":["b","s","n","k","o","e","t","f","r","a","A","d","u","c","l","I","g","p","S","x","U","h","B","z","F","y","N","m","O","Z","R","v","T","H","$","w","L","q","E","_","hashes","isBytes","abytes","C","M","X","Y","y2","X2","Y2","Z2","G","x2","b2","b4","v3","CanonicalCborError","decodeCanonicalCbor","mapDecodeError","UTF8_ENCODER","issue","bytesToHex","j"],"mappings":"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","file":"index.js","sourcesContent":["// Label 309 v1 PoE record Zod schemas.\n//\n// Scope: structural shape gate. The schema enforces per-field types, length\n// bounds (chunk size, digest length, supersedes length, nonce length,\n// passphrase salt length), closed-map invariants (`sigs[i]`, `slot`,\n// `passphrase`, `merkle[i]`), and the `v == 1` literal. Cross-field rules\n// (item.hashes content-hash binding when `enc` present, slots/passphrase\n// exclusivity, `crit[]` shape, registry membership of algorithm\n// identifiers, COSE_Sign1 structural decode, URI per-scheme shape rules)\n// fire in `validator.ts` so the validator can emit the precise structural\n// codes (`UNSUPPORTED_*_ALG`, `ENC_*`, `SIG_*`, `INVALID_URI`,\n// `CRIT_SHAPE_INVALID`, …) rather than a generic schema-mismatch.\n//\n// Refinements that DO live in the schema (because the validator's domain\n// pass lifts these as `SCHEMA_*` / `*_LENGTH_MISMATCH` codes directly):\n// - chunk size `[1, 64]` → `CHUNK_TOO_LARGE`\n// - 32-byte digest / 32-byte root / 32-byte supersedes → `HASH_DIGEST_LENGTH_MISMATCH`\n// / `SUPERSEDES_TX_INVALID_LENGTH`\n// - 24-byte nonce / 32-byte slots_mac →\n// `NONCE_LENGTH_MISMATCH` / `ENC_SLOTS_MAC_INVALID_LENGTH`\n// - passphrase salt 16..64 bytes → `ENC_PASSPHRASE_SALT_TOO_SHORT` /\n// `ENC_PASSPHRASE_SALT_TOO_LONG`\n//\n// Per-slot recipient lengths (`epk`, `kem_ct`, `wrap`) are NOT enforced here:\n// the required slot shape depends on the envelope-level `kem`, which a slot\n// cannot see in isolation. The KEM-driven slot descriptor in `validator.ts`\n// emits the precise `KEM_EPK_LENGTH_MISMATCH` / `KEM_CT_LENGTH_MISMATCH` /\n// `WRAP_LENGTH_MISMATCH` / `ENC_SLOT_INVALID_SHAPE` codes instead.\n\nimport { z } from 'zod';\n\n// =============================================================================\n// Chunked-bytes / chunked-text arrays\n// =============================================================================\n\n// `[1* bstr .size (1..64)]`. A zero-length chunk (0 < 1) is rejected with the\n// SAME `CHUNK_TOO_LARGE` code as oversized chunks (any length outside\n// `[1, 64]`).\nexport const ChunkedBytesArraySchema = z\n .array(\n z.instanceof(Uint8Array).refine((b) => b.length >= 1 && b.length <= 64, {\n params: { code: 'CHUNK_TOO_LARGE' },\n }),\n )\n .min(1);\nexport type ChunkedBytesArray = z.infer<typeof ChunkedBytesArraySchema>;\n\n// `[1* tstr .size (1..64)]` — chunk byte length is the UTF-8-encoded length\n// (each `tstr` is wire-encoded as UTF-8). The `tstr .size (1..64)` pin is a\n// byte-count constraint, not a code-unit constraint.\nconst UTF8_ENCODER = new TextEncoder();\nexport const UriChunkArraySchema = z\n .array(\n z.string().refine(\n (s) => {\n const n = UTF8_ENCODER.encode(s).length;\n return n >= 1 && n <= 64;\n },\n { params: { code: 'CHUNK_TOO_LARGE' } },\n ),\n )\n .min(1);\nexport type UriChunkArray = z.infer<typeof UriChunkArraySchema>;\n\n// =============================================================================\n// Hashes map\n// =============================================================================\n//\n// `hashes` is a non-empty CBOR map keyed by content-hash algorithm identifier\n// (a CBOR text string from the content-hash registry) with the 32-byte digest\n// as value. cbor2 surfaces a text-keyed CBOR map as a plain JS object — z.record\n// admits any string key here. Both the registry-membership check\n// (`UNSUPPORTED_HASH_ALG`) and the per-algorithm digest-length check\n// (`HASH_DIGEST_LENGTH_MISMATCH`) live in the validator's domain pass so\n// each violation emits its precise code; the schema only enforces the\n// value is a CBOR byte string.\n\nexport const HashDigestSchema = z.instanceof(Uint8Array);\n\nexport const HashesMapSchema = z.record(z.string(), HashDigestSchema);\nexport type HashesMap = z.infer<typeof HashesMapSchema>;\n\n// =============================================================================\n// Top-level `merkle[]`\n// =============================================================================\n//\n// Each commit is a closed map `{alg, root, leaf_count, ? uris}`. `alg` is open\n// (registry membership is enforced in the validator's domain pass — unknown\n// identifiers emit `UNSUPPORTED_MERKLE_COMMIT_ALG`).\n\nexport const MerkleCommitSchema = z\n .object({\n alg: z.string(),\n root: z.instanceof(Uint8Array),\n leaf_count: z.number().int().min(1),\n uris: z.array(UriChunkArraySchema).min(1).optional(),\n })\n .strict();\nexport type MerkleCommit = z.infer<typeof MerkleCommitSchema>;\n\n// =============================================================================\n// Encryption envelope\n// =============================================================================\n\n// Per-slot recipient entry. The slot shape is KEM-driven:\n//\n// - x25519: `{ epk: bstr(32), wrap: bstr(48) }` — `epk` is the\n// ephemeral X25519 public key, `wrap` is the 32-byte CEK + 16-byte\n// ChaCha20-Poly1305 tag.\n// - mlkem768x25519: `{ kem_ct: [ bstr .size (1..64) ], wrap: bstr(48) }` —\n// `kem_ct` is the 1120-byte X-Wing `enc` carried as a chunked byte-string\n// array (the same `bytes-chunk-array` shape `sigs[i].cose_sign1` uses);\n// there is NO per-slot `epk` on the hybrid path.\n//\n// The `kem` identifier is hoisted to envelope scope (a per-slot `kem` would\n// be wire-bloat). The schema is deliberately PERMISSIVE:\n// `epk`, `kem_ct`, and `wrap` are all optional and `.strict()` is NOT applied.\n// Both the per-field length checks (`KEM_EPK_LENGTH_MISMATCH`,\n// `KEM_CT_LENGTH_MISMATCH`, `WRAP_LENGTH_MISMATCH`) and the KEM-driven\n// shape gate (which field MUST/MUST NOT be present for the declared `kem`,\n// emitting `ENC_SLOT_INVALID_SHAPE`) live in the validator's domain pass —\n// the structural schema cannot know the envelope `kem` from a slot in\n// isolation, and we want the precise KEM-aware code rather than a generic\n// schema mismatch. Because `.strict()` is dropped, the domain pass MUST\n// explicitly reject cross-KEM contamination (an x25519 slot carrying\n// `kem_ct`, or a hybrid slot carrying `epk`).\nexport const SlotSchema = z.object({\n epk: z.instanceof(Uint8Array).optional(),\n kem_ct: ChunkedBytesArraySchema.optional(),\n wrap: z.instanceof(Uint8Array).optional(),\n});\nexport type Slot = z.infer<typeof SlotSchema>;\n\n// Argon2id params `{m, t, p}` are a closed map. Each value MUST be a CBOR\n// unsigned integer; the FLOOR check (`m ≥ 65536`,\n// `t ≥ 3`, `p ≥ 1`) emits `ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW` in the\n// validator's domain pass — keeping it out of the schema lets us emit the\n// distinct salt-length code when salt itself is malformed too.\nexport const Argon2idParamsSchema = z\n .object({\n m: z.number().int(),\n t: z.number().int(),\n p: z.number().int(),\n })\n .strict();\nexport type Argon2idParams = z.infer<typeof Argon2idParamsSchema>;\n\n// Passphrase block. `alg` is open (registry membership checked in the\n// validator's domain pass → `ENC_PASSPHRASE_ALG_UNSUPPORTED`);\n// `params` is open here (validator narrows on the registered `alg` value and\n// emits `SCHEMA_UNKNOWN_FIELD` for extra keys, `ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW`\n// for sub-floor values). `salt` length floor/ceiling are schema-layer\n// refinements with the dedicated `ENC_PASSPHRASE_SALT_TOO_SHORT/TOO_LONG`\n// codes — they belong at the schema layer because a slot cannot otherwise\n// see the salt length.\nexport const PassphraseBlockSchema = z\n .object({\n alg: z.string(),\n salt: z.instanceof(Uint8Array).superRefine((bytes, ctx) => {\n if (bytes.length < 16) {\n ctx.addIssue({\n code: 'custom',\n path: [],\n message: `passphrase.salt length ${bytes.length} < 16`,\n params: { code: 'ENC_PASSPHRASE_SALT_TOO_SHORT' },\n });\n } else if (bytes.length > 64) {\n ctx.addIssue({\n code: 'custom',\n path: [],\n message: `passphrase.salt length ${bytes.length} > 64`,\n params: { code: 'ENC_PASSPHRASE_SALT_TOO_LONG' },\n });\n }\n }),\n params: z.record(z.string(), z.unknown()),\n })\n .strict();\nexport type PassphraseBlock = z.infer<typeof PassphraseBlockSchema>;\n\n// Sealed-PoE envelope. The wire format admits any combination of\n// `kem` / `slots` / `slots_mac` / `passphrase` keys (permissive superset);\n// cross-field invariants (slots ⊕ passphrase, slots ↔ slots_mac, slots\n// requires kem, content-hash binding, slots non-empty) are enforced in the\n// validator's domain pass so each violation emits its typed code rather\n// than a generic shape mismatch.\nexport const EncryptionEnvelopeSchema = z\n .object({\n scheme: z.unknown(),\n aead: z.string(),\n kem: z.string().optional(),\n nonce: z.instanceof(Uint8Array),\n slots: z.array(SlotSchema).optional(),\n slots_mac: z\n .instanceof(Uint8Array)\n .refine((b) => b.length === 32, {\n params: { code: 'ENC_SLOTS_MAC_INVALID_LENGTH' },\n })\n .optional(),\n passphrase: PassphraseBlockSchema.optional(),\n })\n .strict();\nexport type EncryptionEnvelope = z.infer<typeof EncryptionEnvelopeSchema>;\n\n// =============================================================================\n// Item entry\n// =============================================================================\n\nexport const ItemEntrySchema = z\n .object({\n hashes: HashesMapSchema,\n uris: z.array(UriChunkArraySchema).min(1).optional(),\n // Captured as `unknown` so the validator can run the\n // `ENC_REQUIRES_CONTENT_HASH` pre-check ahead of any inner-shape errors\n // and surface the most informative code first.\n enc: z.unknown().optional(),\n })\n .strict();\nexport type ItemEntry = z.infer<typeof ItemEntrySchema>;\n\n// =============================================================================\n// Sig entry\n// =============================================================================\n//\n// Closed CBOR map `{cose_sign1, ? cose_key}`. Canonical CBOR map-key sort\n// (RFC 8949 §4.2.1, bytewise lex on encoded keys) places `cose_key`\n// (length-8 tstr, `0x68`) BEFORE `cose_sign1` (length-10 tstr, `0x6a`); the\n// schema property-order is irrelevant — the canonical encoder handles it.\nexport const SigEntrySchema = z\n .object({\n cose_key: ChunkedBytesArraySchema.optional(),\n cose_sign1: ChunkedBytesArraySchema,\n })\n .strict();\nexport type SigEntry = z.infer<typeof SigEntrySchema>;\n\n// =============================================================================\n// Supersedence\n// =============================================================================\n\nexport const SupersedesSchema = z.instanceof(Uint8Array).refine((b) => b.length === 32, {\n params: { code: 'SUPERSEDES_TX_INVALID_LENGTH' },\n});\nexport type Supersedes = z.infer<typeof SupersedesSchema>;\n\n// =============================================================================\n// Top-level record\n// =============================================================================\n//\n// `v == 1` is a literal — a future major (`v: 2`) MUST be rejected with\n// `SCHEMA_INVALID_LITERAL`. `z.literal(1)` preserves the narrow `1` type for\n// the inferred `PoeRecord[\"v\"]` (so consumers can dispatch on it) and emits\n// Zod's `invalid_value` code which the validator's mapper lifts to\n// `SCHEMA_INVALID_LITERAL`.\n//\n// `looseObject` admits extension keys (matching `^x-.+` or `^[a-z]+-.+`); the\n// validator's domain pass rejects unknown keys that match neither pattern with\n// `SCHEMA_UNKNOWN_FIELD`.\nexport const VersionLiteralSchema = z.literal(1);\n\nexport const PoeRecordSchema = z.looseObject({\n v: VersionLiteralSchema,\n items: z.array(ItemEntrySchema).optional(),\n merkle: z.array(MerkleCommitSchema).optional(),\n supersedes: SupersedesSchema.optional(),\n sigs: z.array(SigEntrySchema).optional(),\n crit: z.array(z.string()).optional(),\n});\nexport type PoeRecord = z.infer<typeof PoeRecordSchema>;\n\n// =============================================================================\n// Closed top-level base-key registry\n// =============================================================================\n//\n// Used by the validator's domain pass to distinguish unknown-typo keys from\n// well-formed extension keys (`^x-.+` / `^[a-z]+-.+`).\nexport const TOP_LEVEL_BASE_KEYS: ReadonlySet<string> = new Set([\n 'v',\n 'items',\n 'merkle',\n 'supersedes',\n 'sigs',\n 'crit',\n]);\n\n// Extension-key namespaces. Anchored at both ends so an\n// embedded newline cannot smuggle a multi-segment key past the check: `.`\n// excludes `\\n` in JS, and the `\\n?$` tail tolerates exactly ONE trailing\n// newline (matching the Python validator's `re.fullmatch(r'^(x-.+|[a-z]+-.+)$')`\n// semantics, where `$` likewise admits a single trailing `\\n`). So `x-note\\n`\n// is an extension key, but `x-a\\nb`, `x-note\\n\\n`, and `x-\\n` are not.\nexport const EXTENSION_KEY_VENDOR_RE = /^x-.+\\n?$/;\nexport const EXTENSION_KEY_COMPANION_RE = /^[a-z]+-.+\\n?$/;\n\nexport function isExtensionKey(k: string): boolean {\n return EXTENSION_KEY_VENDOR_RE.test(k) || EXTENSION_KEY_COMPANION_RE.test(k);\n}\n","const f={POS_INT:0,NEG_INT:1,BYTE_STRING:2,UTF8_STRING:3,ARRAY:4,MAP:5,TAG:6,SIMPLE_FLOAT:7},T={DATE_STRING:0,DATE_EPOCH:1,POS_BIGINT:2,NEG_BIGINT:3,DECIMAL_FRAC:4,BIGFLOAT:5,BASE64URL_EXPECTED:21,BASE64_EXPECTED:22,BASE16_EXPECTED:23,CBOR:24,URI:32,BASE64URL:33,BASE64:34,MIME:36,DATE_EPOCH_DAYS:100,SET:258,JSON:262,WTF8:273,SYMBOL:280,DATE_FULL:1004,REGEXP:21066,SELF_DESCRIBED:55799,INVALID_16:65535,INVALID_32:4294967295,INVALID_64:0xffffffffffffffffn},I={ZERO:0,ONE:24,TWO:25,FOUR:26,EIGHT:27,INDEFINITE:31},o={FALSE:20,TRUE:21,NULL:22,UNDEFINED:23};class A{static BREAK=Symbol.for(\"github.com/hildjj/cbor2/break\");static ENCODED=Symbol.for(\"github.com/hildjj/cbor2/cbor-encoded\");static LENGTH=Symbol.for(\"github.com/hildjj/cbor2/length\")}const S={MIN:-(2n**63n),MAX:2n**64n-1n};export{S as DCBOR_INT,f as MT,I as NUMBYTES,o as SIMPLE,A as SYMS,T as TAG};\n","class o{static#e=new Map;tag;contents;constructor(e,t=void 0){this.tag=e,this.contents=t}get noChildren(){return!!o.#e.get(this.tag)?.noChildren}static registerDecoder(e,t,n){const i=this.#e.get(e);return this.#e.set(e,t),i&&(\"comment\"in t||(t.comment=i.comment),\"noChildren\"in t||(t.noChildren=i.noChildren)),n&&!t.comment&&(t.comment=()=>`(${n})`),i}static clearDecoder(e){const t=this.#e.get(e);return this.#e.delete(e),t}static getDecoder(e){return this.#e.get(e)}static getAllDecoders(){return new Map(this.#e)}*[Symbol.iterator](){yield this.contents}push(e){return this.contents=e,1}decode(e){const t=e?.tags?.get(this.tag)??(e?.ignoreGlobalTags?void 0:o.#e.get(this.tag));return t?t(this,e):this}comment(e,t){const n=e?.tags?.get(this.tag)??(e?.ignoreGlobalTags?void 0:o.#e.get(this.tag));if(n?.comment)return n.comment(this,e,t)}toCBOR(){return[this.tag,this.contents]}[Symbol.for(\"nodejs.util.inspect.custom\")](e,t,n){return`${this.tag}(${n(this.contents,t)})`}}export{o as Tag};\n","import{SYMS as i}from\"./constants.js\";import{Tag as o}from\"./tag.js\";function f(n){if(n!=null&&typeof n==\"object\")return n[i.ENCODED]}function s(n){if(n!=null&&typeof n==\"object\")return n[i.LENGTH]}function u(n,e){Object.defineProperty(n,i.ENCODED,{configurable:!0,enumerable:!1,value:e})}function l(n,e){Object.defineProperty(n,i.LENGTH,{configurable:!0,enumerable:!1,value:e})}function d(n,e){const r=Object(n);return u(r,e),r}function t(n){if(!n||typeof n!=\"object\")return n;switch(n.constructor){case BigInt:case Boolean:case Number:case String:case Symbol:return n.valueOf();case Array:return n.map(e=>t(e));case Map:{const e=t([...n.entries()]);return e.every(([r])=>typeof r==\"string\")?Object.fromEntries(e):new Map(e)}case o:return new o(t(n.tag),t(n.contents));case Object:{const e={};for(const[r,a]of Object.entries(n))e[r]=t(a);return e}}return n}export{d as box,f as getEncoded,s as getEncodedLength,u as saveEncoded,l as saveEncodedLength,t as unbox};\n","const g=Symbol(\"CBOR_RANGES\");function c(r,n){Object.defineProperty(r,g,{configurable:!1,enumerable:!1,writable:!1,value:n})}function f(r){return r[g]}function l(r){return f(r)!==void 0}function R(r,n=0,t=r.length-1){const o=r.subarray(n,t),a=f(r);if(a){const s=[];for(const e of a)if(e[0]>=n&&e[0]+e[1]<=t){const i=[...e];i[0]-=n,s.push(i)}s.length&&c(o,s)}return o}function b(r){let n=Math.ceil(r.length/2);const t=new Uint8Array(n);n--;for(let o=r.length,a=o-2;o>=0;o=a,a-=2,n--)t[n]=parseInt(r.substring(a,o),16);return t}function A(r){return r.reduce((n,t)=>n+t.toString(16).padStart(2,\"0\"),\"\")}function d(r){const n=r.reduce((e,i)=>e+i.length,0),t=r.some(e=>l(e)),o=[],a=new Uint8Array(n);let s=0;for(const e of r){if(!(e instanceof Uint8Array))throw new TypeError(`Invalid array: ${e}`);if(a.set(e,s),t){const i=e[g]??[[0,e.length]];for(const u of i)u[0]+=s;o.push(...i)}s+=e.length}return t&&c(a,o),a}function y(r){const n=atob(r);return Uint8Array.from(n,t=>t.codePointAt(0))}const p={\"-\":\"+\",_:\"/\"};function x(r){const n=r.replace(/[_-]/g,t=>p[t]);return y(n.padEnd(Math.ceil(n.length/4)*4,\"=\"))}function h(){const r=new Uint8Array(4),n=new Uint32Array(r.buffer);return!((n[0]=1)&r[0])}function U(r){let n=\"\";for(const t of r){const o=t.codePointAt(0)?.toString(16).padStart(4,\"0\");n&&(n+=\", \"),n+=`U+${o}`}return n}export{g as CBOR_RANGES,y as base64ToBytes,x as base64UrlToBytes,f as getRanges,l as hasRanges,b as hexToU8,h as isBigEndian,c as setRanges,U as stringToHex,R as subarrayRanges,d as u8concat,A as u8toHex};\n","class s{#e=new Map;registerEncoder(e,t){const n=this.#e.get(e);return this.#e.set(e,t),n}get(e){return this.#e.get(e)}delete(e){return this.#e.delete(e)}clear(){this.#e.clear()}}export{s as TypeEncoderMap};\n","function f(c,d){const[u,a,n]=c,[l,s,t]=d,r=Math.min(n.length,t.length);for(let o=0;o<r;o++){const e=n[o]-t[o];if(e!==0)return e}return 0}function y(c,d){const[u,a,n]=c,[l,s,t]=d,r=n.length-t.length;if(r!==0)return r;const o=Math.min(n.length,t.length);for(let e=0;e<o;e++){const i=n[e]-t[e];if(i!==0)return i}return 0}export{f as sortCoreDeterministic,y as sortLengthFirstDeterministic};\n","class e{static defaultOptions={chunkSize:4096};#r;#i=[];#s=null;#t=0;#a=0;constructor(t={}){if(this.#r={...e.defaultOptions,...t},this.#r.chunkSize<8)throw new RangeError(`Expected size >= 8, got ${this.#r.chunkSize}`);this.#n()}get length(){return this.#a}read(){this.#o();const t=new Uint8Array(this.#a);let i=0;for(const s of this.#i)t.set(s,i),i+=s.length;return this.#n(),t}write(t){const i=t.length;i>this.#l()?(this.#o(),i>this.#r.chunkSize?(this.#i.push(t),this.#n()):(this.#n(),this.#i[this.#i.length-1].set(t),this.#t=i)):(this.#i[this.#i.length-1].set(t,this.#t),this.#t+=i),this.#a+=i}writeUint8(t){this.#e(1),this.#s.setUint8(this.#t,t),this.#h(1)}writeUint16(t,i=!1){this.#e(2),this.#s.setUint16(this.#t,t,i),this.#h(2)}writeUint32(t,i=!1){this.#e(4),this.#s.setUint32(this.#t,t,i),this.#h(4)}writeBigUint64(t,i=!1){this.#e(8),this.#s.setBigUint64(this.#t,t,i),this.#h(8)}writeInt16(t,i=!1){this.#e(2),this.#s.setInt16(this.#t,t,i),this.#h(2)}writeInt32(t,i=!1){this.#e(4),this.#s.setInt32(this.#t,t,i),this.#h(4)}writeBigInt64(t,i=!1){this.#e(8),this.#s.setBigInt64(this.#t,t,i),this.#h(8)}writeFloat32(t,i=!1){this.#e(4),this.#s.setFloat32(this.#t,t,i),this.#h(4)}writeFloat64(t,i=!1){this.#e(8),this.#s.setFloat64(this.#t,t,i),this.#h(8)}clear(){this.#a=0,this.#i=[],this.#n()}#n(){const t=new Uint8Array(this.#r.chunkSize);this.#i.push(t),this.#t=0,this.#s=new DataView(t.buffer,t.byteOffset,t.byteLength)}#o(){if(this.#t===0){this.#i.pop();return}const t=this.#i.length-1;this.#i[t]=this.#i[t].subarray(0,this.#t),this.#t=0,this.#s=null}#l(){const t=this.#i.length-1;return this.#i[t].length-this.#t}#e(t){this.#l()<t&&(this.#o(),this.#n())}#h(t){this.#t+=t,this.#a+=t}}export{e as Writer};\n","const w=1n<<15n,f=0b11111n<<10n,b=1n<<9n,d=b-1n,I=b|d,g=1n<<31n,l=0b11111111n<<23n,A=1n<<22n,E=A-1n,p=A|E,N=1n<<63n,a=0b11111111111n<<52n,c=1n<<51n,u=c-1n,F=c|u,_=u-(d<<42n),S=u-(E<<29n),m={2:\"0b\",8:\"0o\",16:\"0x\"};var x=(t=>(t[t.NATURAL=-2]=\"NATURAL\",t[t.UNKNOWN=-1]=\"UNKNOWN\",t[t.F16=2]=\"F16\",t[t.F32=4]=\"F32\",t[t.F64=8]=\"F64\",t))(x||{});function U(i,n,e,r){let o=\"nan'\";return i.quiet||(o+=\"!\"),i.sign===-1&&(o+=\"-\"),o+=r(Math.abs(i.payload),e),o+=\"'\",o+=i.encodingIndicator,o}class O extends Number{#n;#t=-1;constructor(n,e=!0,r=-1){super(NaN);const o=n;if(typeof n==\"number\"){if(!Number.isSafeInteger(n))throw new Error(`Invalid NAN payload: ${n}`);n=BigInt(n);let t=0n;if(n<0&&(t=N,n=-n),n>=c)throw new Error(`Payload too large: ${o}`);const s=e?c:0n;switch(this.#n=t|a|s|n,r){case-2:throw new Error(\"NAN_SIZE.NATURAL only valid for bigint constructor\");case-1:r=this.preferredSize;break;case 2:if(this.#n&_)throw new Error(\"Invalid size for payload\");break;case 4:if(this.#n&S)throw new Error(\"Invalid size for payload\");break;case 8:break;default:throw new Error(`Invalid size: ${r}`)}this.#t=r}else if(typeof n==\"bigint\"){let t=-1;if((n&a)===a)this.#n=n,t=8;else if((n&l)===l){const s=(n&g)<<32n;this.#n=s|a|(n&p)<<29n,t=4}else if((n&f)===f){const s=(n&w)<<48n;this.#n=s|a|(n&I)<<42n,t=2}else throw new Error(`Invalid raw NaN value: ${n}`);if(r===-1)this.#t=this.preferredSize;else if(r===-2)this.#t=t;else{if(r<t)throw new Error(\"Invalid bigint NaN size\");this.#t=r}}else{const t=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.length){case 3:{if(n[0]!==249)throw new Error(\"Invalid CBOR encoding for half float\");const s=BigInt(t.getUint16(1,!1));if((s&f)!==f)throw new Error(\"Not a NaN\");const h=(s&w)<<48n;this.#n=h|a|(s&I)<<42n,this.#t=2;break}case 5:{if(n[0]!==250)throw new Error(\"Invalid CBOR encoding for single float\");const s=BigInt(t.getUint32(1,!1));if((s&l)!==l)throw new Error(\"Not a NaN\");const h=(s&g)<<32n;this.#n=h|a|(s&p)<<29n,this.#t=4;break}case 9:{if(n[0]!==251)throw new Error(\"Invalid CBOR encoding for double float\");if(this.#n=t.getBigUint64(1,!1),(this.#n&a)!==a)throw new Error(\"Not a NaN (NaNaN)\");this.#t=8;break}default:throw new RangeError(`Invalid NAN size (should be 2, 4, or 8): ${n.length-1}`)}}if(!this.payload&&!this.quiet)throw new Error(\"Signalling NaN with zero payload\")}get bytes(){const n=new ArrayBuffer(this.#t+1),e=new DataView(n);switch(this.#t){case 2:{e.setUint8(0,249);const o=(this.#n&N?w:0n)|f|(this.#n&F)>>42n;e.setUint16(1,Number(o),!1);break}case 4:{e.setUint8(0,250);const o=(this.#n&N?g:0n)|l|(this.#n&F)>>29n;e.setUint32(1,Number(o),!1);break}case 8:e.setUint8(0,251),e.setBigUint64(1,this.#n);break}return new Uint8Array(n)}get quiet(){return!!(this.#n&c)}get sign(){return this.#n&N?-1:1}get payload(){return Number(this.#n&u)*this.sign}get raw(){return this.#n}get encodingIndicator(){switch(this.#t){case 2:return\"_1\";case 4:return\"_2\"}return\"_3\"}get size(){return this.#t}get preferredSize(){return(this.#n&_)===0n?2:(this.#n&S)===0n?4:8}get isShortestEncoding(){return this.preferredSize===this.#t}toCBOR(n){n.write(this.bytes)}toString(n=10){return U(this,1,{},e=>(m[n]??\"\")+e.toString(n))}[Symbol.for(\"nodejs.util.inspect.custom\")](n,e,r){return U(this,n,e,r)}}function v(i,n=0,e=!1){const r=i[n]&128?-1:1,o=(i[n]&124)>>2,t=(i[n]&3)<<8|i[n+1];if(o===0){if(e&&t!==0)throw new Error(`Unwanted subnormal: ${r*5960464477539063e-23*t}`);return r*5960464477539063e-23*t}else if(o===31)return t?NaN:r*(1/0);return r*2**(o-25)*(1024+t)}function Z(i){const n=new DataView(new ArrayBuffer(4));n.setFloat32(0,i,!1);const e=n.getUint32(0,!1);if((e&8191)!==0)return null;let r=e>>16&32768;const o=e>>23&255,t=e&8388607;if(!(o===0&&t===0))if(o>=113&&o<=142)r+=(o-112<<10)+(t>>13);else if(o>=103&&o<113){if(t&(1<<126-o)-1)return null;r+=t+8388608>>126-o}else if(o===255)r|=31744,r|=t>>13;else return null;return r}function k(i){if(i!==0){const n=new ArrayBuffer(8),e=new DataView(n);e.setFloat64(0,i,!1);const r=e.getBigUint64(0,!1);if((r&0x7ff0000000000000n)===0n)return r&0x8000000000000000n?-0:0}return i}function B(i){switch(i.length){case 2:v(i,0,!0);break;case 4:{const n=new DataView(i.buffer,i.byteOffset,i.byteLength),e=n.getUint32(0,!1);if((e&2139095040)===0&&e&8388607)throw new Error(`Unwanted subnormal: ${n.getFloat32(0,!1)}`);break}case 8:{const n=new DataView(i.buffer,i.byteOffset,i.byteLength),e=n.getBigUint64(0,!1);if((e&0x7ff0000000000000n)===0n&&e&0x000fffffffffffn)throw new Error(`Unwanted subnormal: ${n.getFloat64(0,!1)}`);break}default:throw new TypeError(`Bad input to isSubnormal: ${i}`)}}export{O as NAN,x as NAN_SIZE,B as checkSubnormal,k as flushToZero,Z as halfToUint,v as parseHalf};\n","export class DecodeError extends TypeError {\n code = 'ERR_ENCODING_INVALID_ENCODED_DATA';\n constructor() {\n super('The encoded data was not valid for encoding wtf-8');\n }\n}\nexport class InvalidEncodingError extends RangeError {\n code = 'ERR_ENCODING_NOT_SUPPORTED';\n constructor(label) {\n super(`Invalid encoding: \"${label}\"`);\n }\n}\n","export const BOM = 0xfeff;\nexport const EMPTY = new Uint8Array(0);\nexport const MAX_HIGH_SURROGATE = 0xdbff;\nexport const MAX_LOW_SURROGATE = 0xdfff;\nexport const MIN_HIGH_SURROGATE = 0xd800;\nexport const MIN_LOW_SURROGATE = 0xdc00;\nexport const REPLACEMENT = 0xfffd;\nexport const WTF8 = 'wtf-8';\n","import { BOM, EMPTY, MIN_HIGH_SURROGATE, MIN_LOW_SURROGATE, REPLACEMENT, WTF8, } from './const.js';\nimport { DecodeError, InvalidEncodingError } from './errors.js';\nfunction isArrayBufferView(input) {\n return (input &&\n (typeof input === 'object') &&\n !(input instanceof ArrayBuffer) &&\n !(input instanceof SharedArrayBuffer) &&\n input.buffer instanceof ArrayBuffer);\n}\nfunction getUint8(input) {\n if (!input) {\n return EMPTY;\n }\n if (input instanceof Uint8Array) {\n return input;\n }\n if (isArrayBufferView(input)) {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n return new Uint8Array(input);\n}\nconst REMAINDER = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n -1,\n -1,\n -1,\n -1,\n 1,\n 1,\n 2,\n 3,\n];\nexport class Wtf8Decoder {\n static DEFAULT_BUFFERSIZE = 0x1000;\n encoding = WTF8;\n fatal;\n ignoreBOM;\n bufferSize;\n #left = 0;\n #cur = 0;\n #pending = 0;\n #first = true;\n #buf;\n constructor(label = 'wtf8', options = undefined) {\n if (label.toLowerCase().replace('-', '') !== 'wtf8') {\n throw new InvalidEncodingError(label);\n }\n this.fatal = Boolean(options?.fatal);\n this.ignoreBOM = Boolean(options?.ignoreBOM);\n this.bufferSize = Math.floor(options?.bufferSize ?? Wtf8Decoder.DEFAULT_BUFFERSIZE);\n if (isNaN(this.bufferSize) || (this.bufferSize < 1)) {\n throw new RangeError(`Invalid buffer size: ${options?.bufferSize}`);\n }\n this.#buf = new Uint16Array(this.bufferSize);\n }\n decode(input, options) {\n const streaming = Boolean(options?.stream);\n const bytes = getUint8(input);\n const res = [];\n const out = this.#buf;\n const maxSize = this.bufferSize - 3;\n let pos = 0;\n const fatal = () => {\n this.#cur = 0;\n this.#left = 0;\n this.#pending = 0;\n if (this.fatal) {\n throw new DecodeError();\n }\n out[pos++] = REPLACEMENT;\n };\n const fatals = () => {\n const p = this.#pending;\n for (let i = 0; i < p; i++) {\n fatal();\n }\n };\n const oneByte = (b) => {\n if (this.#left === 0) {\n const n = REMAINDER[b >> 4];\n switch (n) {\n case -1:\n fatal();\n break;\n case 0:\n out[pos++] = b;\n break;\n case 1:\n this.#cur = b & 0x1f;\n if ((this.#cur & 0x1e) === 0) {\n fatal();\n }\n else {\n this.#left = 1;\n this.#pending = 1;\n }\n break;\n case 2:\n this.#cur = b & 0x0f;\n this.#left = 2;\n this.#pending = 1;\n break;\n case 3:\n if (b & 0x08) {\n fatal();\n }\n else {\n this.#cur = b & 0x07;\n this.#left = 3;\n this.#pending = 1;\n }\n break;\n }\n }\n else {\n if ((b & 0xc0) !== 0x80) {\n fatals();\n return oneByte(b);\n }\n if ((this.#pending === 1) &&\n (this.#left === 2) &&\n (this.#cur === 0) &&\n ((b & 0x20) === 0)) {\n fatals();\n return oneByte(b);\n }\n if ((this.#left === 3) && (this.#cur === 0) && ((b & 0x30) === 0)) {\n fatals();\n return oneByte(b);\n }\n this.#cur = (this.#cur << 6) | (b & 0x3f);\n this.#pending++;\n if (--this.#left === 0) {\n if (this.ignoreBOM || !this.#first || (this.#cur !== BOM)) {\n if (this.#cur < 0x10000) {\n out[pos++] = this.#cur;\n }\n else {\n const cp = this.#cur - 0x10000;\n out[pos++] = ((cp >>> 10) & 0x3ff) | MIN_HIGH_SURROGATE;\n out[pos++] = (cp & 0x3ff) | MIN_LOW_SURROGATE;\n }\n }\n this.#cur = 0;\n this.#pending = 0;\n this.#first = false;\n }\n }\n };\n for (const b of bytes) {\n if (pos >= maxSize) {\n res.push(String.fromCharCode.apply(null, out.subarray(0, pos)));\n pos = 0;\n }\n oneByte(b);\n }\n if (!streaming) {\n this.#first = true;\n if (this.#cur || this.#left) {\n fatals();\n }\n }\n if (pos > 0) {\n res.push(String.fromCharCode.apply(null, out.subarray(0, pos)));\n }\n return res.join('');\n }\n}\n","import { EMPTY, WTF8 } from './const.js';\nfunction utf8length(str) {\n let len = 0;\n for (const s of str) {\n const cp = s.codePointAt(0);\n if (cp < 0x80) {\n len++;\n }\n else if (cp < 0x800) {\n len += 2;\n }\n else if (cp < 0x10000) {\n len += 3;\n }\n else {\n len += 4;\n }\n }\n return len;\n}\nexport class Wtf8Encoder {\n encoding = WTF8;\n encode(input) {\n if (!input) {\n return EMPTY;\n }\n const buf = new Uint8Array(utf8length(String(input)));\n this.encodeInto(input, buf);\n return buf;\n }\n encodeInto(source, destination) {\n const str = String(source);\n const len = str.length;\n const outLen = destination.length;\n let written = 0;\n let read = 0;\n for (read = 0; read < len; read++) {\n const c = str.codePointAt(read);\n if (c < 0x80) {\n if (written >= outLen) {\n break;\n }\n destination[written++] = c;\n }\n else if (c < 0x800) {\n if (written >= outLen - 1) {\n break;\n }\n destination[written++] = 0xc0 | (c >> 6);\n destination[written++] = 0x80 | (c & 0x3f);\n }\n else if (c < 0x10000) {\n if (written >= outLen - 2) {\n break;\n }\n destination[written++] = 0xe0 | (c >> 12);\n destination[written++] = 0x80 | ((c >> 6) & 0x3f);\n destination[written++] = 0x80 | (c & 0x3f);\n }\n else {\n if (written >= outLen - 3) {\n break;\n }\n destination[written++] = 0xf0 | (c >> 18);\n destination[written++] = 0x80 | ((c >> 12) & 0x3f);\n destination[written++] = 0x80 | ((c >> 6) & 0x3f);\n destination[written++] = 0x80 | (c & 0x3f);\n read++;\n }\n }\n return {\n read,\n written,\n };\n }\n}\n","import{TypeEncoderMap as _}from\"./typeEncoderMap.js\";import{DCBOR_INT as x,MT as f,NUMBYTES as d,SIMPLE as T,SYMS as E,TAG as p}from\"./constants.js\";import{sortCoreDeterministic as G}from\"./sorts.js\";import{Writer as I}from\"./writer.js\";import{box as C,getEncodedLength as D}from\"./box.js\";import{flushToZero as W,halfToUint as S}from\"./float.js\";import{Wtf8Encoder as M}from\"@cto.af/wtf8\";import{hexToU8 as P}from\"./utils.js\";const{ENCODED:ce}=E,U=f.SIMPLE_FLOAT<<5|d.TWO,h=f.SIMPLE_FLOAT<<5|d.FOUR,B=f.SIMPLE_FLOAT<<5|d.EIGHT,j=f.SIMPLE_FLOAT<<5|T.TRUE,q=f.SIMPLE_FLOAT<<5|T.FALSE,$=f.SIMPLE_FLOAT<<5|T.UNDEFINED,z=f.SIMPLE_FLOAT<<5|T.NULL,H=new TextEncoder,K=new M,k={...I.defaultOptions,avoidInts:!1,cde:!1,collapseBigInts:!0,dateTag:p.DATE_EPOCH,dcbor:!1,float64:!1,flushToZero:!1,forceEndian:null,ignoreOriginalEncoding:!1,largeNegativeAsBigInt:!1,reduceUnsafeNumbers:!1,rejectBigInts:!1,rejectCustomSimples:!1,rejectDuplicateKeys:!1,rejectFloats:!1,rejectUndefined:!1,simplifyNegativeZero:!1,sortKeys:null,stringNormalization:null,types:null,wtf8:!1,ignoreGlobalTags:!1},F={cde:!0,ignoreOriginalEncoding:!0,sortKeys:G},Y={...F,dcbor:!0,largeNegativeAsBigInt:!0,reduceUnsafeNumbers:!0,rejectCustomSimples:!0,rejectDuplicateKeys:!0,rejectUndefined:!0,simplifyNegativeZero:!0,stringNormalization:\"NFC\"};function y(e){const n=e<0;return typeof e==\"bigint\"?[n?-e-1n:e,n]:[n?-e-1:e,n]}function N(e,n,i){if(i.rejectFloats)throw new Error(`Attempt to encode an unwanted floating point number: ${e}`);if(isNaN(e))n.writeUint8(U),n.writeUint16(32256);else if(!i.float64&&Math.fround(e)===e){const r=S(e);r===null?(n.writeUint8(h),n.writeFloat32(e)):(n.writeUint8(U),n.writeUint16(r))}else n.writeUint8(B),n.writeFloat64(e)}function a(e,n,i){const[r,t]=y(e);if(t&&i)throw new TypeError(`Negative size: ${e}`);i??=t?f.NEG_INT:f.POS_INT,i<<=5,r<24?n.writeUint8(i|r):r<=255?(n.writeUint8(i|d.ONE),n.writeUint8(r)):r<=65535?(n.writeUint8(i|d.TWO),n.writeUint16(r)):r<=4294967295?(n.writeUint8(i|d.FOUR),n.writeUint32(r)):(n.writeUint8(i|d.EIGHT),n.writeBigUint64(BigInt(r)))}function m(e,n,i){typeof e==\"number\"?a(e,n,f.TAG):typeof e==\"object\"&&!i.ignoreOriginalEncoding&&E.ENCODED in e?n.write(e[E.ENCODED]):e<=Number.MAX_SAFE_INTEGER?a(Number(e),n,f.TAG):(n.writeUint8(f.TAG<<5|d.EIGHT),n.writeBigUint64(BigInt(e)))}function O(e,n,i){const[r,t]=y(e);if(i.collapseBigInts&&(!i.largeNegativeAsBigInt||e>=-0x8000000000000000n)){if(r<=0xffffffffn){a(Number(e),n);return}if(r<=0xffffffffffffffffn){const l=(t?f.NEG_INT:f.POS_INT)<<5;n.writeUint8(l|d.EIGHT),n.writeBigUint64(r);return}}if(i.rejectBigInts)throw new Error(`Attempt to encode unwanted bigint: ${e}`);const o=t?p.NEG_BIGINT:p.POS_BIGINT,c=r.toString(16),s=c.length%2?\"0\":\"\";m(o,n,i);const u=P(s+c);a(u.length,n,f.BYTE_STRING),n.write(u)}function Z(e,n,i){i.flushToZero&&(e=W(e)),Object.is(e,-0)?i.simplifyNegativeZero?i.avoidInts?N(0,n,i):a(0,n):N(e,n,i):!i.avoidInts&&Number.isSafeInteger(e)?a(e,n):i.reduceUnsafeNumbers&&Math.floor(e)===e&&e>=x.MIN&&e<=x.MAX?O(BigInt(e),n,i):N(e,n,i)}function R(e,n,i){const r=i.stringNormalization?e.normalize(i.stringNormalization):e;if(i.wtf8&&!e.isWellFormed()){const t=K.encode(r);m(p.WTF8,n,i),a(t.length,n,f.BYTE_STRING),n.write(t)}else{const t=H.encode(r);a(t.length,n,f.UTF8_STRING),n.write(t)}}function J(e,n,i){const r=e;L(r,r.length,f.ARRAY,n,i);for(const t of r)g(t,n,i)}function V(e,n){a(e.length,n,f.BYTE_STRING),n.write(e)}const b=new _;b.registerEncoder(Array,J),b.registerEncoder(Uint8Array,V);function ue(e,n){return b.registerEncoder(e,n)}function de(e){const n=b.get(e);return b.delete(e),n}function L(e,n,i,r,t){const o=D(e);o&&!t.ignoreOriginalEncoding?r.write(o):a(n,r,i)}function X(e,n,i){if(e===null){n.writeUint8(z);return}if(!i.ignoreOriginalEncoding&&E.ENCODED in e){n.write(e[E.ENCODED]);return}const r=e.constructor;if(r){const o=i.types?.get(r)??(i.ignoreGlobalTags?void 0:b.get(r));if(o){const c=o(e,n,i);if(c!==void 0){if(!Array.isArray(c)||c.length!==2)throw new Error(\"Invalid encoder return value\");(typeof c[0]==\"bigint\"||isFinite(Number(c[0])))&&m(c[0],n,i),g(c[1],n,i)}return}}if(typeof e.toCBOR==\"function\"){const o=e.toCBOR(n,i);o&&((typeof o[0]==\"bigint\"||isFinite(Number(o[0])))&&m(o[0],n,i),g(o[1],n,i));return}if(typeof e.toJSON==\"function\"){g(e.toJSON(),n,i);return}const t=Object.entries(e).map(o=>[o[0],o[1],v(o[0],i)]);i.sortKeys&&t.sort(i.sortKeys),L(e,t.length,f.MAP,n,i);for(const[o,c,s]of t)n.write(s),g(c,n,i)}function Q(e,n,i){if(!e.description||e!==Symbol.for(e.description))throw new TypeError(`Private or empty symbol: ${e.toString()}`);m(280,n,i),R(e.description,n,i)}function g(e,n,i){switch(typeof e){case\"number\":Z(e,n,i);break;case\"bigint\":O(e,n,i);break;case\"string\":R(e,n,i);break;case\"boolean\":n.writeUint8(e?j:q);break;case\"undefined\":if(i.rejectUndefined)throw new Error(\"Attempt to encode unwanted undefined.\");n.writeUint8($);break;case\"object\":X(e,n,i);break;case\"symbol\":Q(e,n,i);break;default:throw new TypeError(`Unknown type: ${typeof e}, ${String(e)}`)}}function v(e,n={}){const i={...k};n.dcbor?Object.assign(i,Y):n.cde&&Object.assign(i,F),Object.assign(i,n);const r=new I(i);return g(e,r,i),r.read()}function ae(e,n,i=f.POS_INT){n||(n=\"f\");const r={...k,collapseBigInts:!1,chunkSize:10,simplifyNegativeZero:!1},t=new I(r),o=Number(e);function c(s){if(Object.is(e,-0))throw new Error(\"Invalid integer: -0\");const[u,l]=y(e);if(l&&i!==f.POS_INT)throw new Error(\"Invalid major type combination\");const w=typeof s==\"number\"&&isFinite(s);if(w&&!Number.isSafeInteger(o))throw new TypeError(`Unsafe number for ${n}: ${e}`);if(u>s)throw new TypeError(`Undersized encoding ${n} for: ${e}`);const A=(l?f.NEG_INT:i)<<5;return w?[A,Number(u)]:[A,u]}switch(n){case\"bigint\":if(Object.is(e,-0))throw new TypeError(\"Invalid bigint: -0\");e=BigInt(e),O(e,t,r);break;case\"f\":N(o,t,r);break;case\"f16\":{const s=S(o);if(s===null)throw new TypeError(`Invalid f16: ${e}`);t.writeUint8(U),t.writeUint16(s);break}case\"f32\":if(!isNaN(o)&&Math.fround(o)!==o)throw new TypeError(`Invalid f32: ${e}`);t.writeUint8(h),t.writeFloat32(o);break;case\"f64\":t.writeUint8(B),t.writeFloat64(o);break;case\"i\":if(Object.is(e,-0))throw new Error(\"Invalid integer: -0\");if(Number.isSafeInteger(o))a(o,t,e<0?void 0:i);else{const[s,u]=c(1/0);u>0xffffffffffffffffn?(e=BigInt(e),O(e,t,r)):(t.writeUint8(s|d.EIGHT),t.writeBigUint64(BigInt(u)))}break;case\"i0\":{const[s,u]=c(23);t.writeUint8(s|u);break}case\"i8\":{const[s,u]=c(255);t.writeUint8(s|d.ONE),t.writeUint8(u);break}case\"i16\":{const[s,u]=c(65535);t.writeUint8(s|d.TWO),t.writeUint16(u);break}case\"i32\":{const[s,u]=c(4294967295);t.writeUint8(s|d.FOUR),t.writeUint32(u);break}case\"i64\":{const[s,u]=c(0xffffffffffffffffn);t.writeUint8(s|d.EIGHT),t.writeBigUint64(BigInt(u));break}default:throw new TypeError(`Invalid number encoding: \"${n}\"`)}return C(e,t.read())}export{ce as ENCODED,F as cdeEncodeOptions,de as clearEncoder,Y as dcborEncodeOptions,k as defaultEncodeOptions,v as encode,ae as encodedNumber,ue as registerEncoder,J as writeArray,O as writeBigInt,N as writeFloat,a as writeInt,L as writeLength,Z as writeNumber,R as writeString,Q as writeSymbol,m as writeTag,V as writeUint8Array,g as writeUnknown};\n","var o=(e=>(e[e.NEVER=-1]=\"NEVER\",e[e.PREFERRED=0]=\"PREFERRED\",e[e.ALWAYS=1]=\"ALWAYS\",e))(o||{});export{o as DiagnosticSizes};\n","import{MT as u,SIMPLE as n}from\"./constants.js\";import{writeInt as o}from\"./encoder.js\";class t{static KnownSimple=new Map([[n.FALSE,!1],[n.TRUE,!0],[n.NULL,null],[n.UNDEFINED,void 0]]);value;constructor(e){this.value=e}static create(e){return t.KnownSimple.has(e)?t.KnownSimple.get(e):new t(e)}toCBOR(e,i){if(i.rejectCustomSimples)throw new Error(`Cannot encode non-standard Simple value: ${this.value}`);o(this.value,e,u.SIMPLE_FLOAT)}toString(){return`simple(${this.value})`}decode(){return t.KnownSimple.has(this.value)?t.KnownSimple.get(this.value):this}[Symbol.for(\"nodejs.util.inspect.custom\")](e,i,r){return`simple(${r(this.value,i)})`}}export{t as Simple};\n","import{MT as s,NUMBYTES as l,SYMS as d}from\"./constants.js\";import{base64ToBytes as m,hexToU8 as b,subarrayRanges as u}from\"./utils.js\";import{Simple as g}from\"./simple.js\";import{parseHalf as E}from\"./float.js\";const p=new TextDecoder(\"utf8\",{fatal:!0,ignoreBOM:!0});class y{static defaultOptions={maxDepth:1024,encoding:\"hex\",requirePreferred:!1};#t;#r;#e=0;#i;constructor(t,r){if(this.#i={...y.defaultOptions,...r},typeof t==\"string\")switch(this.#i.encoding){case\"hex\":this.#t=b(t);break;case\"base64\":this.#t=m(t);break;default:throw new TypeError(`Encoding not implemented: \"${this.#i.encoding}\"`)}else this.#t=t;this.#r=new DataView(this.#t.buffer,this.#t.byteOffset,this.#t.byteLength)}toHere(t){return u(this.#t,t,this.#e)}*[Symbol.iterator](){if(yield*this.#n(0),this.#e!==this.#t.length)throw new Error(\"Extra data in input\")}*seq(){for(;this.#e<this.#t.length;)yield*this.#n(0)}*#n(t){if(t++>this.#i.maxDepth)throw new Error(`Maximum depth ${this.#i.maxDepth} exceeded`);const r=this.#e,c=this.#r.getUint8(this.#e++),i=c>>5,n=c&31;let e=n,f=!1,a=0;switch(n){case l.ONE:if(a=1,e=this.#r.getUint8(this.#e),i===s.SIMPLE_FLOAT){if(e<32)throw new Error(`Invalid simple encoding in extra byte: ${e}`);f=!0}else if(this.#i.requirePreferred&&e<24)throw new Error(`Unexpectedly long integer encoding (1) for ${e}`);break;case l.TWO:if(a=2,i===s.SIMPLE_FLOAT)e=E(this.#t,this.#e);else if(e=this.#r.getUint16(this.#e,!1),this.#i.requirePreferred&&e<=255)throw new Error(`Unexpectedly long integer encoding (2) for ${e}`);break;case l.FOUR:if(a=4,i===s.SIMPLE_FLOAT)e=this.#r.getFloat32(this.#e,!1);else if(e=this.#r.getUint32(this.#e,!1),this.#i.requirePreferred&&e<=65535)throw new Error(`Unexpectedly long integer encoding (4) for ${e}`);break;case l.EIGHT:{if(a=8,i===s.SIMPLE_FLOAT)e=this.#r.getFloat64(this.#e,!1);else if(e=this.#r.getBigUint64(this.#e,!1),e<=Number.MAX_SAFE_INTEGER&&(e=Number(e)),this.#i.requirePreferred&&e<=4294967295)throw new Error(`Unexpectedly long integer encoding (8) for ${e}`);break}case 28:case 29:case 30:throw new Error(`Additional info not implemented: ${n}`);case l.INDEFINITE:switch(i){case s.POS_INT:case s.NEG_INT:case s.TAG:throw new Error(`Invalid indefinite encoding for MT ${i}`);case s.SIMPLE_FLOAT:yield[i,n,d.BREAK,r,0];return}e=1/0;break;default:f=!0}switch(this.#e+=a,i){case s.POS_INT:yield[i,n,e,r,a];break;case s.NEG_INT:yield[i,n,typeof e==\"bigint\"?-1n-e:-1-Number(e),r,a];break;case s.BYTE_STRING:e===1/0?yield*this.#s(i,t,r):yield[i,n,this.#a(e),r,e];break;case s.UTF8_STRING:e===1/0?yield*this.#s(i,t,r):yield[i,n,p.decode(this.#a(e)),r,e];break;case s.ARRAY:if(e===1/0)yield*this.#s(i,t,r,!1);else{const o=Number(e);yield[i,n,o,r,a];for(let h=0;h<o;h++)yield*this.#n(t+1)}break;case s.MAP:if(e===1/0)yield*this.#s(i,t,r,!1);else{const o=Number(e);yield[i,n,o,r,a];for(let h=0;h<o;h++)yield*this.#n(t),yield*this.#n(t)}break;case s.TAG:yield[i,n,e,r,a],yield*this.#n(t);break;case s.SIMPLE_FLOAT:{const o=e;f&&(e=g.create(Number(e))),yield[i,n,e,r,o];break}}}#a(t){const r=u(this.#t,this.#e,this.#e+=t);if(r.length!==t)throw new Error(`Unexpected end of stream reading ${t} bytes, got ${r.length}`);return r}*#s(t,r,c,i=!0){for(yield[t,l.INDEFINITE,1/0,c,1/0];;){const n=this.#n(r),e=n.next(),[f,a,o]=e.value;if(o===d.BREAK){yield e.value,n.next();return}if(i){if(f!==t)throw new Error(`Unmatched major type. Expected ${t}, got ${f}.`);if(a===l.INDEFINITE)throw new Error(\"New stream started in typed stream\")}yield e.value,yield*n}}}export{y as DecodeStream};\n","import{DCBOR_INT as g,MT as a,NUMBYTES as l}from\"./constants.js\";import{DiagnosticSizes as N}from\"./options.js\";import{sortCoreDeterministic as j}from\"./sorts.js\";import{NAN as E,checkSubnormal as I}from\"./float.js\";import{box as d,getEncoded as b,saveEncoded as T}from\"./box.js\";import{defaultEncodeOptions as S,encode as O}from\"./encoder.js\";import{stringToHex as p,u8concat as D,u8toHex as m}from\"./utils.js\";import{DecodeStream as v}from\"./decodeStream.js\";import{Simple as k}from\"./simple.js\";import{Tag as w}from\"./tag.js\";const A=new Map([[l.ZERO,1],[l.ONE,2],[l.TWO,3],[l.FOUR,5],[l.EIGHT,9]]),R=new Uint8Array(0);function F(h,r){return!r.boxed&&!r.preferMap&&h.every(([i])=>typeof i==\"string\")?Object.fromEntries(h):new Map(h)}class y{static defaultDecodeOptions={...v.defaultOptions,ParentType:y,boxed:!1,cde:!1,dcbor:!1,diagnosticSizes:N.PREFERRED,collapseBigInts:!1,convertUnsafeIntsToFloat:!1,createObject:F,keepNanPayloads:!1,pretty:!1,preferBigInt:!1,preferMap:!1,rejectLargeNegatives:!1,rejectBigInts:!1,rejectDuplicateKeys:!1,rejectFloats:!1,rejectInts:!1,rejectLongLoundNaN:!1,rejectLongFloats:!1,rejectNegativeZero:!1,rejectSimple:!1,rejectStreaming:!1,rejectStringsNotNormalizedAs:null,rejectSubnormals:!1,rejectUndefined:!1,rejectUnsafeFloatInts:!1,saveOriginal:!1,sortKeys:null,tags:null,ignoreGlobalTags:!1};static cdeDecodeOptions={cde:!0,rejectStreaming:!0,requirePreferred:!0,sortKeys:j};static dcborDecodeOptions={...this.cdeDecodeOptions,dcbor:!0,convertUnsafeIntsToFloat:!0,rejectDuplicateKeys:!0,rejectLargeNegatives:!0,rejectLongLoundNaN:!0,rejectLongFloats:!0,rejectNegativeZero:!0,rejectSimple:!0,rejectUndefined:!0,rejectUnsafeFloatInts:!0,rejectStringsNotNormalizedAs:\"NFC\"};parent;mt;ai;left;offset;count=0;children=[];depth=0;#e;#t=null;constructor(r,i,e,t){if([this.mt,this.ai,,this.offset]=r,this.left=i,this.parent=e,this.#e=t,e&&(this.depth=e.depth+1),this.mt===a.MAP&&(this.#e.sortKeys||this.#e.rejectDuplicateKeys)&&(this.#t=[]),this.#e.rejectStreaming&&this.ai===l.INDEFINITE)throw new Error(\"Streaming not supported\")}get isStreaming(){return this.left===1/0}get done(){return this.left===0}static create(r,i,e,t){const[s,u,n,c]=r;switch(s){case a.POS_INT:case a.NEG_INT:{if(e.rejectInts)throw new Error(`Unexpected integer: ${n}`);if(e.rejectLargeNegatives&&n<-0x8000000000000000n)throw new Error(`Invalid 65bit negative number: ${n}`);let o=n;return e.preferBigInt?o=BigInt(o):e.convertUnsafeIntsToFloat&&o>=g.MIN&&o<=g.MAX&&(o=Number(n)),e.boxed?d(o,t.toHere(c)):o}case a.SIMPLE_FLOAT:if(u>l.ONE){if(typeof n==\"symbol\")return n;if(e.rejectFloats)throw new Error(`Decoding unwanted floating point number: ${n}`);if(e.rejectNegativeZero&&Object.is(n,-0))throw new Error(\"Decoding negative zero\");if(isNaN(n)){const o=t.toHere(c),f=new E(o);if(e.rejectLongLoundNaN){if(f.payload||o.length>3)throw new Error(`Invalid NaN encoding: \"${m(o)}\"`)}else if(e.keepNanPayloads&&(f.payload||f.sign===-1)){if(e.rejectLongFloats&&!f.isShortestEncoding)throw new Error(`NaN should have been encoded shorter: ${n}`);return f}}if(e.rejectSubnormals&&I(t.toHere(c+1)),e.rejectLongFloats){const o=O(n,{chunkSize:9,reduceUnsafeNumbers:e.rejectUnsafeFloatInts});if(o[0]>>5!==s)throw new Error(`Should have been encoded as int, not float: ${n}`);if(o.length<A.get(u))throw new Error(`Number should have been encoded shorter: ${n}`)}if(typeof n==\"number\"&&e.boxed)return d(n,t.toHere(c))}else{if(e.rejectSimple&&n instanceof k)throw new Error(`Invalid simple value: ${n}`);if(e.rejectUndefined&&n===void 0)throw new Error(\"Unexpected undefined\")}return n;case a.BYTE_STRING:case a.UTF8_STRING:if(n===1/0)return new e.ParentType(r,1/0,i,e);if(e.rejectStringsNotNormalizedAs&&typeof n==\"string\"){const o=n.normalize(e.rejectStringsNotNormalizedAs);if(n!==o)throw new Error(`String not normalized as \"${e.rejectStringsNotNormalizedAs}\", got [${p(n)}] instead of [${p(o)}]`)}return e.boxed?d(n,t.toHere(c)):n;case a.ARRAY:return new e.ParentType(r,n,i,e);case a.MAP:return new e.ParentType(r,n*2,i,e);case a.TAG:{const o=new e.ParentType(r,1,i,e);return o.children=new w(n),o}}throw new TypeError(`Invalid major type: ${s}`)}static decodeToEncodeOpts(r){return{...S,avoidInts:r.rejectInts,float64:!r.rejectLongFloats,flushToZero:r.rejectSubnormals,largeNegativeAsBigInt:r.rejectLargeNegatives,sortKeys:r.sortKeys}}push(r,i,e){if(this.children.push(r),this.#t){const t=b(r)||i.toHere(e);this.#t.push(t)}return--this.left}replaceLast(r,i,e){let t,s=-1/0;if(this.children instanceof w?(s=0,t=this.children.contents,this.children.contents=r):(s=this.children.length-1,t=this.children[s],this.children[s]=r),this.#t){const u=b(r)||e.toHere(i.offset);this.#t[s]=u}return t}convert(r){let i;switch(this.mt){case a.ARRAY:i=this.children;break;case a.MAP:{const e=this.#r();if(this.#e.sortKeys){let t;for(const s of e){if(t&&this.#e.sortKeys(t,s)>=0)throw new Error(`Duplicate or out of order key: \"0x${s[2]}\"`);t=s}}else if(this.#e.rejectDuplicateKeys){const t=new Set;for(const[s,u,n]of e){const c=m(n);if(t.has(c))throw new Error(`Duplicate key: \"0x${c}\"`);t.add(c)}}i=this.#e.createObject(e,this.#e);break}case a.BYTE_STRING:return D(this.children);case a.UTF8_STRING:{const e=this.children.join(\"\");i=this.#e.boxed?d(e,r.toHere(this.offset)):e;break}case a.TAG:i=this.children.decode(this.#e);break;default:throw new TypeError(`Invalid mt on convert: ${this.mt}`)}return this.#e.saveOriginal&&i&&typeof i==\"object\"&&T(i,r.toHere(this.offset)),i}#r(){const r=this.children,i=r.length;if(i%2)throw new Error(\"Missing map value\");const e=new Array(i/2);if(this.#t)for(let t=0;t<i;t+=2)e[t>>1]=[r[t],r[t+1],this.#t[t]];else for(let t=0;t<i;t+=2)e[t>>1]=[r[t],r[t+1],R];return e}}export{y as CBORcontainer};\n","import{DiagnosticSizes as b}from\"./options.js\";import{MT as s,NUMBYTES as f,SYMS as d}from\"./constants.js\";import{CBORcontainer as S}from\"./container.js\";import{DecodeStream as E}from\"./decodeStream.js\";import{Simple as N}from\"./simple.js\";import{halfToUint as I}from\"./float.js\";import{u8toHex as _}from\"./utils.js\";const O=\" \",y=new TextEncoder;class g extends S{close=\"\";quote='\"';get isEmptyStream(){return(this.mt===s.UTF8_STRING||this.mt===s.BYTE_STRING)&&this.count===0}}function a(m,l,n,p){let t=\"\";if(l===f.INDEFINITE)t+=\"_\";else{if(p.diagnosticSizes===b.NEVER)return\"\";{let r=p.diagnosticSizes===b.ALWAYS;if(!r){let e=f.ZERO;if(Object.is(n,-0))e=f.TWO;else if(m===s.POS_INT||m===s.NEG_INT){const T=n<0,u=typeof n==\"bigint\"?1n:1,o=T?-n-u:n;o<=23?e=Number(o):o<=255?e=f.ONE:o<=65535?e=f.TWO:o<=4294967295?e=f.FOUR:e=f.EIGHT}else isFinite(n)?Math.fround(n)===n?I(n)==null?e=f.FOUR:e=f.TWO:e=f.EIGHT:e=f.TWO;r=e!==l}r&&(t+=\"_\",l<f.ONE?t+=\"i\":t+=String(l-24))}}return t}function M(m,l){const n={...S.defaultDecodeOptions,...l,ParentType:g},p=new E(m,n);let t,r,e=\"\";for(const T of p){const[u,o,i]=T;switch(t&&(t.count>0&&i!==d.BREAK&&(t.mt===s.MAP&&t.count%2?e+=\": \":(e+=\",\",n.pretty||(e+=\" \"))),n.pretty&&(t.mt!==s.MAP||t.count%2===0)&&(e+=`\n${O.repeat(t.depth+1)}`)),r=S.create(T,t,n,p),u){case s.POS_INT:case s.NEG_INT:e+=String(i),e+=a(u,o,i,n);break;case s.SIMPLE_FLOAT:if(i!==d.BREAK)if(typeof i==\"number\"){const c=Object.is(i,-0)?\"-0.0\":String(i);e+=c,isFinite(i)&&!/[.e]/.test(c)&&(e+=\".0\"),e+=a(u,o,i,n)}else i instanceof N?(e+=\"simple(\",e+=String(i.value),e+=a(s.POS_INT,o,i.value,n),e+=\")\"):e+=String(i);break;case s.BYTE_STRING:i===1/0?(e+=\"(_ \",r.close=\")\",r.quote=\"'\"):(e+=\"h'\",e+=_(i),e+=\"'\",e+=a(s.POS_INT,o,i.length,n));break;case s.UTF8_STRING:i===1/0?(e+=\"(_ \",r.close=\")\"):(e+=JSON.stringify(i),e+=a(s.POS_INT,o,y.encode(i).length,n));break;case s.ARRAY:{e+=\"[\";const c=a(s.POS_INT,o,i,n);e+=c,c&&(e+=\" \"),n.pretty&&i?r.close=`\n${O.repeat(r.depth)}]`:r.close=\"]\";break}case s.MAP:{e+=\"{\";const c=a(s.POS_INT,o,i,n);e+=c,c&&(e+=\" \"),n.pretty&&i?r.close=`\n${O.repeat(r.depth)}}`:r.close=\"}\";break}case s.TAG:e+=String(i),e+=a(s.POS_INT,o,i,n),e+=\"(\",r.close=\")\";break}if(r===d.BREAK)if(t?.isStreaming)t.left=0;else throw new Error(\"Unexpected BREAK\");else t&&(t.count++,t.left--);for(r instanceof g&&(t=r);t?.done;){if(t.isEmptyStream)e=e.slice(0,-3),e+=`${t.quote}${t.quote}_`;else{if(t.mt===s.MAP&&t.count%2!==0)throw new Error(`Odd streaming map size: ${t.count}`);e+=t.close}t=t.parent}}return e}export{M as diagnose};\n","import{MT as u,NUMBYTES as b,SYMS as E}from\"./constants.js\";import{getEncoded as B,saveEncoded as R}from\"./box.js\";import{getRanges as S,subarrayRanges as I,u8toHex as C}from\"./utils.js\";import{CBORcontainer as T}from\"./container.js\";import{DecodeStream as M}from\"./decodeStream.js\";import{Simple as N}from\"./simple.js\";import{Tag as P}from\"./tag.js\";import{diagnose as U}from\"./diagnostic.js\";const H=new TextDecoder;class A extends T{depth=0;leaf=!1;value;length;[E.ENCODED];constructor(a,f,e,n){super(a,f,e,n),this.parent?this.depth=this.parent.depth+1:this.depth=n.initialDepth,[,,this.value,,this.length]=a}numBytes(){switch(this.ai){case b.ONE:return 1;case b.TWO:return 2;case b.FOUR:return 4;case b.EIGHT:return 8}return 0}}function k(t){return t instanceof A}function O(t,a){return t===1/0?\"Indefinite\":a?`${t} ${a}${t!==1&&t!==1n?\"s\":\"\"}`:String(t)}function y(t){return\"\".padStart(t,\" \")}function x(t,a,f){let e=\"\";e+=y(t.depth*2);const n=B(t);e+=C(n.subarray(0,1));const r=t.numBytes();r&&(e+=\" \",e+=C(n.subarray(1,r+1))),e=e.padEnd(a.minCol+1,\" \"),e+=\"-- \",f!==void 0&&(e+=y(t.depth*2),f!==\"\"&&(e+=`[${f}] `));let p=!1;const[s]=t.children;switch(t.mt){case u.POS_INT:e+=`Unsigned: ${s}`,typeof s==\"bigint\"&&(e+=\"n\");break;case u.NEG_INT:e+=`Negative: ${s}`,typeof s==\"bigint\"&&(e+=\"n\");break;case u.BYTE_STRING:e+=`Bytes (Length: ${O(t.length)})`;break;case u.UTF8_STRING:e+=`UTF8 (Length: ${O(t.length)})`,t.length!==1/0&&(e+=`: ${JSON.stringify(s)}`);break;case u.ARRAY:e+=`Array (Length: ${O(t.value,\"item\")})`;break;case u.MAP:e+=`Map (Length: ${O(t.value,\"pair\")})`;break;case u.TAG:{e+=`Tag #${t.value}`;const o=t.children,[m]=o.contents.children,i=new P(o.tag,m);R(i,n);const l=i.comment(a,t.depth);l&&(e+=\": \",e+=l),p||=i.noChildren;break}case u.SIMPLE_FLOAT:s===E.BREAK?e+=\"BREAK\":t.ai>b.ONE?Object.is(s,-0)?e+=\"Float: -0\":e+=`Float: ${s}`:(e+=\"Simple: \",s instanceof N?e+=s.value:e+=s);break}if(!p)if(t.leaf){if(e+=`\n`,n.length>r+1){const o=y((t.depth+1)*2),m=S(n);if(m?.length){m.sort((l,c)=>{const g=l[0]-c[0];return g||c[1]-l[1]});let i=0;for(const[l,c,g]of m)if(!(l<i)){if(i=l+c,g===\"<<\"){e+=y(a.minCol+1),e+=\"--\",e+=o,e+=\"<< \";const d=I(n,l,l+c),h=S(d);if(h){const $=h.findIndex(([w,D,v])=>w===0&&D===c&&v===\"<<\");$>=0&&h.splice($,1)}e+=U(d),e+=` >>\n`,e+=L(d,{initialDepth:t.depth+1,minCol:a.minCol,noPrefixHex:!0});continue}else g===\"'\"&&(e+=y(a.minCol+1),e+=\"--\",e+=o,e+=\"'\",e+=H.decode(n.subarray(l,l+c)),e+=`'\n`);if(l>r)for(let d=l;d<l+c;d+=8){const h=Math.min(d+8,l+c);e+=o,e+=C(n.subarray(d,h)),e+=`\n`}}}else for(let i=r+1;i<n.length;i+=8)e+=o,e+=C(n.subarray(i,i+8)),e+=`\n`}}else{e+=`\n`;let o=0;for(const m of t.children){if(k(m)){let i=String(o);t.mt===u.MAP?i=o%2?`val ${(o-1)/2}`:`key ${o/2}`:t.mt===u.TAG&&(i=\"\"),e+=x(m,a,i)}o++}}return e}const q={...T.defaultDecodeOptions,initialDepth:0,noPrefixHex:!1,minCol:0};function L(t,a){const f={...q,...a,ParentType:A,saveOriginal:!0},e=new M(t,f);let n,r;for(const s of e){if(r=T.create(s,n,f,e),s[2]===E.BREAK)if(n?.isStreaming)n.left=1;else throw new Error(\"Unexpected BREAK\");if(!k(r)){const i=new A(s,0,n,f);i.leaf=!0,i.children.push(r),R(i,e.toHere(s[3])),r=i}let o=(r.depth+1)*2;const m=r.numBytes();for(m&&(o+=1,o+=m*2),f.minCol=Math.max(f.minCol,o),n&&n.push(r,e,s[3]),n=r;n?.done;)r=n,r.leaf||R(r,e.toHere(r.offset)),{parent:n}=n}a&&(a.minCol=f.minCol);let p=f.noPrefixHex?\"\":`0x${C(e.toHere(0))}\n`;return p+=x(r,f),p}export{L as comment};\n","import{MT as O,TAG as o}from\"./constants.js\";import{box as q,getEncoded as F}from\"./box.js\";import{base64ToBytes as v,base64UrlToBytes as V,isBigEndian as W,u8toHex as A}from\"./utils.js\";import{encode as b,registerEncoder as s,writeInt as k,writeLength as P,writeTag as M,writeUnknown as K}from\"./encoder.js\";import{CBORcontainer as G}from\"./container.js\";import{Tag as t}from\"./tag.js\";import{Wtf8Decoder as B}from\"@cto.af/wtf8\";import{comment as Y}from\"./comment.js\";const U=!W();function I(e){if(typeof e==\"object\"&&e){if(e.constructor!==Number)throw new Error(`Expected number: ${e}`)}else if(typeof e!=\"number\")throw new Error(`Expected number: ${e}`)}function f(e){if(typeof e==\"object\"&&e){if(e.constructor!==String)throw new Error(`Expected string: ${e}`)}else if(typeof e!=\"string\")throw new Error(`Expected string: ${e}`)}function E(e){if(!(e instanceof Uint8Array))throw new Error(`Expected Uint8Array: ${e}`)}function _(e){if(!Array.isArray(e))throw new Error(`Expected Array: ${e}`)}s(Map,(e,r,n)=>{const i=[...e.entries()].map(a=>[a[0],a[1],b(a[0],n)]);if(n.rejectDuplicateKeys){const a=new Set;for(const[d,u,g]of i){const y=A(g);if(a.has(y))throw new Error(`Duplicate map key: 0x${y}`);a.add(y)}}n.sortKeys&&i.sort(n.sortKeys),P(e,e.size,O.MAP,r,n);for(const[a,d,u]of i)r.write(u),K(d,r,n)});function w(e){return f(e.contents),new Date(e.contents)}w.comment=e=>{f(e.contents);const r=new Date(e.contents);return`(String ${e.tag===o.DATE_FULL?\"Full \":\"\"}Date) ${r.toISOString()}`},t.registerDecoder(o.DATE_STRING,w),t.registerDecoder(o.DATE_FULL,w);function N(e){return I(e.contents),new Date(e.contents*1e3)}N.comment=e=>(I(e.contents),`(Epoch Date) ${new Date(e.contents*1e3).toISOString()}`),t.registerDecoder(o.DATE_EPOCH,N);const S=1e3*60*60*24;function $(e){return I(e.contents),new Date(e.contents*S)}$.comment=e=>(I(e.contents),`(Epoch Date) ${new Date(e.contents*S).toISOString()}`),t.registerDecoder(o.DATE_EPOCH_DAYS,$),s(Date,(e,r,n)=>{switch(n.dateTag){case o.DATE_EPOCH:return[n.dateTag,e.valueOf()/1e3];case o.DATE_STRING:return[n.dateTag,e.toISOString().replace(/\\.000Z$/,\"Z\")];case o.DATE_EPOCH_DAYS:return[n.dateTag,Math.floor(e.valueOf()/S)];case o.DATE_FULL:return[n.dateTag,e.toISOString().split(\"T\")[0]];default:throw new Error(`Unsupported date tag: ${n.dateTag}`)}});function m(e,r,n){if(E(r.contents),n.rejectBigInts)throw new Error(`Decoding unwanted big integer: ${r}(h'${A(r.contents)}')`);if(n.requirePreferred&&r.contents[0]===0)throw new Error(`Decoding overly-large bigint: ${r.tag}(h'${A(r.contents)})`);let i=r.contents.reduce((d,u)=>d<<8n|BigInt(u),0n);e&&(i=-1n-i);const a=i>=Number.MIN_SAFE_INTEGER&&i<=Number.MAX_SAFE_INTEGER;if(n.requirePreferred&&a)throw new Error(`Decoding bigint that could have been int: ${i}n`);return n.collapseBigInts&&a&&(i=Number(i)),n.boxed?q(i,r.contents):i}const L=m.bind(null,!1),x=m.bind(null,!0);L.comment=(e,r)=>`(Positive BigInt) ${m(!1,e,r)}n`,x.comment=(e,r)=>`(Negative BigInt) ${m(!0,e,r)}n`,t.registerDecoder(o.POS_BIGINT,L),t.registerDecoder(o.NEG_BIGINT,x);function R(e,r){return E(e.contents),e}R.comment=(e,r,n)=>{E(e.contents);const i={...r,initialDepth:n+2,noPrefixHex:!0},a=F(e);let u=2**((a[0]&31)-24)+1;const g=a[u]&31;let y=A(a.subarray(u,++u));g>=24&&(y+=\" \",y+=A(a.subarray(u,u+2**(g-24)))),i.minCol=Math.max(i.minCol,(n+1)*2+y.length);const D=Y(e.contents,i);let T=`Embedded CBOR\n`;return T+=`${\"\".padStart((n+1)*2,\" \")}${y}`.padEnd(i.minCol+1,\" \"),T+=`-- Bytes (Length: ${e.contents.length})\n`,T+=D,T},R.noChildren=!0,t.registerDecoder(o.CBOR,R),t.registerDecoder(o.URI,e=>(f(e.contents),new URL(e.contents)),\"URI\"),s(URL,e=>[o.URI,e.toString()]),t.registerDecoder(o.BASE64URL,e=>(f(e.contents),V(e.contents)),\"Base64url-encoded\"),t.registerDecoder(o.BASE64,e=>(f(e.contents),v(e.contents)),\"Base64-encoded\"),t.registerDecoder(35,e=>(f(e.contents),new RegExp(e.contents)),\"RegExp\"),t.registerDecoder(21065,e=>{f(e.contents);const r=`^(?:${e.contents})$`;return new RegExp(r,\"u\")},\"I-RegExp\"),t.registerDecoder(o.REGEXP,e=>{if(_(e.contents),e.contents.length<1||e.contents.length>2)throw new Error(`Invalid RegExp Array: ${e.contents}`);return new RegExp(e.contents[0],e.contents[1])},\"RegExp\"),s(RegExp,e=>[o.REGEXP,[e.source,e.flags]]),t.registerDecoder(64,e=>(E(e.contents),e.contents),\"uint8 Typed Array\");function c(e,r,n){E(e.contents);let i=e.contents.length;if(i%r.BYTES_PER_ELEMENT!==0)throw new Error(`Number of bytes must be divisible by ${r.BYTES_PER_ELEMENT}, got: ${i}`);i/=r.BYTES_PER_ELEMENT;const a=new r(i),d=new DataView(e.contents.buffer,e.contents.byteOffset,e.contents.byteLength),u=d[`get${r.name.replace(/Array/,\"\")}`].bind(d);for(let g=0;g<i;g++)a[g]=u(g*r.BYTES_PER_ELEMENT,n);return a}function l(e,r,n,i,a){const d=a.forceEndian??U;if(M(d?r:n,e,a),k(i.byteLength,e,O.BYTE_STRING),U===d)e.write(new Uint8Array(i.buffer,i.byteOffset,i.byteLength));else{const g=`write${i.constructor.name.replace(/Array/,\"\")}`,y=e[g].bind(e);for(const D of i)y(D,d)}}t.registerDecoder(65,e=>c(e,Uint16Array,!1),\"uint16, big endian, Typed Array\"),t.registerDecoder(66,e=>c(e,Uint32Array,!1),\"uint32, big endian, Typed Array\"),t.registerDecoder(67,e=>c(e,BigUint64Array,!1),\"uint64, big endian, Typed Array\"),t.registerDecoder(68,e=>(E(e.contents),new Uint8ClampedArray(e.contents)),\"uint8 Typed Array, clamped arithmetic\"),s(Uint8ClampedArray,e=>[68,new Uint8Array(e.buffer,e.byteOffset,e.byteLength)]),t.registerDecoder(69,e=>c(e,Uint16Array,!0),\"uint16, little endian, Typed Array\"),s(Uint16Array,(e,r,n)=>l(r,69,65,e,n)),t.registerDecoder(70,e=>c(e,Uint32Array,!0),\"uint32, little endian, Typed Array\"),s(Uint32Array,(e,r,n)=>l(r,70,66,e,n)),t.registerDecoder(71,e=>c(e,BigUint64Array,!0),\"uint64, little endian, Typed Array\"),s(BigUint64Array,(e,r,n)=>l(r,71,67,e,n)),t.registerDecoder(72,e=>(E(e.contents),new Int8Array(e.contents)),\"sint8 Typed Array\"),s(Int8Array,e=>[72,new Uint8Array(e.buffer,e.byteOffset,e.byteLength)]),t.registerDecoder(73,e=>c(e,Int16Array,!1),\"sint16, big endian, Typed Array\"),t.registerDecoder(74,e=>c(e,Int32Array,!1),\"sint32, big endian, Typed Array\"),t.registerDecoder(75,e=>c(e,BigInt64Array,!1),\"sint64, big endian, Typed Array\"),t.registerDecoder(77,e=>c(e,Int16Array,!0),\"sint16, little endian, Typed Array\"),s(Int16Array,(e,r,n)=>l(r,77,73,e,n)),t.registerDecoder(78,e=>c(e,Int32Array,!0),\"sint32, little endian, Typed Array\"),s(Int32Array,(e,r,n)=>l(r,78,74,e,n)),t.registerDecoder(79,e=>c(e,BigInt64Array,!0),\"sint64, little endian, Typed Array\"),s(BigInt64Array,(e,r,n)=>l(r,79,75,e,n)),t.registerDecoder(81,e=>c(e,Float32Array,!1),\"IEEE 754 binary32, big endian, Typed Array\"),t.registerDecoder(82,e=>c(e,Float64Array,!1),\"IEEE 754 binary64, big endian, Typed Array\"),t.registerDecoder(85,e=>c(e,Float32Array,!0),\"IEEE 754 binary32, little endian, Typed Array\"),s(Float32Array,(e,r,n)=>l(r,85,81,e,n)),t.registerDecoder(86,e=>c(e,Float64Array,!0),\"IEEE 754 binary64, big endian, Typed Array\"),s(Float64Array,(e,r,n)=>l(r,86,82,e,n)),t.registerDecoder(o.SET,(e,r)=>{if(_(e.contents),r.sortKeys){const n=G.decodeToEncodeOpts(r);let i=null;for(const a of e.contents){const d=[a,void 0,b(a,n)];if(i&&r.sortKeys(i,d)>=0)throw new Error(`Set items out of order in tag #${o.SET}`);i=d}}return new Set(e.contents)},\"Set\"),s(Set,(e,r,n)=>{let i=[...e];if(n.sortKeys){const a=i.map(d=>[d,void 0,b(d,n)]);a.sort(n.sortKeys),i=a.map(([d])=>d)}return[o.SET,i]}),t.registerDecoder(o.JSON,e=>(f(e.contents),JSON.parse(e.contents)),\"JSON-encoded\");function C(e){return E(e.contents),new B().decode(e.contents)}C.comment=e=>{E(e.contents);const r=new B;return`(WTF8 string): ${JSON.stringify(r.decode(e.contents))}`},t.registerDecoder(o.WTF8,C),t.registerDecoder(o.SELF_DESCRIBED,e=>e.contents,\"Self-Described\"),t.registerDecoder(o.INVALID_16,()=>{throw new Error(`Tag always invalid: ${o.INVALID_16}`)},\"Invalid\"),t.registerDecoder(o.INVALID_32,()=>{throw new Error(`Tag always invalid: ${o.INVALID_32}`)},\"Invalid\"),t.registerDecoder(o.INVALID_64,()=>{throw new Error(`Tag always invalid: ${o.INVALID_64}`)},\"Invalid\"),t.registerDecoder(o.SYMBOL,e=>{let r=e.contents;if(Array.isArray(e.contents)){if(e.contents.length!==1)throw new Error(`Expected Array of size 1: ${e.contents}`);[r]=e.contents}if(f(r),!r.length)throw new Error(`Expected non-empty string: ${e.contents}`);return Symbol.for(r)},\"Symbol\");function h(e){throw new Error(`Encoding ${e.constructor.name} intentionally unimplmented. It is not concrete enough to interoperate. Convert to Uint8Array first.`)}s(ArrayBuffer,h),s(DataView,h),typeof SharedArrayBuffer<\"u\"&&s(SharedArrayBuffer,h);function p(e){return[NaN,e.valueOf()]}s(Boolean,p),s(Number,p),s(String,p),s(BigInt,p);\n","import{DecodeStream as a}from\"./decodeStream.js\";import{CBORcontainer as s}from\"./container.js\";import{SYMS as u}from\"./constants.js\";function c(i){const e={...s.defaultDecodeOptions};if(i.dcbor?Object.assign(e,s.dcborDecodeOptions):i.cde&&Object.assign(e,s.cdeDecodeOptions),Object.assign(e,i),Object.hasOwn(e,\"rejectLongNumbers\"))throw new TypeError(\"rejectLongNumbers has changed to requirePreferred\");return e.boxed&&(e.saveOriginal=!0),e}class d{parent=void 0;ret=void 0;step(e,n,t){if(this.ret=s.create(e,this.parent,n,t),e[2]===u.BREAK)if(this.parent?.isStreaming)this.parent.left=0;else throw new Error(\"Unexpected BREAK\");else this.parent&&this.parent.push(this.ret,t,e[3]);for(this.ret instanceof s&&(this.parent=this.ret);this.parent?.done;){this.ret=this.parent.convert(t);const r=this.parent.parent;r?.replaceLast(this.ret,this.parent,t),this.parent=r}}}function l(i,e={}){const n=c(e),t=new a(i,n),r=new d;for(const o of t)r.step(o,n,t);return r.ret}class O{#t;#e;constructor(e,n={}){const t=new a(e,c(n));this.#t=t.seq()}peek(){return this.#e||(this.#e=this.#n()),this.#e}read(){const e=this.#e??this.#n();return this.#e=void 0,e}*[Symbol.iterator](){for(;;){const e=this.read();if(!e)return;yield e}}#n(){const{value:e,done:n}=this.#t.next();if(!n)return e}}function*b(i,e={}){const n=c(e),t=new a(i,n),r=new d;for(const o of t.seq())r.step(o,n,t),r.parent||(yield r.ret)}export{O as SequenceEvents,l as decode,b as decodeSequence};\n","import\"./types.js\";import{version as i}from\"./version.js\";import{CBORcontainer as e}from\"./container.js\";import{DiagnosticSizes as m}from\"./options.js\";import{decode as O,decodeSequence as f,SequenceEvents as u}from\"./decoder.js\";import{diagnose as g}from\"./diagnostic.js\";import{comment as D}from\"./comment.js\";import{cdeEncodeOptions as y,defaultEncodeOptions as S,dcborEncodeOptions as T,encode as b,encodedNumber as C}from\"./encoder.js\";import{Simple as q}from\"./simple.js\";import{Tag as v}from\"./tag.js\";import{Writer as V}from\"./writer.js\";import{saveEncoded as B,saveEncodedLength as I,unbox as M,getEncoded as W}from\"./box.js\";const{cdeDecodeOptions:r,dcborDecodeOptions:n,defaultDecodeOptions:d}=e;import{TypeEncoderMap as P}from\"./typeEncoderMap.js\";import{NAN as G,NAN_SIZE as L}from\"./float.js\";export{m as DiagnosticSizes,G as NAN,L as NAN_SIZE,u as SequenceEvents,q as Simple,v as Tag,P as TypeEncoderMap,V as Writer,r as cdeDecodeOptions,y as cdeEncodeOptions,D as comment,n as dcborDecodeOptions,T as dcborEncodeOptions,O as decode,f as decodeSequence,d as defaultDecodeOptions,S as defaultEncodeOptions,g as diagnose,b as encode,C as encodedNumber,W as getEncoded,B as saveEncoded,I as saveEncodedLength,M as unbox,i as version};\n","// Every canonical-CBOR decode violation collapses to the single public Label 309\n// taxonomy code MALFORMED_CBOR: indefinite-length (streaming) items, duplicate\n// keys, unsorted keys, non-minimal integer encodings, and invalid UTF-8 in text\n// strings. The taxonomy intentionally has one code for all of these; the\n// specific cause survives in the human-readable error message, not as a\n// separate code.\nexport type CanonicalCborErrorCode = 'MALFORMED_CBOR';\n\nexport class CanonicalCborError extends Error {\n readonly code: CanonicalCborErrorCode;\n\n constructor(code: CanonicalCborErrorCode, message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = 'CanonicalCborError';\n this.code = code;\n }\n}\n","import { cdeDecodeOptions, decode, encode } from 'cbor2';\nimport { sortCoreDeterministic } from 'cbor2/sorts';\n\nimport { CanonicalCborError } from './errors';\n\nexport type CanonicalCborValue =\n | null\n | boolean\n | number\n | bigint\n | string\n | Uint8Array\n | readonly CanonicalCborValue[]\n | { readonly [key: string]: CanonicalCborValue }\n | ReadonlyMap<string | number, CanonicalCborValue>;\n\nexport function encodeCanonicalCbor(value: CanonicalCborValue): Uint8Array {\n return encode(value, {\n cde: true,\n collapseBigInts: true,\n rejectDuplicateKeys: true,\n sortKeys: sortCoreDeterministic,\n });\n}\n\nexport function decodeCanonicalCbor(bytes: Uint8Array): unknown {\n try {\n return decode(bytes, {\n ...cdeDecodeOptions,\n rejectStreaming: true,\n rejectDuplicateKeys: true,\n // A Label 309 record carries integers, byte/text strings, arrays, maps and\n // `null` — and nothing else. Without these rejections the major-type-7\n // surface leaks into the decoder: a float16/32/64 that happens to hold an\n // integral value (e.g. 1.0) silently decodes to the integer 1 and passes\n // a `z.literal(1)` / Number.isInteger schema check, so two byte strings\n // that are NOT byte-identical canonicalise to the same record. That\n // breaks the cross-implementation parity invariant (the Python twin\n // already rejects non-integer `v` / `enc.scheme` outright). Reject the\n // whole non-record surface — floats, negative zero, undefined, and\n // non-{true,false,null} simple values — so any such input surfaces as\n // MALFORMED_CBOR via mapDecodeError rather than decoding to a look-alike.\n rejectFloats: true,\n rejectNegativeZero: true,\n rejectUndefined: true,\n rejectSimple: true,\n });\n } catch (cause) {\n throw mapDecodeError(cause);\n }\n}\n\nfunction mapDecodeError(cause: unknown): CanonicalCborError {\n const message = cause instanceof Error ? cause.message : String(cause);\n const lower = message.toLowerCase();\n // Every canonical-decode violation collapses to the single public taxonomy\n // code MALFORMED_CBOR: indefinite-length (streaming) items, duplicate keys,\n // non-canonical (unsorted) key ordering, non-minimal integer encodings, and\n // invalid UTF-8 in text strings. cbor2 raises the SAME \"Duplicate or out of\n // order key\" message for both true duplicates AND distinct-but-unsorted keys,\n // so the two are indistinguishable by message — and per the Label 309 taxonomy\n // both belong under MALFORMED_CBOR anyway. The specific cause survives in the\n // human-readable message below; for indefinite-length we state it explicitly\n // so the diagnostic is not lost when the code is collapsed.\n const isIndefinite = lower.includes('streaming') || lower.includes('indefinite');\n const detail = isIndefinite\n ? `indefinite-length items are not permitted in canonical CBOR: ${message}`\n : message;\n return new CanonicalCborError('MALFORMED_CBOR', `cbor decode failed: ${detail}`, { cause });\n}\n","// Label 309 v1 record encoder.\n//\n// Produces canonical CBOR bytes per RFC 8949 §4.2.1 deterministic encoding —\n// definite-length, sorted bytewise lex map keys, no duplicates, preferred\n// integer/float form. The canonical layer (`@cardanowall/crypto-core/cbor`)\n// configures `cbor2` with `cde: true, rejectDuplicateKeys: true`, so the\n// encoder's only job is to translate the validator-typed record shape into\n// the `CanonicalCborValue` algebra.\n//\n// Wire-shape contract:\n// - `items[i].hashes` is a CBOR MAP (text-keyed) — not an array of `{alg,h}`.\n// - `merkle[]` is a top-level array, peer to `items` and `sigs`.\n// - Each `sigs[i]` is a CBOR MAP `{cose_sign1, ? cose_key}` (canonical\n// sort places the optional `cose_key` BEFORE `cose_sign1`).\n// - The encryption envelope uses `scheme` (NOT `v`), `aead` (NOT `alg`),\n// `nonce` (NOT `iv`), `slots` (NOT `recipients`), `slots_mac` (NOT\n// `hdr_mac`); the KEM identifier is hoisted to envelope scope as `kem`.\n// - The passphrase block uses key name `passphrase` and `alg = \"argon2id\"`.\n//\n// Round-trip property: for every record `R` that the validator accepts,\n// validate(encode(R)).ok === true\n// && validate(encode(R)).record ≡ R (modulo CBOR-canonical key sort)\n\nimport { encodeCanonicalCbor, type CanonicalCborValue } from '@cardanowall/crypto-core/cbor';\n\nimport type {\n EncryptionEnvelope,\n ItemEntry,\n MerkleCommit,\n PassphraseBlock,\n PoeRecord,\n SigEntry,\n Slot,\n} from './schema';\n\ntype CborMap = { [key: string]: CanonicalCborValue };\n\nexport function encodePoeRecord(record: PoeRecord): Uint8Array {\n return encodeCanonicalCbor(recordToCbor(record));\n}\n\n// Helper: build the canonical-CBOR `record_body` (the bytes that record-level\n// `sigs[i]` signs over). The body is the full record map MINUS the `sigs`\n// field; producers prepend the 25-byte UTF-8 domain prefix\n// `cardano-poe-record-sig-v1` before invoking Ed25519 (the crypto-core\n// helper `buildLabel309SigStructure` handles the prefix and `Sig_structure`\n// wrapping).\nexport function encodeRecordBodyForSigning(record: PoeRecord): Uint8Array {\n const body: CborMap = recordToCborInternal(record, /* includeSigs */ false);\n return encodeCanonicalCbor(body);\n}\n\nfunction recordToCbor(record: PoeRecord): CanonicalCborValue {\n return recordToCborInternal(record, /* includeSigs */ true);\n}\n\nfunction recordToCborInternal(record: PoeRecord, includeSigs: boolean): CborMap {\n const out: CborMap = { v: record.v };\n if (record.items !== undefined) out['items'] = record.items.map(itemToCbor);\n if (record.merkle !== undefined) out['merkle'] = record.merkle.map(merkleToCbor);\n if (record.supersedes !== undefined) out['supersedes'] = record.supersedes;\n if (includeSigs && record.sigs !== undefined) out['sigs'] = record.sigs.map(sigEntryToCbor);\n if (record.crit !== undefined) out['crit'] = record.crit.slice();\n // Preserve extension keys verbatim — they are part of the signed\n // `record_body` and MUST round-trip byte-identical.\n for (const [k, v] of Object.entries(record)) {\n if (\n k === 'v' ||\n k === 'items' ||\n k === 'merkle' ||\n k === 'supersedes' ||\n k === 'sigs' ||\n k === 'crit'\n ) {\n continue;\n }\n out[k] = v as CanonicalCborValue;\n }\n return out;\n}\n\nfunction itemToCbor(item: ItemEntry): CanonicalCborValue {\n const out: CborMap = { hashes: hashesToCbor(item.hashes) };\n if (item.uris !== undefined) {\n out['uris'] = item.uris.map((chunks) => chunks.slice());\n }\n if (item.enc !== undefined) {\n out['enc'] = envelopeToCbor(item.enc as EncryptionEnvelope);\n }\n return out;\n}\n\nfunction hashesToCbor(hashes: Readonly<Record<string, Uint8Array>>): CanonicalCborValue {\n // text-keyed CBOR map — canonical sort orders by encoded-key bytewise lex\n // automatically (`sha2-256` `0x68` precedes `blake2b-256` `0x6b`).\n const out: CborMap = {};\n for (const [alg, digest] of Object.entries(hashes)) {\n out[alg] = digest;\n }\n return out;\n}\n\nfunction merkleToCbor(commit: MerkleCommit): CanonicalCborValue {\n const out: CborMap = {\n alg: commit.alg,\n root: commit.root,\n leaf_count: commit.leaf_count,\n };\n if (commit.uris !== undefined) {\n out['uris'] = commit.uris.map((chunks) => chunks.slice());\n }\n return out;\n}\n\nfunction envelopeToCbor(enc: EncryptionEnvelope): CanonicalCborValue {\n const out: CborMap = {\n scheme: enc.scheme as CanonicalCborValue,\n aead: enc.aead,\n nonce: enc.nonce,\n };\n if (enc.kem !== undefined) out['kem'] = enc.kem;\n if (enc.slots !== undefined) out['slots'] = enc.slots.map(slotToCbor);\n if (enc.slots_mac !== undefined) out['slots_mac'] = enc.slots_mac;\n if (enc.passphrase !== undefined) out['passphrase'] = passphraseToCbor(enc.passphrase);\n return out;\n}\n\nfunction slotToCbor(slot: Slot): CanonicalCborValue {\n // KEM-driven slot serialization. The canonical encoder sorts map keys by\n // length-then-bytewise (RFC 8949 §4.2.1), so it emits `wrap` (4-byte key)\n // before `kem_ct` (6-byte key) and `epk` (3-byte key) before `wrap`\n // automatically — insertion order here is irrelevant to the wire bytes.\n //\n // - x25519: `{ epk: bstr(32), wrap: bstr(48) }`\n // - mlkem768x25519: `{ kem_ct: [ bstr, ... ], wrap: bstr(48) }` — `kem_ct`\n // is the already-chunked array (NOT re-chunked here), so the bytes match\n // what crypto-core committed to `slots_mac` byte-for-byte.\n if (slot.kem_ct !== undefined) {\n return { kem_ct: slot.kem_ct.map((c) => c), wrap: slot.wrap! };\n }\n return { epk: slot.epk!, wrap: slot.wrap! };\n}\n\nfunction passphraseToCbor(pp: PassphraseBlock): CanonicalCborValue {\n return {\n alg: pp.alg,\n salt: pp.salt,\n params: pp.params as { readonly [key: string]: CanonicalCborValue },\n };\n}\n\nfunction sigEntryToCbor(entry: SigEntry): CanonicalCborValue {\n const out: CborMap = { cose_sign1: entry.cose_sign1.map((b) => b) };\n if (entry.cose_key !== undefined) {\n out['cose_key'] = entry.cose_key.map((b) => b);\n }\n return out;\n}\n","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Targets RFC8032, FIPS 186-5, and ZIP215 behavior.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. edwards25519 uses the RFC equation `-x² + y² = 1 + dx²y²`.\n * The stored `a` literal below is `p - 1`, i.e. the field-element encoding of RFC `a = -1`.\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // prime-order subgroup order\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param, stored here as `p - 1`\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n *\n * Mirror noble-curves: Point.CURVE() exposes shared params, but callers must not be able to mutate\n * that shared view and desynchronize it from the arithmetic constants captured below.\n */\nconst ed25519_CURVE = Object.freeze({\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n});\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // shared 32-byte encoded width for Ed25519 points, scalars, signatures, and keys\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\n// @ts-ignore\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\n// Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases. The\n// fallback still requires a real ArrayBuffer view so plain JSON-deserialized `{ constructor: ... }`\n// spoofing is rejected, and `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\nconst isBytes = (a) => a instanceof Uint8Array ||\n (ArrayBuffer.isView(a) &&\n a.constructor.name === 'Uint8Array' &&\n 'BYTES_PER_ELEMENT' in a &&\n a.BYTES_PER_ELEMENT === 1);\n/**\n * Asserts something is Bytes, optionally enforces exact length,\n * and returns the same reference.\n */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n const msg = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n throw bytes ? new RangeError(msg) : new TypeError(msg);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\n// Clone helper used before in-place byte edits such as sign-bit clearing or endian reversal.\nconst u8fr = (buf) => Uint8Array.from(buf);\n// Left-pad hex to a caller-chosen width. Width enforcement/truncation policy stays with callers.\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\n// Lowercase hex serializer.\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\n// Accepts both uppercase and lowercase hex; all parse failures intentionally collapse to `hex invalid`.\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // Optional WebCrypto lookup; sync code still handles absence.\n// Async-path capability helper for WebCrypto-backed APIs.\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n // Argument order is transcript-significant for hash/signature callers, and input validation here\n // intentionally reuses `abytes(...)` without making defensive copies of the source chunks.\n let len = 0;\n for (const a of arrs)\n len += abytes(a).length;\n const r = u8n(len); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Absence still fails later via `cr()`. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\n/** Inclusive-lower, exclusive-upper bigint range assertion. */\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => {\n if (!isBig(n))\n throw new TypeError(msg);\n if (min <= n && n < max)\n return n;\n throw new RangeError(msg);\n};\n/** Canonical modular reduction into `[0, b)`. */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\n// Low-255-bit mask used by the `2^255 - 19` fast reduction in `modP(...)`.\nconst P_MASK = (1n << 255n) - 1n;\n// Fast reduction for the special prime `2^255 - 19`. This path assumes nonnegative inputs; the\n// generic fallback would simply be `M(num, P)`.\nconst modP = (num) => {\n // return M(num, P);\n if (num < 0n)\n err('negative coordinate');\n let r = (num >> 255n) * 19n + (num & P_MASK);\n r = (r >> 255n) * 19n + (r & P_MASK);\n return r % P;\n};\n// Reduce modulo the subgroup order stored in implementation constant `N` (RFC 8032's `L`).\nconst modN = (a) => M(a, N);\n/** Modular inversion using Euclidean GCD (non-CT) instead of the RFC's `x^(p-2)` formulation.\n * This still sits on secret-dependent paths like point normalization during keygen/signing. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\n// Dynamic lookup keeps sync/async hash providers configurable at runtime. Both exported slots are\n// caller-owned and may be unset; wrapper helpers use this lookup first and then enforce the digest\n// contract instead of trusting provider output.\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\n// Both provider slots are configurable API surface and may return arbitrary values, so callers must\n// enforce the promised 64-byte SHA-512 digest contract here instead of trusting provider output.\nconst checkDigest = (value) => abytes(value, 64, 'digest');\n/**\n * SHA-512 helper used by the synchronous API.\n * @param msg - Message bytes to hash.\n * @returns 64-byte SHA-512 digest.\n * @example\n * Hash message bytes after wiring the synchronous SHA-512 implementation.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const digest = ed.hash(new Uint8Array([1, 2, 3]));\n * ```\n */\n// Public helper validates the message boundary explicitly; the configured provider is still looked\n// up dynamically and its output is checked with `checkDigest(...)`.\nconst hash = (msg) => checkDigest(callHash('sha512')(abytes(msg, undefined, 'message')));\n// Runtime class guard: this is `instanceof Point`, so cross-realm / duplicate-bundle Point objects\n// are rejected even if they are structurally identical.\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\n// Exclusive upper bound `2^256` used by 32-byte decode/serialization range checks.\nconst B256 = 2n ** 256n;\n/**\n * Point in XYZT extended coordinates.\n * @param X - X coordinate.\n * @param Y - Y coordinate.\n * @param Z - Projective Z coordinate.\n * @param T - Cached cross-product term.\n * @example\n * Do point arithmetic with the built-in base point and encode the result as hex.\n *\n * ```ts\n * const hex = Point.BASE.double().toHex();\n * ```\n */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n // Constructor only bounds-checks and freezes XYZT coordinates; it does not prove the point is\n // on-curve or that T matches X*Y/Z.\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, modP(p.x * p.y));\n }\n /** RFC8032 5.1.3: Bytes to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumberLE(normed);\n // After clearing the sign bit, parsed `y` is always < 2^255. ZIP-215 still accepts the full\n // post-mask range here, while strict RFC8032 decoding further requires `y < p`.\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = modP(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = modP(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n // ZIP-215-compatible decoding keeps the x=0 / sign-bit=1 encoding accepted; strict RFC 8032\n // rejects it, but the vendored ZIP-215 compliance vectors include this form in A/R bytes.\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, modP(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n // Intentional stricter-than-on-curve policy: reject ZERO by default because many protocols\n // require a non-zero point, and silently accepting identity points is a common caller mistake.\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = modP(X * X); // X²\n const Y2 = modP(Y * Y); // Y²\n const Z2 = modP(Z * Z); // Z²\n const Z4 = modP(Z2 * Z2); // Z⁴\n const aX2 = modP(X2 * a); // aX²\n const left = modP(Z2 * (aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + modP(d * modP(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = modP(X * Y);\n const ZT = modP(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = modP(X1 * Z2);\n const X2Z1 = modP(X2 * Z1);\n const Y1Z2 = modP(Y1 * Z2);\n const Y2Z1 = modP(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = modP(X1 * X1);\n const B = modP(Y1 * Y1);\n const C = modP(2n * Z1 * Z1);\n const D = modP(a * A);\n const x1y1 = M(X1 + Y1);\n const E = M(modP(x1y1 * x1y1) - A - B);\n const G = M(D + B);\n const F = M(G - C);\n const H = M(D - B);\n const X3 = modP(E * F);\n const Y3 = modP(G * H);\n const T3 = modP(E * H);\n const Z3 = modP(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = modP(X1 * X2);\n const B = modP(Y1 * Y2);\n const C = modP(modP(T1 * d) * T2);\n const D = modP(Z1 * Z2);\n const E = M(modP(M(X1 + Y1) * M(X2 + Y2)) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - modP(a * A));\n const X3 = modP(E * F);\n const Y3 = modP(G * H);\n const T3 = modP(E * H);\n const Z3 = modP(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Safe mode requires `1 <= n < CURVE.n`.\n * Unsafe mode additionally permits `n = 0` and returns the identity point for that case.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n - scalar by which point is multiplied\n * @param safe - safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n // Mirror noble-curves: unsafe mode still validates scalar range first, but intentionally keeps\n // `n = 0` as the one extra accepted case used by verification-style callers.\n if (!safe && n === 0n)\n return I;\n assertRange(n, 1n, N);\n if (!safe && this.is0())\n return I;\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // Fast-path only for the identity point; all other inputs still go through inversion.\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (modP(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = modP(X * iz);\n const y = modP(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), 64)).reverse();\n// Caller-enforced width: some sites require 32-byte RFC encodings, while others intentionally feed\n// wider SHA-512 output chunks through the same little-endian parser.\nconst bytesToNumberLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n // Negative `power` values are not rejected here and currently leave `x` unchanged.\n let r = x;\n while (power-- > 0n) {\n r = modP(r * r);\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = modP(x * x); // x^2, bits 1\n const b2 = modP(x2 * x); // x^3, bits 11\n const b4 = modP(pow2(b2, 2n) * b2); // x^(2^4-1), bits 1111\n const b5 = modP(pow2(b4, 1n) * x); // x^(2^5-1), bits 11111\n const b10 = modP(pow2(b5, 5n) * b5); // x^(2^10-1)\n const b20 = modP(pow2(b10, 10n) * b10); // x^(2^20-1)\n const b40 = modP(pow2(b20, 20n) * b20); // x^(2^40-1)\n const b80 = modP(pow2(b40, 40n) * b40); // x^(2^80-1)\n const b160 = modP(pow2(b80, 80n) * b80); // x^(2^160-1)\n const b240 = modP(pow2(b160, 80n) * b80); // x^(2^240-1)\n const b250 = modP(pow2(b240, 10n) * b10); // x^(2^250-1)\n const pow_p_5_8 = modP(pow2(b250, 2n) * x); // x^((p-5)/8), used by RFC8032 point decode\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // 2^((p-1)/4) = sqrt(-1)\n// RFC8032 §5.1.3 square-root helper for point decompression. `value` is only meaningful when\n// `isValid` is true; callers are also expected to pass canonical field elements with non-zero `v`.\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = modP(v * modP(v * v)); // v³\n const v7 = modP(modP(v3 * v3) * v); // v⁷\n const pow = pow_2_252_3(modP(u * v7)).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = modP(u * modP(v3 * pow)); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = modP(v * modP(x * x)); // vx²\n const root1 = x; // First root candidate\n const root2 = modP(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// Implementation `N` is the subgroup order; `L` is only the shared 32-byte encoded width constant.\n// Reduce any little-endian byte string modulo the subgroup order; the `hash` name reflects the\n// common caller shape, not an input restriction.\nconst modL_LE = (hash) => modN(bytesToNumberLE(hash)); // modulo L; but little-endian\n// Both sync and async SHA-512 slots are exported/configurable; use `callHash(...)` for both so\n// missing async overrides fail explicitly, then validate the returned digest type/length.\nconst sha512a = (...m) => Promise.resolve(callHash('sha512Async')(concatBytes(...m))).then(checkDigest);\nconst sha512s = (...m) => checkDigest(callHash('sha512')(concatBytes(...m)));\n// RFC8032 5.1.5. Split the 64-byte hashed seed into the clamped scalar half and nonce prefix.\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const copy = u8fr(hashed);\n const head = copy.slice(0, 32);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = copy.slice(32, 64); // secret key \"prefix\"\n // RFC words this as `[s]B`; reducing the clamped little-endian scalar modulo `N` is equivalent\n // for base-point multiplication because `G` already has subgroup order `N`.\n const scalar = modL_LE(head);\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/**\n * Creates a 32-byte Ed25519 public key from the RFC 8032 32-byte secret-key seed. Async.\n * @param secretKey - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 32-byte public key.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Derive the public key bytes for a newly generated signer secret.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const publicKey = await ed.getPublicKeyAsync(secretKey);\n * ```\n */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/**\n * Creates a 32-byte Ed25519 public key from the RFC 8032 32-byte secret-key seed.\n * To use, set `hashes.sha512` first.\n * @param priv - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 32-byte public key.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Derive the public key entirely through the synchronous API.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const secretKey = ed.utils.randomSecretKey();\n * const publicKey = ed.getPublicKey(secretKey);\n * ```\n */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n // RFC 8032 5.1.6 allows r mod L = 0, and SUPERCOP ref10 accepts the resulting identity-point\n // signature.\n // We intentionally keep the safe multiply() rejection here so a miswired all-zero SHA-512 provider\n // fails loudly instead of silently producing a degenerate signature.\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), 64); // 64-byte sig: 32-byte encoded R point || 32-byte LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n * @param message - Message bytes to sign.\n * @param secretKey - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 64-byte Ed25519 signature.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Sign an arbitrary message with a fresh Ed25519 secret key.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const message = new Uint8Array([1, 2, 3]);\n * const signature = await ed.signAsync(message, secretKey);\n * ```\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n * @param message - Message bytes to sign.\n * @param secretKey - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 64-byte Ed25519 signature.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Use the sync API when you've wired a SHA-512 implementation yourself.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const secretKey = ed.utils.randomSecretKey();\n * const signature = ed.sign(new Uint8Array([1, 2, 3]), secretKey);\n * ```\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n// Exported defaults favor ZIP-215 interoperability semantics; callers must opt into the stricter\n// branch with `{ zip215: false }`.\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, publicKey, options = defaultVerifyOpts) => {\n sig = abytes(sig, 64); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n publicKey = abytes(publicKey, L);\n // zip215=false keeps the library's stricter branch, which still canonicalizes `R` / `A` before\n // hashing and rejects small-order public keys earlier than pure RFC8032 text would require.\n // Preserve the exported ZIP-215 default for `{}` / `{ zip215: undefined }`, not just omitted opts.\n const { zip215 = true } = options;\n const r = sig.subarray(0, L);\n const s = bytesToNumberLE(sig.subarray(L, L * 2)); // Decode second half as an integer S;\n let A, R, SB;\n let hashable = Uint8Array.of();\n let finished = false;\n try {\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n A = Point.fromBytes(publicKey, zip215);\n R = Point.fromBytes(r, zip215);\n SB = G.multiply(s, false); // 0 <= s < l is done inside\n // ZIP-215 accepts noncanonical / unreduced point encodings, so the challenge hash must use the\n // exact signature/public-key bytes rather than canonicalized re-encodings of the decoded points.\n hashable = concatBytes(r, publicKey, msg); // dom2(F, C) || R || A || PH(M)\n finished = true;\n }\n catch (error) { }\n const finish = (hashed) => {\n if (!finished)\n return false;\n // Policy: strict mode intentionally rejects all small-order public keys, even though the raw RFC\n // equation text is looser here. This matches libsodium and avoids weak / ambiguous verification\n // outcomes where unusual low-order public keys can make distinct key/signature combinations verify.\n if (!zip215 && A.isSmallOrder())\n return false;\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const k = modL_LE(hashed);\n const RkA = R.add(A.multiply(k, false));\n // Extended group equation\n // [8][S]B = [8]R + [8][k]A'\n return RkA.subtract(SB).clearCofactor().is0();\n };\n return { hashable, finish };\n};\n/**\n * Verifies a signature on message and public key. Async.\n * The implementation is based on RFC8032 5.1.7, but default opts use ZIP-215 semantics; pass\n * `{ zip215: false }` for the library's stricter branch.\n * @param signature - 64-byte signature.\n * @param message - Signed message bytes.\n * @param publicKey - 32-byte public key.\n * @param opts - Verification options. Defaults to ZIP-215 semantics. See {@link EdDSAVerifyOpts}.\n * @returns `true` when the signature is valid.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Verify the signature against the same message and derived public key.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const message = new Uint8Array([1, 2, 3]);\n * const publicKey = await ed.getPublicKeyAsync(secretKey);\n * const signature = await ed.signAsync(message, secretKey);\n * const isValid = await ed.verifyAsync(signature, message, publicKey);\n * ```\n */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/**\n * Verifies a signature on message and public key using the synchronous hash path.\n * The implementation is based on RFC8032 5.1.7, but default opts use ZIP-215 semantics; pass\n * `{ zip215: false }` for the library's stricter branch.\n * @param signature - 64-byte signature.\n * @param message - Signed message bytes.\n * @param publicKey - 32-byte public key.\n * @param opts - Verification options. Defaults to ZIP-215 semantics. See {@link EdDSAVerifyOpts}.\n * @returns `true` when the signature is valid.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Verify a signature entirely through the synchronous API.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const secretKey = ed.utils.randomSecretKey();\n * const message = new Uint8Array([1, 2, 3]);\n * const publicKey = ed.getPublicKey(secretKey);\n * const signature = ed.sign(message, secretKey);\n * const isValid = ed.verify(signature, message, publicKey);\n * ```\n */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/**\n * Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves.\n * Exposes the same low-level field-default `mod` reducer and non-CT `invert` helper used\n * internally.\n * @example\n * Convert bytes to a hex string with the low-level helper namespace.\n *\n * ```ts\n * const hex = etc.bytesToHex(new Uint8Array([1, 2, 3]));\n * ```\n */\nconst etc = /* @__PURE__ */ Object.freeze({\n bytesToHex,\n hexToBytes,\n concatBytes,\n mod: M,\n invert: invert,\n randomBytes,\n});\n/**\n * Hash implementations used by the synchronous API plus the default async WebCrypto provider.\n * Both slots are configurable API surface; wrapper helpers revalidate that providers still return\n * 64-byte SHA-512 digests.\n * @example\n * Provide a SHA-512 implementation before calling synchronous helpers.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const { publicKey } = ed.keygen();\n * ```\n */\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// Returns the final 32-byte Ed25519 secret-key seed verbatim, generating fresh random bytes only\n// when omitted.\nconst randomSecretKey = (seed) => {\n seed = seed === undefined ? randomBytes(L) : seed;\n return abytes(seed, L);\n};\n/**\n * Generates a secret/public keypair.\n * @param seed - Optional 32-byte Ed25519 secret-key seed, returned verbatim as `secretKey`.\n * @returns Keypair with `secretKey` and `publicKey`.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Generate a new keypair through the synchronous API after wiring SHA-512.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const { secretKey, publicKey } = ed.keygen();\n * ```\n */\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\n/**\n * Generates a secret/public keypair asynchronously.\n * @param seed - Optional 32-byte Ed25519 secret-key seed, returned verbatim as `secretKey`.\n * @returns Keypair with `secretKey` and `publicKey`.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Generate a new keypair through the asynchronous WebCrypto-backed path.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const { secretKey, publicKey } = await ed.keygenAsync();\n * ```\n */\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/**\n * Ed25519-specific key utilities.\n * `utils.getExtendedPublicKey*` expose secret-derived internals (`head`, `prefix`, `scalar`, and\n * point objects), not just public-key bytes.\n * @example\n * Generate a new Ed25519 secret key and derive the matching public key.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const publicKey = await ed.getPublicKeyAsync(secretKey);\n * ```\n */\nconst utils = /* @__PURE__ */ Object.freeze({\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n});\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\n// Layout is grouped by window: each block stores the positive multiples `1*base .. 128*base` for\n// that window, and the extra `+1` window in `pwindows` absorbs carries from signed-digit recoding.\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // shared process-wide cache of base-point precomputes\n// Branch-based negate helper used for JS/JIT mitigation symmetry, not a strict constant-time claim.\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n * Returns the real accumulator `p` plus a fake accumulator `f`; callers only care about `p`, while\n * `f` exists to keep similar work in zero-digit branches as a JS/JIT side-channel mitigation.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // callers only need `p`; `f` is kept for zero-digit mitigation symmetry\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync };\n","import * as ed from '@noble/ed25519';\nimport { sha512 } from '@noble/hashes/sha2.js';\n\ned.hashes.sha512 = sha512;\n\n// Ed25519 group order L (= 2^252 + 27742317777372353535851937790883648493).\nconst L = ed.Point.CURVE().n;\n\nexport interface SignEd25519Opts {\n readonly seed: Uint8Array;\n readonly message: Uint8Array;\n}\n\nexport interface VerifyEd25519Opts {\n readonly publicKey: Uint8Array;\n readonly message: Uint8Array;\n readonly signature: Uint8Array;\n}\n\nexport interface GetPublicKeyEd25519Opts {\n readonly seed: Uint8Array;\n}\n\nexport function signEd25519(opts: SignEd25519Opts): Uint8Array {\n return ed.sign(opts.message, opts.seed);\n}\n\n// Little-endian 32-byte scalar → bigint.\nfunction leBytesToBigInt(bytes: Uint8Array): bigint {\n let value = 0n;\n for (let i = bytes.length - 1; i >= 0; i--) {\n value = (value << 8n) | BigInt(bytes[i]!);\n }\n return value;\n}\n\n// Strict (non-cofactored) Ed25519 verification per RFC 8032 §5.1.7, matching\n// libsodium/PyNaCl `crypto_sign_verify_detached` and ed25519-dalek\n// `verify_strict`. The cofactor-less check rejects every small-order /\n// torsion-component edge case in the C2SP/CCTV corpus, which noble's\n// `{ zip215: false }` mode does NOT (it remains cofactored: it checks\n// `[8]([S]B - [k]A - R) == 0`, accepting torsion components).\n//\n// The verification equation is the unscaled `[S]B == R + [k]A`, rewritten as\n// `[S]B - [k]A - R == identity`. We reject S >= L (non-canonical scalar) and\n// any small-order A or R up front, so a torsion component can never be smuggled\n// through the cofactor multiplication the cofactored variant performs.\nexport function verifyEd25519(opts: VerifyEd25519Opts): boolean {\n const { signature, message, publicKey } = opts;\n if (signature.length !== 64 || publicKey.length !== 32) return false;\n\n // S = LE(sig[32..64]); reject if not a canonical scalar (S >= L).\n const S = leBytesToBigInt(signature.subarray(32, 64));\n if (S >= L) return false;\n\n // Decode A (public key) and R (sig[0..32]) with the canonical (non-zip215)\n // point encoding; a non-canonical encoding throws and rejects.\n let A: ed.Point;\n let R: ed.Point;\n try {\n A = ed.Point.fromBytes(publicKey);\n R = ed.Point.fromBytes(signature.subarray(0, 32));\n } catch {\n return false;\n }\n\n // Reject small-order (cofactor-torsion) A or R: this is exactly the strictness\n // that distinguishes verify_strict from the cofactored check.\n if (A.isSmallOrder() || R.isSmallOrder()) return false;\n\n // k = SHA-512(R || A || M) reduced mod L.\n const k =\n leBytesToBigInt(ed.hash(concatBytes(signature.subarray(0, 32), publicKey, message))) % L;\n\n // Accept iff [S]B - [k]A - R == identity. `multiplyUnsafe` returns the\n // identity for a 0 scalar, but guard explicitly to avoid relying on that.\n const sB = S === 0n ? ed.Point.ZERO : ed.Point.BASE.multiplyUnsafe(S);\n const kA = k === 0n ? ed.Point.ZERO : A.multiplyUnsafe(k);\n return sB.subtract(kA).subtract(R).is0();\n}\n\nfunction concatBytes(...parts: Uint8Array[]): Uint8Array {\n let total = 0;\n for (const p of parts) total += p.length;\n const out = new Uint8Array(total);\n let offset = 0;\n for (const p of parts) {\n out.set(p, offset);\n offset += p.length;\n }\n return out;\n}\n\nexport function getPublicKeyEd25519(opts: GetPublicKeyEd25519Opts): Uint8Array {\n return ed.getPublicKey(opts.seed);\n}\n","export type CoseVerifyErrorCode =\n | 'MALFORMED_SIG_COSE'\n | 'MALFORMED_SIG_COSE_SIGN1'\n | 'UNSUPPORTED_SIG_ALG'\n | 'KID_UNRESOLVED'\n | 'SIGNATURE_INVALID';\n\nexport class CoseVerifyError extends Error {\n readonly code: CoseVerifyErrorCode;\n\n constructor(code: CoseVerifyErrorCode, message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = 'CoseVerifyError';\n this.code = code;\n }\n}\n\nexport type CoseVerifyResult =\n | { ok: true; signerKey: Uint8Array; alg: number }\n | { ok: false; error: { code: CoseVerifyErrorCode; message: string } };\n","import {\n decodeCanonicalCbor,\n encodeCanonicalCbor,\n type CanonicalCborValue,\n} from '../cbor/canonical';\nimport { CanonicalCborError } from '../cbor/errors';\nimport { blake2b224 } from '../hash/blake2b-256';\nimport { signEd25519, verifyEd25519 } from '../sig/ed25519';\nimport { compareCt } from '../util/compare-ct';\n\nimport { CoseVerifyError, type CoseVerifyResult } from './errors';\n\nexport type CoseHeader = Map<number | string, unknown>;\n\n// Label 309 v1 domain separator embedded as a prefix on `Sig_structure[3]`\n// (`to_sign`). The separator is\n// NOT placed in `Sig_structure[2]` (`external_aad`) because CIP-30 `signData`\n// — the only realistic wallet-signing path on Cardano — explicitly forbids a\n// non-empty `external_aad`. Pinning the prefix into the payload preserves the\n// anti-replay property while keeping wallet-produced signatures byte-identical\n// to verifier-side recomputation.\nexport const CARDANO_POE_SIG_DOMAIN_PREFIX = 'cardano-poe-record-sig-v1' as const;\n// Composer path-2 wallet flow consumes the prefix bytes directly\n// to assemble `toSign = prefix || canonical_cbor(record_body)` BEFORE calling\n// `walletSignData` (the wallet's `signData()` receives this concatenation as\n// its `payload` argument verbatim per CIP-30). The bytes constant is exported\n// so a composer can build the input without re-encoding the prefix at every\n// call site.\nexport const CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES = new TextEncoder().encode(\n CARDANO_POE_SIG_DOMAIN_PREFIX,\n);\n\n// Fail-fast: the prefix length is byte-pinned at 25 UTF-8 bytes. A different\n// runtime encoding would silently break round-tripping\n// against the reference vectors.\nif (CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length !== 25) {\n throw new Error(\n `cardano-poe-record-sig-v1 prefix must encode to exactly 25 UTF-8 bytes, got ${CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length}`,\n );\n}\n\nconst EMPTY_BYTES = new Uint8Array(0);\n\nexport interface CoseSign1Decoded {\n readonly protectedHeader: CoseHeader;\n // preserved for Sig_structure reconstruction — never re-encode the decoded header map (RFC 9052 §4.4)\n readonly protectedBytes: Uint8Array;\n readonly unprotectedHeader: CoseHeader;\n readonly payload: Uint8Array | null;\n readonly signature: Uint8Array;\n}\n\nexport interface BuildSigStructureArgs {\n readonly context: 'Signature1';\n readonly bodyProtectedBytes: Uint8Array;\n readonly externalAad: Uint8Array;\n readonly payload: Uint8Array;\n}\n\n// Raw RFC 9052 §4.4 Sig_structure builder. General-purpose: callers control\n// `external_aad` and `payload` exactly. For Label 309 record signing use\n// `buildLabel309SigStructure` instead — it enforces the Label 309 record-signature invariants.\nexport function buildSigStructure(args: BuildSigStructureArgs): Uint8Array {\n return encodeCanonicalCbor([\n args.context,\n args.bodyProtectedBytes,\n args.externalAad,\n args.payload,\n ] as readonly CanonicalCborValue[]);\n}\n\nexport interface BuildLabel309SigStructureArgs {\n readonly bodyProtectedBytes: Uint8Array;\n // Canonical CBOR of the record body with `sigs` removed.\n readonly recordBodyCbor: Uint8Array;\n}\n\n// Label 309 v1 specialisation of `Sig_structure` (RFC 9052 §4.4 base structure):\n// to_sign = utf8(\"cardano-poe-record-sig-v1\") || canonical_cbor(record_body_minus_sigs)\n// Sig_structure = [ \"Signature1\", body_protected, h'' (empty), to_sign ]\n// Always forces `external_aad = h''` (empty bstr) — the CIP-30 wallet path\n// cannot carry a non-empty `external_aad`, so the domain separator lives in\n// `Sig_structure[3]` rather than `Sig_structure[2]`.\nexport function buildLabel309SigStructure(args: BuildLabel309SigStructureArgs): Uint8Array {\n const toSign = new Uint8Array(\n CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length + args.recordBodyCbor.length,\n );\n toSign.set(CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES, 0);\n toSign.set(args.recordBodyCbor, CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length);\n return buildSigStructure({\n context: 'Signature1',\n bodyProtectedBytes: args.bodyProtectedBytes,\n externalAad: EMPTY_BYTES,\n payload: toSign,\n });\n}\n\nexport interface EncodeCoseSign1Args {\n readonly protectedHeader: CoseHeader;\n readonly unprotectedHeader: CoseHeader;\n readonly payload: Uint8Array | null;\n readonly signature: Uint8Array;\n}\n\nexport function encodeCoseSign1(args: EncodeCoseSign1Args): Uint8Array {\n const protectedBytes =\n args.protectedHeader.size === 0\n ? EMPTY_BYTES\n : encodeCanonicalCbor(args.protectedHeader as CanonicalCborValue);\n return encodeCanonicalCbor([\n protectedBytes,\n args.unprotectedHeader as CanonicalCborValue,\n args.payload,\n args.signature,\n ] as readonly CanonicalCborValue[]);\n}\n\n// cbor2's decoder returns Map for integer-keyed maps but plain Object for empty\n// or string-keyed maps; normalise both representations to Map.\nfunction asCoseHeader(value: unknown): CoseHeader | null {\n if (value instanceof Map) return value as CoseHeader;\n if (value !== null && typeof value === 'object' && (value as object).constructor === Object) {\n return new Map(Object.entries(value as Record<string, unknown>));\n }\n return null;\n}\n\nexport function decodeCoseSign1(bytes: Uint8Array): CoseSign1Decoded {\n let arr: unknown;\n try {\n arr = decodeCanonicalCbor(bytes);\n } catch (cause) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'cose decode failed', { cause });\n }\n if (!Array.isArray(arr) || arr.length !== 4) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'expected 4-element array');\n }\n const [protectedBytesRaw, unprotectedRaw, payloadRaw, signatureRaw] = arr;\n if (!(protectedBytesRaw instanceof Uint8Array)) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'protected_bytes must be bytes');\n }\n const unprotectedHeader = asCoseHeader(unprotectedRaw);\n if (unprotectedHeader === null) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'unprotected header must be map');\n }\n if (payloadRaw !== null && !(payloadRaw instanceof Uint8Array)) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'payload must be bytes or null');\n }\n if (!(signatureRaw instanceof Uint8Array) || signatureRaw.length !== 64) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'signature must be 64 bytes');\n }\n let protectedHeader: CoseHeader;\n if (protectedBytesRaw.length === 0) {\n protectedHeader = new Map();\n } else {\n let decodedProtected: unknown;\n try {\n decodedProtected = decodeCanonicalCbor(protectedBytesRaw);\n } catch (cause) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'protected header decode failed', { cause });\n }\n const ph = asCoseHeader(decodedProtected);\n if (ph === null) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'protected header must decode to map');\n }\n // Empty protected header MUST encode as the single byte 0x40 (zero-length bstr),\n // not 0x41 0xA0 (a 1-byte bstr containing an empty CBOR map). RFC 9052 §3 +\n // Label 309 canonical-CBOR mandate.\n if (ph.size === 0) {\n throw new CoseVerifyError(\n 'MALFORMED_SIG_COSE',\n 'empty protected header must encode as 0x40 (zero-length bstr), not as an empty map',\n );\n }\n protectedHeader = ph;\n }\n return {\n protectedHeader,\n protectedBytes: protectedBytesRaw,\n unprotectedHeader,\n payload: payloadRaw,\n signature: signatureRaw,\n };\n}\n\nexport type CoseSign1BuildErrorCode = 'SIGNER_NOT_PROVIDED' | 'SIGNER_AND_SEED_BOTH_PROVIDED';\n\nexport class CoseSign1BuildError extends Error {\n readonly code: CoseSign1BuildErrorCode;\n\n constructor(code: CoseSign1BuildErrorCode, message: string) {\n super(message);\n this.name = 'CoseSign1BuildError';\n this.code = code;\n }\n}\n\nexport interface CoseSign1Label309BuildArgs {\n readonly protectedHeader: CoseHeader;\n readonly unprotectedHeader: CoseHeader;\n // Canonical CBOR of the record body with `sigs` removed. The\n // builder prepends the 25-byte UTF-8 domain prefix `cardano-poe-record-sig-v1`\n // internally — callers MUST NOT pre-concatenate it.\n readonly recordBodyCbor: Uint8Array;\n // EITHER the raw 32-byte Ed25519 seed (used by KAT tests, Python parity, and\n // the off-host signing helper) OR an injected signer closure that signs the\n // assembled Sig_structure bytes (composer-side use — keeps the private key\n // inside the unlock-store closure so it never escapes scope).\n // Exactly one of the two MUST be provided; mutual exclusion enforced at\n // runtime via CoseSign1BuildError.\n readonly signerSecretKey?: Uint8Array;\n readonly signer?: (sigStructureBytes: Uint8Array) => Uint8Array;\n}\n\n// Label 309 v1 record-signature builder:\n// 1. compute `to_sign = utf8(\"cardano-poe-record-sig-v1\") || recordBodyCbor`\n// 2. Sig_structure = [ \"Signature1\", bodyProtected, h'', to_sign ]\n// 3. Ed25519-sign Sig_structure (via seed OR injected closure)\n// 4. emit COSE_Sign1 with payload = CBOR null (detached signature, mandatory)\nexport function coseSign1Label309Build(args: CoseSign1Label309BuildArgs): Uint8Array {\n if (args.signerSecretKey === undefined && args.signer === undefined) {\n throw new CoseSign1BuildError(\n 'SIGNER_NOT_PROVIDED',\n 'coseSign1Label309Build requires either signerSecretKey or signer',\n );\n }\n if (args.signerSecretKey !== undefined && args.signer !== undefined) {\n throw new CoseSign1BuildError(\n 'SIGNER_AND_SEED_BOTH_PROVIDED',\n 'coseSign1Label309Build accepts signerSecretKey XOR signer (not both)',\n );\n }\n const protectedBytes =\n args.protectedHeader.size === 0\n ? EMPTY_BYTES\n : encodeCanonicalCbor(args.protectedHeader as CanonicalCborValue);\n const sigStructureBytes = buildLabel309SigStructure({\n bodyProtectedBytes: protectedBytes,\n recordBodyCbor: args.recordBodyCbor,\n });\n let signature: Uint8Array;\n if (args.signer !== undefined) {\n signature = args.signer(sigStructureBytes);\n if (!(signature instanceof Uint8Array) || signature.length !== 64) {\n throw new CoseSign1BuildError(\n 'SIGNER_NOT_PROVIDED',\n `injected signer must return a 64-byte Uint8Array; got ${signature instanceof Uint8Array ? `${signature.length}-byte Uint8Array` : typeof signature}`,\n );\n }\n } else {\n signature = signEd25519({ seed: args.signerSecretKey!, message: sigStructureBytes });\n }\n return encodeCoseSign1({\n protectedHeader: args.protectedHeader,\n unprotectedHeader: args.unprotectedHeader,\n payload: null,\n signature,\n });\n}\n\nexport interface CoseSign1Label309VerifyArgs {\n readonly message: Uint8Array;\n // Canonical CBOR of the record body with `sigs` removed (verifier-recomputed;\n // the 25-byte UTF-8 prefix is prepended internally — callers\n // MUST NOT pre-concatenate it).\n readonly detachedRecordBodyCbor: Uint8Array;\n // Optional out-of-band signer key (path-2 wallet path resolves the key from\n // `sigs[i].cose_key`). Path-1 records carry the 32-byte raw Ed25519 pubkey\n // in the protected header at label 4 (`kid`) and need no out-of-band hint.\n readonly expectedSignerKey?: Uint8Array;\n}\n\n// Label 309 v1 record-signature verifier:\n// - Decode COSE_Sign1\n// - Reject COSE_Sign1[2] != CBOR null (attached payload — including h'') as\n// MALFORMED_SIG_COSE_SIGN1\n// - Recompute to_sign = utf8(\"cardano-poe-record-sig-v1\") || detachedRecordBodyCbor\n// - Sig_structure = [ \"Signature1\", protectedBytes, h'', to_sign ]\n// - Strict Ed25519 verify (RFC 8032 §5.1.7 — `zip215: false` per ed25519.ts)\n//\n// The verifier does NOT accept an `externalAad` argument: Label 309 v1 pins\n// `external_aad = h''` and any deviation would either silently weaken the\n// domain separator or quietly accept malformed records. If a future CIP\n// revision re-enables external_aad, this helper takes a v-bump.\nexport function coseSign1Label309Verify(args: CoseSign1Label309VerifyArgs): CoseVerifyResult {\n let decoded: CoseSign1Decoded;\n try {\n decoded = decodeCoseSign1(args.message);\n } catch (e) {\n if (e instanceof CoseVerifyError) {\n return { ok: false, error: { code: e.code, message: 'errors.cose.malformed' } };\n }\n if (e instanceof CanonicalCborError) {\n return {\n ok: false,\n error: { code: 'MALFORMED_SIG_COSE', message: 'errors.cose.malformed_cbor' },\n };\n }\n throw e;\n }\n // Label 309 v1 mandate: COSE_Sign1[2] (payload field) MUST be CBOR `null` (0xF6).\n // Any non-null payload — including a zero-length byte string `h''` — MUST\n // be rejected as MALFORMED_SIG_COSE_SIGN1.\n if (decoded.payload !== null) {\n return {\n ok: false,\n error: {\n code: 'MALFORMED_SIG_COSE_SIGN1',\n message: 'errors.cose.attached_payload_forbidden',\n },\n };\n }\n const alg = decoded.protectedHeader.get(1);\n if (typeof alg !== 'number' || alg !== -8) {\n return {\n ok: false,\n error: { code: 'UNSUPPORTED_SIG_ALG', message: 'errors.cose.unsupported_alg' },\n };\n }\n const kidRaw = decoded.protectedHeader.get(4);\n let signerKey: Uint8Array | undefined;\n if (kidRaw instanceof Uint8Array && kidRaw.length === 32) {\n signerKey = kidRaw;\n } else if (args.expectedSignerKey instanceof Uint8Array && args.expectedSignerKey.length === 32) {\n signerKey = args.expectedSignerKey;\n }\n if (signerKey === undefined) {\n return {\n ok: false,\n error: { code: 'KID_UNRESOLVED', message: 'errors.cose.kid_unresolved' },\n };\n }\n // When both a protected-header kid AND an expectedSignerKey are provided,\n // require they agree (constant-time). A protected kid that disagrees with\n // the caller's out-of-band binding is a misuse, not a transient mismatch.\n if (\n kidRaw instanceof Uint8Array &&\n kidRaw.length === 32 &&\n args.expectedSignerKey instanceof Uint8Array &&\n args.expectedSignerKey.length === 32 &&\n !compareCt(kidRaw, args.expectedSignerKey)\n ) {\n return {\n ok: false,\n error: { code: 'KID_UNRESOLVED', message: 'errors.cose.kid_mismatch' },\n };\n }\n // CIP-8 `hashed = true` mode (the wallet-signed path-2 variant). The unprotected\n // header carries the literal text key `\"hashed\"` with boolean value `true`\n // (text-keyed CBOR maps decode to `Map<string, unknown>` via cbor2). When\n // set, both producer and verifier build `Sig_structure[3] = Blake2b-224(to_sign)`\n // (28-byte digest of the FULL `to_sign` payload including the 25-byte\n // domain prefix). When absent or false, the standard non-hashed path\n // applies unchanged.\n const hashedFlag = decoded.unprotectedHeader.get('hashed');\n let sigStructureBytes: Uint8Array;\n if (hashedFlag === true) {\n const toSign = new Uint8Array(\n CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length + args.detachedRecordBodyCbor.length,\n );\n toSign.set(CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES, 0);\n toSign.set(args.detachedRecordBodyCbor, CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length);\n const hashedPayload = blake2b224(toSign);\n sigStructureBytes = buildSigStructure({\n context: 'Signature1',\n bodyProtectedBytes: decoded.protectedBytes,\n externalAad: EMPTY_BYTES,\n payload: hashedPayload,\n });\n } else {\n sigStructureBytes = buildLabel309SigStructure({\n bodyProtectedBytes: decoded.protectedBytes,\n recordBodyCbor: args.detachedRecordBodyCbor,\n });\n }\n const valid = verifyEd25519({\n publicKey: signerKey,\n message: sigStructureBytes,\n signature: decoded.signature,\n });\n if (!valid) {\n return {\n ok: false,\n error: { code: 'SIGNATURE_INVALID', message: 'errors.cose.signature_invalid' },\n };\n }\n return { ok: true, signerKey, alg };\n}\n","// Shared, byte-critical pieces of the slots-path sealed-PoE construction that\n// the producer (wrap) and every verifier (unwrap, trial-decrypt) MUST compute\n// byte-for-byte identically:\n//\n// 1. The slots transcript and its SHA-256 hash `slots_hash`.\n// 2. The content-AEAD additional-authenticated-data object `AD_CONTENT_SLOTS`.\n// 3. The content `payload_key` derivation from the CEK.\n// 4. The hybrid (X-Wing) per-slot KEK salt.\n// 5. The single-shot XChaCha20-Poly1305 maximum-payload guard.\n//\n// Keeping these in one module is the interop guarantee: a single divergence in\n// the canonical encoding silently yields a `slots_mac` or AEAD tag that another\n// implementation cannot reproduce, with no typed error to localise the fault.\n// There is exactly one shared implementation, imported by both sides.\n\nimport { sha256 } from '@noble/hashes/sha2.js';\n\nimport { encodeCanonicalCbor, type CanonicalCborValue } from '../cbor/canonical';\nimport { hkdfSha256 } from '../kdf/hkdf';\n\nimport { canonicalizeSlots, type SealedKem } from './slots-codec';\nimport type { Mlkem768X25519Slot, X25519Slot } from './wrap';\n\n// Internal domain-separation labels. Each is exact ASCII with no terminator and\n// no length prefix; each is a fixed constant of the scheme, never serialised on\n// the wire and never registry-selectable. The byte-length invariants below keep\n// the SCREAMING_SNAKE constants in sync with the ASCII literals every conformant\n// verifier hashes against.\n\n// SHA-256 prefix for the slots-transcript hash `slots_hash`.\nexport const CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-slots-transcript-v1',\n);\n// HKDF info for the slots-path content `payload_key`.\nexport const CARDANO_POE_HKDF_INFO_PAYLOAD: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-payload-v1',\n);\n// HKDF info for the passphrase-path content `payload_key`.\nexport const CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-payload-passphrase-v1',\n);\n// SHA-256 prefix for the hybrid (X-Wing) per-slot KEK HKDF salt.\nexport const CARDANO_POE_XWING_KEK_SALT_PREFIX: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-xwing-kek-salt-v1',\n);\n\nif (CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX.length !== 31) {\n throw new Error(\n 'CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX byte-length invariant violated (expected 31)',\n );\n}\nif (CARDANO_POE_HKDF_INFO_PAYLOAD.length !== 22) {\n throw new Error('CARDANO_POE_HKDF_INFO_PAYLOAD byte-length invariant violated (expected 22)');\n}\nif (CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE.length !== 33) {\n throw new Error(\n 'CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE byte-length invariant violated (expected 33)',\n );\n}\nif (CARDANO_POE_XWING_KEK_SALT_PREFIX.length !== 29) {\n throw new Error('CARDANO_POE_XWING_KEK_SALT_PREFIX byte-length invariant violated (expected 29)');\n}\n\n// Scheme-fixed constant pinning the passphrase normalization profile the CEK was\n// derived under. Fed into the passphrase-path AAD; never serialised on the wire.\nexport const CARDANO_POE_PW_NORM_PROFILE = 'cardano-poe-pw-norm-v1' as const;\n\n// Verifier-side resource bounds a public parser MUST enforce BEFORE invoking any\n// KEM/AEAD primitive, so a malformed envelope cannot drive unbounded work. Both\n// are deployment-pinned reference constants (not wire fields); deployments MAY\n// tighten them. They sit far above the ~16 KiB Cardano transaction-metadata\n// ceiling that bounds honest records, so a conformant record never trips them.\n//\n// • MAX_SLOTS — the maximum slot count; an envelope with more slots is\n// rejected outright.\n// • MAX_DECODED_ENVELOPE_BYTES — a backstop on the decoded envelope's\n// aggregate byte size (nonce + slots_mac + every per-slot wire field),\n// bounding the work even before the slot-count cap would.\nexport const MAX_SLOTS = 1024;\nexport const MAX_DECODED_ENVELOPE_BYTES = 65536;\n\n// XChaCha20-Poly1305 is a single-shot AEAD over the whole plaintext; its 32-bit\n// internal block counter bounds one (key, nonce) invocation at 2^32 64-byte\n// ChaCha20 blocks, the first of which is consumed by the Poly1305 one-time key.\n// MAX_SEALED_PLAINTEXT is therefore (2^32 - 1) * 64 = 2^38 - 64 bytes; a plaintext\n// at or above it risks a counter-overflow keystream collision and MUST be\n// rejected before the AEAD is invoked on either side. This constant is identical\n// across all conformant implementations.\nexport const MAX_SEALED_PLAINTEXT = 274877906880; // 2^38 - 64\n// Poly1305 appends a 16-byte tag, so the corresponding ciphertext bound is + 16.\nexport const MAX_SEALED_CIPHERTEXT = MAX_SEALED_PLAINTEXT + 16;\n\nif (MAX_SEALED_PLAINTEXT !== 2 ** 38 - 64) {\n throw new Error('MAX_SEALED_PLAINTEXT invariant violated (expected 2^38 - 64)');\n}\n\n// Reject a slots-path plaintext at or above the single-shot keystream capacity,\n// before any AEAD call. Thrown on the producer side.\nexport function assertPlaintextWithinBound(plaintextLength: number): void {\n if (plaintextLength >= MAX_SEALED_PLAINTEXT) {\n throw new SealedPayloadTooLargeError(\n `plaintext length ${plaintextLength} is at or above the maximum sealed payload size ${MAX_SEALED_PLAINTEXT}`,\n );\n }\n}\n\n// Reject a slots-/passphrase-path ciphertext at or above the single-shot bound,\n// before any AEAD open. Thrown on the verifier side. The ciphertext carries the\n// plaintext plus a 16-byte Poly1305 tag.\nexport function assertCiphertextWithinBound(ciphertextLength: number): void {\n if (ciphertextLength >= MAX_SEALED_CIPHERTEXT) {\n throw new SealedPayloadTooLargeError(\n `ciphertext length ${ciphertextLength} is at or above the maximum sealed ciphertext size ${MAX_SEALED_CIPHERTEXT}`,\n );\n }\n}\n\nexport class SealedPayloadTooLargeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SealedPayloadTooLargeError';\n }\n}\n\n// SHA-256(\"cardano-poe-slots-transcript-v1\" || canonicalEncode(SLOTS_TRANSCRIPT)).\n// SLOTS_TRANSCRIPT is the closed six-key map binding the cross-KEM header fields\n// (scheme, path, aead, kem, nonce) to the canonicalised slot set, so a relay\n// that flips any header field while leaving slot shapes valid yields a different\n// `slots_hash` and the MAC fails. Computed ONCE per envelope and held constant\n// across the recipient trial-decrypt loop. The map keys are a SET — their wire\n// order is fixed by the canonical-encode sort, never hand-arranged here.\nexport function computeSlotsHash(args: {\n kem: SealedKem;\n nonce: Uint8Array;\n slots: ReadonlyArray<X25519Slot | Mlkem768X25519Slot>;\n}): Uint8Array {\n const transcript: CanonicalCborValue = {\n scheme: 1,\n path: 'slots',\n aead: 'xchacha20-poly1305',\n kem: args.kem,\n nonce: args.nonce,\n slots: canonicalizeSlots(args.slots, args.kem),\n };\n const encoded = encodeCanonicalCbor(transcript);\n const message = new Uint8Array(CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX.length + encoded.length);\n message.set(CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX, 0);\n message.set(encoded, CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX.length);\n return sha256(message);\n}\n\n// canonicalEncode(AD_CONTENT_SLOTS): the closed seven-key content-AEAD AAD for\n// the slots path. It re-binds the slots-path header AND carries both `slots_hash`\n// (binding to the exact transcript) and `slots_mac` (tying the content layer to\n// the CEK-keyed MAC the recipient matched). Both are deliberate, not redundant.\nexport function adContentSlots(args: {\n kem: SealedKem;\n nonce: Uint8Array;\n slotsHash: Uint8Array;\n slotsMac: Uint8Array;\n}): Uint8Array {\n const ad: CanonicalCborValue = {\n scheme: 1,\n path: 'slots',\n aead: 'xchacha20-poly1305',\n kem: args.kem,\n nonce: args.nonce,\n slots_hash: args.slotsHash,\n slots_mac: args.slotsMac,\n };\n return encodeCanonicalCbor(ad);\n}\n\n// canonicalEncode(AD_CONTENT_PASSPHRASE): the closed content-AEAD AAD for the\n// passphrase path. It binds the passphrase KDF parameters into the content tag,\n// so tampering with `salt` or any `params` value after encryption changes the\n// AAD and makes the AEAD open fail. The `normalization` profile id is a\n// scheme-fixed constant pinned into the AAD, never serialised on the wire. There\n// is NO `kem` key on this path.\nexport function adContentPassphrase(args: {\n nonce: Uint8Array;\n passphrase: {\n alg: string;\n salt: Uint8Array;\n params: { m: number; t: number; p: number };\n };\n}): Uint8Array {\n const ad: CanonicalCborValue = {\n scheme: 1,\n path: 'passphrase',\n aead: 'xchacha20-poly1305',\n nonce: args.nonce,\n passphrase: {\n alg: args.passphrase.alg,\n salt: args.passphrase.salt,\n params: {\n m: args.passphrase.params.m,\n t: args.passphrase.params.t,\n p: args.passphrase.params.p,\n },\n normalization: CARDANO_POE_PW_NORM_PROFILE,\n },\n };\n return encodeCanonicalCbor(ad);\n}\n\n// Slots-path content key: HKDF-SHA-256(ikm=CEK, salt=nonce, info=payload-v1).\n// The content is encrypted under this leaf of the CEK, never under the CEK\n// directly, so the wrap layer and the content layer never key the same primitive\n// on the same bytes.\nexport function slotsPayloadKey(args: { cek: Uint8Array; nonce: Uint8Array }): Uint8Array {\n return hkdfSha256({\n ikm: args.cek,\n salt: args.nonce,\n info: CARDANO_POE_HKDF_INFO_PAYLOAD,\n length: 32,\n });\n}\n\n// Passphrase-path content key: HKDF-SHA-256(ikm=CEK, salt=nonce,\n// info=payload-passphrase-v1).\nexport function passphrasePayloadKey(args: { cek: Uint8Array; nonce: Uint8Array }): Uint8Array {\n return hkdfSha256({\n ikm: args.cek,\n salt: args.nonce,\n info: CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE,\n length: 32,\n });\n}\n\n// Hybrid (mlkem768x25519) per-slot KEK salt:\n// SHA-256(\"cardano-poe-xwing-kek-salt-v1\" || kem_ct || pub_R). `kem_ct` is the\n// REASSEMBLED 1120-byte X-Wing ciphertext (the kem_ct anchors the KEK to a\n// slot-unique value) and `pub_R` the 1216-byte X-Wing recipient public key\n// (binding the KEK to the specific recipient) — the same two bindings the\n// classical `epk || pub_R` salt provides, expressed through a fixed-length\n// SHA-256 digest because the hybrid inputs are oversized.\nexport function xwingKekSalt(args: { kemCt: Uint8Array; pubR: Uint8Array }): Uint8Array {\n const message = new Uint8Array(\n CARDANO_POE_XWING_KEK_SALT_PREFIX.length + args.kemCt.length + args.pubR.length,\n );\n let offset = 0;\n message.set(CARDANO_POE_XWING_KEK_SALT_PREFIX, offset);\n offset += CARDANO_POE_XWING_KEK_SALT_PREFIX.length;\n message.set(args.kemCt, offset);\n offset += args.kemCt.length;\n message.set(args.pubR, offset);\n return sha256(message);\n}\n","// Multi-recipient sealed-PoE wrap (age-style ECIES + AEAD-bound slots).\n// Wire-field names are fixed by the standard: scheme, aead, kem, nonce, slots, slots_mac.\n//\n// Two KEM branches share one envelope shape, discriminated on the envelope-level\n// `kem` field:\n//\n// • kem: 'x25519' — classical age-style ECIES. Per-slot epk(32) + wrap(48).\n// • kem: 'mlkem768x25519' — X-Wing hybrid (ML-KEM-768 + X25519). Per-slot the\n// 1120-byte X-Wing enc carried as a chunked byte-string\n// array (`kem_ct`) + wrap(48). No per-slot epk.\n//\n// The slot type is a discriminated union so every consumer is forced — at compile\n// time — to branch on the KEM before touching kem-specific fields.\n\nimport { randomBytes } from '@noble/ciphers/utils.js';\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\n\nimport { chacha20Poly1305Encrypt } from '../aead/chacha20-poly1305';\nimport { xchacha20Poly1305Encrypt } from '../aead/xchacha20-poly1305';\nimport { hkdfSha256 } from '../kdf/hkdf';\nimport {\n mlkem768x25519Encapsulate,\n MLKEM768X25519_ENC_LENGTH,\n MLKEM768X25519_ESEED_LENGTH,\n MLKEM768X25519_PUBLIC_KEY_LENGTH,\n} from '../kem/mlkem768x25519';\nimport { x25519Ecdh, x25519PublicKey } from '../kem/x25519';\n\nimport { EciesSealedPoeError } from './errors';\nimport { chunkKemCt, type SealedKem } from './slots-codec';\nimport {\n adContentSlots,\n assertPlaintextWithinBound,\n computeSlotsHash,\n slotsPayloadKey,\n xwingKekSalt,\n} from './transcript';\n\n// HKDF info strings — fixed protocol labels for KEK derivation and the slot MAC.\n// Byte-length invariants enforce that the SCREAMING_SNAKE constants stay in sync\n// with the on-wire ASCII literals every conformant verifier hashes against.\nexport const CARDANO_POE_HKDF_INFO_KEK: Uint8Array = new TextEncoder().encode('cardano-poe-kek-v1');\n// Hybrid (X-Wing) per-slot KEK label. Distinct from the classical label so a\n// KEK derived under one KEM can never collide with the other. Reused verbatim as\n// the per-slot wrap AEAD AAD, exactly as the classical path reuses its own label.\nexport const CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-kek-mlkem768x25519-v1',\n);\nexport const CARDANO_POE_HKDF_INFO_SLOTS_MAC: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-slots-mac-v1',\n);\n\nconst ZERO_NONCE_12: Uint8Array = new Uint8Array(12);\nconst EMPTY_SALT: Uint8Array = new Uint8Array(0);\nconst X25519_PUBLIC_KEY_LENGTH = 32 as const;\nconst X25519_SECRET_KEY_LENGTH = 32 as const;\nconst CEK_LENGTH = 32 as const;\nconst NONCE_LENGTH = 24 as const;\nconst WRAP_LENGTH = 48 as const;\nconst SLOTS_MAC_LENGTH = 32 as const;\n\nif (CARDANO_POE_HKDF_INFO_KEK.length !== 18) {\n throw new Error('CARDANO_POE_HKDF_INFO_KEK byte-length invariant violated (expected 18)');\n}\nif (CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519.length !== 33) {\n throw new Error(\n 'CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519 byte-length invariant violated (expected 33)',\n );\n}\nif (CARDANO_POE_HKDF_INFO_SLOTS_MAC.length !== 24) {\n throw new Error('CARDANO_POE_HKDF_INFO_SLOTS_MAC byte-length invariant violated (expected 24)');\n}\nif (ZERO_NONCE_12.length !== 12) {\n throw new Error('ZERO_NONCE_12 byte-length invariant violated (expected 12)');\n}\n\n// Classical per-slot wire shape: { epk: bstr(32), wrap: bstr(48) }.\nexport interface X25519Slot {\n readonly epk: Uint8Array;\n readonly wrap: Uint8Array;\n}\n\n// Hybrid per-slot wire shape: { kem_ct: [ bstr .size (1..64) ], wrap: bstr(48) }.\n// `kem_ct` is the 1120-byte X-Wing enc carried as a chunked byte-string array\n// (the Cardano ledger caps any single metadatum bstr at 64 bytes). There is NO\n// per-slot epk and NO per-slot kem field — the KEM identifier is hoisted to\n// envelope scope (every slot shares it).\nexport interface Mlkem768X25519Slot {\n readonly kem_ct: ReadonlyArray<Uint8Array>;\n readonly wrap: Uint8Array;\n}\n\n// Back-compat alias retired: callers branch on the envelope `kem` and use the\n// concrete slot type. The discriminated `SealedEnvelope` below is the only\n// shape consumers should depend on.\n\n// Sealed envelope wire shape (discriminated on `kem`).\nexport type SealedEnvelope =\n | {\n readonly scheme: 1;\n readonly aead: 'xchacha20-poly1305';\n readonly kem: 'x25519';\n readonly nonce: Uint8Array;\n readonly slots: ReadonlyArray<X25519Slot>;\n readonly slots_mac: Uint8Array;\n }\n | {\n readonly scheme: 1;\n readonly aead: 'xchacha20-poly1305';\n readonly kem: 'mlkem768x25519';\n readonly nonce: Uint8Array;\n readonly slots: ReadonlyArray<Mlkem768X25519Slot>;\n readonly slots_mac: Uint8Array;\n };\n\nexport interface SealedPoeOutput {\n readonly envelope: SealedEnvelope;\n readonly ciphertext: Uint8Array;\n}\n\nexport interface WrapArgs {\n readonly plaintext: Uint8Array;\n readonly recipientPublicKeys: ReadonlyArray<Uint8Array>;\n // KEM branch selector. Defaults to 'x25519' for the classical path. The\n // recipient public-key length is validated against the chosen KEM.\n readonly kem?: SealedKem;\n readonly cek?: Uint8Array;\n readonly nonce?: Uint8Array;\n // Deterministic X25519 ephemeral scalars — x25519 branch only.\n readonly ephemeralSecrets?: ReadonlyArray<Uint8Array>;\n // Deterministic X-Wing encapsulation randomness (64 bytes each) — hybrid\n // branch only. One per recipient, parallel to recipientPublicKeys.\n readonly eseeds?: ReadonlyArray<Uint8Array>;\n readonly skipShuffle?: boolean;\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array): Uint8Array {\n const out = new Uint8Array(a.length + b.length);\n out.set(a, 0);\n out.set(b, a.length);\n return out;\n}\n\n// Anonymity invariant: wire ordering MUST NOT encode \"primary\n// recipient first\". A CSPRNG-keyed Fisher-Yates shuffle uniformly permutes the\n// slot array so trial-decrypt order leaks no recipient identity. The\n// slot-set HMAC is computed AFTER this shuffle, binding the on-wire order.\n//\n// Draw an unbiased index in [0, m) from a CSPRNG uint32 via rejection sampling.\n// A plain `u32 % m` skews toward the low residues whenever `m` does not divide\n// 2^32 evenly: the values [0, 2^32 mod m) each occur one extra time. This\n// function exists purely to produce a UNIFORM permutation, so the bias — though\n// cryptographically negligible — is exactly the property we cannot tolerate.\n// We reject any draw landing in the final partial block [limit, 2^32) and\n// redraw, leaving only the residues that map uniformly onto [0, m).\n// Exported so the rejection-bound arithmetic can be asserted directly in tests\n// without relying on a flaky statistical-distribution check.\nexport function uniformIndexBelow(m: number): number {\n // 2^32 mod m, computed without overflowing the 32-bit space.\n const limit = 0x1_0000_0000 - (0x1_0000_0000 % m);\n const buf = new Uint32Array(1);\n let x: number;\n do {\n crypto.getRandomValues(buf);\n x = buf[0] as number;\n } while (x >= limit);\n return x % m;\n}\n\nfunction csprngShuffle<T>(arr: T[]): void {\n for (let i = arr.length - 1; i > 0; i--) {\n const j = uniformIndexBelow(i + 1);\n const tmp = arr[i] as T;\n arr[i] = arr[j] as T;\n arr[j] = tmp;\n }\n}\n\n// Wrap the CEK for one classical recipient: age-style ECIES stanza.\nfunction wrapSlotX25519(args: {\n pubR: Uint8Array;\n privEph: Uint8Array | undefined;\n cek: Uint8Array;\n slotIdx: number;\n}): X25519Slot {\n const privEph = args.privEph ?? randomBytes(X25519_SECRET_KEY_LENGTH);\n if (privEph.length !== X25519_SECRET_KEY_LENGTH) {\n throw new EciesSealedPoeError(\n 'INVALID_EPHEMERAL_SECRET_LENGTH',\n `ephemeralSecrets[${args.slotIdx}] MUST be exactly ${X25519_SECRET_KEY_LENGTH} bytes, got ${privEph.length}`,\n );\n }\n const epk = x25519PublicKey({ secretKey: privEph });\n const shared = x25519Ecdh({ secretKey: privEph, theirPublicKey: args.pubR });\n // age v1 stanza salt is `epk || pub_R`.\n const kek = hkdfSha256({\n ikm: shared,\n salt: concat(epk, args.pubR),\n info: CARDANO_POE_HKDF_INFO_KEK,\n length: 32,\n });\n // Per-slot wrap AAD MUST be the 18-byte ASCII literal of the KEK info\n // string (never empty AAD).\n const wrap = chacha20Poly1305Encrypt({\n key: kek,\n nonce: ZERO_NONCE_12,\n aad: CARDANO_POE_HKDF_INFO_KEK,\n plaintext: args.cek,\n });\n if (wrap.length !== WRAP_LENGTH) {\n throw new Error(`internal: wrap.length=${wrap.length}, expected ${WRAP_LENGTH}`);\n }\n return { epk, wrap };\n}\n\n// Wrap the CEK for one hybrid recipient: X-Wing encapsulation → HKDF → AEAD.\n// The KEK info label doubles as the wrap AEAD AAD, mirroring the classical path.\nfunction wrapSlotMlkem768X25519(args: {\n pubR: Uint8Array;\n eseed: Uint8Array | undefined;\n cek: Uint8Array;\n}): Mlkem768X25519Slot {\n const { enc, ss } = mlkem768x25519Encapsulate({\n publicKey: args.pubR,\n ...(args.eseed !== undefined ? { eseed: args.eseed } : {}),\n });\n if (enc.length !== MLKEM768X25519_ENC_LENGTH) {\n throw new Error(`internal: enc.length=${enc.length}, expected ${MLKEM768X25519_ENC_LENGTH}`);\n }\n // The hybrid KEK salt binds the slot's own reassembled X-Wing ciphertext and\n // the recipient public key, mirroring the classical `epk || pub_R` salt: the\n // ciphertext anchors the KEK to a slot-unique value and `pub_R` binds it to\n // the specific recipient. It is computed outside the KEM, over the slot's wire\n // bytes, so it holds X-Wing as a black-box KEM.\n const kek = hkdfSha256({\n ikm: ss,\n salt: xwingKekSalt({ kemCt: enc, pubR: args.pubR }),\n info: CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519,\n length: 32,\n });\n const wrap = chacha20Poly1305Encrypt({\n key: kek,\n nonce: ZERO_NONCE_12,\n aad: CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519,\n plaintext: args.cek,\n });\n if (wrap.length !== WRAP_LENGTH) {\n throw new Error(`internal: wrap.length=${wrap.length}, expected ${WRAP_LENGTH}`);\n }\n return { kem_ct: chunkKemCt(enc), wrap };\n}\n\nexport function eciesSealedPoeWrap(args: WrapArgs): SealedPoeOutput {\n const { plaintext, recipientPublicKeys } = args;\n const kem: SealedKem = args.kem ?? 'x25519';\n const n = recipientPublicKeys.length;\n\n // Reject a plaintext at or above the single-shot keystream capacity before any\n // KEM or AEAD work, so an over-large input never reaches the content cipher.\n assertPlaintextWithinBound(plaintext.length);\n\n // There is no fixed upper bound on slot count; the producer SDK polices the\n // per-record byte budget. Only the lower bound is enforced here.\n if (n < 1) {\n throw new EciesSealedPoeError(\n 'ENC_SLOTS_EMPTY',\n `recipientPublicKeys.length=${n} must be >= 1`,\n );\n }\n\n const expectedPubLen =\n kem === 'x25519' ? X25519_PUBLIC_KEY_LENGTH : MLKEM768X25519_PUBLIC_KEY_LENGTH;\n for (let i = 0; i < n; i++) {\n const pub = recipientPublicKeys[i];\n if (pub === undefined || pub.length !== expectedPubLen) {\n throw new EciesSealedPoeError(\n 'KEM_EPK_LENGTH_MISMATCH',\n `recipientPublicKeys[${i}] MUST be exactly ${expectedPubLen} bytes for kem='${kem}'`,\n );\n }\n }\n\n if (kem === 'x25519') {\n if (args.eseeds !== undefined) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n \"eseeds is an X-Wing (mlkem768x25519) override and MUST NOT be supplied for kem='x25519'\",\n );\n }\n if (args.ephemeralSecrets !== undefined && args.ephemeralSecrets.length !== n) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n `ephemeralSecrets.length=${args.ephemeralSecrets.length} must match recipientPublicKeys.length=${n}`,\n );\n }\n } else {\n if (args.ephemeralSecrets !== undefined) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n \"ephemeralSecrets is an X25519 override and MUST NOT be supplied for kem='mlkem768x25519'\",\n );\n }\n if (args.eseeds !== undefined) {\n if (args.eseeds.length !== n) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n `eseeds.length=${args.eseeds.length} must match recipientPublicKeys.length=${n}`,\n );\n }\n for (let i = 0; i < n; i++) {\n const eseed = args.eseeds[i]!;\n if (eseed.length !== MLKEM768X25519_ESEED_LENGTH) {\n throw new EciesSealedPoeError(\n 'INVALID_EPHEMERAL_SECRET_LENGTH',\n `eseeds[${i}] MUST be exactly ${MLKEM768X25519_ESEED_LENGTH} bytes, got ${eseed.length}`,\n );\n }\n }\n }\n }\n\n const cek = args.cek ?? randomBytes(CEK_LENGTH);\n const nonce = args.nonce ?? randomBytes(NONCE_LENGTH);\n if (cek.length !== CEK_LENGTH) {\n throw new EciesSealedPoeError(\n 'INVALID_CEK_LENGTH',\n `cek MUST be exactly ${CEK_LENGTH} bytes, got ${cek.length}`,\n );\n }\n if (nonce.length !== NONCE_LENGTH) {\n throw new EciesSealedPoeError(\n 'NONCE_LENGTH_MISMATCH',\n `nonce MUST be exactly ${NONCE_LENGTH} bytes, got ${nonce.length}`,\n );\n }\n\n let envelope: SealedEnvelope;\n // `slots_hash` is the SHA-256 of the header-bound slots transcript. It is\n // computed once here, fed into both the slot-set MAC and the content AAD.\n let slotsHash: Uint8Array;\n if (kem === 'x25519') {\n const slots: X25519Slot[] = [];\n for (let i = 0; i < n; i++) {\n slots.push(\n wrapSlotX25519({\n pubR: recipientPublicKeys[i]!,\n privEph: args.ephemeralSecrets ? (args.ephemeralSecrets[i] as Uint8Array) : undefined,\n cek,\n slotIdx: i,\n }),\n );\n }\n // Anonymity invariant (see csprngShuffle comment). The transcript is built\n // AFTER the shuffle so the MAC binds the on-wire slot order.\n if (args.skipShuffle !== true) {\n csprngShuffle(slots);\n }\n slotsHash = computeSlotsHash({ kem: 'x25519', nonce, slots });\n envelope = {\n scheme: 1,\n aead: 'xchacha20-poly1305',\n kem: 'x25519',\n nonce,\n slots,\n slots_mac: computeSlotsMac(cek, slotsHash),\n };\n } else {\n const slots: Mlkem768X25519Slot[] = [];\n for (let i = 0; i < n; i++) {\n slots.push(\n wrapSlotMlkem768X25519({\n pubR: recipientPublicKeys[i]!,\n eseed: args.eseeds ? (args.eseeds[i] as Uint8Array) : undefined,\n cek,\n }),\n );\n }\n if (args.skipShuffle !== true) {\n csprngShuffle(slots);\n }\n slotsHash = computeSlotsHash({ kem: 'mlkem768x25519', nonce, slots });\n envelope = {\n scheme: 1,\n aead: 'xchacha20-poly1305',\n kem: 'mlkem768x25519',\n nonce,\n slots,\n slots_mac: computeSlotsMac(cek, slotsHash),\n };\n }\n\n // Content is encrypted under a derived `payload_key` (a separate HKDF leaf of\n // the CEK keyed on the nonce), never under the CEK directly, so the wrap layer\n // and the content layer never key the same primitive on the same bytes. The\n // AAD re-binds the slots-path header and carries both `slots_hash` and\n // `slots_mac`.\n const payloadKey = slotsPayloadKey({ cek, nonce });\n const adContent = adContentSlots({\n kem: envelope.kem,\n nonce,\n slotsHash,\n slotsMac: envelope.slots_mac,\n });\n const ciphertext = xchacha20Poly1305Encrypt({\n key: payloadKey,\n nonce,\n aad: adContent,\n plaintext,\n });\n\n return { envelope, ciphertext };\n}\n\n// Slot-set MAC binds the slots transcript to the CEK. The transcript is pre-\n// hashed to a 32-byte `slots_hash` (header fields + canonicalised slot set,\n// including the entire chunked kem_ct on the hybrid path), and that hash is the\n// message of a CEK-keyed HMAC. Pre-hashing only changes the HMAC message from\n// the full transcript to its SHA-256, leaving the CEK-keyed commitment intact.\nfunction computeSlotsMac(cek: Uint8Array, slotsHash: Uint8Array): Uint8Array {\n const hmacKey = hkdfSha256({\n ikm: cek,\n salt: EMPTY_SALT,\n info: CARDANO_POE_HKDF_INFO_SLOTS_MAC,\n length: 32,\n });\n const slotsMac = hmac(sha256, hmacKey, slotsHash);\n if (slotsMac.length !== SLOTS_MAC_LENGTH) {\n throw new Error(`internal: slots_mac.length=${slotsMac.length}, expected ${SLOTS_MAC_LENGTH}`);\n }\n return slotsMac;\n}\n","// Label 309 v1 chunked-bytes and chunked-text helpers.\n//\n// The Cardano ledger CDDL constrains every `transaction_metadatum` byte string\n// (`bstr`) and text string (`tstr`) to ≤ 64 bytes. Label 309 therefore carries\n// any logical value larger than 64 bytes as an ARRAY of ≤ 64-byte chunks. Two\n// chunked shapes exist:\n//\n// * `bytes-chunk-array` — `[ 1* bstr .size (1..64) ]` — used for chunked\n// `COSE_Sign1` bytes (`sigs[i].cose_sign1`) and the chunked\n// `cbor<COSE_Key>` blob (`sigs[i].cose_key`).\n// * `uri-chunk-array` — `[ 1* tstr .size (1..64) ]` — used as the inner\n// element of `items[i].uris` and `merkle[i].uris`.\n//\n// Two reconstruction invariants are normative:\n//\n// 1. **Per-chunk size.** `[1, 64]` bytes (zero-length chunks rejected\n// identically to oversized chunks). The validator's schema layer enforces\n// this; the helpers here assume the schema gate has fired.\n// 2. **UTF-8 codepoint integrity (text only).** The reconstructed\n// concatenation MUST be valid UTF-8. The canonical-CBOR decoder already\n// rejects any `tstr` that is not valid UTF-8 (→ `MALFORMED_CBOR`) before\n// these helpers run, so each chunk arrives as a well-formed string; the\n// `TextDecoder({ fatal: true })` pass below is the residual structural\n// guard.\n\nconst CHUNK_MAX_BYTES = 64;\n\nconst UTF8_ENCODER = new TextEncoder();\n\n/**\n * Split a logical byte string into ≤ 64-byte CBOR-bytes chunks\n * (`bytes-chunk-array`). Always returns a non-empty array.\n *\n * For empty inputs, returns `[<empty>]` so the caller's schema gate fails\n * later via `CHUNK_TOO_LARGE` (zero-length chunks are rejected). Real callers\n * feed COSE_Sign1 / cbor<COSE_Key> byte strings, which are never empty.\n */\nexport function chunkBytes(value: Uint8Array): Uint8Array[] {\n if (value.length === 0) return [new Uint8Array(0)];\n const chunks: Uint8Array[] = [];\n for (let i = 0; i < value.length; i += CHUNK_MAX_BYTES) {\n chunks.push(value.subarray(i, Math.min(i + CHUNK_MAX_BYTES, value.length)));\n }\n return chunks;\n}\n\n/**\n * Reverse of {@link chunkBytes}: concatenate chunked bytes (`sigs[i].cose_sign1`,\n * `sigs[i].cose_key`) into a single buffer for downstream CBOR/COSE decode.\n * The validator-layer schema enforces the per-chunk size + non-empty-array\n * invariants before this helper runs, so it makes no length checks.\n */\nexport function bytesChunkArrayConcat(chunks: ReadonlyArray<Uint8Array>): Uint8Array {\n let total = 0;\n for (const c of chunks) total += c.length;\n const out = new Uint8Array(total);\n let offset = 0;\n for (const c of chunks) {\n out.set(c, offset);\n offset += c.length;\n }\n return out;\n}\n\nexport type ReconstructUriResult =\n | { ok: true; uri: string }\n | { ok: false; code: 'INVALID_URI'; reason: string };\n\n/**\n * Reconstruct a chunked URI (`uri-chunk-array`) into its logical string.\n *\n * The chunks arrive as JS strings produced by the canonical-CBOR decoder,\n * which already rejects any non-UTF-8 `tstr` (surfacing it upstream as\n * `MALFORMED_CBOR`) — so by the time this helper runs the only structural\n * task left is to byte-concatenate and decode. We re-encode each chunk to its\n * UTF-8 bytes, concatenate, and decode the whole with `{ fatal: true }`. A\n * conformant producer never splits a multi-byte codepoint across chunks (the\n * Cardano 64-byte cap is applied on codepoint boundaries), so this decode\n * succeeds for every well-formed record; the `INVALID_URI` branch is the\n * residual guard for a byte sequence that does not reconstruct to valid UTF-8.\n *\n * Per-scheme shape validation (the IPFS CID profile) and absolute-URI /\n * fragment-identifier / scheme-set checks fire in `validator.ts`, NOT here —\n * this helper is structural-only.\n */\nexport function reconstructChunkedUri(chunks: ReadonlyArray<string>): ReconstructUriResult {\n const merged = bytesChunkArrayConcat(chunks.map((c) => UTF8_ENCODER.encode(c)));\n try {\n const uri = new TextDecoder('utf-8', { fatal: true }).decode(merged);\n return { ok: true, uri };\n } catch (cause) {\n return {\n ok: false,\n code: 'INVALID_URI',\n reason: cause instanceof Error ? cause.message : String(cause),\n };\n }\n}\n\n/**\n * Chunk a URI string into `[ tstr .size (1..64) ]`, splitting on UTF-8 byte\n * boundaries so no multi-byte codepoint straddles a chunk.\n *\n * For pure-ASCII URIs (the common `ar://`, `ipfs://` cases) this collapses\n * to plain 64-byte byte-slice chunks. For URIs with non-ASCII path components\n * (rare but possible — RFC 3986 §2.5 IRIs / percent-encoded UTF-8) the\n * algorithm rewinds to the nearest codepoint boundary at each chunk break.\n */\nexport function chunkUri(uri: string): string[] {\n const bytes = UTF8_ENCODER.encode(uri);\n if (bytes.length === 0) return [''];\n if (bytes.length <= CHUNK_MAX_BYTES) return [uri];\n const decoder = new TextDecoder('utf-8', { fatal: true });\n const chunks: string[] = [];\n let cursor = 0;\n while (cursor < bytes.length) {\n let end = Math.min(cursor + CHUNK_MAX_BYTES, bytes.length);\n // Rewind to the start of the previous UTF-8 codepoint if we landed in\n // the middle of a multibyte sequence. UTF-8 continuation bytes match\n // 0b10xx_xxxx; rewind while the byte at `end` is a continuation.\n while (end < bytes.length && (bytes[end]! & 0xc0) === 0x80) end--;\n chunks.push(decoder.decode(bytes.subarray(cursor, end)));\n cursor = end;\n }\n return chunks;\n}\n","// Label 309 v1 error-code catalogue — single source of truth for the\n// structural-validator codes (Part A) and the verifier-layer codes (Part B)\n// that downstream verifiers re-export from this package.\n//\n// The structural validator emits ONLY Part A codes. Part B codes are\n// re-exported so consumers can `import { ErrorCode } from '@cardanowall/poe-standard'`\n// and dispatch on a single union type without round-tripping through the\n// verifier package.\n//\n// Codes are SCREAMING_SNAKE_CASE and MUST match the canonical taxonomy\n// byte-exact across the TS/PY/RS implementations — no lowercase synonyms,\n// no `schema_*`-prefixed parser-internal codes.\n\n// =============================================================================\n// Part A — structural validator codes\n// =============================================================================\nexport const STRUCTURAL_ERROR_CODES = [\n // CBOR decode layer. A single code covers every canonical-decode failure —\n // malformed/truncated bytes, indefinite-length encodings, non-canonical\n // (unsorted) map-key ordering, duplicate map keys, non-minimal integers, and\n // invalid UTF-8 — by design (no separate duplicate-key code).\n 'MALFORMED_CBOR',\n // Generic schema-layer\n 'SCHEMA_TYPE_MISMATCH',\n 'SCHEMA_MISSING_REQUIRED',\n 'SCHEMA_UNKNOWN_FIELD',\n 'SCHEMA_INVALID_LITERAL',\n 'SCHEMA_EMPTY_RECORD',\n // Hash-map\n 'HASH_DIGEST_LENGTH_MISMATCH',\n 'UNSUPPORTED_HASH_ALG',\n // Top-level `merkle[]`\n 'UNSUPPORTED_MERKLE_COMMIT_ALG',\n // URI / chunking. A chunk whose bytes do not reconstruct to valid UTF-8\n // surfaces as MALFORMED_CBOR at decode (cbor2 rejects invalid-UTF-8 tstr)\n // or, in the residual reconstruct guard, as INVALID_URI — there is no\n // separate codepoint-split code.\n 'INVALID_URI',\n 'CHUNK_TOO_LARGE',\n // Encryption envelope\n 'UNAUTHENTICATED_CIPHER_FORBIDDEN',\n 'UNSUPPORTED_AEAD_ALG',\n 'NONCE_LENGTH_MISMATCH',\n 'UNSUPPORTED_ENVELOPE_SCHEME',\n 'ENC_SLOTS_EMPTY',\n 'ENC_SLOT_INVALID_SHAPE',\n 'ENC_SLOTS_DUPLICATE_KEM_MATERIAL',\n 'ENC_SLOTS_TOO_MANY',\n 'ENC_ENVELOPE_TOO_LARGE',\n 'UNSUPPORTED_KEM_ALG',\n 'ENC_KEM_REQUIRED',\n 'KEM_EPK_LENGTH_MISMATCH',\n 'KEM_CT_LENGTH_MISMATCH',\n 'WRAP_LENGTH_MISMATCH',\n 'ENC_SLOTS_MAC_INVALID_LENGTH',\n 'ENC_SLOTS_MAC_REQUIRED',\n 'ENC_SLOTS_REQUIRED',\n 'ENC_EXCLUSIVITY_VIOLATION',\n 'ENC_NO_KEY_PATH',\n 'ENC_REQUIRES_CONTENT_HASH',\n 'ENC_PASSPHRASE_ALG_UNSUPPORTED',\n 'ENC_PASSPHRASE_SALT_TOO_SHORT',\n 'ENC_PASSPHRASE_SALT_TOO_LONG',\n 'ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW',\n 'ENC_PASSPHRASE_PARAMS_EXCEED_POLICY',\n // Signatures\n 'MALFORMED_SIG_COSE_SIGN1',\n 'SIGNATURE_UNSUPPORTED',\n 'SIG_ENTRY_INVALID_SHAPE',\n 'SIG_ENTRY_KID_COSE_KEY_CONFLICT',\n 'SIG_PRIVATE_KEY_LEAKED',\n // Supersedence\n 'SUPERSEDES_TX_INVALID_LENGTH',\n // Forward-compat critical extensions\n 'EXTENSION_UNSUPPORTED_CRITICAL',\n 'CRIT_SHAPE_INVALID',\n] as const;\n\n// =============================================================================\n// Part B — verifier-layer codes\n// Re-exported so downstream verifiers can dispatch on a single union.\n// The structural validator NEVER emits these.\n// =============================================================================\nexport const VERIFIER_ERROR_CODES = [\n 'METADATA_NOT_FOUND',\n 'INSUFFICIENT_CONFIRMATIONS',\n 'SIGNATURE_INVALID',\n 'SIGNER_KEY_UNRESOLVED',\n 'WALLET_ADDRESS_MISMATCH',\n 'URI_TARGET_FORBIDDEN',\n 'URI_INTEGRITY_MISMATCH',\n 'URI_FETCH_FAILED',\n 'CONTENT_UNAVAILABLE',\n 'CIPHERTEXT_UNAVAILABLE',\n 'PROVIDER_UNAVAILABLE',\n 'SERVICE_INDEPENDENCE_VIOLATION',\n 'WRONG_DECRYPTION_INPUT_SHAPE',\n 'WRONG_RECIPIENT_KEY',\n 'TAMPERED_HEADER',\n 'TAMPERED_CIPHERTEXT',\n 'KDF_DERIVATION_FAILED',\n 'SCHEMA_MERKLE_LEAF_COUNT_MISMATCH',\n 'SCHEMA_MERKLE_LEAVES_FORMAT_UNSUPPORTED',\n 'SCHEMA_MERKLE_LEAVES_MALFORMED',\n 'MERKLE_ROOT_MISMATCH',\n 'MERKLE_LEAVES_UNAVAILABLE',\n 'MERKLE_LEAVES_INFORMATIVE_FORM',\n 'MERKLE_UNSUPPORTED',\n 'OUT_OF_PROFILE_SKIPPED',\n] as const;\n\nexport const ERROR_CODES = [...STRUCTURAL_ERROR_CODES, ...VERIFIER_ERROR_CODES] as const;\n\nexport type StructuralErrorCode = (typeof STRUCTURAL_ERROR_CODES)[number];\nexport type VerifierErrorCode = (typeof VERIFIER_ERROR_CODES)[number];\nexport type ErrorCode = (typeof ERROR_CODES)[number];\n\n// Severity classification. Codes not listed are `error` by default.\n//\n// `info` — a deliberate non-check (algorithm out of profile, unrecognised\n// signature algorithm at the opt-in informational tier).\n//\n// `warning` — a non-fatal anomaly that occurred at runtime but did not\n// invalidate the record (e.g. a transient gateway failure, partial leaves\n// availability).\n//\n// `MERKLE_UNSUPPORTED` / `OUT_OF_PROFILE_SKIPPED` carry dual severity\n// (`info` when another commitment was validated; `error` for the\n// merkle-only / strict-mode case). The verifier emits the resolved severity\n// per-issue; this map records the default `info` reading.\nexport type Severity = 'error' | 'warning' | 'info';\n\nexport const SEVERITY: Readonly<Record<ErrorCode, Severity>> = Object.freeze({\n // --- Part A ---\n MALFORMED_CBOR: 'error',\n SCHEMA_TYPE_MISMATCH: 'error',\n SCHEMA_MISSING_REQUIRED: 'error',\n SCHEMA_UNKNOWN_FIELD: 'error',\n SCHEMA_INVALID_LITERAL: 'error',\n SCHEMA_EMPTY_RECORD: 'error',\n HASH_DIGEST_LENGTH_MISMATCH: 'error',\n UNSUPPORTED_HASH_ALG: 'error',\n UNSUPPORTED_MERKLE_COMMIT_ALG: 'error',\n INVALID_URI: 'error',\n CHUNK_TOO_LARGE: 'error',\n UNAUTHENTICATED_CIPHER_FORBIDDEN: 'error',\n UNSUPPORTED_AEAD_ALG: 'error',\n NONCE_LENGTH_MISMATCH: 'error',\n UNSUPPORTED_ENVELOPE_SCHEME: 'error',\n ENC_SLOTS_EMPTY: 'error',\n ENC_SLOT_INVALID_SHAPE: 'error',\n ENC_SLOTS_DUPLICATE_KEM_MATERIAL: 'error',\n ENC_SLOTS_TOO_MANY: 'error',\n ENC_ENVELOPE_TOO_LARGE: 'error',\n UNSUPPORTED_KEM_ALG: 'error',\n ENC_KEM_REQUIRED: 'error',\n KEM_EPK_LENGTH_MISMATCH: 'error',\n KEM_CT_LENGTH_MISMATCH: 'error',\n WRAP_LENGTH_MISMATCH: 'error',\n ENC_SLOTS_MAC_INVALID_LENGTH: 'error',\n ENC_SLOTS_MAC_REQUIRED: 'error',\n ENC_SLOTS_REQUIRED: 'error',\n ENC_EXCLUSIVITY_VIOLATION: 'error',\n ENC_NO_KEY_PATH: 'error',\n ENC_REQUIRES_CONTENT_HASH: 'error',\n ENC_PASSPHRASE_ALG_UNSUPPORTED: 'error',\n ENC_PASSPHRASE_SALT_TOO_SHORT: 'error',\n ENC_PASSPHRASE_SALT_TOO_LONG: 'error',\n ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW: 'error',\n ENC_PASSPHRASE_PARAMS_EXCEED_POLICY: 'error',\n MALFORMED_SIG_COSE_SIGN1: 'error',\n SIGNATURE_UNSUPPORTED: 'info',\n SIG_ENTRY_INVALID_SHAPE: 'error',\n SIG_ENTRY_KID_COSE_KEY_CONFLICT: 'error',\n SIG_PRIVATE_KEY_LEAKED: 'error',\n SUPERSEDES_TX_INVALID_LENGTH: 'error',\n EXTENSION_UNSUPPORTED_CRITICAL: 'error',\n CRIT_SHAPE_INVALID: 'error',\n // --- Part B ---\n METADATA_NOT_FOUND: 'error',\n INSUFFICIENT_CONFIRMATIONS: 'info',\n SIGNATURE_INVALID: 'error',\n SIGNER_KEY_UNRESOLVED: 'error',\n WALLET_ADDRESS_MISMATCH: 'error',\n URI_TARGET_FORBIDDEN: 'error',\n URI_INTEGRITY_MISMATCH: 'error',\n URI_FETCH_FAILED: 'warning',\n CONTENT_UNAVAILABLE: 'error',\n CIPHERTEXT_UNAVAILABLE: 'error',\n PROVIDER_UNAVAILABLE: 'error',\n SERVICE_INDEPENDENCE_VIOLATION: 'error',\n WRONG_DECRYPTION_INPUT_SHAPE: 'error',\n WRONG_RECIPIENT_KEY: 'error',\n TAMPERED_HEADER: 'error',\n TAMPERED_CIPHERTEXT: 'error',\n KDF_DERIVATION_FAILED: 'error',\n SCHEMA_MERKLE_LEAF_COUNT_MISMATCH: 'error',\n SCHEMA_MERKLE_LEAVES_FORMAT_UNSUPPORTED: 'error',\n SCHEMA_MERKLE_LEAVES_MALFORMED: 'error',\n MERKLE_ROOT_MISMATCH: 'error',\n MERKLE_LEAVES_UNAVAILABLE: 'warning',\n MERKLE_LEAVES_INFORMATIVE_FORM: 'info',\n // Dual-severity — default reading is `info`; the verifier promotes to\n // `error` for merkle-only records (no `items[]` content claim was\n // validated in the same record).\n MERKLE_UNSUPPORTED: 'info',\n // Dual-severity — default reading is `info` (render mode); strict\n // end-to-end verifiers promote to `error`.\n OUT_OF_PROFILE_SKIPPED: 'info',\n});\n\nexport function severityOf(code: ErrorCode): Severity {\n return SEVERITY[code];\n}\n","// Label 309 v1 structural validator (the Part A structural-validation role).\n//\n// Pure function over CBOR bytes — performs no I/O, opens no socket, decodes\n// no ciphertext. Cryptographic signature verification, chain resolution, URI\n// fetching, decryption, and confirmation-depth checks are the verifier's\n// concern (the Part B verifier role) and live in `@cardanowall/sdk-ts`.\n//\n// Pipeline:\n// Step 1 Resource boundary — the enc-envelope slot-count and decoded-\n// size caps (MAX_SLOTS / decoded-envelope\n// bound, shared with the unwrap layer) are\n// enforced inline in the domain pass before\n// any per-slot work.\n// Step 2 Canonical CBOR decode — `decodeCanonicalCbor` from crypto-core\n// surfaces malformed / non-canonical /\n// duplicate-key inputs as typed errors.\n// Step 3 Schema parse — Zod schema in `./schema.ts`; the mapper\n// below lifts each Zod issue to a\n// SCREAMING_SNAKE structural code.\n// Step 4 Domain checks — cross-field rules, registry membership,\n// URI reconstruction + per-scheme shape\n// (the IPFS CID profile), `enc`\n// cross-field invariants, `sigs[i]`\n// closed-map check + COSE_Sign1 structural\n// decode (path-1/path-2 mutual exclusion,\n// `SIG_PRIVATE_KEY_LEAKED` guard).\n// Step 5 Result emission — `{ ok: true, record, info?, warnings? }`\n// or `{ ok: false, issues }`.\n//\n// The validator NEVER throws — failure paths route through the discriminated\n// `ValidateResult` union so callers handle errors as data.\n\nimport { z } from 'zod';\n\nimport { decodeCanonicalCbor } from '@cardanowall/crypto-core/cbor';\nimport { CoseVerifyError, decodeCoseSign1 } from '@cardanowall/crypto-core/cose';\n// The verifier resource bounds the sealed-PoE unwrap layer enforces. Importing\n// the same constants here, rather than re-declaring them, makes the structural\n// validator and the unwrap layer trip the identical thresholds: a divergence is\n// impossible because there is one definition. Both are deployment-pinned\n// reference values, not wire fields.\nimport { MAX_DECODED_ENVELOPE_BYTES, MAX_SLOTS } from '@cardanowall/crypto-core/sealed-poe';\n\nimport { bytesChunkArrayConcat, reconstructChunkedUri } from './chunked';\nimport { SEVERITY, type ErrorCode, type Severity } from './error-codes';\nimport {\n EncryptionEnvelopeSchema,\n isExtensionKey,\n PoeRecordSchema,\n TOP_LEVEL_BASE_KEYS,\n type ItemEntry,\n type MerkleCommit,\n type PoeRecord,\n type SigEntry,\n type Slot,\n} from './schema';\n\n// =============================================================================\n// Registries\n// =============================================================================\n\n// Content-hash algorithm registry. Map value = digest length.\nconst HASH_ALG_LENGTHS: Readonly<Record<string, number>> = {\n 'sha2-256': 32,\n 'blake2b-256': 32,\n};\n\n// Merkle list-commitment algorithm registry.\nconst MERKLE_COMMIT_ALG_LENGTHS: Readonly<Record<string, number>> = {\n 'rfc9162-sha256': 32,\n};\n\n// Content AEAD registry. Value = nonce length.\nconst AEAD_NONCE_LENGTHS: Readonly<Record<string, number>> = {\n 'xchacha20-poly1305': 24,\n};\n\n// Unauthenticated-cipher family. An `enc.aead` naming any of these is rejected\n// with `UNAUTHENTICATED_CIPHER_FORBIDDEN` (not the generic `UNSUPPORTED_AEAD_ALG`)\n// so the failure names the integrity hazard. Two arms:\n// - block-cipher modes with no integrity (`cbc`, `ctr`, `ecb`, `cfb`, `ofb`)\n// appearing as a delimited token, which matches every key-size spelling\n// (`aes-cbc`, `aes-256-cbc`, `aes-128-cbc`, `des-ede3-cbc`, …);\n// - legacy stream/block ciphers as a leading token (`rc4`, `des`, `3des`).\n// The token delimiters keep the authenticated AEADs (`aes-256-gcm`,\n// `chacha20-poly1305`, `xchacha20-poly1305`) from matching. The trailing\n// boundary tolerates a single trailing `\\n` (`\\n?$`) so a forbidden cipher\n// cannot evade the denylist by appending one newline (`aes-256-cbc\\n` /\n// `rc4\\n`), matching the Python/Rust validators.\nconst UNAUTHENTICATED_CIPHER_RE =\n /(?:^|[-_])(?:cbc|ctr|ecb|cfb|ofb)(?:[-_]|\\n?$)|^(?:rc4|des|3des)(?:[-_]|\\n?$)/i;\n\n// KEM registry, expressed as a per-KEM slot DESCRIPTOR.\n//\n// Each registered KEM pins the exact recipient-slot shape:\n//\n// - x25519: `{ epk: bstr(32), wrap: bstr(48) }` — classical\n// ephemeral-static X25519. The per-slot `epk` is the 32-byte ephemeral\n// public key.\n// - mlkem768x25519: `{ kem_ct: <1120-byte X-Wing enc>, wrap: bstr(48) }` —\n// the X-Wing hybrid (ML-KEM-768 + X25519). The ciphertext is carried as a\n// chunked byte-string array (`kem_ct`) that MUST reassemble to exactly\n// 1120 bytes; there is NO per-slot `epk` on the hybrid path.\n//\n// A descriptor declares the slot's *ciphertext-bearing* field (`epk` for a\n// classical KEM, `kem_ct` for a hybrid) and its expected reassembled byte\n// length. `wrap` is 48 bytes for every KEM (32-byte CEK + 16-byte AEAD tag).\n// The validator branches on the descriptor's `field` to know which field MUST\n// be present and which MUST be absent, so adding a future KEM is a one-line\n// registry edit, not a new code path.\ntype KemSlotField = 'epk' | 'kem_ct';\ninterface KemSlotDescriptor {\n /** The ciphertext-bearing slot field this KEM uses. */\n readonly field: KemSlotField;\n /** Expected length of that field (reassembled length for a chunked field). */\n readonly fieldLength: number;\n /** `wrap` length — 32-byte CEK + 16-byte AEAD tag. */\n readonly wrapLength: number;\n}\nconst KEM_SLOT_DESCRIPTORS: Readonly<Record<string, KemSlotDescriptor>> = {\n x25519: { field: 'epk', fieldLength: 32, wrapLength: 48 },\n mlkem768x25519: { field: 'kem_ct', fieldLength: 1120, wrapLength: 48 },\n};\n\n// The length-mismatch code emitted when a slot's ciphertext-bearing field has\n// the wrong (reassembled) length, keyed by the descriptor's `field`.\nconst KEM_FIELD_LENGTH_CODE: Readonly<Record<KemSlotField, ErrorCode>> = {\n epk: 'KEM_EPK_LENGTH_MISMATCH',\n kem_ct: 'KEM_CT_LENGTH_MISMATCH',\n};\n\n// Fixed envelope-field lengths used by the decoded-envelope byte backstop. The\n// nonce is the XChaCha20-Poly1305 nonce (also the AEAD registry value) and\n// `slots_mac` is a SHA-256 MAC; both are pinned by the construction, so the\n// backstop measures the same aggregate the unwrap layer does.\nconst NONCE_LENGTH = 24;\nconst SLOTS_MAC_LENGTH = 32;\n\n// Passphrase KDF registry.\nconst PASSPHRASE_KDF_ALGS: ReadonlySet<string> = new Set(['argon2id']);\n\n// Signature-algorithm baseline. `-8` (EdDSA, curve-agnostic — pinned to\n// Ed25519) is the mandatory baseline; `-19` (Ed25519 fully-specified) is\n// optional and verified identically under the Ed25519 primitive when\n// accepted. The reference validator accepts both; anything else surfaces as\n// `SIGNATURE_UNSUPPORTED` (info-severity).\nconst KNOWN_SIG_ALG_IDS: ReadonlySet<number> = new Set([-8, -19]);\n\n// =============================================================================\n// Result types\n// =============================================================================\n\nexport interface ValidationIssue {\n readonly code: ErrorCode;\n readonly path: ReadonlyArray<string | number>;\n readonly message: string;\n readonly severity: Severity;\n}\n\nexport type ValidateResult =\n | {\n readonly ok: true;\n readonly record: PoeRecord;\n readonly warnings?: ReadonlyArray<ValidationIssue>;\n readonly info?: ReadonlyArray<ValidationIssue>;\n }\n | { readonly ok: false; readonly issues: ReadonlyArray<ValidationIssue> };\n\n// =============================================================================\n// Public entry point\n// =============================================================================\n\nexport function validatePoeRecord(bytes: Uint8Array): ValidateResult {\n // Step 2 — canonical CBOR decode. Every decode failure surfaces as the single\n // MALFORMED_CBOR code: malformed/truncated bytes, indefinite-length\n // (streaming) encodings, non-canonical map-key ordering, duplicate map keys,\n // non-minimal integers, and invalid UTF-8. The taxonomy has no finer-grained\n // CBOR-decode codes — the validator catches all of these at decode and\n // reports one error.\n let decoded: unknown;\n try {\n decoded = decodeCanonicalCbor(bytes);\n } catch (cause) {\n return {\n ok: false,\n issues: [\n {\n code: 'MALFORMED_CBOR',\n path: [],\n message: cause instanceof Error ? cause.message : String(cause),\n severity: 'error',\n },\n ],\n };\n }\n\n // Step 3 — schema parse\n const parse = PoeRecordSchema.safeParse(decoded);\n if (!parse.success) {\n const issues = parse.error.issues\n .map((issue) => mapZodIssue(issue, decoded))\n .sort(compareIssuePath);\n return { ok: false, issues };\n }\n\n // Step 4 — domain checks\n const record = parse.data;\n const errors: ValidationIssue[] = [];\n const warnings: ValidationIssue[] = [];\n const info: ValidationIssue[] = [];\n\n // 4a — content-commitment rule (`SCHEMA_EMPTY_RECORD`).\n const itemsLen = Array.isArray(record.items) ? record.items.length : 0;\n const merkleLen = Array.isArray(record.merkle) ? record.merkle.length : 0;\n if (itemsLen === 0 && merkleLen === 0) {\n errors.push(\n issue(\n 'SCHEMA_EMPTY_RECORD',\n [],\n 'record must carry at least one of items[] or merkle[] non-empty',\n ),\n );\n }\n\n // `crit[]` shape rules. Runs BEFORE the per-entry\n // `EXTENSION_UNSUPPORTED_CRITICAL` check.\n const decodedTopKeys = topLevelKeysOf(decoded);\n const critShapeInvalidIndices = checkCritShape(record, decodedTopKeys, errors);\n\n // Unknown top-level fields (typos like `supersedess`, `Sigs` that fall\n // outside both the base set and the extension-key namespaces).\n for (const k of decodedTopKeys) {\n if (TOP_LEVEL_BASE_KEYS.has(k)) continue;\n if (isExtensionKey(k)) continue;\n errors.push(issue('SCHEMA_UNKNOWN_FIELD', [k], `unknown top-level field: ${k}`));\n }\n\n // `EXTENSION_UNSUPPORTED_CRITICAL`: v1 reference validator implements no\n // extension keys, so every shape-valid `crit` entry is unsupported.\n if (Array.isArray(record.crit)) {\n for (let i = 0; i < record.crit.length; i++) {\n if (critShapeInvalidIndices.has(i)) continue;\n const critName = record.crit[i]!;\n errors.push(\n issue(\n 'EXTENSION_UNSUPPORTED_CRITICAL',\n ['crit', i],\n `crit lists extension '${critName}' that this validator does not implement`,\n ),\n );\n }\n }\n\n // 4b – 4e — per-item walk.\n for (let i = 0; i < (record.items ?? []).length; i++) {\n const item = record.items![i]!;\n checkItemHashes(item, i, errors);\n if (item.uris) checkItemUris(item.uris, ['items', i, 'uris'], errors);\n if (item.enc !== undefined) checkItemEnc(item, i, errors);\n }\n\n // 4i — top-level `merkle[]` walk.\n for (let i = 0; i < (record.merkle ?? []).length; i++) {\n const commit = record.merkle![i]!;\n checkMerkleCommit(commit, i, errors);\n }\n\n // 4h — supersedes length is enforced by the schema-layer refinement; this\n // step adds no further check.\n\n // 4f + 4g — `sigs[i]` closed map shape + COSE_Sign1 structural decode.\n if (record.sigs) {\n for (let i = 0; i < record.sigs.length; i++) {\n checkSigEntry(record.sigs[i]!, i, errors, info);\n }\n }\n\n // Step 5 — result emission. `info`-severity entries do NOT fail the record;\n // `warning`-severity entries (none among the structural codes) also remain\n // non-fatal.\n if (errors.length > 0) {\n return { ok: false, issues: errors.sort(compareIssuePath) };\n }\n const result: {\n ok: true;\n record: PoeRecord;\n warnings?: ReadonlyArray<ValidationIssue>;\n info?: ReadonlyArray<ValidationIssue>;\n } = {\n ok: true,\n record,\n };\n if (warnings.length > 0) result.warnings = warnings.sort(compareIssuePath);\n if (info.length > 0) result.info = info.sort(compareIssuePath);\n return result;\n}\n\n// =============================================================================\n// Step 3 helpers — Zod issue → structural-code mapping\n// =============================================================================\n\nfunction mapZodIssue(zissue: z.core.$ZodIssue, decoded?: unknown): ValidationIssue {\n const path = zissue.path as ReadonlyArray<string | number>;\n // Refinements with an explicit `params.code` win unconditionally — they\n // are the canonical taxonomy code attached at schema-definition time.\n const explicit = (zissue as { params?: { code?: string } }).params?.code as ErrorCode | undefined;\n if (explicit !== undefined) {\n return issue(explicit, path, zissue.message);\n }\n\n // Path-based dispatch:\n // `sigs[i].*` → `SIG_ENTRY_INVALID_SHAPE` (the sig-entry closed-map rule)\n // `items[i].enc.slots[j].(epk|wrap)` → `ENC_SLOT_INVALID_SHAPE`\n // (structurally malformed slots)\n // `v` literal mismatch / missing → `SCHEMA_INVALID_LITERAL` vs\n // `SCHEMA_MISSING_REQUIRED`.\n const inSigsEntry = path.length >= 2 && path[0] === 'sigs' && typeof path[1] === 'number';\n\n // Match either the absolute path (`items[i].enc.slots[j]…`) or the\n // relative-to-`enc` path (`slots[j]…`) — the latter is what\n // `EncryptionEnvelopeSchema.safeParse(item.enc)` emits before\n // `checkItemEnc` prefixes the `items[i].enc.` segment.\n //\n // The match includes the whole slot ELEMENT (path ending at `slots[j]`, no\n // trailing field) as well as a field WITHIN a slot (`slots[j].epk`). A\n // wrong-typed slot (`slots: [[1, 2]]` → array instead of `{epk, wrap}`) and\n // a slot carrying an extra key both classify as `ENC_SLOT_INVALID_SHAPE`,\n // matching the spec's \"a slot is not a 2-key map {epk, wrap}\".\n const isInSlotEntry = (() => {\n if (\n path.length >= 5 &&\n path[0] === 'items' &&\n typeof path[1] === 'number' &&\n path[2] === 'enc' &&\n path[3] === 'slots' &&\n typeof path[4] === 'number'\n ) {\n return true;\n }\n if (path.length >= 2 && path[0] === 'slots' && typeof path[1] === 'number') {\n return true;\n }\n return false;\n })();\n\n const valueAtIssue = valueAtPath(decoded, path);\n const isMissing = valueAtIssue === undefined;\n\n switch (zissue.code) {\n case 'invalid_type':\n if (isInSlotEntry) return issue('ENC_SLOT_INVALID_SHAPE', path, zissue.message);\n if (isMissing) {\n if (inSigsEntry) return issue('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issue('SCHEMA_MISSING_REQUIRED', path, zissue.message);\n }\n if (inSigsEntry) return issue('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issue('SCHEMA_TYPE_MISMATCH', path, zissue.message);\n case 'invalid_value':\n // Zod 4's `z.literal(1)` emits `invalid_value` for both a missing field\n // AND a present-but-wrong value. Disambiguate via the runtime value:\n // missing → `SCHEMA_MISSING_REQUIRED`; present-but-wrong → `SCHEMA_INVALID_LITERAL`.\n if (path.length === 1 && path[0] === 'v') {\n return issue(\n isMissing ? 'SCHEMA_MISSING_REQUIRED' : 'SCHEMA_INVALID_LITERAL',\n path,\n zissue.message,\n );\n }\n return issue('SCHEMA_INVALID_LITERAL', path, zissue.message);\n case 'unrecognized_keys':\n if (isInSlotEntry) return issue('ENC_SLOT_INVALID_SHAPE', path, zissue.message);\n if (inSigsEntry) return issue('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issue('SCHEMA_UNKNOWN_FIELD', path, zissue.message);\n case 'invalid_format':\n case 'too_big':\n case 'too_small':\n if (inSigsEntry) return issue('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issue('SCHEMA_TYPE_MISMATCH', path, zissue.message);\n case 'invalid_union':\n case 'invalid_key':\n case 'invalid_element':\n case 'custom':\n default:\n if (isInSlotEntry) return issue('ENC_SLOT_INVALID_SHAPE', path, zissue.message);\n if (inSigsEntry) return issue('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issue('SCHEMA_TYPE_MISMATCH', path, zissue.message);\n }\n}\n\n// =============================================================================\n// Step 4 helpers — domain checks\n// =============================================================================\n\n// 4b — hash-map registry membership + digest length per algorithm.\nfunction checkItemHashes(item: ItemEntry, idx: number, errors: ValidationIssue[]): void {\n const entries = Object.entries(item.hashes);\n if (entries.length === 0) {\n errors.push(\n issue(\n 'SCHEMA_TYPE_MISMATCH',\n ['items', idx, 'hashes'],\n 'hashes must be a non-empty CBOR map of <alg-id> -> <digest>',\n ),\n );\n return;\n }\n for (const [alg, digest] of entries) {\n if (!(alg in HASH_ALG_LENGTHS)) {\n errors.push(\n issue('UNSUPPORTED_HASH_ALG', ['items', idx, 'hashes', alg], `unknown hash alg: ${alg}`),\n );\n continue;\n }\n const expected = HASH_ALG_LENGTHS[alg]!;\n if (digest.length !== expected) {\n errors.push(\n issue(\n 'HASH_DIGEST_LENGTH_MISMATCH',\n ['items', idx, 'hashes', alg],\n `hashes['${alg}'] digest length ${digest.length} != ${expected}`,\n ),\n );\n }\n }\n}\n\n// 4c — URI chunk reconstruction + per-scheme shape.\nfunction checkItemUris(\n uris: ReadonlyArray<ReadonlyArray<string>>,\n basePath: ReadonlyArray<string | number>,\n errors: ValidationIssue[],\n): void {\n uris.forEach((chunks, ui) => validateOneUri(chunks, [...basePath, ui], errors));\n}\n\nfunction validateOneUri(\n chunks: ReadonlyArray<string>,\n path: ReadonlyArray<string | number>,\n errors: ValidationIssue[],\n): void {\n const reconstructed = reconstructChunkedUri(chunks);\n if (!reconstructed.ok) {\n errors.push(issue(reconstructed.code, path, reconstructed.reason));\n return;\n }\n const uri = reconstructed.uri;\n\n // Absolute URI, no fragment, scheme in `{ar://, ipfs://}`.\n if (uri.includes('#')) {\n errors.push(\n issue('INVALID_URI', path, \"URI contains a fragment identifier ('#'), which is forbidden\"),\n );\n return;\n }\n const sepIdx = uri.indexOf('://');\n if (sepIdx <= 0 || !/^[a-z][a-z0-9+.-]*$/i.test(uri.slice(0, sepIdx))) {\n errors.push(\n issue('INVALID_URI', path, 'URI is not absolute (missing scheme://hierarchical-part)'),\n );\n return;\n }\n // RFC 3986 §3.1: the scheme is case-insensitive, so case-fold the SCHEME ONLY,\n // then ALWAYS validate the body. The host / CID / txid is NOT case-folded — a\n // base64url Arweave txid and a base58btc CID are case-significant. An\n // uppercase scheme (`AR://`, `IPFS://`) is accepted iff its body passes the\n // same per-scheme shape check a lowercase scheme would.\n const scheme = uri.slice(0, sepIdx).toLowerCase();\n const rest = uri.slice(sepIdx + '://'.length);\n if (scheme === 'ar') {\n if (!/^ar:\\/\\/[A-Za-z0-9_-]{43}$/.test('ar://' + rest)) {\n errors.push(\n issue(\n 'INVALID_URI',\n path,\n 'ar:// URI does not match `^ar://[A-Za-z0-9_-]{43}$` (43-char base64url txid, no path/query/fragment)',\n ),\n );\n }\n return;\n }\n if (scheme === 'ipfs') {\n // The structural validator does a full CID parse (not just a prefix check).\n const slashIdx = rest.indexOf('/');\n const cid = slashIdx === -1 ? rest : rest.slice(0, slashIdx);\n if (!validateCidProfile(cid)) {\n errors.push(\n issue('INVALID_URI', path, 'ipfs:// URI is not a valid CID under the Label 309 profile'),\n );\n }\n return;\n }\n // Scheme not in `{ar://, ipfs://}`.\n errors.push(\n issue('INVALID_URI', path, 'unsupported URI scheme; v1 PoE URI set is {ar://, ipfs://}'),\n );\n}\n\n// 4d — encryption envelope.\nfunction checkItemEnc(item: ItemEntry, idx: number, errors: ValidationIssue[]): void {\n // Pre-check: an `enc`-bearing item MUST commit to a content hash. The claim\n // is the *plaintext* digest, so the hashes map MUST carry at least one\n // registered content-hash entry (sha2-256 / blake2b-256). This is a PRESENCE\n // check, not merely a non-empty check: a `hashes` map that exists but carries\n // only a non-content algorithm (e.g. `{md5}`) still fails — there is no\n // content digest to bind the ciphertext to. The empty-map case is also caught\n // here (and additionally fails the CDDL `1*` cardinality in checkItemHashes).\n const hasContentHash = Object.keys(item.hashes).some((alg) => alg in HASH_ALG_LENGTHS);\n if (!hasContentHash) {\n errors.push(\n issue(\n 'ENC_REQUIRES_CONTENT_HASH',\n ['items', idx, 'enc'],\n 'item carries `enc` but `hashes` has no content-hash entry (sha2-256 or blake2b-256)',\n ),\n );\n return;\n }\n\n // Schema-parse the envelope independently so we can lift its issues with\n // the correct path prefix.\n const encParse = EncryptionEnvelopeSchema.safeParse(item.enc);\n if (!encParse.success) {\n for (const zissue of encParse.error.issues) {\n const mapped = mapZodIssue(zissue, item.enc);\n errors.push({\n ...mapped,\n path: ['items', idx, 'enc', ...mapped.path],\n });\n }\n return;\n }\n const enc = encParse.data;\n const basePath: ReadonlyArray<string | number> = ['items', idx, 'enc'];\n\n // `enc.scheme` MUST be the unsigned integer 1.\n if (typeof enc.scheme !== 'number' || !Number.isInteger(enc.scheme) || enc.scheme !== 1) {\n errors.push(\n issue(\n 'UNSUPPORTED_ENVELOPE_SCHEME',\n [...basePath, 'scheme'],\n `enc.scheme must be the unsigned integer 1; got ${String(enc.scheme)}`,\n ),\n );\n // Continue — other checks remain informative.\n }\n\n // AEAD checks (forbidden cipher first, then registry). The forbidden set is\n // the unauthenticated-cipher family — block-cipher modes that provide no\n // integrity (CBC, CTR, ECB, CFB, OFB) in any key-size spelling\n // (`aes-256-cbc`, `aes-128-cbc`, OpenSSL/JCA form) plus the legacy stream\n // ciphers (RC4, DES/3DES). Matching this family — rather than a generic\n // \"unknown alg\" fall-through to `UNSUPPORTED_AEAD_ALG` — names the security\n // hazard precisely: the record selected an authenticated-encryption-absent\n // cipher, not merely an unregistered one.\n if (UNAUTHENTICATED_CIPHER_RE.test(enc.aead)) {\n errors.push(\n issue(\n 'UNAUTHENTICATED_CIPHER_FORBIDDEN',\n [...basePath, 'aead'],\n `'${enc.aead}' is an unauthenticated cipher; Label 309 mandates an authenticated (AEAD) cipher`,\n ),\n );\n return; // unrecoverable — nonce / kem / slot checks become noise\n }\n if (!(enc.aead in AEAD_NONCE_LENGTHS)) {\n errors.push(\n issue('UNSUPPORTED_AEAD_ALG', [...basePath, 'aead'], `unknown aead alg: ${enc.aead}`),\n );\n return;\n }\n const expectedNonceLen = AEAD_NONCE_LENGTHS[enc.aead]!;\n if (enc.nonce.length !== expectedNonceLen) {\n errors.push(\n issue(\n 'NONCE_LENGTH_MISMATCH',\n [...basePath, 'nonce'],\n `nonce length ${enc.nonce.length} != ${expectedNonceLen} for ${enc.aead}`,\n ),\n );\n }\n\n // Envelope-level KEM check (when present).\n if (enc.kem !== undefined && !(enc.kem in KEM_SLOT_DESCRIPTORS)) {\n errors.push(issue('UNSUPPORTED_KEM_ALG', [...basePath, 'kem'], `unknown kem alg: ${enc.kem}`));\n }\n\n // Key-path branching.\n const hasSlots = enc.slots !== undefined;\n const hasSlotsMac = enc.slots_mac !== undefined;\n const hasPassphrase = enc.passphrase !== undefined;\n\n if (hasSlots && hasPassphrase) {\n errors.push(\n issue('ENC_EXCLUSIVITY_VIOLATION', basePath, 'enc combines slots with passphrase; pick one'),\n );\n }\n if (hasSlots && !hasSlotsMac) {\n errors.push(\n issue('ENC_SLOTS_MAC_REQUIRED', basePath, 'enc.slots present but enc.slots_mac absent'),\n );\n }\n if (hasSlotsMac && !hasSlots) {\n errors.push(\n issue('ENC_SLOTS_REQUIRED', basePath, 'enc.slots_mac present but enc.slots absent'),\n );\n }\n if (hasSlots && enc.kem === undefined) {\n errors.push(issue('ENC_KEM_REQUIRED', basePath, 'enc.slots present but enc.kem absent'));\n }\n if (!hasSlots && !hasPassphrase) {\n errors.push(\n issue(\n 'ENC_NO_KEY_PATH',\n basePath,\n 'enc requires either slots or passphrase — no on-chain key path otherwise',\n ),\n );\n }\n\n // Slots shape checks. The slot shape is KEM-driven: the descriptor for the\n // declared `kem` pins which ciphertext-bearing field (`epk` for x25519,\n // `kem_ct` for mlkem768x25519) MUST be present and at what length, and\n // forbids the other KEM's field. Because the schema is permissive (no\n // `.strict()`), this domain pass is the ONLY thing rejecting cross-KEM\n // contamination — an x25519 slot carrying a stray `kem_ct`, or a hybrid slot\n // carrying a stray `epk`, surfaces as `ENC_SLOT_INVALID_SHAPE`.\n if (hasSlots) {\n const slotCount = enc.slots!.length;\n if (slotCount < 1) {\n errors.push(\n issue('ENC_SLOTS_EMPTY', [...basePath, 'slots'], `slots length ${slotCount} < 1`),\n );\n } else if (slotCount > MAX_SLOTS) {\n // Slot-count resource bound — reject an over-large slot array before\n // walking every slot, so a malformed record cannot drive unbounded\n // per-slot work. This is the slot-count half of the partitioning-oracle\n // resource guard; the unwrap layer trips the identical threshold first,\n // so the two layers agree. Skip the per-slot, duplicate, and byte-size\n // passes — the array is rejected outright.\n errors.push(\n issue(\n 'ENC_SLOTS_TOO_MANY',\n [...basePath, 'slots'],\n `slots length ${slotCount} exceeds MAX_SLOTS=${MAX_SLOTS}`,\n ),\n );\n } else {\n // Only validate slot shape when the KEM is known; an unknown / absent KEM\n // already emits its own code above, and we cannot pick a descriptor.\n const descriptor = enc.kem !== undefined ? KEM_SLOT_DESCRIPTORS[enc.kem] : undefined;\n if (descriptor !== undefined) {\n // The permissive `SlotSchema` strips unknown keys before they reach the\n // parsed slot, so the closed-map invariant (\"a slot is exactly {<ct\n // field>, wrap}\") is enforced against the RAW decoded slot key set here.\n const rawSlotKeys = rawSlotKeySets(item.enc);\n // Per-slot KEK uniqueness: the zero-nonce per-slot wrap is safe only\n // because each slot draws fresh KEM randomness, so two slots sharing\n // the same encapsulation material derive the same KEK and repeat a\n // (KEK, zero-nonce) pair. The material that fixes the KEK is the `epk`\n // (x25519) or the reassembled `kem_ct` (hybrid); a repeat of either\n // across slots is rejected here, before any KEM/AEAD primitive — the\n // same check the unwrap layer runs.\n const seenKemMaterial = new Set<string>();\n enc.slots!.forEach((slot, si) => {\n const slotPath = [...basePath, 'slots', si] as const;\n checkSlotShape(\n slot,\n rawSlotKeys[si] ?? new Set<string>(),\n descriptor,\n enc.kem!,\n slotPath,\n errors,\n );\n const material = slotKemMaterial(slot, descriptor);\n if (material !== undefined) {\n const key = bytesToHex(material);\n if (seenKemMaterial.has(key)) {\n errors.push(\n issue(\n 'ENC_SLOTS_DUPLICATE_KEM_MATERIAL',\n [...slotPath, descriptor.field],\n `slot ${si} ${descriptor.field} duplicates an earlier slot — per-slot KEK uniqueness is violated`,\n ),\n );\n } else {\n seenKemMaterial.add(key);\n }\n }\n });\n\n // Decoded-envelope byte backstop. Every per-slot field is fixed-length\n // (the descriptor pins them; a wrong length already emitted its own\n // code), so the decoded envelope's aggregate size is determined by the\n // slot count: nonce + slots_mac + slotCount * (ct-field + wrap). This is\n // the identical measure the unwrap layer computes, so the two layers\n // trip `ENC_ENVELOPE_TOO_LARGE` on the same envelopes. A tighter cap\n // than `MAX_SLOTS` for honest records.\n const perSlotBytes = descriptor.fieldLength + descriptor.wrapLength;\n const decodedEnvelopeBytes = NONCE_LENGTH + SLOTS_MAC_LENGTH + slotCount * perSlotBytes;\n if (decodedEnvelopeBytes > MAX_DECODED_ENVELOPE_BYTES) {\n errors.push(\n issue(\n 'ENC_ENVELOPE_TOO_LARGE',\n [...basePath, 'slots'],\n `decoded envelope size ${decodedEnvelopeBytes} exceeds MAX_DECODED_ENVELOPE_BYTES=${MAX_DECODED_ENVELOPE_BYTES}`,\n ),\n );\n }\n }\n }\n }\n\n // Passphrase block checks (registry membership + Argon2id closed-params + floor).\n if (hasPassphrase) {\n const pp = enc.passphrase!;\n const ppPath: ReadonlyArray<string | number> = [...basePath, 'passphrase'];\n if (!PASSPHRASE_KDF_ALGS.has(pp.alg)) {\n errors.push(\n issue(\n 'ENC_PASSPHRASE_ALG_UNSUPPORTED',\n [...ppPath, 'alg'],\n `unknown passphrase kdf alg: ${pp.alg}`,\n ),\n );\n return; // can't apply alg-specific params check\n }\n if (pp.alg === 'argon2id') {\n const allowed = new Set(['m', 't', 'p']);\n for (const k of Object.keys(pp.params)) {\n if (!allowed.has(k)) {\n errors.push(\n issue(\n 'SCHEMA_UNKNOWN_FIELD',\n [...ppPath, 'params', k],\n `unknown argon2id params field: ${k}`,\n ),\n );\n }\n }\n const p = pp.params as { m?: unknown; t?: unknown; p?: unknown };\n const argonInt = (val: unknown, name: 'm' | 't' | 'p'): number | null => {\n if (typeof val !== 'number' || !Number.isInteger(val)) {\n errors.push(\n issue(\n 'SCHEMA_TYPE_MISMATCH',\n [...ppPath, 'params', name],\n `argon2id params.${name} must be a CBOR unsigned integer`,\n ),\n );\n return null;\n }\n return val;\n };\n const mVal = argonInt(p.m, 'm');\n const tVal = argonInt(p.t, 't');\n const pVal = argonInt(p.p, 'p');\n if (mVal !== null && mVal < 65_536) {\n errors.push(\n issue(\n 'ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW',\n [...ppPath, 'params', 'm'],\n 'argon2id requires m >= 65536 KiB',\n ),\n );\n }\n if (tVal !== null && tVal < 3) {\n errors.push(\n issue(\n 'ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW',\n [...ppPath, 'params', 't'],\n 'argon2id requires t >= 3',\n ),\n );\n }\n if (pVal !== null && pVal < 1) {\n errors.push(\n issue(\n 'ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW',\n [...ppPath, 'params', 'p'],\n 'argon2id requires p >= 1',\n ),\n );\n }\n }\n }\n}\n\n// KEM-driven per-slot shape gate (pure). Branches on the descriptor for the\n// declared envelope `kem`:\n//\n// - The descriptor's ciphertext-bearing field (`epk` for x25519, `kem_ct`\n// for mlkem768x25519) MUST be present at the expected (reassembled) length.\n// - The OTHER KEM's ciphertext field MUST be absent — its presence is\n// cross-KEM contamination and surfaces as `ENC_SLOT_INVALID_SHAPE` (the\n// hole that dropping `.strict()` on `SlotSchema` would otherwise open).\n// - `wrap` MUST be present at 48 bytes.\n//\n// This stays a pure function over already-decoded values: `kem_ct` reassembly\n// uses `bytesChunkArrayConcat` (byte concatenation only) — no crypto, no I/O.\n//\n// `rawKeys` is the slot's key set as it appeared on the wire (before the\n// permissive schema stripped unknowns); any key outside {<ct field>, wrap}\n// for this KEM is a closed-map violation.\nconst SLOT_KEY_UNIVERSE: ReadonlySet<string> = new Set(['epk', 'kem_ct', 'wrap']);\n\nfunction checkSlotShape(\n slot: Slot,\n rawKeys: ReadonlySet<string>,\n descriptor: KemSlotDescriptor,\n kem: string,\n slotPath: ReadonlyArray<string | number>,\n errors: ValidationIssue[],\n): void {\n // The ciphertext field that does NOT belong to this KEM. Its presence is a\n // shape violation regardless of length. Drive this off the RAW key set so a\n // future schema change cannot silently drop the foreign field before we see\n // it.\n const foreignField: KemSlotField = descriptor.field === 'epk' ? 'kem_ct' : 'epk';\n if (rawKeys.has(foreignField)) {\n errors.push(\n issue(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, foreignField],\n `slot carries '${foreignField}' but kem='${kem}' expects '${descriptor.field}'`,\n ),\n );\n }\n\n // Any key outside the slot universe is a closed-map violation (the schema is\n // permissive and would otherwise strip it silently).\n for (const k of rawKeys) {\n if (!SLOT_KEY_UNIVERSE.has(k)) {\n errors.push(\n issue(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, k],\n `slot carries unexpected key '${k}'; a slot is a 2-key map {${descriptor.field}, wrap}`,\n ),\n );\n }\n }\n\n // The required ciphertext-bearing field MUST be present at the expected\n // (reassembled) length.\n if (descriptor.field === 'epk') {\n if (slot.epk === undefined) {\n errors.push(\n issue(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, 'epk'],\n `slot for kem='${kem}' is missing required 'epk'`,\n ),\n );\n } else if (slot.epk.length !== descriptor.fieldLength) {\n errors.push(\n issue(\n KEM_FIELD_LENGTH_CODE.epk,\n [...slotPath, 'epk'],\n `slot.epk length ${slot.epk.length} != ${descriptor.fieldLength} for ${kem}`,\n ),\n );\n }\n } else {\n if (slot.kem_ct === undefined) {\n errors.push(\n issue(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, 'kem_ct'],\n `slot for kem='${kem}' is missing required 'kem_ct'`,\n ),\n );\n } else {\n const reassembled = bytesChunkArrayConcat(slot.kem_ct).length;\n if (reassembled !== descriptor.fieldLength) {\n errors.push(\n issue(\n KEM_FIELD_LENGTH_CODE.kem_ct,\n [...slotPath, 'kem_ct'],\n `slot.kem_ct reassembles to ${reassembled} bytes != ${descriptor.fieldLength} for ${kem}`,\n ),\n );\n }\n }\n }\n\n // `wrap` is 48 bytes for every KEM.\n if (slot.wrap === undefined) {\n errors.push(\n issue(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, 'wrap'],\n `slot for kem='${kem}' is missing required 'wrap'`,\n ),\n );\n } else if (slot.wrap.length !== descriptor.wrapLength) {\n errors.push(\n issue(\n 'WRAP_LENGTH_MISMATCH',\n [...slotPath, 'wrap'],\n `slot.wrap length ${slot.wrap.length} != ${descriptor.wrapLength}`,\n ),\n );\n }\n}\n\n// The encapsulation material that fixes a slot's per-slot KEK, used for the\n// within-record duplicate check: the `epk` (x25519) or the reassembled\n// `kem_ct` (hybrid). Returns `undefined` when the required field is absent —\n// the missing-field defect already emitted `ENC_SLOT_INVALID_SHAPE`, so the\n// duplicate pass simply skips that slot. Note: a duplicate of an unusual but\n// equal length still surfaces; the length-mismatch code (if any) co-fires.\nfunction slotKemMaterial(slot: Slot, descriptor: KemSlotDescriptor): Uint8Array | undefined {\n if (descriptor.field === 'epk') {\n return slot.epk;\n }\n if (slot.kem_ct === undefined) return undefined;\n return bytesChunkArrayConcat(slot.kem_ct);\n}\n\n// Lowercase-hex of a byte string, for use as a Set key (Uint8Array identity is\n// reference-based, so equal-valued buffers must be compared by content).\nfunction bytesToHex(bytes: Uint8Array): string {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i]!.toString(16).padStart(2, '0');\n }\n return hex;\n}\n\n// Extract the per-slot RAW key sets from a decoded `enc` value, BEFORE the\n// permissive schema strips unknown slot keys. cbor2 surfaces a CBOR map either\n// as a `Map` (int/heterogeneous keys) or a plain object (text keys); slot maps\n// are text-keyed, so this reads string keys from whichever form. A slot that\n// is not a map at all yields an empty set — the slot's own type errors are\n// already emitted by the schema parse, so the shape gate simply finds no keys.\nfunction rawSlotKeySets(rawEnc: unknown): ReadonlyArray<ReadonlySet<string>> {\n const slots = mapLikeGet(rawEnc, 'slots');\n if (!Array.isArray(slots)) return [];\n return slots.map((slot) => {\n const keys = new Set<string>();\n if (slot instanceof Map) {\n for (const k of slot.keys()) if (typeof k === 'string') keys.add(k);\n } else if (typeof slot === 'object' && slot !== null) {\n for (const k of Object.keys(slot as Record<string, unknown>)) keys.add(k);\n }\n return keys;\n });\n}\n\nfunction mapLikeGet(value: unknown, key: string): unknown {\n if (value instanceof Map) return value.get(key);\n if (typeof value === 'object' && value !== null) {\n return (value as Record<string, unknown>)[key];\n }\n return undefined;\n}\n\n// 4i — `merkle[i]` walk.\nfunction checkMerkleCommit(commit: MerkleCommit, idx: number, errors: ValidationIssue[]): void {\n const basePath: ReadonlyArray<string | number> = ['merkle', idx];\n if (!(commit.alg in MERKLE_COMMIT_ALG_LENGTHS)) {\n errors.push(\n issue(\n 'UNSUPPORTED_MERKLE_COMMIT_ALG',\n [...basePath, 'alg'],\n `unknown merkle commitment alg: ${commit.alg}`,\n ),\n );\n return;\n }\n const expected = MERKLE_COMMIT_ALG_LENGTHS[commit.alg]!;\n if (commit.root.length !== expected) {\n errors.push(\n issue(\n 'HASH_DIGEST_LENGTH_MISMATCH',\n [...basePath, 'root'],\n `merkle entry root length ${commit.root.length} != ${expected} for ${commit.alg}`,\n ),\n );\n }\n if (commit.uris) {\n checkItemUris(commit.uris, [...basePath, 'uris'], errors);\n }\n}\n\n// 4f + 4g — record-level signature entries.\nfunction checkSigEntry(\n entry: SigEntry,\n idx: number,\n errors: ValidationIssue[],\n info: ValidationIssue[],\n): void {\n // Path-2 `cose_key` private-material guard runs FIRST.\n if (entry.cose_key !== undefined) {\n const keyIssue = inspectCoseKey(entry.cose_key, idx);\n if (keyIssue !== null) {\n errors.push(keyIssue);\n return;\n }\n }\n\n // 4g — COSE_Sign1 structural decode.\n const merged = bytesChunkArrayConcat(entry.cose_sign1);\n let cose: ReturnType<typeof decodeCoseSign1>;\n try {\n cose = decodeCoseSign1(merged);\n } catch (cause) {\n errors.push(\n issue(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', idx],\n cause instanceof CoseVerifyError || cause instanceof Error ? cause.message : String(cause),\n ),\n );\n return;\n }\n\n // Detached-only payload — the COSE_Sign1 payload MUST be null.\n if (cose.payload !== null) {\n errors.push(\n issue(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', idx],\n 'COSE_Sign1 payload must be null (detached); attached form forbidden',\n ),\n );\n return;\n }\n\n // Signature-algorithm registry check (info-severity — an unrecognised alg\n // does not fail the record).\n const alg = cose.protectedHeader.get(1);\n if (typeof alg !== 'number' || !KNOWN_SIG_ALG_IDS.has(alg)) {\n info.push(\n issue(\n 'SIGNATURE_UNSUPPORTED',\n ['sigs', idx],\n `COSE_Sign1 protected alg ${String(alg)} not in {-8, -19}`,\n ),\n );\n }\n\n // Path-1 (32-byte protected-header `kid`) and path-2 (`cose_key` sidecar)\n // are mutually exclusive — a sig entry must not carry both.\n const protectedKid = cose.protectedHeader.get(4);\n if (\n protectedKid instanceof Uint8Array &&\n protectedKid.length === 32 &&\n entry.cose_key !== undefined\n ) {\n errors.push(\n issue(\n 'SIG_ENTRY_KID_COSE_KEY_CONFLICT',\n ['sigs', idx],\n 'sigs[i] carries both a 32-byte protected `kid` (path 1) and an inline `cose_key` (path 2); paths are mutually exclusive',\n ),\n );\n }\n}\n\n// =============================================================================\n// COSE_Key inspector (path-2 `sigs[i].cose_key` blob)\n// =============================================================================\n//\n// Two structural checks:\n// 5a — Private-material guard (FIRST). COSE_Key label `-4` (the private\n// scalar `d` for OKP / EC2 per RFC 9052 §7.1) → `SIG_PRIVATE_KEY_LEAKED`.\n// This check is load-bearing producer-side preflight: publishing a\n// private key on the permanent ledger is catastrophic and irreversible.\n// 5b — Positive-shape guard. The decoded `cbor<COSE_Key>` map MUST carry\n// `kty=1` (OKP), `crv=6` (Ed25519), and a 32-byte `-2` (x). Any\n// failure → `MALFORMED_SIG_COSE_SIGN1`.\n\nfunction inspectCoseKey(keyChunks: ReadonlyArray<Uint8Array>, i: number): ValidationIssue | null {\n let decoded: unknown;\n try {\n decoded = decodeCanonicalCbor(bytesChunkArrayConcat(keyChunks));\n } catch (cause) {\n return issue(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key failed to decode as cbor<COSE_Key>: ${cause instanceof Error ? cause.message : String(cause)}`,\n );\n }\n\n // cbor2 surfaces int-keyed COSE_Key maps as `Map`; string-keyed maps as\n // plain JS objects (a malformed COSE_Key would carry string keys).\n const getLabel = (label: number): unknown => {\n if (decoded instanceof Map) return decoded.get(label);\n if (typeof decoded === 'object' && decoded !== null) {\n return (decoded as Record<string, unknown>)[String(label)];\n }\n return undefined;\n };\n const hasLabel = (label: number): boolean => {\n if (decoded instanceof Map) return decoded.has(label);\n if (typeof decoded === 'object' && decoded !== null) {\n return Object.prototype.hasOwnProperty.call(decoded, String(label));\n }\n return false;\n };\n\n // 5a — Private-material guard.\n if (hasLabel(-4)) {\n return issue(\n 'SIG_PRIVATE_KEY_LEAKED',\n ['sigs', i, 'cose_key'],\n 'cose_key carries COSE_Key private-key material (label -4, the OKP/EC2 private scalar d); publishing a private key on the permanent ledger is forbidden',\n );\n }\n\n // 5b — Positive-shape guard.\n const kty = getLabel(1);\n if (kty !== 1) {\n return issue(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key COSE_Key kty (label 1) must be 1 (OKP); got ${String(kty)}`,\n );\n }\n const crv = getLabel(-1);\n if (crv !== 6) {\n return issue(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key COSE_Key crv (label -1) must be 6 (Ed25519); got ${String(crv)}`,\n );\n }\n if (!hasLabel(-2)) {\n return issue(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key COSE_Key missing label -2 (Ed25519 public-key bytes)`,\n );\n }\n const x = getLabel(-2);\n if (!(x instanceof Uint8Array) || x.length !== 32) {\n const got = x instanceof Uint8Array ? `${x.length}-byte bstr` : typeof x;\n return issue(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key COSE_Key label -2 must be a 32-byte byte string (Ed25519 public key); got ${got}`,\n );\n }\n return null;\n}\n\n// =============================================================================\n// Label 309 CID profile\n// =============================================================================\n//\n// Accept CIDv0 (`Qm` prefix, 46-char base58btc, sha2-256 multihash) and\n// CIDv1 (multibase prefix + version 0x01 + codec + multihash) per the\n// closed profile:\n// - Multibase: b, B, f, F, z\n// - Multicodec: 0x55 (raw), 0x70 (dag-pb), 0x71 (dag-cbor)\n// - Multihash: 0x12 (sha2-256, 32 B), 0xb220 (blake2b-256, 32 B)\n//\n// Returns true iff the CID conforms to the Label 309 profile.\n\nconst ACCEPTED_CIDV1_MULTIBASE: ReadonlySet<string> = new Set(['b', 'B', 'f', 'F', 'z']);\n\nconst ACCEPTED_MULTICODECS: ReadonlySet<number> = new Set([0x55, 0x70, 0x71]);\n\n// Multihash table: code → digest length (bytes).\n// `0x12` = sha2-256; `0xb220` = blake2b-256.\nconst ACCEPTED_MULTIHASHES: ReadonlyMap<number, number> = new Map([\n [0x12, 32],\n [0xb220, 32],\n]);\n\nexport function validateCidProfile(cid: string): boolean {\n if (cid.length === 0) return false;\n // CIDv0: a base58btc-encoded sha2-256 multihash. Decode the WHOLE string and\n // verify the multihash prefix (0x12 = sha2-256, 0x20 = 32-byte digest length)\n // and total length (34 bytes = 2-byte prefix + 32-byte digest). A `Qm`\n // prefix alone is not sufficient — a malformed body must be rejected.\n if (cid.startsWith('Qm')) {\n let decoded: Uint8Array;\n try {\n decoded = decodeBase58btc(cid);\n } catch {\n return false;\n }\n return decoded.length === 34 && decoded[0] === 0x12 && decoded[1] === 0x20;\n }\n // CIDv1: multibase + binary CID body.\n const mbPrefix = cid[0]!;\n if (!ACCEPTED_CIDV1_MULTIBASE.has(mbPrefix)) return false;\n let bytes: Uint8Array;\n try {\n bytes = decodeMultibase(mbPrefix, cid.slice(1));\n } catch {\n return false;\n }\n if (bytes.length < 4) return false;\n // CIDv1 layout: <version varint> <multicodec varint> <multihash>\n const versionParse = readVarint(bytes, 0);\n if (versionParse === null || versionParse.value !== 1) return false;\n const codecParse = readVarint(bytes, versionParse.next);\n if (codecParse === null) return false;\n if (!ACCEPTED_MULTICODECS.has(codecParse.value)) return false;\n const mhParse = readVarint(bytes, codecParse.next);\n if (mhParse === null) return false;\n const lenParse = readVarint(bytes, mhParse.next);\n if (lenParse === null) return false;\n const digestLen = lenParse.value;\n const expectedLen = ACCEPTED_MULTIHASHES.get(mhParse.value);\n if (expectedLen === undefined || digestLen !== expectedLen) return false;\n if (lenParse.next + digestLen !== bytes.length) return false;\n return true;\n}\n\nfunction readVarint(bytes: Uint8Array, start: number): { value: number; next: number } | null {\n let value = 0;\n let shift = 0;\n let i = start;\n while (i < bytes.length) {\n const b = bytes[i]!;\n value |= (b & 0x7f) << shift;\n i++;\n if ((b & 0x80) === 0) return { value, next: i };\n shift += 7;\n if (shift > 28) return null; // overflow guard; Label 309 profile uses ≤ 16-bit codes\n }\n return null;\n}\n\n// Multibase decoders for the closed set the CID profile admits.\nfunction decodeMultibase(prefix: string, body: string): Uint8Array {\n switch (prefix) {\n case 'b':\n return decodeBase32(body.toLowerCase(), 'rfc4648-lower');\n case 'B':\n return decodeBase32(body.toUpperCase(), 'rfc4648-upper');\n case 'f':\n return decodeBase16(body.toLowerCase());\n case 'F':\n return decodeBase16(body.toUpperCase());\n case 'z':\n return decodeBase58btc(body);\n default:\n throw new Error(`unsupported multibase prefix ${prefix}`);\n }\n}\n\nconst BASE16_LOWER = '0123456789abcdef';\nconst BASE16_UPPER = '0123456789ABCDEF';\n\nfunction decodeBase16(s: string): Uint8Array {\n if (s.length % 2 !== 0) throw new Error('base16: odd-length');\n const out = new Uint8Array(s.length / 2);\n const alphabet = s === s.toLowerCase() ? BASE16_LOWER : BASE16_UPPER;\n for (let i = 0; i < out.length; i++) {\n const hi = alphabet.indexOf(s[i * 2]!);\n const lo = alphabet.indexOf(s[i * 2 + 1]!);\n if (hi < 0 || lo < 0) throw new Error(`base16: non-hex char at ${i * 2}`);\n out[i] = (hi << 4) | lo;\n }\n return out;\n}\n\nconst BASE32_RFC4648_LOWER = 'abcdefghijklmnopqrstuvwxyz234567';\nconst BASE32_RFC4648_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\nfunction decodeBase32(s: string, variant: 'rfc4648-lower' | 'rfc4648-upper'): Uint8Array {\n const alphabet = variant === 'rfc4648-lower' ? BASE32_RFC4648_LOWER : BASE32_RFC4648_UPPER;\n // Multibase strips padding per spec; we accept either form for robustness.\n const trimmed = s.replace(/=+$/, '');\n const out: number[] = [];\n let buf = 0;\n let bits = 0;\n for (const ch of trimmed) {\n const idx = alphabet.indexOf(ch);\n if (idx < 0) throw new Error(`base32: invalid char '${ch}'`);\n buf = (buf << 5) | idx;\n bits += 5;\n if (bits >= 8) {\n bits -= 8;\n out.push((buf >> bits) & 0xff);\n }\n }\n return Uint8Array.from(out);\n}\n\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\nfunction decodeBase58btc(s: string): Uint8Array {\n if (s.length === 0) return new Uint8Array(0);\n let zeros = 0;\n while (zeros < s.length && s[zeros] === '1') zeros++;\n const size = Math.floor(((s.length - zeros) * 733) / 1000) + 1;\n const b256 = new Uint8Array(size);\n let length = 0;\n for (let i = zeros; i < s.length; i++) {\n const ch = s[i]!;\n const carryIdx = BASE58_ALPHABET.indexOf(ch);\n if (carryIdx < 0) throw new Error(`base58: invalid char '${ch}'`);\n let carry = carryIdx;\n let k = 0;\n for (let j = size - 1; (carry !== 0 || k < length) && j >= 0; j--, k++) {\n carry += 58 * b256[j]!;\n b256[j] = carry % 256;\n carry = Math.floor(carry / 256);\n }\n length = k;\n }\n let it = size - length;\n while (it < size && b256[it] === 0) it++;\n const out = new Uint8Array(zeros + (size - it));\n let j = zeros;\n while (it < size) {\n out[j++] = b256[it++]!;\n }\n return out;\n}\n\n// =============================================================================\n// `crit[]` shape rule helper\n// =============================================================================\n\nfunction checkCritShape(\n record: PoeRecord,\n decodedTopKeys: ReadonlySet<string>,\n errors: ValidationIssue[],\n): Set<number> {\n const invalid = new Set<number>();\n if (!Array.isArray(record.crit)) return invalid;\n // `crit` has `1*` cardinality: when present it MUST carry at least one\n // entry. An empty array is a malformed shape — reject it here in the\n // domain pass (rather than via a schema `.min(1)`) so the emitted message\n // string is identical across the TS/PY/RS validators.\n if (record.crit.length === 0) {\n errors.push(\n issue('SCHEMA_TYPE_MISMATCH', ['crit'], 'crit[] must carry at least one entry when present'),\n );\n return invalid;\n }\n const seen = new Set<string>();\n for (let i = 0; i < record.crit.length; i++) {\n const critName = record.crit[i]!;\n let reason: string | null = null;\n if (TOP_LEVEL_BASE_KEYS.has(critName)) {\n reason = `'${critName}' is a base key and MUST NOT appear in crit[]`;\n } else if (!isExtensionKey(critName)) {\n reason = `'${critName}' does not match the extension-key regex (^x-.+ or ^[a-z]+-.+)`;\n } else if (!decodedTopKeys.has(critName)) {\n reason = `'${critName}' is named in crit but absent from the record map`;\n } else if (seen.has(critName)) {\n reason = `'${critName}' appears more than once in crit[]`;\n }\n seen.add(critName);\n if (reason !== null) {\n invalid.add(i);\n errors.push(issue('CRIT_SHAPE_INVALID', ['crit', i], reason));\n }\n }\n return invalid;\n}\n\nfunction topLevelKeysOf(decoded: unknown): Set<string> {\n if (decoded === null || typeof decoded !== 'object') return new Set();\n if (decoded instanceof Map) {\n const out = new Set<string>();\n for (const k of decoded.keys()) {\n if (typeof k === 'string') out.add(k);\n }\n return out;\n }\n return new Set(Object.keys(decoded as Record<string, unknown>));\n}\n\n// =============================================================================\n// Path / issue helpers\n// =============================================================================\n\nfunction issue(\n code: ErrorCode,\n path: ReadonlyArray<string | number>,\n message: string,\n): ValidationIssue {\n return { code, path, message, severity: SEVERITY[code] };\n}\n\nfunction compareIssuePath(a: ValidationIssue, b: ValidationIssue): number {\n return a.path.join('.').localeCompare(b.path.join('.'));\n}\n\nfunction valueAtPath(root: unknown, path: ReadonlyArray<string | number>): unknown {\n let cur: unknown = root;\n for (const seg of path) {\n if (cur === null || cur === undefined) return undefined;\n if (cur instanceof Map) {\n cur = cur.get(seg);\n continue;\n }\n if (typeof cur !== 'object') return undefined;\n cur = (cur as Record<string | number, unknown>)[seg];\n }\n return cur;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/constants.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/tag.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/box.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/utils.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/typeEncoderMap.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/sorts.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/writer.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/float.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/errors.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/const.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/decode.js","../../../node_modules/.pnpm/@cto.af+wtf8@0.0.5/node_modules/@cto.af/wtf8/lib/encode.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/encoder.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/options.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/simple.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/decodeStream.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/container.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/diagnostic.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/comment.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/types.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/decoder.js","../../../node_modules/.pnpm/cbor2@2.3.0/node_modules/cbor2/lib/index.js","../../crypto-core/src/cbor/errors.ts","../../crypto-core/src/cbor/canonical.ts","../src/encoder.ts","../src/error-codes.ts","../src/carriage.ts","../../../node_modules/.pnpm/@noble+ed25519@3.1.0/node_modules/@noble/ed25519/index.js","../../crypto-core/src/sig/ed25519.ts","../../crypto-core/src/cose/errors.ts","../../crypto-core/src/cose/sign1.ts","../../crypto-core/src/sealed-poe/transcript.ts","../../crypto-core/src/sealed-poe/wrap.ts","../../crypto-core/src/sealed-poe/passphrase-normalize.ts","../src/validator.ts"],"names":["b","k","o","e","t","n","f","r","a","s","A","d","u","c","l","I","g","p","S","x","U","h","B","z","F","y","N","m","O","Z","R","v","T","H","$","w","L","q","E","_","out","isBytes","abytes","C","M","X","Y","y2","X2","Y2","Z2","G","x2","b2","b4","v3","CanonicalCborError","decodeCanonicalCbor","mapDecodeError","bytesToHex","j"],"mappings":"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","file":"index.js","sourcesContent":["// Label 309 v1 PoE record Zod schemas.\n//\n// Scope: structural shape gate over the DECODED record body. The schema\n// enforces per-field CBOR types (every map position rejects a CBOR byte\n// string — see the text-keyed-map gate below), the fixed byte lengths a field\n// can assert in isolation (32-byte `supersedes`, 32-byte `slots_mac`, the\n// 16..64-byte passphrase salt), closed-map invariants (`items[i]`,\n// `merkle[i]`, `sigs[i]`, `passphrase`), and the `v == 1` literal.\n// Cross-field rules (content-hash binding under `enc`, slots/passphrase\n// exclusivity, `crit[]` shape, registry membership of algorithm identifiers,\n// COSE_Sign1 structural decode, URI shape, non-empty-array rules, integer\n// ranges) fire in `validator.ts` so each violation emits its precise\n// canonical code rather than a generic schema mismatch.\n//\n// Every logical byte string is a SINGLE CBOR byte string and every URI is a\n// SINGLE text string: record-body fields carry no 64-byte cap and no chunk\n// wrappers. The ledger's 64-byte metadata-string cap is satisfied by the\n// whole-body transport chunk array alone (see `carriage.ts`), which is\n// reassembled before the validator ever sees the body.\n\nimport { z } from 'zod';\n\n// =============================================================================\n// Text-keyed-map gate\n// =============================================================================\n//\n// Every map position in the record grammar is a CBOR text-keyed map. The\n// canonical decoder surfaces such a map as a plain object — but a CBOR byte\n// string surfaces as a Uint8Array, which is ALSO an object to Zod, so an\n// ungated object schema would walk its byte indices as if they were map keys\n// and mis-report one unknown-key issue per byte plus a missing-required issue\n// per absent field. The gate runs ahead of the map schema and fails a byte\n// string with a SINGLE issue at the position itself — the same one-issue\n// rejection every other non-map CBOR shape already receives from the object\n// parser; the validator's issue mapper then lifts it to the position's\n// canonical code by path. (`z.record` positions need no gate: Zod's record\n// parser rejects a Uint8Array outright. A map carrying non-text keys decodes\n// to a `Map` and is handled by the validator's pre-guard, not here.)\nfunction textKeyedMap<S extends z.ZodType>(inner: S) {\n return z\n .custom<unknown>((value) => !(value instanceof Uint8Array), {\n message: 'CBOR byte string present where a text-keyed map is required',\n })\n .pipe(inner);\n}\n\n// =============================================================================\n// Hashes map\n// =============================================================================\n//\n// `hashes` is a non-empty CBOR map keyed by content-hash algorithm identifier\n// (a text string from the content-hash registry) with the 32-byte digest as\n// value. The canonical decoder surfaces a text-keyed CBOR map as a plain JS\n// object — `z.record` admits any string key here. Registry membership\n// (`UNSUPPORTED_HASH_ALG`), per-algorithm digest length\n// (`HASH_DIGEST_LENGTH_MISMATCH`), and the non-empty rule live in the\n// validator's domain pass.\n\nexport const HashDigestSchema = z.instanceof(Uint8Array);\n\nexport const HashesMapSchema = z.record(z.string(), HashDigestSchema);\nexport type HashesMap = z.infer<typeof HashesMapSchema>;\n\n// =============================================================================\n// URIs\n// =============================================================================\n//\n// One absolute URI in a single text string. Absolute-URI / fragment / scheme\n// / per-scheme body rules (`INVALID_URI`) are domain checks.\n\nexport const UriSchema = z.string();\nexport type Uri = z.infer<typeof UriSchema>;\n\n// =============================================================================\n// Top-level `merkle[]`\n// =============================================================================\n//\n// Each commit is a closed map `{alg, root, leaf_count, ? uris}`. `alg` is open\n// (registry membership → `UNSUPPORTED_MERKLE_COMMIT_ALG` in the domain pass).\n// `leaf_count` is a CBOR unsigned integer pinned to `1 .. 2^32 − 1`, handled\n// as an EXACT integer: the canonical decoder surfaces values above 2^53 − 1 as\n// `bigint`, so the schema admits both representations and the domain pass\n// enforces the range (`SCHEMA_MERKLE_LEAF_COUNT_INVALID`) without ever\n// rounding through a float.\n\nexport const MerkleCommitSchema = textKeyedMap(\n z\n .object({\n alg: z.string(),\n root: z.instanceof(Uint8Array),\n leaf_count: z.union([z.number().int(), z.bigint()]),\n uris: z.array(UriSchema).optional(),\n })\n .strict(),\n);\nexport type MerkleCommit = z.infer<typeof MerkleCommitSchema>;\n\n// =============================================================================\n// Encryption envelope\n// =============================================================================\n//\n// The wire `enc` value is a CHOICE between two readings, mirroring the\n// grammar's `enc = enc-scheme-1 / enc-opaque`:\n//\n// - the scheme-1 shape — the closed map this revision defines, applied by\n// the validator only when `scheme`, `kem`, and `aead` are ALL supported\n// identifiers;\n// - the opaque reading — `scheme` (any CBOR unsigned integer) plus\n// arbitrary text-keyed bounded metadata, the degrade-to-opaque escape\n// hatch for envelopes under identifiers this implementation does not\n// support (`ENC_UNSUPPORTED`).\n//\n// The choice is not a discriminator: a `scheme: 1` envelope that fails the\n// scheme-1 shape is rejected with its typed code, never reclassified as\n// opaque. The validator therefore keeps `enc` as `unknown` at the item layer\n// and dispatches on raw `scheme` / `kem` / `aead` support before applying\n// `EncScheme1Schema`.\n\n// Per-slot recipient entry. The slot shape is KEM-driven:\n//\n// - x25519: `{ epk: bstr(32), wrap: bstr(48) }` — `epk` is the\n// ephemeral X25519 public key.\n// - mlkem768x25519: `{ kem_ct: bstr(1120), wrap: bstr(48) }` — `kem_ct` is\n// the single 1120-byte X-Wing encapsulation; there is NO per-slot `epk`\n// on the hybrid path (the X25519 ephemeral is the trailing 32 bytes of\n// `kem_ct`).\n//\n// The schema is deliberately PERMISSIVE: all three fields are optional and\n// `.strict()` is not applied, because the required shape depends on the\n// envelope-level `kem`, which a slot cannot see in isolation. The KEM-driven\n// gate in the validator emits the precise codes (`KEM_EPK_LENGTH_MISMATCH`,\n// `KEM_CT_LENGTH_MISMATCH`, `WRAP_LENGTH_MISMATCH`, `ENC_SLOT_INVALID_SHAPE`)\n// against the RAW decoded slot key set, so cross-KEM contamination and stray\n// keys are rejected even though the schema strips nothing here.\nexport const SlotSchema = textKeyedMap(\n z.object({\n epk: z.instanceof(Uint8Array).optional(),\n kem_ct: z.instanceof(Uint8Array).optional(),\n wrap: z.instanceof(Uint8Array).optional(),\n }),\n);\nexport type Slot = z.infer<typeof SlotSchema>;\n\n// Argon2id params `{m, t, p}` — a closed map of CBOR unsigned integers in the\n// pinned `0 .. 2^32 − 1` exact-integer range. The closed-map rule, the range,\n// and the floor checks all emit their codes in the validator's domain pass;\n// this schema is the public convenience type for producers.\nexport const Argon2idParamsSchema = textKeyedMap(\n z\n .object({\n m: z.union([z.number().int(), z.bigint()]),\n t: z.union([z.number().int(), z.bigint()]),\n p: z.union([z.number().int(), z.bigint()]),\n })\n .strict(),\n);\nexport type Argon2idParams = z.infer<typeof Argon2idParamsSchema>;\n\n// Passphrase block. `alg` is open (registry membership →\n// `ENC_PASSPHRASE_ALG_UNSUPPORTED` in the domain pass); `params` is open here\n// (the domain pass narrows on the registered `alg` and emits\n// `SCHEMA_UNKNOWN_FIELD` / `SCHEMA_MISSING_REQUIRED` / `SCHEMA_TYPE_MISMATCH`\n// / the floor and ceiling codes per sub-field). Salt length bounds are\n// schema-layer refinements carrying their dedicated codes.\nexport const PassphraseBlockSchema = textKeyedMap(\n z\n .object({\n alg: z.string(),\n salt: z.instanceof(Uint8Array).superRefine((bytes, ctx) => {\n if (bytes.length < 16) {\n ctx.addIssue({\n code: 'custom',\n path: [],\n message: `passphrase.salt length ${bytes.length} < 16`,\n params: { code: 'ENC_PASSPHRASE_SALT_TOO_SHORT' },\n });\n } else if (bytes.length > 64) {\n ctx.addIssue({\n code: 'custom',\n path: [],\n message: `passphrase.salt length ${bytes.length} > 64`,\n params: { code: 'ENC_PASSPHRASE_SALT_TOO_LONG' },\n });\n }\n }),\n params: z.record(z.string(), z.unknown()),\n })\n .strict(),\n);\nexport type PassphraseBlock = z.infer<typeof PassphraseBlockSchema>;\n\n// The typed scheme-1 envelope arm. Applied by the validator only when\n// `scheme` / `kem` / `aead` are all supported identifiers; under an\n// unsupported identifier the envelope takes the opaque reading instead and\n// this schema never runs. The map is CLOSED (`.strict()`): an unknown key in\n// a supported envelope is `SCHEMA_UNKNOWN_FIELD`, never a reason to fall back\n// to the opaque reading. Cross-field key-path invariants (exclusivity,\n// `slots` ↔ `slots_mac` ↔ `kem`, non-empty `slots`) are domain checks.\nexport const EncScheme1Schema = textKeyedMap(\n z\n .object({\n scheme: z.literal(1),\n aead: z.string(),\n kem: z.string().optional(),\n nonce: z.instanceof(Uint8Array),\n slots: z.array(SlotSchema).optional(),\n slots_mac: z\n .instanceof(Uint8Array)\n .refine((b) => b.length === 32, {\n params: { code: 'ENC_SLOTS_MAC_INVALID_LENGTH' },\n })\n .optional(),\n passphrase: PassphraseBlockSchema.optional(),\n })\n .strict(),\n);\nexport type EncScheme1 = z.infer<typeof EncScheme1Schema>;\n\n// The opaque reading: `scheme` is the only structurally required key (any\n// CBOR unsigned integer — `bigint` admits values above 2^53), and every other\n// text-keyed entry is unconstrained bounded metadata. A verifier escape\n// hatch, never a producer surface.\nexport const EncOpaqueSchema = textKeyedMap(\n z.looseObject({\n scheme: z.union([z.number().int().nonnegative(), z.bigint().nonnegative()]),\n }),\n);\nexport type EncOpaque = z.infer<typeof EncOpaqueSchema>;\n\nexport const EncryptionEnvelopeSchema = z.union([EncScheme1Schema, EncOpaqueSchema]);\nexport type EncryptionEnvelope = z.infer<typeof EncryptionEnvelopeSchema>;\n\n// =============================================================================\n// Item entry\n// =============================================================================\n\nexport const ItemEntrySchema = textKeyedMap(\n z\n .object({\n hashes: HashesMapSchema,\n uris: z.array(UriSchema).optional(),\n // Captured as `unknown`: the envelope is a union whose disposition\n // (typed scheme-1 vs opaque) depends on identifier support, so the\n // validator's domain pass — not this schema — narrows it.\n enc: z.unknown().optional(),\n })\n .strict(),\n);\nexport type ItemEntry = z.infer<typeof ItemEntrySchema>;\n\n// =============================================================================\n// Sig entry\n// =============================================================================\n//\n// Closed CBOR map `{cose_sign1, ? cose_key}`. Each value is a SINGLE byte\n// string carrying the CBOR-encoded COSE_Sign1 / COSE_Key. Canonical CBOR\n// map-key sort (RFC 8949 §4.2.1, bytewise lex on encoded keys) places\n// `cose_key` before `cose_sign1`; schema property order is irrelevant.\nexport const SigEntrySchema = textKeyedMap(\n z\n .object({\n cose_key: z.instanceof(Uint8Array).optional(),\n cose_sign1: z.instanceof(Uint8Array),\n })\n .strict(),\n);\nexport type SigEntry = z.infer<typeof SigEntrySchema>;\n\n// =============================================================================\n// Supersedence\n// =============================================================================\n\nexport const SupersedesSchema = z.instanceof(Uint8Array).refine((b) => b.length === 32, {\n params: { code: 'SUPERSEDES_TX_INVALID_LENGTH' },\n});\nexport type Supersedes = z.infer<typeof SupersedesSchema>;\n\n// =============================================================================\n// Top-level record\n// =============================================================================\n//\n// `v == 1` is a literal — a future major (`v: 2`) MUST be rejected with\n// `SCHEMA_INVALID_LITERAL`. `z.literal(1)` preserves the narrow `1` type for\n// the inferred `PoeRecord[\"v\"]` and emits Zod's `invalid_value` code, which\n// the validator's mapper lifts to `SCHEMA_INVALID_LITERAL`.\n//\n// `looseObject` admits extension keys; the validator's domain pass rejects\n// unknown keys that match neither extension namespace with\n// `SCHEMA_UNKNOWN_FIELD`.\nexport const VersionLiteralSchema = z.literal(1);\n\nexport const PoeRecordSchema = textKeyedMap(\n z.looseObject({\n v: VersionLiteralSchema,\n items: z.array(ItemEntrySchema).optional(),\n merkle: z.array(MerkleCommitSchema).optional(),\n supersedes: SupersedesSchema.optional(),\n sigs: z.array(SigEntrySchema).optional(),\n crit: z.array(z.string()).optional(),\n }),\n);\nexport type PoeRecord = z.infer<typeof PoeRecordSchema>;\n\n// =============================================================================\n// Closed top-level base-key registry\n// =============================================================================\n//\n// Used by the validator's domain pass to distinguish unknown-typo keys from\n// well-formed extension keys.\nexport const TOP_LEVEL_BASE_KEYS: ReadonlySet<string> = new Set([\n 'v',\n 'items',\n 'merkle',\n 'supersedes',\n 'sigs',\n 'crit',\n]);\n\n// Extension-key namespaces: `^x-.+` (vendor / experimental) and `^[a-z]+-.+`\n// (companion namespace), with control characters (U+0000–U+001F,\n// U+007F–U+009F) rejected ANYWHERE in the key — including a trailing newline,\n// so `x-note\\n` and `x-a\\nb` are both outside the namespace. The suffix\n// character class spells the exclusion out rather than relying on `.`\n// semantics, the literal `x-` / `[a-z]+-` prefixes admit no control\n// characters by construction, and `$` in JavaScript matches only at the true\n// end of the string, so a trailing newline cannot hide behind the anchor.\n// eslint-disable-next-line no-control-regex -- the control-character exclusion IS the admissibility rule\nexport const EXTENSION_KEY_VENDOR_RE = /^x-[^\\u0000-\\u001f\\u007f-\\u009f]+$/;\n// eslint-disable-next-line no-control-regex -- the control-character exclusion IS the admissibility rule\nexport const EXTENSION_KEY_COMPANION_RE = /^[a-z]+-[^\\u0000-\\u001f\\u007f-\\u009f]+$/;\n\nexport function isExtensionKey(k: string): boolean {\n return EXTENSION_KEY_VENDOR_RE.test(k) || EXTENSION_KEY_COMPANION_RE.test(k);\n}\n","const f={POS_INT:0,NEG_INT:1,BYTE_STRING:2,UTF8_STRING:3,ARRAY:4,MAP:5,TAG:6,SIMPLE_FLOAT:7},T={DATE_STRING:0,DATE_EPOCH:1,POS_BIGINT:2,NEG_BIGINT:3,DECIMAL_FRAC:4,BIGFLOAT:5,BASE64URL_EXPECTED:21,BASE64_EXPECTED:22,BASE16_EXPECTED:23,CBOR:24,URI:32,BASE64URL:33,BASE64:34,MIME:36,DATE_EPOCH_DAYS:100,SET:258,JSON:262,WTF8:273,SYMBOL:280,DATE_FULL:1004,REGEXP:21066,SELF_DESCRIBED:55799,INVALID_16:65535,INVALID_32:4294967295,INVALID_64:0xffffffffffffffffn},I={ZERO:0,ONE:24,TWO:25,FOUR:26,EIGHT:27,INDEFINITE:31},o={FALSE:20,TRUE:21,NULL:22,UNDEFINED:23};class A{static BREAK=Symbol.for(\"github.com/hildjj/cbor2/break\");static ENCODED=Symbol.for(\"github.com/hildjj/cbor2/cbor-encoded\");static LENGTH=Symbol.for(\"github.com/hildjj/cbor2/length\")}const S={MIN:-(2n**63n),MAX:2n**64n-1n};export{S as DCBOR_INT,f as MT,I as NUMBYTES,o as SIMPLE,A as SYMS,T as TAG};\n","class o{static#e=new Map;tag;contents;constructor(e,t=void 0){this.tag=e,this.contents=t}get noChildren(){return!!o.#e.get(this.tag)?.noChildren}static registerDecoder(e,t,n){const i=this.#e.get(e);return this.#e.set(e,t),i&&(\"comment\"in t||(t.comment=i.comment),\"noChildren\"in t||(t.noChildren=i.noChildren)),n&&!t.comment&&(t.comment=()=>`(${n})`),i}static clearDecoder(e){const t=this.#e.get(e);return this.#e.delete(e),t}static getDecoder(e){return this.#e.get(e)}static getAllDecoders(){return new Map(this.#e)}*[Symbol.iterator](){yield this.contents}push(e){return this.contents=e,1}decode(e){const t=e?.tags?.get(this.tag)??(e?.ignoreGlobalTags?void 0:o.#e.get(this.tag));return t?t(this,e):this}comment(e,t){const n=e?.tags?.get(this.tag)??(e?.ignoreGlobalTags?void 0:o.#e.get(this.tag));if(n?.comment)return n.comment(this,e,t)}toCBOR(){return[this.tag,this.contents]}[Symbol.for(\"nodejs.util.inspect.custom\")](e,t,n){return`${this.tag}(${n(this.contents,t)})`}}export{o as Tag};\n","import{SYMS as i}from\"./constants.js\";import{Tag as o}from\"./tag.js\";function f(n){if(n!=null&&typeof n==\"object\")return n[i.ENCODED]}function s(n){if(n!=null&&typeof n==\"object\")return n[i.LENGTH]}function u(n,e){Object.defineProperty(n,i.ENCODED,{configurable:!0,enumerable:!1,value:e})}function l(n,e){Object.defineProperty(n,i.LENGTH,{configurable:!0,enumerable:!1,value:e})}function d(n,e){const r=Object(n);return u(r,e),r}function t(n){if(!n||typeof n!=\"object\")return n;switch(n.constructor){case BigInt:case Boolean:case Number:case String:case Symbol:return n.valueOf();case Array:return n.map(e=>t(e));case Map:{const e=t([...n.entries()]);return e.every(([r])=>typeof r==\"string\")?Object.fromEntries(e):new Map(e)}case o:return new o(t(n.tag),t(n.contents));case Object:{const e={};for(const[r,a]of Object.entries(n))e[r]=t(a);return e}}return n}export{d as box,f as getEncoded,s as getEncodedLength,u as saveEncoded,l as saveEncodedLength,t as unbox};\n","const g=Symbol(\"CBOR_RANGES\");function c(r,n){Object.defineProperty(r,g,{configurable:!1,enumerable:!1,writable:!1,value:n})}function f(r){return r[g]}function l(r){return f(r)!==void 0}function R(r,n=0,t=r.length-1){const o=r.subarray(n,t),a=f(r);if(a){const s=[];for(const e of a)if(e[0]>=n&&e[0]+e[1]<=t){const i=[...e];i[0]-=n,s.push(i)}s.length&&c(o,s)}return o}function b(r){let n=Math.ceil(r.length/2);const t=new Uint8Array(n);n--;for(let o=r.length,a=o-2;o>=0;o=a,a-=2,n--)t[n]=parseInt(r.substring(a,o),16);return t}function A(r){return r.reduce((n,t)=>n+t.toString(16).padStart(2,\"0\"),\"\")}function d(r){const n=r.reduce((e,i)=>e+i.length,0),t=r.some(e=>l(e)),o=[],a=new Uint8Array(n);let s=0;for(const e of r){if(!(e instanceof Uint8Array))throw new TypeError(`Invalid array: ${e}`);if(a.set(e,s),t){const i=e[g]??[[0,e.length]];for(const u of i)u[0]+=s;o.push(...i)}s+=e.length}return t&&c(a,o),a}function y(r){const n=atob(r);return Uint8Array.from(n,t=>t.codePointAt(0))}const p={\"-\":\"+\",_:\"/\"};function x(r){const n=r.replace(/[_-]/g,t=>p[t]);return y(n.padEnd(Math.ceil(n.length/4)*4,\"=\"))}function h(){const r=new Uint8Array(4),n=new Uint32Array(r.buffer);return!((n[0]=1)&r[0])}function U(r){let n=\"\";for(const t of r){const o=t.codePointAt(0)?.toString(16).padStart(4,\"0\");n&&(n+=\", \"),n+=`U+${o}`}return n}export{g as CBOR_RANGES,y as base64ToBytes,x as base64UrlToBytes,f as getRanges,l as hasRanges,b as hexToU8,h as isBigEndian,c as setRanges,U as stringToHex,R as subarrayRanges,d as u8concat,A as u8toHex};\n","class s{#e=new Map;registerEncoder(e,t){const n=this.#e.get(e);return this.#e.set(e,t),n}get(e){return this.#e.get(e)}delete(e){return this.#e.delete(e)}clear(){this.#e.clear()}}export{s as TypeEncoderMap};\n","function f(c,d){const[u,a,n]=c,[l,s,t]=d,r=Math.min(n.length,t.length);for(let o=0;o<r;o++){const e=n[o]-t[o];if(e!==0)return e}return 0}function y(c,d){const[u,a,n]=c,[l,s,t]=d,r=n.length-t.length;if(r!==0)return r;const o=Math.min(n.length,t.length);for(let e=0;e<o;e++){const i=n[e]-t[e];if(i!==0)return i}return 0}export{f as sortCoreDeterministic,y as sortLengthFirstDeterministic};\n","class e{static defaultOptions={chunkSize:4096};#r;#i=[];#s=null;#t=0;#a=0;constructor(t={}){if(this.#r={...e.defaultOptions,...t},this.#r.chunkSize<8)throw new RangeError(`Expected size >= 8, got ${this.#r.chunkSize}`);this.#n()}get length(){return this.#a}read(){this.#o();const t=new Uint8Array(this.#a);let i=0;for(const s of this.#i)t.set(s,i),i+=s.length;return this.#n(),t}write(t){const i=t.length;i>this.#l()?(this.#o(),i>this.#r.chunkSize?(this.#i.push(t),this.#n()):(this.#n(),this.#i[this.#i.length-1].set(t),this.#t=i)):(this.#i[this.#i.length-1].set(t,this.#t),this.#t+=i),this.#a+=i}writeUint8(t){this.#e(1),this.#s.setUint8(this.#t,t),this.#h(1)}writeUint16(t,i=!1){this.#e(2),this.#s.setUint16(this.#t,t,i),this.#h(2)}writeUint32(t,i=!1){this.#e(4),this.#s.setUint32(this.#t,t,i),this.#h(4)}writeBigUint64(t,i=!1){this.#e(8),this.#s.setBigUint64(this.#t,t,i),this.#h(8)}writeInt16(t,i=!1){this.#e(2),this.#s.setInt16(this.#t,t,i),this.#h(2)}writeInt32(t,i=!1){this.#e(4),this.#s.setInt32(this.#t,t,i),this.#h(4)}writeBigInt64(t,i=!1){this.#e(8),this.#s.setBigInt64(this.#t,t,i),this.#h(8)}writeFloat32(t,i=!1){this.#e(4),this.#s.setFloat32(this.#t,t,i),this.#h(4)}writeFloat64(t,i=!1){this.#e(8),this.#s.setFloat64(this.#t,t,i),this.#h(8)}clear(){this.#a=0,this.#i=[],this.#n()}#n(){const t=new Uint8Array(this.#r.chunkSize);this.#i.push(t),this.#t=0,this.#s=new DataView(t.buffer,t.byteOffset,t.byteLength)}#o(){if(this.#t===0){this.#i.pop();return}const t=this.#i.length-1;this.#i[t]=this.#i[t].subarray(0,this.#t),this.#t=0,this.#s=null}#l(){const t=this.#i.length-1;return this.#i[t].length-this.#t}#e(t){this.#l()<t&&(this.#o(),this.#n())}#h(t){this.#t+=t,this.#a+=t}}export{e as Writer};\n","const w=1n<<15n,f=0b11111n<<10n,b=1n<<9n,d=b-1n,I=b|d,g=1n<<31n,l=0b11111111n<<23n,A=1n<<22n,E=A-1n,p=A|E,N=1n<<63n,a=0b11111111111n<<52n,c=1n<<51n,u=c-1n,F=c|u,_=u-(d<<42n),S=u-(E<<29n),m={2:\"0b\",8:\"0o\",16:\"0x\"};var x=(t=>(t[t.NATURAL=-2]=\"NATURAL\",t[t.UNKNOWN=-1]=\"UNKNOWN\",t[t.F16=2]=\"F16\",t[t.F32=4]=\"F32\",t[t.F64=8]=\"F64\",t))(x||{});function U(i,n,e,r){let o=\"nan'\";return i.quiet||(o+=\"!\"),i.sign===-1&&(o+=\"-\"),o+=r(Math.abs(i.payload),e),o+=\"'\",o+=i.encodingIndicator,o}class O extends Number{#n;#t=-1;constructor(n,e=!0,r=-1){super(NaN);const o=n;if(typeof n==\"number\"){if(!Number.isSafeInteger(n))throw new Error(`Invalid NAN payload: ${n}`);n=BigInt(n);let t=0n;if(n<0&&(t=N,n=-n),n>=c)throw new Error(`Payload too large: ${o}`);const s=e?c:0n;switch(this.#n=t|a|s|n,r){case-2:throw new Error(\"NAN_SIZE.NATURAL only valid for bigint constructor\");case-1:r=this.preferredSize;break;case 2:if(this.#n&_)throw new Error(\"Invalid size for payload\");break;case 4:if(this.#n&S)throw new Error(\"Invalid size for payload\");break;case 8:break;default:throw new Error(`Invalid size: ${r}`)}this.#t=r}else if(typeof n==\"bigint\"){let t=-1;if((n&a)===a)this.#n=n,t=8;else if((n&l)===l){const s=(n&g)<<32n;this.#n=s|a|(n&p)<<29n,t=4}else if((n&f)===f){const s=(n&w)<<48n;this.#n=s|a|(n&I)<<42n,t=2}else throw new Error(`Invalid raw NaN value: ${n}`);if(r===-1)this.#t=this.preferredSize;else if(r===-2)this.#t=t;else{if(r<t)throw new Error(\"Invalid bigint NaN size\");this.#t=r}}else{const t=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.length){case 3:{if(n[0]!==249)throw new Error(\"Invalid CBOR encoding for half float\");const s=BigInt(t.getUint16(1,!1));if((s&f)!==f)throw new Error(\"Not a NaN\");const h=(s&w)<<48n;this.#n=h|a|(s&I)<<42n,this.#t=2;break}case 5:{if(n[0]!==250)throw new Error(\"Invalid CBOR encoding for single float\");const s=BigInt(t.getUint32(1,!1));if((s&l)!==l)throw new Error(\"Not a NaN\");const h=(s&g)<<32n;this.#n=h|a|(s&p)<<29n,this.#t=4;break}case 9:{if(n[0]!==251)throw new Error(\"Invalid CBOR encoding for double float\");if(this.#n=t.getBigUint64(1,!1),(this.#n&a)!==a)throw new Error(\"Not a NaN (NaNaN)\");this.#t=8;break}default:throw new RangeError(`Invalid NAN size (should be 2, 4, or 8): ${n.length-1}`)}}if(!this.payload&&!this.quiet)throw new Error(\"Signalling NaN with zero payload\")}get bytes(){const n=new ArrayBuffer(this.#t+1),e=new DataView(n);switch(this.#t){case 2:{e.setUint8(0,249);const o=(this.#n&N?w:0n)|f|(this.#n&F)>>42n;e.setUint16(1,Number(o),!1);break}case 4:{e.setUint8(0,250);const o=(this.#n&N?g:0n)|l|(this.#n&F)>>29n;e.setUint32(1,Number(o),!1);break}case 8:e.setUint8(0,251),e.setBigUint64(1,this.#n);break}return new Uint8Array(n)}get quiet(){return!!(this.#n&c)}get sign(){return this.#n&N?-1:1}get payload(){return Number(this.#n&u)*this.sign}get raw(){return this.#n}get encodingIndicator(){switch(this.#t){case 2:return\"_1\";case 4:return\"_2\"}return\"_3\"}get size(){return this.#t}get preferredSize(){return(this.#n&_)===0n?2:(this.#n&S)===0n?4:8}get isShortestEncoding(){return this.preferredSize===this.#t}toCBOR(n){n.write(this.bytes)}toString(n=10){return U(this,1,{},e=>(m[n]??\"\")+e.toString(n))}[Symbol.for(\"nodejs.util.inspect.custom\")](n,e,r){return U(this,n,e,r)}}function v(i,n=0,e=!1){const r=i[n]&128?-1:1,o=(i[n]&124)>>2,t=(i[n]&3)<<8|i[n+1];if(o===0){if(e&&t!==0)throw new Error(`Unwanted subnormal: ${r*5960464477539063e-23*t}`);return r*5960464477539063e-23*t}else if(o===31)return t?NaN:r*(1/0);return r*2**(o-25)*(1024+t)}function Z(i){const n=new DataView(new ArrayBuffer(4));n.setFloat32(0,i,!1);const e=n.getUint32(0,!1);if((e&8191)!==0)return null;let r=e>>16&32768;const o=e>>23&255,t=e&8388607;if(!(o===0&&t===0))if(o>=113&&o<=142)r+=(o-112<<10)+(t>>13);else if(o>=103&&o<113){if(t&(1<<126-o)-1)return null;r+=t+8388608>>126-o}else if(o===255)r|=31744,r|=t>>13;else return null;return r}function k(i){if(i!==0){const n=new ArrayBuffer(8),e=new DataView(n);e.setFloat64(0,i,!1);const r=e.getBigUint64(0,!1);if((r&0x7ff0000000000000n)===0n)return r&0x8000000000000000n?-0:0}return i}function B(i){switch(i.length){case 2:v(i,0,!0);break;case 4:{const n=new DataView(i.buffer,i.byteOffset,i.byteLength),e=n.getUint32(0,!1);if((e&2139095040)===0&&e&8388607)throw new Error(`Unwanted subnormal: ${n.getFloat32(0,!1)}`);break}case 8:{const n=new DataView(i.buffer,i.byteOffset,i.byteLength),e=n.getBigUint64(0,!1);if((e&0x7ff0000000000000n)===0n&&e&0x000fffffffffffn)throw new Error(`Unwanted subnormal: ${n.getFloat64(0,!1)}`);break}default:throw new TypeError(`Bad input to isSubnormal: ${i}`)}}export{O as NAN,x as NAN_SIZE,B as checkSubnormal,k as flushToZero,Z as halfToUint,v as parseHalf};\n","export class DecodeError extends TypeError {\n code = 'ERR_ENCODING_INVALID_ENCODED_DATA';\n constructor() {\n super('The encoded data was not valid for encoding wtf-8');\n }\n}\nexport class InvalidEncodingError extends RangeError {\n code = 'ERR_ENCODING_NOT_SUPPORTED';\n constructor(label) {\n super(`Invalid encoding: \"${label}\"`);\n }\n}\n","export const BOM = 0xfeff;\nexport const EMPTY = new Uint8Array(0);\nexport const MAX_HIGH_SURROGATE = 0xdbff;\nexport const MAX_LOW_SURROGATE = 0xdfff;\nexport const MIN_HIGH_SURROGATE = 0xd800;\nexport const MIN_LOW_SURROGATE = 0xdc00;\nexport const REPLACEMENT = 0xfffd;\nexport const WTF8 = 'wtf-8';\n","import { BOM, EMPTY, MIN_HIGH_SURROGATE, MIN_LOW_SURROGATE, REPLACEMENT, WTF8, } from './const.js';\nimport { DecodeError, InvalidEncodingError } from './errors.js';\nfunction isArrayBufferView(input) {\n return (input &&\n (typeof input === 'object') &&\n !(input instanceof ArrayBuffer) &&\n !(input instanceof SharedArrayBuffer) &&\n input.buffer instanceof ArrayBuffer);\n}\nfunction getUint8(input) {\n if (!input) {\n return EMPTY;\n }\n if (input instanceof Uint8Array) {\n return input;\n }\n if (isArrayBufferView(input)) {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n return new Uint8Array(input);\n}\nconst REMAINDER = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n -1,\n -1,\n -1,\n -1,\n 1,\n 1,\n 2,\n 3,\n];\nexport class Wtf8Decoder {\n static DEFAULT_BUFFERSIZE = 0x1000;\n encoding = WTF8;\n fatal;\n ignoreBOM;\n bufferSize;\n #left = 0;\n #cur = 0;\n #pending = 0;\n #first = true;\n #buf;\n constructor(label = 'wtf8', options = undefined) {\n if (label.toLowerCase().replace('-', '') !== 'wtf8') {\n throw new InvalidEncodingError(label);\n }\n this.fatal = Boolean(options?.fatal);\n this.ignoreBOM = Boolean(options?.ignoreBOM);\n this.bufferSize = Math.floor(options?.bufferSize ?? Wtf8Decoder.DEFAULT_BUFFERSIZE);\n if (isNaN(this.bufferSize) || (this.bufferSize < 1)) {\n throw new RangeError(`Invalid buffer size: ${options?.bufferSize}`);\n }\n this.#buf = new Uint16Array(this.bufferSize);\n }\n decode(input, options) {\n const streaming = Boolean(options?.stream);\n const bytes = getUint8(input);\n const res = [];\n const out = this.#buf;\n const maxSize = this.bufferSize - 3;\n let pos = 0;\n const fatal = () => {\n this.#cur = 0;\n this.#left = 0;\n this.#pending = 0;\n if (this.fatal) {\n throw new DecodeError();\n }\n out[pos++] = REPLACEMENT;\n };\n const fatals = () => {\n const p = this.#pending;\n for (let i = 0; i < p; i++) {\n fatal();\n }\n };\n const oneByte = (b) => {\n if (this.#left === 0) {\n const n = REMAINDER[b >> 4];\n switch (n) {\n case -1:\n fatal();\n break;\n case 0:\n out[pos++] = b;\n break;\n case 1:\n this.#cur = b & 0x1f;\n if ((this.#cur & 0x1e) === 0) {\n fatal();\n }\n else {\n this.#left = 1;\n this.#pending = 1;\n }\n break;\n case 2:\n this.#cur = b & 0x0f;\n this.#left = 2;\n this.#pending = 1;\n break;\n case 3:\n if (b & 0x08) {\n fatal();\n }\n else {\n this.#cur = b & 0x07;\n this.#left = 3;\n this.#pending = 1;\n }\n break;\n }\n }\n else {\n if ((b & 0xc0) !== 0x80) {\n fatals();\n return oneByte(b);\n }\n if ((this.#pending === 1) &&\n (this.#left === 2) &&\n (this.#cur === 0) &&\n ((b & 0x20) === 0)) {\n fatals();\n return oneByte(b);\n }\n if ((this.#left === 3) && (this.#cur === 0) && ((b & 0x30) === 0)) {\n fatals();\n return oneByte(b);\n }\n this.#cur = (this.#cur << 6) | (b & 0x3f);\n this.#pending++;\n if (--this.#left === 0) {\n if (this.ignoreBOM || !this.#first || (this.#cur !== BOM)) {\n if (this.#cur < 0x10000) {\n out[pos++] = this.#cur;\n }\n else {\n const cp = this.#cur - 0x10000;\n out[pos++] = ((cp >>> 10) & 0x3ff) | MIN_HIGH_SURROGATE;\n out[pos++] = (cp & 0x3ff) | MIN_LOW_SURROGATE;\n }\n }\n this.#cur = 0;\n this.#pending = 0;\n this.#first = false;\n }\n }\n };\n for (const b of bytes) {\n if (pos >= maxSize) {\n res.push(String.fromCharCode.apply(null, out.subarray(0, pos)));\n pos = 0;\n }\n oneByte(b);\n }\n if (!streaming) {\n this.#first = true;\n if (this.#cur || this.#left) {\n fatals();\n }\n }\n if (pos > 0) {\n res.push(String.fromCharCode.apply(null, out.subarray(0, pos)));\n }\n return res.join('');\n }\n}\n","import { EMPTY, WTF8 } from './const.js';\nfunction utf8length(str) {\n let len = 0;\n for (const s of str) {\n const cp = s.codePointAt(0);\n if (cp < 0x80) {\n len++;\n }\n else if (cp < 0x800) {\n len += 2;\n }\n else if (cp < 0x10000) {\n len += 3;\n }\n else {\n len += 4;\n }\n }\n return len;\n}\nexport class Wtf8Encoder {\n encoding = WTF8;\n encode(input) {\n if (!input) {\n return EMPTY;\n }\n const buf = new Uint8Array(utf8length(String(input)));\n this.encodeInto(input, buf);\n return buf;\n }\n encodeInto(source, destination) {\n const str = String(source);\n const len = str.length;\n const outLen = destination.length;\n let written = 0;\n let read = 0;\n for (read = 0; read < len; read++) {\n const c = str.codePointAt(read);\n if (c < 0x80) {\n if (written >= outLen) {\n break;\n }\n destination[written++] = c;\n }\n else if (c < 0x800) {\n if (written >= outLen - 1) {\n break;\n }\n destination[written++] = 0xc0 | (c >> 6);\n destination[written++] = 0x80 | (c & 0x3f);\n }\n else if (c < 0x10000) {\n if (written >= outLen - 2) {\n break;\n }\n destination[written++] = 0xe0 | (c >> 12);\n destination[written++] = 0x80 | ((c >> 6) & 0x3f);\n destination[written++] = 0x80 | (c & 0x3f);\n }\n else {\n if (written >= outLen - 3) {\n break;\n }\n destination[written++] = 0xf0 | (c >> 18);\n destination[written++] = 0x80 | ((c >> 12) & 0x3f);\n destination[written++] = 0x80 | ((c >> 6) & 0x3f);\n destination[written++] = 0x80 | (c & 0x3f);\n read++;\n }\n }\n return {\n read,\n written,\n };\n }\n}\n","import{TypeEncoderMap as _}from\"./typeEncoderMap.js\";import{DCBOR_INT as x,MT as f,NUMBYTES as d,SIMPLE as T,SYMS as E,TAG as p}from\"./constants.js\";import{sortCoreDeterministic as G}from\"./sorts.js\";import{Writer as I}from\"./writer.js\";import{box as C,getEncodedLength as D}from\"./box.js\";import{flushToZero as W,halfToUint as S}from\"./float.js\";import{Wtf8Encoder as M}from\"@cto.af/wtf8\";import{hexToU8 as P}from\"./utils.js\";const{ENCODED:ce}=E,U=f.SIMPLE_FLOAT<<5|d.TWO,h=f.SIMPLE_FLOAT<<5|d.FOUR,B=f.SIMPLE_FLOAT<<5|d.EIGHT,j=f.SIMPLE_FLOAT<<5|T.TRUE,q=f.SIMPLE_FLOAT<<5|T.FALSE,$=f.SIMPLE_FLOAT<<5|T.UNDEFINED,z=f.SIMPLE_FLOAT<<5|T.NULL,H=new TextEncoder,K=new M,k={...I.defaultOptions,avoidInts:!1,cde:!1,collapseBigInts:!0,dateTag:p.DATE_EPOCH,dcbor:!1,float64:!1,flushToZero:!1,forceEndian:null,ignoreOriginalEncoding:!1,largeNegativeAsBigInt:!1,reduceUnsafeNumbers:!1,rejectBigInts:!1,rejectCustomSimples:!1,rejectDuplicateKeys:!1,rejectFloats:!1,rejectUndefined:!1,simplifyNegativeZero:!1,sortKeys:null,stringNormalization:null,types:null,wtf8:!1,ignoreGlobalTags:!1},F={cde:!0,ignoreOriginalEncoding:!0,sortKeys:G},Y={...F,dcbor:!0,largeNegativeAsBigInt:!0,reduceUnsafeNumbers:!0,rejectCustomSimples:!0,rejectDuplicateKeys:!0,rejectUndefined:!0,simplifyNegativeZero:!0,stringNormalization:\"NFC\"};function y(e){const n=e<0;return typeof e==\"bigint\"?[n?-e-1n:e,n]:[n?-e-1:e,n]}function N(e,n,i){if(i.rejectFloats)throw new Error(`Attempt to encode an unwanted floating point number: ${e}`);if(isNaN(e))n.writeUint8(U),n.writeUint16(32256);else if(!i.float64&&Math.fround(e)===e){const r=S(e);r===null?(n.writeUint8(h),n.writeFloat32(e)):(n.writeUint8(U),n.writeUint16(r))}else n.writeUint8(B),n.writeFloat64(e)}function a(e,n,i){const[r,t]=y(e);if(t&&i)throw new TypeError(`Negative size: ${e}`);i??=t?f.NEG_INT:f.POS_INT,i<<=5,r<24?n.writeUint8(i|r):r<=255?(n.writeUint8(i|d.ONE),n.writeUint8(r)):r<=65535?(n.writeUint8(i|d.TWO),n.writeUint16(r)):r<=4294967295?(n.writeUint8(i|d.FOUR),n.writeUint32(r)):(n.writeUint8(i|d.EIGHT),n.writeBigUint64(BigInt(r)))}function m(e,n,i){typeof e==\"number\"?a(e,n,f.TAG):typeof e==\"object\"&&!i.ignoreOriginalEncoding&&E.ENCODED in e?n.write(e[E.ENCODED]):e<=Number.MAX_SAFE_INTEGER?a(Number(e),n,f.TAG):(n.writeUint8(f.TAG<<5|d.EIGHT),n.writeBigUint64(BigInt(e)))}function O(e,n,i){const[r,t]=y(e);if(i.collapseBigInts&&(!i.largeNegativeAsBigInt||e>=-0x8000000000000000n)){if(r<=0xffffffffn){a(Number(e),n);return}if(r<=0xffffffffffffffffn){const l=(t?f.NEG_INT:f.POS_INT)<<5;n.writeUint8(l|d.EIGHT),n.writeBigUint64(r);return}}if(i.rejectBigInts)throw new Error(`Attempt to encode unwanted bigint: ${e}`);const o=t?p.NEG_BIGINT:p.POS_BIGINT,c=r.toString(16),s=c.length%2?\"0\":\"\";m(o,n,i);const u=P(s+c);a(u.length,n,f.BYTE_STRING),n.write(u)}function Z(e,n,i){i.flushToZero&&(e=W(e)),Object.is(e,-0)?i.simplifyNegativeZero?i.avoidInts?N(0,n,i):a(0,n):N(e,n,i):!i.avoidInts&&Number.isSafeInteger(e)?a(e,n):i.reduceUnsafeNumbers&&Math.floor(e)===e&&e>=x.MIN&&e<=x.MAX?O(BigInt(e),n,i):N(e,n,i)}function R(e,n,i){const r=i.stringNormalization?e.normalize(i.stringNormalization):e;if(i.wtf8&&!e.isWellFormed()){const t=K.encode(r);m(p.WTF8,n,i),a(t.length,n,f.BYTE_STRING),n.write(t)}else{const t=H.encode(r);a(t.length,n,f.UTF8_STRING),n.write(t)}}function J(e,n,i){const r=e;L(r,r.length,f.ARRAY,n,i);for(const t of r)g(t,n,i)}function V(e,n){a(e.length,n,f.BYTE_STRING),n.write(e)}const b=new _;b.registerEncoder(Array,J),b.registerEncoder(Uint8Array,V);function ue(e,n){return b.registerEncoder(e,n)}function de(e){const n=b.get(e);return b.delete(e),n}function L(e,n,i,r,t){const o=D(e);o&&!t.ignoreOriginalEncoding?r.write(o):a(n,r,i)}function X(e,n,i){if(e===null){n.writeUint8(z);return}if(!i.ignoreOriginalEncoding&&E.ENCODED in e){n.write(e[E.ENCODED]);return}const r=e.constructor;if(r){const o=i.types?.get(r)??(i.ignoreGlobalTags?void 0:b.get(r));if(o){const c=o(e,n,i);if(c!==void 0){if(!Array.isArray(c)||c.length!==2)throw new Error(\"Invalid encoder return value\");(typeof c[0]==\"bigint\"||isFinite(Number(c[0])))&&m(c[0],n,i),g(c[1],n,i)}return}}if(typeof e.toCBOR==\"function\"){const o=e.toCBOR(n,i);o&&((typeof o[0]==\"bigint\"||isFinite(Number(o[0])))&&m(o[0],n,i),g(o[1],n,i));return}if(typeof e.toJSON==\"function\"){g(e.toJSON(),n,i);return}const t=Object.entries(e).map(o=>[o[0],o[1],v(o[0],i)]);i.sortKeys&&t.sort(i.sortKeys),L(e,t.length,f.MAP,n,i);for(const[o,c,s]of t)n.write(s),g(c,n,i)}function Q(e,n,i){if(!e.description||e!==Symbol.for(e.description))throw new TypeError(`Private or empty symbol: ${e.toString()}`);m(280,n,i),R(e.description,n,i)}function g(e,n,i){switch(typeof e){case\"number\":Z(e,n,i);break;case\"bigint\":O(e,n,i);break;case\"string\":R(e,n,i);break;case\"boolean\":n.writeUint8(e?j:q);break;case\"undefined\":if(i.rejectUndefined)throw new Error(\"Attempt to encode unwanted undefined.\");n.writeUint8($);break;case\"object\":X(e,n,i);break;case\"symbol\":Q(e,n,i);break;default:throw new TypeError(`Unknown type: ${typeof e}, ${String(e)}`)}}function v(e,n={}){const i={...k};n.dcbor?Object.assign(i,Y):n.cde&&Object.assign(i,F),Object.assign(i,n);const r=new I(i);return g(e,r,i),r.read()}function ae(e,n,i=f.POS_INT){n||(n=\"f\");const r={...k,collapseBigInts:!1,chunkSize:10,simplifyNegativeZero:!1},t=new I(r),o=Number(e);function c(s){if(Object.is(e,-0))throw new Error(\"Invalid integer: -0\");const[u,l]=y(e);if(l&&i!==f.POS_INT)throw new Error(\"Invalid major type combination\");const w=typeof s==\"number\"&&isFinite(s);if(w&&!Number.isSafeInteger(o))throw new TypeError(`Unsafe number for ${n}: ${e}`);if(u>s)throw new TypeError(`Undersized encoding ${n} for: ${e}`);const A=(l?f.NEG_INT:i)<<5;return w?[A,Number(u)]:[A,u]}switch(n){case\"bigint\":if(Object.is(e,-0))throw new TypeError(\"Invalid bigint: -0\");e=BigInt(e),O(e,t,r);break;case\"f\":N(o,t,r);break;case\"f16\":{const s=S(o);if(s===null)throw new TypeError(`Invalid f16: ${e}`);t.writeUint8(U),t.writeUint16(s);break}case\"f32\":if(!isNaN(o)&&Math.fround(o)!==o)throw new TypeError(`Invalid f32: ${e}`);t.writeUint8(h),t.writeFloat32(o);break;case\"f64\":t.writeUint8(B),t.writeFloat64(o);break;case\"i\":if(Object.is(e,-0))throw new Error(\"Invalid integer: -0\");if(Number.isSafeInteger(o))a(o,t,e<0?void 0:i);else{const[s,u]=c(1/0);u>0xffffffffffffffffn?(e=BigInt(e),O(e,t,r)):(t.writeUint8(s|d.EIGHT),t.writeBigUint64(BigInt(u)))}break;case\"i0\":{const[s,u]=c(23);t.writeUint8(s|u);break}case\"i8\":{const[s,u]=c(255);t.writeUint8(s|d.ONE),t.writeUint8(u);break}case\"i16\":{const[s,u]=c(65535);t.writeUint8(s|d.TWO),t.writeUint16(u);break}case\"i32\":{const[s,u]=c(4294967295);t.writeUint8(s|d.FOUR),t.writeUint32(u);break}case\"i64\":{const[s,u]=c(0xffffffffffffffffn);t.writeUint8(s|d.EIGHT),t.writeBigUint64(BigInt(u));break}default:throw new TypeError(`Invalid number encoding: \"${n}\"`)}return C(e,t.read())}export{ce as ENCODED,F as cdeEncodeOptions,de as clearEncoder,Y as dcborEncodeOptions,k as defaultEncodeOptions,v as encode,ae as encodedNumber,ue as registerEncoder,J as writeArray,O as writeBigInt,N as writeFloat,a as writeInt,L as writeLength,Z as writeNumber,R as writeString,Q as writeSymbol,m as writeTag,V as writeUint8Array,g as writeUnknown};\n","var o=(e=>(e[e.NEVER=-1]=\"NEVER\",e[e.PREFERRED=0]=\"PREFERRED\",e[e.ALWAYS=1]=\"ALWAYS\",e))(o||{});export{o as DiagnosticSizes};\n","import{MT as u,SIMPLE as n}from\"./constants.js\";import{writeInt as o}from\"./encoder.js\";class t{static KnownSimple=new Map([[n.FALSE,!1],[n.TRUE,!0],[n.NULL,null],[n.UNDEFINED,void 0]]);value;constructor(e){this.value=e}static create(e){return t.KnownSimple.has(e)?t.KnownSimple.get(e):new t(e)}toCBOR(e,i){if(i.rejectCustomSimples)throw new Error(`Cannot encode non-standard Simple value: ${this.value}`);o(this.value,e,u.SIMPLE_FLOAT)}toString(){return`simple(${this.value})`}decode(){return t.KnownSimple.has(this.value)?t.KnownSimple.get(this.value):this}[Symbol.for(\"nodejs.util.inspect.custom\")](e,i,r){return`simple(${r(this.value,i)})`}}export{t as Simple};\n","import{MT as s,NUMBYTES as l,SYMS as d}from\"./constants.js\";import{base64ToBytes as m,hexToU8 as b,subarrayRanges as u}from\"./utils.js\";import{Simple as g}from\"./simple.js\";import{parseHalf as E}from\"./float.js\";const p=new TextDecoder(\"utf8\",{fatal:!0,ignoreBOM:!0});class y{static defaultOptions={maxDepth:1024,encoding:\"hex\",requirePreferred:!1};#t;#r;#e=0;#i;constructor(t,r){if(this.#i={...y.defaultOptions,...r},typeof t==\"string\")switch(this.#i.encoding){case\"hex\":this.#t=b(t);break;case\"base64\":this.#t=m(t);break;default:throw new TypeError(`Encoding not implemented: \"${this.#i.encoding}\"`)}else this.#t=t;this.#r=new DataView(this.#t.buffer,this.#t.byteOffset,this.#t.byteLength)}toHere(t){return u(this.#t,t,this.#e)}*[Symbol.iterator](){if(yield*this.#n(0),this.#e!==this.#t.length)throw new Error(\"Extra data in input\")}*seq(){for(;this.#e<this.#t.length;)yield*this.#n(0)}*#n(t){if(t++>this.#i.maxDepth)throw new Error(`Maximum depth ${this.#i.maxDepth} exceeded`);const r=this.#e,c=this.#r.getUint8(this.#e++),i=c>>5,n=c&31;let e=n,f=!1,a=0;switch(n){case l.ONE:if(a=1,e=this.#r.getUint8(this.#e),i===s.SIMPLE_FLOAT){if(e<32)throw new Error(`Invalid simple encoding in extra byte: ${e}`);f=!0}else if(this.#i.requirePreferred&&e<24)throw new Error(`Unexpectedly long integer encoding (1) for ${e}`);break;case l.TWO:if(a=2,i===s.SIMPLE_FLOAT)e=E(this.#t,this.#e);else if(e=this.#r.getUint16(this.#e,!1),this.#i.requirePreferred&&e<=255)throw new Error(`Unexpectedly long integer encoding (2) for ${e}`);break;case l.FOUR:if(a=4,i===s.SIMPLE_FLOAT)e=this.#r.getFloat32(this.#e,!1);else if(e=this.#r.getUint32(this.#e,!1),this.#i.requirePreferred&&e<=65535)throw new Error(`Unexpectedly long integer encoding (4) for ${e}`);break;case l.EIGHT:{if(a=8,i===s.SIMPLE_FLOAT)e=this.#r.getFloat64(this.#e,!1);else if(e=this.#r.getBigUint64(this.#e,!1),e<=Number.MAX_SAFE_INTEGER&&(e=Number(e)),this.#i.requirePreferred&&e<=4294967295)throw new Error(`Unexpectedly long integer encoding (8) for ${e}`);break}case 28:case 29:case 30:throw new Error(`Additional info not implemented: ${n}`);case l.INDEFINITE:switch(i){case s.POS_INT:case s.NEG_INT:case s.TAG:throw new Error(`Invalid indefinite encoding for MT ${i}`);case s.SIMPLE_FLOAT:yield[i,n,d.BREAK,r,0];return}e=1/0;break;default:f=!0}switch(this.#e+=a,i){case s.POS_INT:yield[i,n,e,r,a];break;case s.NEG_INT:yield[i,n,typeof e==\"bigint\"?-1n-e:-1-Number(e),r,a];break;case s.BYTE_STRING:e===1/0?yield*this.#s(i,t,r):yield[i,n,this.#a(e),r,e];break;case s.UTF8_STRING:e===1/0?yield*this.#s(i,t,r):yield[i,n,p.decode(this.#a(e)),r,e];break;case s.ARRAY:if(e===1/0)yield*this.#s(i,t,r,!1);else{const o=Number(e);yield[i,n,o,r,a];for(let h=0;h<o;h++)yield*this.#n(t+1)}break;case s.MAP:if(e===1/0)yield*this.#s(i,t,r,!1);else{const o=Number(e);yield[i,n,o,r,a];for(let h=0;h<o;h++)yield*this.#n(t),yield*this.#n(t)}break;case s.TAG:yield[i,n,e,r,a],yield*this.#n(t);break;case s.SIMPLE_FLOAT:{const o=e;f&&(e=g.create(Number(e))),yield[i,n,e,r,o];break}}}#a(t){const r=u(this.#t,this.#e,this.#e+=t);if(r.length!==t)throw new Error(`Unexpected end of stream reading ${t} bytes, got ${r.length}`);return r}*#s(t,r,c,i=!0){for(yield[t,l.INDEFINITE,1/0,c,1/0];;){const n=this.#n(r),e=n.next(),[f,a,o]=e.value;if(o===d.BREAK){yield e.value,n.next();return}if(i){if(f!==t)throw new Error(`Unmatched major type. Expected ${t}, got ${f}.`);if(a===l.INDEFINITE)throw new Error(\"New stream started in typed stream\")}yield e.value,yield*n}}}export{y as DecodeStream};\n","import{DCBOR_INT as g,MT as a,NUMBYTES as l}from\"./constants.js\";import{DiagnosticSizes as N}from\"./options.js\";import{sortCoreDeterministic as j}from\"./sorts.js\";import{NAN as E,checkSubnormal as I}from\"./float.js\";import{box as d,getEncoded as b,saveEncoded as T}from\"./box.js\";import{defaultEncodeOptions as S,encode as O}from\"./encoder.js\";import{stringToHex as p,u8concat as D,u8toHex as m}from\"./utils.js\";import{DecodeStream as v}from\"./decodeStream.js\";import{Simple as k}from\"./simple.js\";import{Tag as w}from\"./tag.js\";const A=new Map([[l.ZERO,1],[l.ONE,2],[l.TWO,3],[l.FOUR,5],[l.EIGHT,9]]),R=new Uint8Array(0);function F(h,r){return!r.boxed&&!r.preferMap&&h.every(([i])=>typeof i==\"string\")?Object.fromEntries(h):new Map(h)}class y{static defaultDecodeOptions={...v.defaultOptions,ParentType:y,boxed:!1,cde:!1,dcbor:!1,diagnosticSizes:N.PREFERRED,collapseBigInts:!1,convertUnsafeIntsToFloat:!1,createObject:F,keepNanPayloads:!1,pretty:!1,preferBigInt:!1,preferMap:!1,rejectLargeNegatives:!1,rejectBigInts:!1,rejectDuplicateKeys:!1,rejectFloats:!1,rejectInts:!1,rejectLongLoundNaN:!1,rejectLongFloats:!1,rejectNegativeZero:!1,rejectSimple:!1,rejectStreaming:!1,rejectStringsNotNormalizedAs:null,rejectSubnormals:!1,rejectUndefined:!1,rejectUnsafeFloatInts:!1,saveOriginal:!1,sortKeys:null,tags:null,ignoreGlobalTags:!1};static cdeDecodeOptions={cde:!0,rejectStreaming:!0,requirePreferred:!0,sortKeys:j};static dcborDecodeOptions={...this.cdeDecodeOptions,dcbor:!0,convertUnsafeIntsToFloat:!0,rejectDuplicateKeys:!0,rejectLargeNegatives:!0,rejectLongLoundNaN:!0,rejectLongFloats:!0,rejectNegativeZero:!0,rejectSimple:!0,rejectUndefined:!0,rejectUnsafeFloatInts:!0,rejectStringsNotNormalizedAs:\"NFC\"};parent;mt;ai;left;offset;count=0;children=[];depth=0;#e;#t=null;constructor(r,i,e,t){if([this.mt,this.ai,,this.offset]=r,this.left=i,this.parent=e,this.#e=t,e&&(this.depth=e.depth+1),this.mt===a.MAP&&(this.#e.sortKeys||this.#e.rejectDuplicateKeys)&&(this.#t=[]),this.#e.rejectStreaming&&this.ai===l.INDEFINITE)throw new Error(\"Streaming not supported\")}get isStreaming(){return this.left===1/0}get done(){return this.left===0}static create(r,i,e,t){const[s,u,n,c]=r;switch(s){case a.POS_INT:case a.NEG_INT:{if(e.rejectInts)throw new Error(`Unexpected integer: ${n}`);if(e.rejectLargeNegatives&&n<-0x8000000000000000n)throw new Error(`Invalid 65bit negative number: ${n}`);let o=n;return e.preferBigInt?o=BigInt(o):e.convertUnsafeIntsToFloat&&o>=g.MIN&&o<=g.MAX&&(o=Number(n)),e.boxed?d(o,t.toHere(c)):o}case a.SIMPLE_FLOAT:if(u>l.ONE){if(typeof n==\"symbol\")return n;if(e.rejectFloats)throw new Error(`Decoding unwanted floating point number: ${n}`);if(e.rejectNegativeZero&&Object.is(n,-0))throw new Error(\"Decoding negative zero\");if(isNaN(n)){const o=t.toHere(c),f=new E(o);if(e.rejectLongLoundNaN){if(f.payload||o.length>3)throw new Error(`Invalid NaN encoding: \"${m(o)}\"`)}else if(e.keepNanPayloads&&(f.payload||f.sign===-1)){if(e.rejectLongFloats&&!f.isShortestEncoding)throw new Error(`NaN should have been encoded shorter: ${n}`);return f}}if(e.rejectSubnormals&&I(t.toHere(c+1)),e.rejectLongFloats){const o=O(n,{chunkSize:9,reduceUnsafeNumbers:e.rejectUnsafeFloatInts});if(o[0]>>5!==s)throw new Error(`Should have been encoded as int, not float: ${n}`);if(o.length<A.get(u))throw new Error(`Number should have been encoded shorter: ${n}`)}if(typeof n==\"number\"&&e.boxed)return d(n,t.toHere(c))}else{if(e.rejectSimple&&n instanceof k)throw new Error(`Invalid simple value: ${n}`);if(e.rejectUndefined&&n===void 0)throw new Error(\"Unexpected undefined\")}return n;case a.BYTE_STRING:case a.UTF8_STRING:if(n===1/0)return new e.ParentType(r,1/0,i,e);if(e.rejectStringsNotNormalizedAs&&typeof n==\"string\"){const o=n.normalize(e.rejectStringsNotNormalizedAs);if(n!==o)throw new Error(`String not normalized as \"${e.rejectStringsNotNormalizedAs}\", got [${p(n)}] instead of [${p(o)}]`)}return e.boxed?d(n,t.toHere(c)):n;case a.ARRAY:return new e.ParentType(r,n,i,e);case a.MAP:return new e.ParentType(r,n*2,i,e);case a.TAG:{const o=new e.ParentType(r,1,i,e);return o.children=new w(n),o}}throw new TypeError(`Invalid major type: ${s}`)}static decodeToEncodeOpts(r){return{...S,avoidInts:r.rejectInts,float64:!r.rejectLongFloats,flushToZero:r.rejectSubnormals,largeNegativeAsBigInt:r.rejectLargeNegatives,sortKeys:r.sortKeys}}push(r,i,e){if(this.children.push(r),this.#t){const t=b(r)||i.toHere(e);this.#t.push(t)}return--this.left}replaceLast(r,i,e){let t,s=-1/0;if(this.children instanceof w?(s=0,t=this.children.contents,this.children.contents=r):(s=this.children.length-1,t=this.children[s],this.children[s]=r),this.#t){const u=b(r)||e.toHere(i.offset);this.#t[s]=u}return t}convert(r){let i;switch(this.mt){case a.ARRAY:i=this.children;break;case a.MAP:{const e=this.#r();if(this.#e.sortKeys){let t;for(const s of e){if(t&&this.#e.sortKeys(t,s)>=0)throw new Error(`Duplicate or out of order key: \"0x${s[2]}\"`);t=s}}else if(this.#e.rejectDuplicateKeys){const t=new Set;for(const[s,u,n]of e){const c=m(n);if(t.has(c))throw new Error(`Duplicate key: \"0x${c}\"`);t.add(c)}}i=this.#e.createObject(e,this.#e);break}case a.BYTE_STRING:return D(this.children);case a.UTF8_STRING:{const e=this.children.join(\"\");i=this.#e.boxed?d(e,r.toHere(this.offset)):e;break}case a.TAG:i=this.children.decode(this.#e);break;default:throw new TypeError(`Invalid mt on convert: ${this.mt}`)}return this.#e.saveOriginal&&i&&typeof i==\"object\"&&T(i,r.toHere(this.offset)),i}#r(){const r=this.children,i=r.length;if(i%2)throw new Error(\"Missing map value\");const e=new Array(i/2);if(this.#t)for(let t=0;t<i;t+=2)e[t>>1]=[r[t],r[t+1],this.#t[t]];else for(let t=0;t<i;t+=2)e[t>>1]=[r[t],r[t+1],R];return e}}export{y as CBORcontainer};\n","import{DiagnosticSizes as b}from\"./options.js\";import{MT as s,NUMBYTES as f,SYMS as d}from\"./constants.js\";import{CBORcontainer as S}from\"./container.js\";import{DecodeStream as E}from\"./decodeStream.js\";import{Simple as N}from\"./simple.js\";import{halfToUint as I}from\"./float.js\";import{u8toHex as _}from\"./utils.js\";const O=\" \",y=new TextEncoder;class g extends S{close=\"\";quote='\"';get isEmptyStream(){return(this.mt===s.UTF8_STRING||this.mt===s.BYTE_STRING)&&this.count===0}}function a(m,l,n,p){let t=\"\";if(l===f.INDEFINITE)t+=\"_\";else{if(p.diagnosticSizes===b.NEVER)return\"\";{let r=p.diagnosticSizes===b.ALWAYS;if(!r){let e=f.ZERO;if(Object.is(n,-0))e=f.TWO;else if(m===s.POS_INT||m===s.NEG_INT){const T=n<0,u=typeof n==\"bigint\"?1n:1,o=T?-n-u:n;o<=23?e=Number(o):o<=255?e=f.ONE:o<=65535?e=f.TWO:o<=4294967295?e=f.FOUR:e=f.EIGHT}else isFinite(n)?Math.fround(n)===n?I(n)==null?e=f.FOUR:e=f.TWO:e=f.EIGHT:e=f.TWO;r=e!==l}r&&(t+=\"_\",l<f.ONE?t+=\"i\":t+=String(l-24))}}return t}function M(m,l){const n={...S.defaultDecodeOptions,...l,ParentType:g},p=new E(m,n);let t,r,e=\"\";for(const T of p){const[u,o,i]=T;switch(t&&(t.count>0&&i!==d.BREAK&&(t.mt===s.MAP&&t.count%2?e+=\": \":(e+=\",\",n.pretty||(e+=\" \"))),n.pretty&&(t.mt!==s.MAP||t.count%2===0)&&(e+=`\n${O.repeat(t.depth+1)}`)),r=S.create(T,t,n,p),u){case s.POS_INT:case s.NEG_INT:e+=String(i),e+=a(u,o,i,n);break;case s.SIMPLE_FLOAT:if(i!==d.BREAK)if(typeof i==\"number\"){const c=Object.is(i,-0)?\"-0.0\":String(i);e+=c,isFinite(i)&&!/[.e]/.test(c)&&(e+=\".0\"),e+=a(u,o,i,n)}else i instanceof N?(e+=\"simple(\",e+=String(i.value),e+=a(s.POS_INT,o,i.value,n),e+=\")\"):e+=String(i);break;case s.BYTE_STRING:i===1/0?(e+=\"(_ \",r.close=\")\",r.quote=\"'\"):(e+=\"h'\",e+=_(i),e+=\"'\",e+=a(s.POS_INT,o,i.length,n));break;case s.UTF8_STRING:i===1/0?(e+=\"(_ \",r.close=\")\"):(e+=JSON.stringify(i),e+=a(s.POS_INT,o,y.encode(i).length,n));break;case s.ARRAY:{e+=\"[\";const c=a(s.POS_INT,o,i,n);e+=c,c&&(e+=\" \"),n.pretty&&i?r.close=`\n${O.repeat(r.depth)}]`:r.close=\"]\";break}case s.MAP:{e+=\"{\";const c=a(s.POS_INT,o,i,n);e+=c,c&&(e+=\" \"),n.pretty&&i?r.close=`\n${O.repeat(r.depth)}}`:r.close=\"}\";break}case s.TAG:e+=String(i),e+=a(s.POS_INT,o,i,n),e+=\"(\",r.close=\")\";break}if(r===d.BREAK)if(t?.isStreaming)t.left=0;else throw new Error(\"Unexpected BREAK\");else t&&(t.count++,t.left--);for(r instanceof g&&(t=r);t?.done;){if(t.isEmptyStream)e=e.slice(0,-3),e+=`${t.quote}${t.quote}_`;else{if(t.mt===s.MAP&&t.count%2!==0)throw new Error(`Odd streaming map size: ${t.count}`);e+=t.close}t=t.parent}}return e}export{M as diagnose};\n","import{MT as u,NUMBYTES as b,SYMS as E}from\"./constants.js\";import{getEncoded as B,saveEncoded as R}from\"./box.js\";import{getRanges as S,subarrayRanges as I,u8toHex as C}from\"./utils.js\";import{CBORcontainer as T}from\"./container.js\";import{DecodeStream as M}from\"./decodeStream.js\";import{Simple as N}from\"./simple.js\";import{Tag as P}from\"./tag.js\";import{diagnose as U}from\"./diagnostic.js\";const H=new TextDecoder;class A extends T{depth=0;leaf=!1;value;length;[E.ENCODED];constructor(a,f,e,n){super(a,f,e,n),this.parent?this.depth=this.parent.depth+1:this.depth=n.initialDepth,[,,this.value,,this.length]=a}numBytes(){switch(this.ai){case b.ONE:return 1;case b.TWO:return 2;case b.FOUR:return 4;case b.EIGHT:return 8}return 0}}function k(t){return t instanceof A}function O(t,a){return t===1/0?\"Indefinite\":a?`${t} ${a}${t!==1&&t!==1n?\"s\":\"\"}`:String(t)}function y(t){return\"\".padStart(t,\" \")}function x(t,a,f){let e=\"\";e+=y(t.depth*2);const n=B(t);e+=C(n.subarray(0,1));const r=t.numBytes();r&&(e+=\" \",e+=C(n.subarray(1,r+1))),e=e.padEnd(a.minCol+1,\" \"),e+=\"-- \",f!==void 0&&(e+=y(t.depth*2),f!==\"\"&&(e+=`[${f}] `));let p=!1;const[s]=t.children;switch(t.mt){case u.POS_INT:e+=`Unsigned: ${s}`,typeof s==\"bigint\"&&(e+=\"n\");break;case u.NEG_INT:e+=`Negative: ${s}`,typeof s==\"bigint\"&&(e+=\"n\");break;case u.BYTE_STRING:e+=`Bytes (Length: ${O(t.length)})`;break;case u.UTF8_STRING:e+=`UTF8 (Length: ${O(t.length)})`,t.length!==1/0&&(e+=`: ${JSON.stringify(s)}`);break;case u.ARRAY:e+=`Array (Length: ${O(t.value,\"item\")})`;break;case u.MAP:e+=`Map (Length: ${O(t.value,\"pair\")})`;break;case u.TAG:{e+=`Tag #${t.value}`;const o=t.children,[m]=o.contents.children,i=new P(o.tag,m);R(i,n);const l=i.comment(a,t.depth);l&&(e+=\": \",e+=l),p||=i.noChildren;break}case u.SIMPLE_FLOAT:s===E.BREAK?e+=\"BREAK\":t.ai>b.ONE?Object.is(s,-0)?e+=\"Float: -0\":e+=`Float: ${s}`:(e+=\"Simple: \",s instanceof N?e+=s.value:e+=s);break}if(!p)if(t.leaf){if(e+=`\n`,n.length>r+1){const o=y((t.depth+1)*2),m=S(n);if(m?.length){m.sort((l,c)=>{const g=l[0]-c[0];return g||c[1]-l[1]});let i=0;for(const[l,c,g]of m)if(!(l<i)){if(i=l+c,g===\"<<\"){e+=y(a.minCol+1),e+=\"--\",e+=o,e+=\"<< \";const d=I(n,l,l+c),h=S(d);if(h){const $=h.findIndex(([w,D,v])=>w===0&&D===c&&v===\"<<\");$>=0&&h.splice($,1)}e+=U(d),e+=` >>\n`,e+=L(d,{initialDepth:t.depth+1,minCol:a.minCol,noPrefixHex:!0});continue}else g===\"'\"&&(e+=y(a.minCol+1),e+=\"--\",e+=o,e+=\"'\",e+=H.decode(n.subarray(l,l+c)),e+=`'\n`);if(l>r)for(let d=l;d<l+c;d+=8){const h=Math.min(d+8,l+c);e+=o,e+=C(n.subarray(d,h)),e+=`\n`}}}else for(let i=r+1;i<n.length;i+=8)e+=o,e+=C(n.subarray(i,i+8)),e+=`\n`}}else{e+=`\n`;let o=0;for(const m of t.children){if(k(m)){let i=String(o);t.mt===u.MAP?i=o%2?`val ${(o-1)/2}`:`key ${o/2}`:t.mt===u.TAG&&(i=\"\"),e+=x(m,a,i)}o++}}return e}const q={...T.defaultDecodeOptions,initialDepth:0,noPrefixHex:!1,minCol:0};function L(t,a){const f={...q,...a,ParentType:A,saveOriginal:!0},e=new M(t,f);let n,r;for(const s of e){if(r=T.create(s,n,f,e),s[2]===E.BREAK)if(n?.isStreaming)n.left=1;else throw new Error(\"Unexpected BREAK\");if(!k(r)){const i=new A(s,0,n,f);i.leaf=!0,i.children.push(r),R(i,e.toHere(s[3])),r=i}let o=(r.depth+1)*2;const m=r.numBytes();for(m&&(o+=1,o+=m*2),f.minCol=Math.max(f.minCol,o),n&&n.push(r,e,s[3]),n=r;n?.done;)r=n,r.leaf||R(r,e.toHere(r.offset)),{parent:n}=n}a&&(a.minCol=f.minCol);let p=f.noPrefixHex?\"\":`0x${C(e.toHere(0))}\n`;return p+=x(r,f),p}export{L as comment};\n","import{MT as O,TAG as o}from\"./constants.js\";import{box as q,getEncoded as F}from\"./box.js\";import{base64ToBytes as v,base64UrlToBytes as V,isBigEndian as W,u8toHex as A}from\"./utils.js\";import{encode as b,registerEncoder as s,writeInt as k,writeLength as P,writeTag as M,writeUnknown as K}from\"./encoder.js\";import{CBORcontainer as G}from\"./container.js\";import{Tag as t}from\"./tag.js\";import{Wtf8Decoder as B}from\"@cto.af/wtf8\";import{comment as Y}from\"./comment.js\";const U=!W();function I(e){if(typeof e==\"object\"&&e){if(e.constructor!==Number)throw new Error(`Expected number: ${e}`)}else if(typeof e!=\"number\")throw new Error(`Expected number: ${e}`)}function f(e){if(typeof e==\"object\"&&e){if(e.constructor!==String)throw new Error(`Expected string: ${e}`)}else if(typeof e!=\"string\")throw new Error(`Expected string: ${e}`)}function E(e){if(!(e instanceof Uint8Array))throw new Error(`Expected Uint8Array: ${e}`)}function _(e){if(!Array.isArray(e))throw new Error(`Expected Array: ${e}`)}s(Map,(e,r,n)=>{const i=[...e.entries()].map(a=>[a[0],a[1],b(a[0],n)]);if(n.rejectDuplicateKeys){const a=new Set;for(const[d,u,g]of i){const y=A(g);if(a.has(y))throw new Error(`Duplicate map key: 0x${y}`);a.add(y)}}n.sortKeys&&i.sort(n.sortKeys),P(e,e.size,O.MAP,r,n);for(const[a,d,u]of i)r.write(u),K(d,r,n)});function w(e){return f(e.contents),new Date(e.contents)}w.comment=e=>{f(e.contents);const r=new Date(e.contents);return`(String ${e.tag===o.DATE_FULL?\"Full \":\"\"}Date) ${r.toISOString()}`},t.registerDecoder(o.DATE_STRING,w),t.registerDecoder(o.DATE_FULL,w);function N(e){return I(e.contents),new Date(e.contents*1e3)}N.comment=e=>(I(e.contents),`(Epoch Date) ${new Date(e.contents*1e3).toISOString()}`),t.registerDecoder(o.DATE_EPOCH,N);const S=1e3*60*60*24;function $(e){return I(e.contents),new Date(e.contents*S)}$.comment=e=>(I(e.contents),`(Epoch Date) ${new Date(e.contents*S).toISOString()}`),t.registerDecoder(o.DATE_EPOCH_DAYS,$),s(Date,(e,r,n)=>{switch(n.dateTag){case o.DATE_EPOCH:return[n.dateTag,e.valueOf()/1e3];case o.DATE_STRING:return[n.dateTag,e.toISOString().replace(/\\.000Z$/,\"Z\")];case o.DATE_EPOCH_DAYS:return[n.dateTag,Math.floor(e.valueOf()/S)];case o.DATE_FULL:return[n.dateTag,e.toISOString().split(\"T\")[0]];default:throw new Error(`Unsupported date tag: ${n.dateTag}`)}});function m(e,r,n){if(E(r.contents),n.rejectBigInts)throw new Error(`Decoding unwanted big integer: ${r}(h'${A(r.contents)}')`);if(n.requirePreferred&&r.contents[0]===0)throw new Error(`Decoding overly-large bigint: ${r.tag}(h'${A(r.contents)})`);let i=r.contents.reduce((d,u)=>d<<8n|BigInt(u),0n);e&&(i=-1n-i);const a=i>=Number.MIN_SAFE_INTEGER&&i<=Number.MAX_SAFE_INTEGER;if(n.requirePreferred&&a)throw new Error(`Decoding bigint that could have been int: ${i}n`);return n.collapseBigInts&&a&&(i=Number(i)),n.boxed?q(i,r.contents):i}const L=m.bind(null,!1),x=m.bind(null,!0);L.comment=(e,r)=>`(Positive BigInt) ${m(!1,e,r)}n`,x.comment=(e,r)=>`(Negative BigInt) ${m(!0,e,r)}n`,t.registerDecoder(o.POS_BIGINT,L),t.registerDecoder(o.NEG_BIGINT,x);function R(e,r){return E(e.contents),e}R.comment=(e,r,n)=>{E(e.contents);const i={...r,initialDepth:n+2,noPrefixHex:!0},a=F(e);let u=2**((a[0]&31)-24)+1;const g=a[u]&31;let y=A(a.subarray(u,++u));g>=24&&(y+=\" \",y+=A(a.subarray(u,u+2**(g-24)))),i.minCol=Math.max(i.minCol,(n+1)*2+y.length);const D=Y(e.contents,i);let T=`Embedded CBOR\n`;return T+=`${\"\".padStart((n+1)*2,\" \")}${y}`.padEnd(i.minCol+1,\" \"),T+=`-- Bytes (Length: ${e.contents.length})\n`,T+=D,T},R.noChildren=!0,t.registerDecoder(o.CBOR,R),t.registerDecoder(o.URI,e=>(f(e.contents),new URL(e.contents)),\"URI\"),s(URL,e=>[o.URI,e.toString()]),t.registerDecoder(o.BASE64URL,e=>(f(e.contents),V(e.contents)),\"Base64url-encoded\"),t.registerDecoder(o.BASE64,e=>(f(e.contents),v(e.contents)),\"Base64-encoded\"),t.registerDecoder(35,e=>(f(e.contents),new RegExp(e.contents)),\"RegExp\"),t.registerDecoder(21065,e=>{f(e.contents);const r=`^(?:${e.contents})$`;return new RegExp(r,\"u\")},\"I-RegExp\"),t.registerDecoder(o.REGEXP,e=>{if(_(e.contents),e.contents.length<1||e.contents.length>2)throw new Error(`Invalid RegExp Array: ${e.contents}`);return new RegExp(e.contents[0],e.contents[1])},\"RegExp\"),s(RegExp,e=>[o.REGEXP,[e.source,e.flags]]),t.registerDecoder(64,e=>(E(e.contents),e.contents),\"uint8 Typed Array\");function c(e,r,n){E(e.contents);let i=e.contents.length;if(i%r.BYTES_PER_ELEMENT!==0)throw new Error(`Number of bytes must be divisible by ${r.BYTES_PER_ELEMENT}, got: ${i}`);i/=r.BYTES_PER_ELEMENT;const a=new r(i),d=new DataView(e.contents.buffer,e.contents.byteOffset,e.contents.byteLength),u=d[`get${r.name.replace(/Array/,\"\")}`].bind(d);for(let g=0;g<i;g++)a[g]=u(g*r.BYTES_PER_ELEMENT,n);return a}function l(e,r,n,i,a){const d=a.forceEndian??U;if(M(d?r:n,e,a),k(i.byteLength,e,O.BYTE_STRING),U===d)e.write(new Uint8Array(i.buffer,i.byteOffset,i.byteLength));else{const g=`write${i.constructor.name.replace(/Array/,\"\")}`,y=e[g].bind(e);for(const D of i)y(D,d)}}t.registerDecoder(65,e=>c(e,Uint16Array,!1),\"uint16, big endian, Typed Array\"),t.registerDecoder(66,e=>c(e,Uint32Array,!1),\"uint32, big endian, Typed Array\"),t.registerDecoder(67,e=>c(e,BigUint64Array,!1),\"uint64, big endian, Typed Array\"),t.registerDecoder(68,e=>(E(e.contents),new Uint8ClampedArray(e.contents)),\"uint8 Typed Array, clamped arithmetic\"),s(Uint8ClampedArray,e=>[68,new Uint8Array(e.buffer,e.byteOffset,e.byteLength)]),t.registerDecoder(69,e=>c(e,Uint16Array,!0),\"uint16, little endian, Typed Array\"),s(Uint16Array,(e,r,n)=>l(r,69,65,e,n)),t.registerDecoder(70,e=>c(e,Uint32Array,!0),\"uint32, little endian, Typed Array\"),s(Uint32Array,(e,r,n)=>l(r,70,66,e,n)),t.registerDecoder(71,e=>c(e,BigUint64Array,!0),\"uint64, little endian, Typed Array\"),s(BigUint64Array,(e,r,n)=>l(r,71,67,e,n)),t.registerDecoder(72,e=>(E(e.contents),new Int8Array(e.contents)),\"sint8 Typed Array\"),s(Int8Array,e=>[72,new Uint8Array(e.buffer,e.byteOffset,e.byteLength)]),t.registerDecoder(73,e=>c(e,Int16Array,!1),\"sint16, big endian, Typed Array\"),t.registerDecoder(74,e=>c(e,Int32Array,!1),\"sint32, big endian, Typed Array\"),t.registerDecoder(75,e=>c(e,BigInt64Array,!1),\"sint64, big endian, Typed Array\"),t.registerDecoder(77,e=>c(e,Int16Array,!0),\"sint16, little endian, Typed Array\"),s(Int16Array,(e,r,n)=>l(r,77,73,e,n)),t.registerDecoder(78,e=>c(e,Int32Array,!0),\"sint32, little endian, Typed Array\"),s(Int32Array,(e,r,n)=>l(r,78,74,e,n)),t.registerDecoder(79,e=>c(e,BigInt64Array,!0),\"sint64, little endian, Typed Array\"),s(BigInt64Array,(e,r,n)=>l(r,79,75,e,n)),t.registerDecoder(81,e=>c(e,Float32Array,!1),\"IEEE 754 binary32, big endian, Typed Array\"),t.registerDecoder(82,e=>c(e,Float64Array,!1),\"IEEE 754 binary64, big endian, Typed Array\"),t.registerDecoder(85,e=>c(e,Float32Array,!0),\"IEEE 754 binary32, little endian, Typed Array\"),s(Float32Array,(e,r,n)=>l(r,85,81,e,n)),t.registerDecoder(86,e=>c(e,Float64Array,!0),\"IEEE 754 binary64, big endian, Typed Array\"),s(Float64Array,(e,r,n)=>l(r,86,82,e,n)),t.registerDecoder(o.SET,(e,r)=>{if(_(e.contents),r.sortKeys){const n=G.decodeToEncodeOpts(r);let i=null;for(const a of e.contents){const d=[a,void 0,b(a,n)];if(i&&r.sortKeys(i,d)>=0)throw new Error(`Set items out of order in tag #${o.SET}`);i=d}}return new Set(e.contents)},\"Set\"),s(Set,(e,r,n)=>{let i=[...e];if(n.sortKeys){const a=i.map(d=>[d,void 0,b(d,n)]);a.sort(n.sortKeys),i=a.map(([d])=>d)}return[o.SET,i]}),t.registerDecoder(o.JSON,e=>(f(e.contents),JSON.parse(e.contents)),\"JSON-encoded\");function C(e){return E(e.contents),new B().decode(e.contents)}C.comment=e=>{E(e.contents);const r=new B;return`(WTF8 string): ${JSON.stringify(r.decode(e.contents))}`},t.registerDecoder(o.WTF8,C),t.registerDecoder(o.SELF_DESCRIBED,e=>e.contents,\"Self-Described\"),t.registerDecoder(o.INVALID_16,()=>{throw new Error(`Tag always invalid: ${o.INVALID_16}`)},\"Invalid\"),t.registerDecoder(o.INVALID_32,()=>{throw new Error(`Tag always invalid: ${o.INVALID_32}`)},\"Invalid\"),t.registerDecoder(o.INVALID_64,()=>{throw new Error(`Tag always invalid: ${o.INVALID_64}`)},\"Invalid\"),t.registerDecoder(o.SYMBOL,e=>{let r=e.contents;if(Array.isArray(e.contents)){if(e.contents.length!==1)throw new Error(`Expected Array of size 1: ${e.contents}`);[r]=e.contents}if(f(r),!r.length)throw new Error(`Expected non-empty string: ${e.contents}`);return Symbol.for(r)},\"Symbol\");function h(e){throw new Error(`Encoding ${e.constructor.name} intentionally unimplmented. It is not concrete enough to interoperate. Convert to Uint8Array first.`)}s(ArrayBuffer,h),s(DataView,h),typeof SharedArrayBuffer<\"u\"&&s(SharedArrayBuffer,h);function p(e){return[NaN,e.valueOf()]}s(Boolean,p),s(Number,p),s(String,p),s(BigInt,p);\n","import{DecodeStream as a}from\"./decodeStream.js\";import{CBORcontainer as s}from\"./container.js\";import{SYMS as u}from\"./constants.js\";function c(i){const e={...s.defaultDecodeOptions};if(i.dcbor?Object.assign(e,s.dcborDecodeOptions):i.cde&&Object.assign(e,s.cdeDecodeOptions),Object.assign(e,i),Object.hasOwn(e,\"rejectLongNumbers\"))throw new TypeError(\"rejectLongNumbers has changed to requirePreferred\");return e.boxed&&(e.saveOriginal=!0),e}class d{parent=void 0;ret=void 0;step(e,n,t){if(this.ret=s.create(e,this.parent,n,t),e[2]===u.BREAK)if(this.parent?.isStreaming)this.parent.left=0;else throw new Error(\"Unexpected BREAK\");else this.parent&&this.parent.push(this.ret,t,e[3]);for(this.ret instanceof s&&(this.parent=this.ret);this.parent?.done;){this.ret=this.parent.convert(t);const r=this.parent.parent;r?.replaceLast(this.ret,this.parent,t),this.parent=r}}}function l(i,e={}){const n=c(e),t=new a(i,n),r=new d;for(const o of t)r.step(o,n,t);return r.ret}class O{#t;#e;constructor(e,n={}){const t=new a(e,c(n));this.#t=t.seq()}peek(){return this.#e||(this.#e=this.#n()),this.#e}read(){const e=this.#e??this.#n();return this.#e=void 0,e}*[Symbol.iterator](){for(;;){const e=this.read();if(!e)return;yield e}}#n(){const{value:e,done:n}=this.#t.next();if(!n)return e}}function*b(i,e={}){const n=c(e),t=new a(i,n),r=new d;for(const o of t.seq())r.step(o,n,t),r.parent||(yield r.ret)}export{O as SequenceEvents,l as decode,b as decodeSequence};\n","import\"./types.js\";import{version as i}from\"./version.js\";import{CBORcontainer as e}from\"./container.js\";import{DiagnosticSizes as m}from\"./options.js\";import{decode as O,decodeSequence as f,SequenceEvents as u}from\"./decoder.js\";import{diagnose as g}from\"./diagnostic.js\";import{comment as D}from\"./comment.js\";import{cdeEncodeOptions as y,defaultEncodeOptions as S,dcborEncodeOptions as T,encode as b,encodedNumber as C}from\"./encoder.js\";import{Simple as q}from\"./simple.js\";import{Tag as v}from\"./tag.js\";import{Writer as V}from\"./writer.js\";import{saveEncoded as B,saveEncodedLength as I,unbox as M,getEncoded as W}from\"./box.js\";const{cdeDecodeOptions:r,dcborDecodeOptions:n,defaultDecodeOptions:d}=e;import{TypeEncoderMap as P}from\"./typeEncoderMap.js\";import{NAN as G,NAN_SIZE as L}from\"./float.js\";export{m as DiagnosticSizes,G as NAN,L as NAN_SIZE,u as SequenceEvents,q as Simple,v as Tag,P as TypeEncoderMap,V as Writer,r as cdeDecodeOptions,y as cdeEncodeOptions,D as comment,n as dcborDecodeOptions,T as dcborEncodeOptions,O as decode,f as decodeSequence,d as defaultDecodeOptions,S as defaultEncodeOptions,g as diagnose,b as encode,C as encodedNumber,W as getEncoded,B as saveEncoded,I as saveEncodedLength,M as unbox,i as version};\n","// Every canonical-CBOR decode violation collapses to the single public Label 309\n// taxonomy code MALFORMED_CBOR: indefinite-length (streaming) items, duplicate\n// keys, unsorted keys, non-minimal integer encodings, and invalid UTF-8 in text\n// strings. The taxonomy intentionally has one code for all of these; the\n// specific cause survives in the human-readable error message, not as a\n// separate code.\nexport type CanonicalCborErrorCode = 'MALFORMED_CBOR';\n\nexport class CanonicalCborError extends Error {\n readonly code: CanonicalCborErrorCode;\n\n constructor(code: CanonicalCborErrorCode, message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = 'CanonicalCborError';\n this.code = code;\n }\n}\n","import { cdeDecodeOptions, decode, encode } from 'cbor2';\nimport { sortCoreDeterministic } from 'cbor2/sorts';\n\nimport { CanonicalCborError } from './errors';\n\nexport type CanonicalCborValue =\n | null\n | boolean\n | number\n | bigint\n | string\n | Uint8Array\n | readonly CanonicalCborValue[]\n | { readonly [key: string]: CanonicalCborValue }\n | ReadonlyMap<string | number, CanonicalCborValue>;\n\nexport function encodeCanonicalCbor(value: CanonicalCborValue): Uint8Array {\n return encode(value, {\n cde: true,\n collapseBigInts: true,\n rejectDuplicateKeys: true,\n sortKeys: sortCoreDeterministic,\n });\n}\n\nexport function decodeCanonicalCbor(bytes: Uint8Array): unknown {\n try {\n return decode(bytes, {\n ...cdeDecodeOptions,\n rejectStreaming: true,\n rejectDuplicateKeys: true,\n // A Label 309 record carries integers, byte/text strings, arrays, maps and\n // `null` — and nothing else. Without these rejections the major-type-7\n // surface leaks into the decoder: a float16/32/64 that happens to hold an\n // integral value (e.g. 1.0) silently decodes to the integer 1 and passes\n // a `z.literal(1)` / Number.isInteger schema check, so two byte strings\n // that are NOT byte-identical canonicalise to the same record. That\n // breaks the cross-implementation parity invariant (the Python twin\n // already rejects non-integer `v` / `enc.scheme` outright). Reject the\n // whole non-record surface — floats, negative zero, undefined, and\n // non-{true,false,null} simple values — so any such input surfaces as\n // MALFORMED_CBOR via mapDecodeError rather than decoding to a look-alike.\n rejectFloats: true,\n rejectNegativeZero: true,\n rejectUndefined: true,\n rejectSimple: true,\n });\n } catch (cause) {\n throw mapDecodeError(cause);\n }\n}\n\nfunction mapDecodeError(cause: unknown): CanonicalCborError {\n const message = cause instanceof Error ? cause.message : String(cause);\n const lower = message.toLowerCase();\n // Every canonical-decode violation collapses to the single public taxonomy\n // code MALFORMED_CBOR: indefinite-length (streaming) items, duplicate keys,\n // non-canonical (unsorted) key ordering, non-minimal integer encodings, and\n // invalid UTF-8 in text strings. cbor2 raises the SAME \"Duplicate or out of\n // order key\" message for both true duplicates AND distinct-but-unsorted keys,\n // so the two are indistinguishable by message — and per the Label 309 taxonomy\n // both belong under MALFORMED_CBOR anyway. The specific cause survives in the\n // human-readable message below; for indefinite-length we state it explicitly\n // so the diagnostic is not lost when the code is collapsed.\n const isIndefinite = lower.includes('streaming') || lower.includes('indefinite');\n const detail = isIndefinite\n ? `indefinite-length items are not permitted in canonical CBOR: ${message}`\n : message;\n return new CanonicalCborError('MALFORMED_CBOR', `cbor decode failed: ${detail}`, { cause });\n}\n","// Label 309 v1 record encoder.\n//\n// Produces canonical CBOR bytes per RFC 8949 §4.2.1 deterministic encoding —\n// definite lengths, bytewise-lexicographically sorted map keys, no duplicate\n// keys, shortest-form integers. The canonical layer\n// (`@cardanowall/crypto-core/cbor`) owns those rules, so this module's job is\n// only to project the typed record onto the CBOR value algebra.\n//\n// That projection is the identity: under the Label 309 wire shapes every\n// record field already IS its CBOR value — `hashes` is a text-keyed map of\n// byte-string digests, each URI is a single text string, `kem_ct` /\n// `cose_sign1` / `cose_key` are single byte strings, and the canonical\n// encoder derives map-key order itself. The only transformation performed\n// here is dropping `undefined` optionals (a JS-only artefact with no CBOR\n// counterpart — left in place it would encode as the `undefined` simple\n// value, which the canonical profile forbids) and, for the signing body,\n// removing `sigs`.\n//\n// Round-trip property: for every record `R` the validator accepts,\n// validatePoeRecord(encodePoeRecord(R)).valid === true\n// and the decoded record is `R` (modulo CBOR-canonical key order).\n\nimport { encodeCanonicalCbor, type CanonicalCborValue } from '@cardanowall/crypto-core/cbor';\n\nimport type { PoeRecord } from './schema';\n\n/** Canonical CBOR bytes of the full record body — the bytes the chunk-array\n * transport carries on chain (see `carriage.ts`). */\nexport function encodePoeRecord(record: PoeRecord): Uint8Array {\n return encodeCanonicalCbor(toCborValue(record, /* includeSigs */ true));\n}\n\n/**\n * Canonical CBOR bytes of the record body **with `sigs` removed** — the body\n * a record-level signature covers. Producers prepend the 25-byte UTF-8 domain\n * prefix `cardano-poe-record-sig-v1` before invoking Ed25519 (the crypto-core\n * helper `buildLabel309SigStructure` handles the prefix and the\n * `Sig_structure` wrapping). Extension keys are part of the signed body and\n * pass through verbatim.\n */\nexport function encodeRecordBodyForSigning(record: PoeRecord): Uint8Array {\n return encodeCanonicalCbor(toCborValue(record, /* includeSigs */ false));\n}\n\nfunction toCborValue(record: PoeRecord, includeSigs: boolean): CanonicalCborValue {\n const out: { [key: string]: CanonicalCborValue } = {};\n for (const [key, value] of Object.entries(record)) {\n if (value === undefined) continue;\n if (!includeSigs && key === 'sigs') continue;\n out[key] = stripUndefined(value as CanonicalCborValue);\n }\n return out;\n}\n\n// Drop `undefined`-valued properties recursively. A typed record reaches the\n// encoder with its optional fields either absent or explicitly `undefined`;\n// CBOR has no counterpart for the latter (cbor2 would emit the major-type-7\n// `undefined` simple value, which the canonical profile rejects on decode),\n// so both spell \"absent\" on the wire.\nfunction stripUndefined(value: CanonicalCborValue): CanonicalCborValue {\n if (value === null || typeof value !== 'object' || value instanceof Uint8Array) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((element) => stripUndefined(element));\n }\n if (value instanceof Map) {\n const out = new Map<string | number, CanonicalCborValue>();\n for (const [k, v] of value) {\n if (v === undefined) continue;\n out.set(k, stripUndefined(v));\n }\n return out;\n }\n const out: { [key: string]: CanonicalCborValue } = {};\n for (const [k, v] of Object.entries(value)) {\n if (v === undefined) continue;\n out[k] = stripUndefined(v as CanonicalCborValue);\n }\n return out;\n}\n","// Label 309 v1 error-code catalogue — the TypeScript projection of the\n// machine-readable registry (`error-codes.json` in the Label 309 distribution).\n//\n// Three layers emit these codes:\n// - Part A — the structural validator (`validatePoeRecord`): a pure\n// function over the reassembled CBOR record body.\n// - carriage — the pre-validator transport step that reassembles the\n// label-309 chunk array (`reassembleLabel309Value`).\n// - Part B — the public / recipient verifier (chain resolution,\n// signature verification, content fetch, decryption).\n// Re-exported here so downstream verifiers dispatch on a\n// single `ErrorCode` union.\n//\n// Codes are SCREAMING_SNAKE_CASE and MUST match the canonical catalogue\n// byte-exact across the TS/PY/RS implementations — no lowercase synonyms,\n// no parser-internal codes, no free-form reason strings.\n//\n// `ERROR_CODES` preserves the registry's entry order. That order is\n// load-bearing: issues sharing an identical path tie-break by the order in\n// which their codes appear in the registry, so the list below doubles as the\n// cross-implementation sort key (`errorCodeRegistryIndex`).\n\nexport const ERROR_CODES = [\n 'MALFORMED_CBOR',\n 'SCHEMA_TYPE_MISMATCH',\n 'SCHEMA_MISSING_REQUIRED',\n 'SCHEMA_UNKNOWN_FIELD',\n 'SCHEMA_INVALID_LITERAL',\n 'SCHEMA_EMPTY_RECORD',\n 'HASH_DIGEST_LENGTH_MISMATCH',\n 'UNSUPPORTED_HASH_ALG',\n 'UNSUPPORTED_MERKLE_COMMIT_ALG',\n 'SCHEMA_MERKLE_LEAF_COUNT_INVALID',\n 'INVALID_URI',\n 'CHUNK_TOO_LARGE',\n 'UNAUTHENTICATED_CIPHER_FORBIDDEN',\n 'UNSUPPORTED_AEAD_ALG',\n 'NONCE_LENGTH_MISMATCH',\n 'UNSUPPORTED_ENVELOPE_SCHEME',\n 'ENC_UNSUPPORTED',\n 'ENC_SLOTS_EMPTY',\n 'ENC_SLOT_INVALID_SHAPE',\n 'UNSUPPORTED_KEM_ALG',\n 'ENC_KEM_REQUIRED',\n 'KEM_EPK_LENGTH_MISMATCH',\n 'KEM_CT_LENGTH_MISMATCH',\n 'WRAP_LENGTH_MISMATCH',\n 'ENC_SLOTS_MAC_INVALID_LENGTH',\n 'ENC_SLOTS_MAC_REQUIRED',\n 'ENC_SLOTS_REQUIRED',\n 'ENC_SLOTS_DUPLICATE_KEM_MATERIAL',\n 'ENC_SLOTS_TOO_MANY',\n 'ENC_ENVELOPE_TOO_LARGE',\n 'ENC_EXCLUSIVITY_VIOLATION',\n 'ENC_NO_KEY_PATH',\n 'ENC_REQUIRES_CONTENT_HASH',\n 'ENC_PASSPHRASE_ALG_UNSUPPORTED',\n 'ENC_PASSPHRASE_SALT_TOO_SHORT',\n 'ENC_PASSPHRASE_SALT_TOO_LONG',\n 'ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW',\n 'ENC_PASSPHRASE_PARAMS_EXCEED_POLICY',\n 'MALFORMED_SIG_COSE_SIGN1',\n 'SIGNATURE_UNSUPPORTED',\n 'SIG_ENTRY_INVALID_SHAPE',\n 'SIG_ENTRY_KID_COSE_KEY_CONFLICT',\n 'SIG_PRIVATE_KEY_LEAKED',\n 'SUPERSEDES_TX_INVALID_LENGTH',\n 'EXTENSION_UNSUPPORTED_CRITICAL',\n 'CRIT_SHAPE_INVALID',\n 'TX_NOT_FOUND',\n 'PROVIDER_UNAVAILABLE',\n 'TX_INTEGRITY_MISMATCH',\n 'METADATA_NOT_FOUND',\n 'INSUFFICIENT_CONFIRMATIONS',\n 'SIGNATURE_INVALID',\n 'SIGNER_KEY_UNRESOLVED',\n 'WALLET_ADDRESS_MISMATCH',\n 'URI_TARGET_FORBIDDEN',\n 'URI_INTEGRITY_MISMATCH',\n 'URI_PROVIDER_INTEGRITY_MISMATCH',\n 'URI_FETCH_FAILED',\n 'CONTENT_UNAVAILABLE',\n 'CONTENT_FETCH_LIMIT_EXCEEDED',\n 'CIPHERTEXT_UNAVAILABLE',\n 'SERVICE_INDEPENDENCE_VIOLATION',\n 'WRONG_DECRYPTION_INPUT_SHAPE',\n 'WRONG_RECIPIENT_KEY',\n 'TAMPERED_HEADER',\n 'TAMPERED_CIPHERTEXT',\n 'KDF_DERIVATION_FAILED',\n 'ENC_PASSPHRASE_UNNORMALIZABLE',\n 'ENC_PASSPHRASE_EMPTY',\n 'SCHEMA_MERKLE_LEAF_COUNT_MISMATCH',\n 'SCHEMA_MERKLE_LEAVES_FORMAT_UNSUPPORTED',\n 'SCHEMA_MERKLE_LEAVES_MALFORMED',\n 'MERKLE_ROOT_MISMATCH',\n 'MERKLE_LEAVES_UNAVAILABLE',\n 'MERKLE_UNSUPPORTED',\n 'OUT_OF_PROFILE_SKIPPED',\n] as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[number];\n\n// =============================================================================\n// Emitting layer (`part` in the registry)\n// =============================================================================\n\nexport type ErrorCodePart = 'A' | 'B' | 'carriage';\n\nexport const ERROR_CODE_PART: Readonly<Record<ErrorCode, ErrorCodePart>> = Object.freeze({\n MALFORMED_CBOR: 'A',\n SCHEMA_TYPE_MISMATCH: 'A',\n SCHEMA_MISSING_REQUIRED: 'A',\n SCHEMA_UNKNOWN_FIELD: 'A',\n SCHEMA_INVALID_LITERAL: 'A',\n SCHEMA_EMPTY_RECORD: 'A',\n HASH_DIGEST_LENGTH_MISMATCH: 'A',\n UNSUPPORTED_HASH_ALG: 'A',\n UNSUPPORTED_MERKLE_COMMIT_ALG: 'A',\n SCHEMA_MERKLE_LEAF_COUNT_INVALID: 'A',\n INVALID_URI: 'A',\n CHUNK_TOO_LARGE: 'carriage',\n UNAUTHENTICATED_CIPHER_FORBIDDEN: 'A',\n UNSUPPORTED_AEAD_ALG: 'A',\n NONCE_LENGTH_MISMATCH: 'A',\n UNSUPPORTED_ENVELOPE_SCHEME: 'A',\n ENC_UNSUPPORTED: 'A',\n ENC_SLOTS_EMPTY: 'A',\n ENC_SLOT_INVALID_SHAPE: 'A',\n UNSUPPORTED_KEM_ALG: 'A',\n ENC_KEM_REQUIRED: 'A',\n KEM_EPK_LENGTH_MISMATCH: 'A',\n KEM_CT_LENGTH_MISMATCH: 'A',\n WRAP_LENGTH_MISMATCH: 'A',\n ENC_SLOTS_MAC_INVALID_LENGTH: 'A',\n ENC_SLOTS_MAC_REQUIRED: 'A',\n ENC_SLOTS_REQUIRED: 'A',\n ENC_SLOTS_DUPLICATE_KEM_MATERIAL: 'A',\n ENC_SLOTS_TOO_MANY: 'A',\n ENC_ENVELOPE_TOO_LARGE: 'A',\n ENC_EXCLUSIVITY_VIOLATION: 'A',\n ENC_NO_KEY_PATH: 'A',\n ENC_REQUIRES_CONTENT_HASH: 'A',\n ENC_PASSPHRASE_ALG_UNSUPPORTED: 'A',\n ENC_PASSPHRASE_SALT_TOO_SHORT: 'A',\n ENC_PASSPHRASE_SALT_TOO_LONG: 'A',\n ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW: 'A',\n ENC_PASSPHRASE_PARAMS_EXCEED_POLICY: 'A',\n MALFORMED_SIG_COSE_SIGN1: 'A',\n SIGNATURE_UNSUPPORTED: 'A',\n SIG_ENTRY_INVALID_SHAPE: 'A',\n SIG_ENTRY_KID_COSE_KEY_CONFLICT: 'A',\n SIG_PRIVATE_KEY_LEAKED: 'A',\n SUPERSEDES_TX_INVALID_LENGTH: 'A',\n EXTENSION_UNSUPPORTED_CRITICAL: 'A',\n CRIT_SHAPE_INVALID: 'A',\n TX_NOT_FOUND: 'B',\n PROVIDER_UNAVAILABLE: 'B',\n TX_INTEGRITY_MISMATCH: 'B',\n METADATA_NOT_FOUND: 'B',\n INSUFFICIENT_CONFIRMATIONS: 'B',\n SIGNATURE_INVALID: 'B',\n SIGNER_KEY_UNRESOLVED: 'B',\n WALLET_ADDRESS_MISMATCH: 'B',\n URI_TARGET_FORBIDDEN: 'B',\n URI_INTEGRITY_MISMATCH: 'B',\n URI_PROVIDER_INTEGRITY_MISMATCH: 'B',\n URI_FETCH_FAILED: 'B',\n CONTENT_UNAVAILABLE: 'B',\n CONTENT_FETCH_LIMIT_EXCEEDED: 'B',\n CIPHERTEXT_UNAVAILABLE: 'B',\n SERVICE_INDEPENDENCE_VIOLATION: 'B',\n WRONG_DECRYPTION_INPUT_SHAPE: 'B',\n WRONG_RECIPIENT_KEY: 'B',\n TAMPERED_HEADER: 'B',\n TAMPERED_CIPHERTEXT: 'B',\n KDF_DERIVATION_FAILED: 'B',\n ENC_PASSPHRASE_UNNORMALIZABLE: 'B',\n ENC_PASSPHRASE_EMPTY: 'B',\n SCHEMA_MERKLE_LEAF_COUNT_MISMATCH: 'B',\n SCHEMA_MERKLE_LEAVES_FORMAT_UNSUPPORTED: 'B',\n SCHEMA_MERKLE_LEAVES_MALFORMED: 'B',\n MERKLE_ROOT_MISMATCH: 'B',\n MERKLE_LEAVES_UNAVAILABLE: 'B',\n MERKLE_UNSUPPORTED: 'B',\n OUT_OF_PROFILE_SKIPPED: 'B',\n});\n\n// Layer-filtered views, in registry order. The structural validator emits only\n// Part A codes; the carriage (transport) step emits only the carriage code;\n// the verifier layer emits Part B codes (and re-runs the first two layers).\nexport const STRUCTURAL_ERROR_CODES: ReadonlyArray<ErrorCode> = Object.freeze(\n ERROR_CODES.filter((code) => ERROR_CODE_PART[code] === 'A'),\n);\nexport const CARRIAGE_ERROR_CODES: ReadonlyArray<ErrorCode> = Object.freeze(\n ERROR_CODES.filter((code) => ERROR_CODE_PART[code] === 'carriage'),\n);\nexport const VERIFIER_ERROR_CODES: ReadonlyArray<ErrorCode> = Object.freeze(\n ERROR_CODES.filter((code) => ERROR_CODE_PART[code] === 'B'),\n);\n\nexport type StructuralErrorCode = ErrorCode;\nexport type VerifierErrorCode = ErrorCode;\n\n// =============================================================================\n// Severity\n// =============================================================================\n//\n// `error` fails the record; `warning` is a non-fatal runtime anomaly; `info`\n// is a deliberate non-failing disposition. Four codes carry DUAL severity —\n// the map records their DEFAULT reading, and a strict context promotes them\n// to `error`:\n// - ENC_UNSUPPORTED — info by default; error for the recipient\n// role / strict sealed-crypto mode.\n// - MERKLE_LEAVES_UNAVAILABLE — warning beside a verified content\n// commitment; error when its absence leaves\n// the record with no verified commitment.\n// - MERKLE_UNSUPPORTED — info beside a validated items[] claim;\n// error on a merkle-only record.\n// - OUT_OF_PROFILE_SKIPPED — info in render mode; error in strict\n// end-to-end mode.\n// No layer may soften an `error` into a `warning` to make a record pass.\n\nexport type Severity = 'error' | 'warning' | 'info';\n\nexport const SEVERITY: Readonly<Record<ErrorCode, Severity>> = Object.freeze({\n MALFORMED_CBOR: 'error',\n SCHEMA_TYPE_MISMATCH: 'error',\n SCHEMA_MISSING_REQUIRED: 'error',\n SCHEMA_UNKNOWN_FIELD: 'error',\n SCHEMA_INVALID_LITERAL: 'error',\n SCHEMA_EMPTY_RECORD: 'error',\n HASH_DIGEST_LENGTH_MISMATCH: 'error',\n UNSUPPORTED_HASH_ALG: 'error',\n UNSUPPORTED_MERKLE_COMMIT_ALG: 'error',\n SCHEMA_MERKLE_LEAF_COUNT_INVALID: 'error',\n INVALID_URI: 'error',\n CHUNK_TOO_LARGE: 'error',\n UNAUTHENTICATED_CIPHER_FORBIDDEN: 'error',\n UNSUPPORTED_AEAD_ALG: 'error',\n NONCE_LENGTH_MISMATCH: 'error',\n UNSUPPORTED_ENVELOPE_SCHEME: 'error',\n ENC_UNSUPPORTED: 'info',\n ENC_SLOTS_EMPTY: 'error',\n ENC_SLOT_INVALID_SHAPE: 'error',\n UNSUPPORTED_KEM_ALG: 'error',\n ENC_KEM_REQUIRED: 'error',\n KEM_EPK_LENGTH_MISMATCH: 'error',\n KEM_CT_LENGTH_MISMATCH: 'error',\n WRAP_LENGTH_MISMATCH: 'error',\n ENC_SLOTS_MAC_INVALID_LENGTH: 'error',\n ENC_SLOTS_MAC_REQUIRED: 'error',\n ENC_SLOTS_REQUIRED: 'error',\n ENC_SLOTS_DUPLICATE_KEM_MATERIAL: 'error',\n ENC_SLOTS_TOO_MANY: 'error',\n ENC_ENVELOPE_TOO_LARGE: 'error',\n ENC_EXCLUSIVITY_VIOLATION: 'error',\n ENC_NO_KEY_PATH: 'error',\n ENC_REQUIRES_CONTENT_HASH: 'error',\n ENC_PASSPHRASE_ALG_UNSUPPORTED: 'error',\n ENC_PASSPHRASE_SALT_TOO_SHORT: 'error',\n ENC_PASSPHRASE_SALT_TOO_LONG: 'error',\n ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW: 'error',\n ENC_PASSPHRASE_PARAMS_EXCEED_POLICY: 'error',\n MALFORMED_SIG_COSE_SIGN1: 'error',\n SIGNATURE_UNSUPPORTED: 'info',\n SIG_ENTRY_INVALID_SHAPE: 'error',\n SIG_ENTRY_KID_COSE_KEY_CONFLICT: 'error',\n SIG_PRIVATE_KEY_LEAKED: 'error',\n SUPERSEDES_TX_INVALID_LENGTH: 'error',\n EXTENSION_UNSUPPORTED_CRITICAL: 'error',\n CRIT_SHAPE_INVALID: 'error',\n TX_NOT_FOUND: 'error',\n PROVIDER_UNAVAILABLE: 'error',\n TX_INTEGRITY_MISMATCH: 'error',\n METADATA_NOT_FOUND: 'error',\n INSUFFICIENT_CONFIRMATIONS: 'info',\n SIGNATURE_INVALID: 'error',\n SIGNER_KEY_UNRESOLVED: 'error',\n WALLET_ADDRESS_MISMATCH: 'error',\n URI_TARGET_FORBIDDEN: 'error',\n URI_INTEGRITY_MISMATCH: 'error',\n URI_PROVIDER_INTEGRITY_MISMATCH: 'warning',\n URI_FETCH_FAILED: 'warning',\n CONTENT_UNAVAILABLE: 'error',\n CONTENT_FETCH_LIMIT_EXCEEDED: 'error',\n CIPHERTEXT_UNAVAILABLE: 'error',\n SERVICE_INDEPENDENCE_VIOLATION: 'error',\n WRONG_DECRYPTION_INPUT_SHAPE: 'error',\n WRONG_RECIPIENT_KEY: 'error',\n TAMPERED_HEADER: 'error',\n TAMPERED_CIPHERTEXT: 'error',\n KDF_DERIVATION_FAILED: 'error',\n ENC_PASSPHRASE_UNNORMALIZABLE: 'error',\n ENC_PASSPHRASE_EMPTY: 'error',\n SCHEMA_MERKLE_LEAF_COUNT_MISMATCH: 'error',\n SCHEMA_MERKLE_LEAVES_FORMAT_UNSUPPORTED: 'error',\n SCHEMA_MERKLE_LEAVES_MALFORMED: 'error',\n MERKLE_ROOT_MISMATCH: 'error',\n MERKLE_LEAVES_UNAVAILABLE: 'warning',\n MERKLE_UNSUPPORTED: 'info',\n OUT_OF_PROFILE_SKIPPED: 'info',\n});\n\n// Codes whose severity is context-dependent. `SEVERITY` records the default\n// reading; the promoting context escalates to `error`.\nexport const DUAL_SEVERITY_CODES: ReadonlySet<ErrorCode> = new Set<ErrorCode>([\n 'ENC_UNSUPPORTED',\n 'MERKLE_LEAVES_UNAVAILABLE',\n 'MERKLE_UNSUPPORTED',\n 'OUT_OF_PROFILE_SKIPPED',\n]);\n\nexport function severityOf(code: ErrorCode): Severity {\n return SEVERITY[code];\n}\n\n// Position of a code in the canonical registry. Issues that carry an\n// identical path are ordered by this index, so every implementation sorts an\n// issue list identically.\nconst REGISTRY_INDEX: ReadonlyMap<ErrorCode, number> = new Map(\n ERROR_CODES.map((code, index) => [code, index]),\n);\n\nexport function errorCodeRegistryIndex(code: ErrorCode): number {\n return REGISTRY_INDEX.get(code) as number;\n}\n","// Label 309 metadata-label-309 carriage: the whole-body chunk-array transport.\n//\n// The Cardano ledger caps every metadata byte string and text string at 64\n// bytes, so a serialised record body crosses the ledger as an opaque\n// whole-body chunk array: a definite-length CBOR array of definite-length\n// byte strings of at most 64 bytes each, whose in-order concatenation is the\n// canonical record-body bytes. This transport split is the ONLY chunking the\n// format performs — fields inside the reassembled body are ordinary CBOR\n// values with no per-field chunk wrappers and no 64-byte cap of their own.\n//\n// This module owns both directions of that transport:\n//\n// - `chunkRecordBody` — producer: canonical body bytes → the chunk\n// array stored as the label-309 value.\n// - `reassembleLabel309Value`— consumer: raw label-309 value bytes → the\n// record body, enforcing the carriage-error\n// taxonomy (`MALFORMED_CBOR` for every\n// non-chunk-array shape, `CHUNK_TOO_LARGE` for\n// an oversized element, zero-length elements\n// tolerated).\n//\n// Reassembly happens BEFORE structural validation: `validatePoeRecord`\n// receives the concatenated body and never sees the transport wrapper.\n\nimport { decodeCanonicalCbor, encodeCanonicalCbor } from '@cardanowall/crypto-core/cbor';\n\nimport { SEVERITY, type ErrorCode } from './error-codes';\nimport type { ValidationIssue } from './validator';\n\n/** The ledger's per-metadatum string cap: the maximum transport chunk size. */\nexport const TRANSPORT_CHUNK_MAX_BYTES = 64;\n\n/**\n * Split a serialised record body into the whole-body transport chunk array —\n * the value a producer stores under metadata label 309.\n *\n * Uses the minimal split: every chunk except the last is exactly 64 bytes.\n * The chunk-array form is required regardless of body length, so a body of\n * 64 bytes or fewer still yields a one-element array. Chunks are copies — a\n * caller mutating the input body afterwards cannot corrupt them.\n *\n * A canonical CBOR record body is never empty, so zero-length input is a\n * caller bug and throws `RangeError` (the `1* bstr` transport grammar cannot\n * represent an empty body).\n */\nexport function chunkRecordBody(body: Uint8Array): Uint8Array[] {\n if (body.length === 0) {\n throw new RangeError('record body must be non-empty; a CBOR value is at least one byte');\n }\n const chunks: Uint8Array[] = [];\n for (let offset = 0; offset < body.length; offset += TRANSPORT_CHUNK_MAX_BYTES) {\n chunks.push(body.slice(offset, Math.min(offset + TRANSPORT_CHUNK_MAX_BYTES, body.length)));\n }\n return chunks;\n}\n\n/**\n * Serialise the transport chunk array to the CBOR bytes of the label-309\n * value (the byte form of `chunkRecordBody`'s output). Convenience for\n * producers and test harnesses that embed the value at the byte level.\n */\nexport function encodeLabel309Value(body: Uint8Array): Uint8Array {\n return encodeCanonicalCbor(chunkRecordBody(body));\n}\n\nexport type Label309ReassemblyResult =\n | { readonly ok: true; readonly body: Uint8Array }\n | { readonly ok: false; readonly issue: ValidationIssue };\n\n/**\n * Reassemble a label-309 value into the record body, enforcing the\n * carriage-error taxonomy:\n *\n * - a definite-length array of definite-length byte strings each ≤ 64\n * bytes is accepted; the body is the in-order concatenation;\n * - zero-length elements are tolerated (chunk boundaries are\n * semantics-free, including degenerate ones) — an array whose\n * concatenation is empty reassembles to zero bytes, and the failure then\n * surfaces from the canonical decode of the empty body, not from this\n * layer;\n * - an element longer than 64 bytes is `CHUNK_TOO_LARGE`;\n * - every other shape — a non-array value, a non-byte-string element, an\n * indefinite-length array or element — is `MALFORMED_CBOR`.\n *\n * The input is the raw CBOR bytes of the label-309 value exactly as carried\n * in the transaction's auxiliary data.\n */\nexport function reassembleLabel309Value(valueBytes: Uint8Array): Label309ReassemblyResult {\n let decoded: unknown;\n try {\n decoded = decodeCanonicalCbor(valueBytes);\n } catch (cause) {\n return failure(\n 'MALFORMED_CBOR',\n `label-309 value failed to decode: ${cause instanceof Error ? cause.message : String(cause)}`,\n );\n }\n if (!Array.isArray(decoded)) {\n return failure(\n 'MALFORMED_CBOR',\n 'label-309 value must be the whole-body chunk array (a CBOR array of byte strings), regardless of body length',\n );\n }\n let total = 0;\n for (let i = 0; i < decoded.length; i++) {\n const element: unknown = decoded[i];\n if (!(element instanceof Uint8Array)) {\n return failure('MALFORMED_CBOR', `chunk array element ${i} is not a byte string`);\n }\n if (element.length > TRANSPORT_CHUNK_MAX_BYTES) {\n return failure(\n 'CHUNK_TOO_LARGE',\n `chunk array element ${i} is ${element.length} bytes; the ledger caps metadata byte strings at ${TRANSPORT_CHUNK_MAX_BYTES}`,\n );\n }\n total += element.length;\n }\n const body = new Uint8Array(total);\n let offset = 0;\n for (const element of decoded as ReadonlyArray<Uint8Array>) {\n body.set(element, offset);\n offset += element.length;\n }\n return { ok: true, body };\n}\n\nfunction failure(code: ErrorCode, message: string): Label309ReassemblyResult {\n return { ok: false, issue: { code, path: [], message, severity: SEVERITY[code] } };\n}\n","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Targets RFC8032, FIPS 186-5, and ZIP215 behavior.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. edwards25519 uses the RFC equation `-x² + y² = 1 + dx²y²`.\n * The stored `a` literal below is `p - 1`, i.e. the field-element encoding of RFC `a = -1`.\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // prime-order subgroup order\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param, stored here as `p - 1`\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n *\n * Mirror noble-curves: Point.CURVE() exposes shared params, but callers must not be able to mutate\n * that shared view and desynchronize it from the arithmetic constants captured below.\n */\nconst ed25519_CURVE = Object.freeze({\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n});\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // shared 32-byte encoded width for Ed25519 points, scalars, signatures, and keys\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\n// @ts-ignore\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\n// Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases. The\n// fallback still requires a real ArrayBuffer view so plain JSON-deserialized `{ constructor: ... }`\n// spoofing is rejected, and `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\nconst isBytes = (a) => a instanceof Uint8Array ||\n (ArrayBuffer.isView(a) &&\n a.constructor.name === 'Uint8Array' &&\n 'BYTES_PER_ELEMENT' in a &&\n a.BYTES_PER_ELEMENT === 1);\n/**\n * Asserts something is Bytes, optionally enforces exact length,\n * and returns the same reference.\n */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n const msg = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n throw bytes ? new RangeError(msg) : new TypeError(msg);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\n// Clone helper used before in-place byte edits such as sign-bit clearing or endian reversal.\nconst u8fr = (buf) => Uint8Array.from(buf);\n// Left-pad hex to a caller-chosen width. Width enforcement/truncation policy stays with callers.\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\n// Lowercase hex serializer.\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\n// Accepts both uppercase and lowercase hex; all parse failures intentionally collapse to `hex invalid`.\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // Optional WebCrypto lookup; sync code still handles absence.\n// Async-path capability helper for WebCrypto-backed APIs.\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n // Argument order is transcript-significant for hash/signature callers, and input validation here\n // intentionally reuses `abytes(...)` without making defensive copies of the source chunks.\n let len = 0;\n for (const a of arrs)\n len += abytes(a).length;\n const r = u8n(len); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Absence still fails later via `cr()`. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\n/** Inclusive-lower, exclusive-upper bigint range assertion. */\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => {\n if (!isBig(n))\n throw new TypeError(msg);\n if (min <= n && n < max)\n return n;\n throw new RangeError(msg);\n};\n/** Canonical modular reduction into `[0, b)`. */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\n// Low-255-bit mask used by the `2^255 - 19` fast reduction in `modP(...)`.\nconst P_MASK = (1n << 255n) - 1n;\n// Fast reduction for the special prime `2^255 - 19`. This path assumes nonnegative inputs; the\n// generic fallback would simply be `M(num, P)`.\nconst modP = (num) => {\n // return M(num, P);\n if (num < 0n)\n err('negative coordinate');\n let r = (num >> 255n) * 19n + (num & P_MASK);\n r = (r >> 255n) * 19n + (r & P_MASK);\n return r % P;\n};\n// Reduce modulo the subgroup order stored in implementation constant `N` (RFC 8032's `L`).\nconst modN = (a) => M(a, N);\n/** Modular inversion using Euclidean GCD (non-CT) instead of the RFC's `x^(p-2)` formulation.\n * This still sits on secret-dependent paths like point normalization during keygen/signing. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\n// Dynamic lookup keeps sync/async hash providers configurable at runtime. Both exported slots are\n// caller-owned and may be unset; wrapper helpers use this lookup first and then enforce the digest\n// contract instead of trusting provider output.\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\n// Both provider slots are configurable API surface and may return arbitrary values, so callers must\n// enforce the promised 64-byte SHA-512 digest contract here instead of trusting provider output.\nconst checkDigest = (value) => abytes(value, 64, 'digest');\n/**\n * SHA-512 helper used by the synchronous API.\n * @param msg - Message bytes to hash.\n * @returns 64-byte SHA-512 digest.\n * @example\n * Hash message bytes after wiring the synchronous SHA-512 implementation.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const digest = ed.hash(new Uint8Array([1, 2, 3]));\n * ```\n */\n// Public helper validates the message boundary explicitly; the configured provider is still looked\n// up dynamically and its output is checked with `checkDigest(...)`.\nconst hash = (msg) => checkDigest(callHash('sha512')(abytes(msg, undefined, 'message')));\n// Runtime class guard: this is `instanceof Point`, so cross-realm / duplicate-bundle Point objects\n// are rejected even if they are structurally identical.\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\n// Exclusive upper bound `2^256` used by 32-byte decode/serialization range checks.\nconst B256 = 2n ** 256n;\n/**\n * Point in XYZT extended coordinates.\n * @param X - X coordinate.\n * @param Y - Y coordinate.\n * @param Z - Projective Z coordinate.\n * @param T - Cached cross-product term.\n * @example\n * Do point arithmetic with the built-in base point and encode the result as hex.\n *\n * ```ts\n * const hex = Point.BASE.double().toHex();\n * ```\n */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n // Constructor only bounds-checks and freezes XYZT coordinates; it does not prove the point is\n // on-curve or that T matches X*Y/Z.\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, modP(p.x * p.y));\n }\n /** RFC8032 5.1.3: Bytes to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumberLE(normed);\n // After clearing the sign bit, parsed `y` is always < 2^255. ZIP-215 still accepts the full\n // post-mask range here, while strict RFC8032 decoding further requires `y < p`.\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = modP(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = modP(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n // ZIP-215-compatible decoding keeps the x=0 / sign-bit=1 encoding accepted; strict RFC 8032\n // rejects it, but the vendored ZIP-215 compliance vectors include this form in A/R bytes.\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, modP(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n // Intentional stricter-than-on-curve policy: reject ZERO by default because many protocols\n // require a non-zero point, and silently accepting identity points is a common caller mistake.\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = modP(X * X); // X²\n const Y2 = modP(Y * Y); // Y²\n const Z2 = modP(Z * Z); // Z²\n const Z4 = modP(Z2 * Z2); // Z⁴\n const aX2 = modP(X2 * a); // aX²\n const left = modP(Z2 * (aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + modP(d * modP(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = modP(X * Y);\n const ZT = modP(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = modP(X1 * Z2);\n const X2Z1 = modP(X2 * Z1);\n const Y1Z2 = modP(Y1 * Z2);\n const Y2Z1 = modP(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = modP(X1 * X1);\n const B = modP(Y1 * Y1);\n const C = modP(2n * Z1 * Z1);\n const D = modP(a * A);\n const x1y1 = M(X1 + Y1);\n const E = M(modP(x1y1 * x1y1) - A - B);\n const G = M(D + B);\n const F = M(G - C);\n const H = M(D - B);\n const X3 = modP(E * F);\n const Y3 = modP(G * H);\n const T3 = modP(E * H);\n const Z3 = modP(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = modP(X1 * X2);\n const B = modP(Y1 * Y2);\n const C = modP(modP(T1 * d) * T2);\n const D = modP(Z1 * Z2);\n const E = M(modP(M(X1 + Y1) * M(X2 + Y2)) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - modP(a * A));\n const X3 = modP(E * F);\n const Y3 = modP(G * H);\n const T3 = modP(E * H);\n const Z3 = modP(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Safe mode requires `1 <= n < CURVE.n`.\n * Unsafe mode additionally permits `n = 0` and returns the identity point for that case.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n - scalar by which point is multiplied\n * @param safe - safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n // Mirror noble-curves: unsafe mode still validates scalar range first, but intentionally keeps\n // `n = 0` as the one extra accepted case used by verification-style callers.\n if (!safe && n === 0n)\n return I;\n assertRange(n, 1n, N);\n if (!safe && this.is0())\n return I;\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // Fast-path only for the identity point; all other inputs still go through inversion.\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (modP(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = modP(X * iz);\n const y = modP(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), 64)).reverse();\n// Caller-enforced width: some sites require 32-byte RFC encodings, while others intentionally feed\n// wider SHA-512 output chunks through the same little-endian parser.\nconst bytesToNumberLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n // Negative `power` values are not rejected here and currently leave `x` unchanged.\n let r = x;\n while (power-- > 0n) {\n r = modP(r * r);\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = modP(x * x); // x^2, bits 1\n const b2 = modP(x2 * x); // x^3, bits 11\n const b4 = modP(pow2(b2, 2n) * b2); // x^(2^4-1), bits 1111\n const b5 = modP(pow2(b4, 1n) * x); // x^(2^5-1), bits 11111\n const b10 = modP(pow2(b5, 5n) * b5); // x^(2^10-1)\n const b20 = modP(pow2(b10, 10n) * b10); // x^(2^20-1)\n const b40 = modP(pow2(b20, 20n) * b20); // x^(2^40-1)\n const b80 = modP(pow2(b40, 40n) * b40); // x^(2^80-1)\n const b160 = modP(pow2(b80, 80n) * b80); // x^(2^160-1)\n const b240 = modP(pow2(b160, 80n) * b80); // x^(2^240-1)\n const b250 = modP(pow2(b240, 10n) * b10); // x^(2^250-1)\n const pow_p_5_8 = modP(pow2(b250, 2n) * x); // x^((p-5)/8), used by RFC8032 point decode\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // 2^((p-1)/4) = sqrt(-1)\n// RFC8032 §5.1.3 square-root helper for point decompression. `value` is only meaningful when\n// `isValid` is true; callers are also expected to pass canonical field elements with non-zero `v`.\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = modP(v * modP(v * v)); // v³\n const v7 = modP(modP(v3 * v3) * v); // v⁷\n const pow = pow_2_252_3(modP(u * v7)).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = modP(u * modP(v3 * pow)); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = modP(v * modP(x * x)); // vx²\n const root1 = x; // First root candidate\n const root2 = modP(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// Implementation `N` is the subgroup order; `L` is only the shared 32-byte encoded width constant.\n// Reduce any little-endian byte string modulo the subgroup order; the `hash` name reflects the\n// common caller shape, not an input restriction.\nconst modL_LE = (hash) => modN(bytesToNumberLE(hash)); // modulo L; but little-endian\n// Both sync and async SHA-512 slots are exported/configurable; use `callHash(...)` for both so\n// missing async overrides fail explicitly, then validate the returned digest type/length.\nconst sha512a = (...m) => Promise.resolve(callHash('sha512Async')(concatBytes(...m))).then(checkDigest);\nconst sha512s = (...m) => checkDigest(callHash('sha512')(concatBytes(...m)));\n// RFC8032 5.1.5. Split the 64-byte hashed seed into the clamped scalar half and nonce prefix.\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const copy = u8fr(hashed);\n const head = copy.slice(0, 32);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = copy.slice(32, 64); // secret key \"prefix\"\n // RFC words this as `[s]B`; reducing the clamped little-endian scalar modulo `N` is equivalent\n // for base-point multiplication because `G` already has subgroup order `N`.\n const scalar = modL_LE(head);\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/**\n * Creates a 32-byte Ed25519 public key from the RFC 8032 32-byte secret-key seed. Async.\n * @param secretKey - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 32-byte public key.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Derive the public key bytes for a newly generated signer secret.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const publicKey = await ed.getPublicKeyAsync(secretKey);\n * ```\n */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/**\n * Creates a 32-byte Ed25519 public key from the RFC 8032 32-byte secret-key seed.\n * To use, set `hashes.sha512` first.\n * @param priv - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 32-byte public key.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Derive the public key entirely through the synchronous API.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const secretKey = ed.utils.randomSecretKey();\n * const publicKey = ed.getPublicKey(secretKey);\n * ```\n */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n // RFC 8032 5.1.6 allows r mod L = 0, and SUPERCOP ref10 accepts the resulting identity-point\n // signature.\n // We intentionally keep the safe multiply() rejection here so a miswired all-zero SHA-512 provider\n // fails loudly instead of silently producing a degenerate signature.\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), 64); // 64-byte sig: 32-byte encoded R point || 32-byte LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n * @param message - Message bytes to sign.\n * @param secretKey - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 64-byte Ed25519 signature.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Sign an arbitrary message with a fresh Ed25519 secret key.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const message = new Uint8Array([1, 2, 3]);\n * const signature = await ed.signAsync(message, secretKey);\n * ```\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n * @param message - Message bytes to sign.\n * @param secretKey - 32-byte RFC 8032 secret-key seed, not a 64-byte expanded secret key.\n * @returns 64-byte Ed25519 signature.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Use the sync API when you've wired a SHA-512 implementation yourself.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const secretKey = ed.utils.randomSecretKey();\n * const signature = ed.sign(new Uint8Array([1, 2, 3]), secretKey);\n * ```\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n// Exported defaults favor ZIP-215 interoperability semantics; callers must opt into the stricter\n// branch with `{ zip215: false }`.\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, publicKey, options = defaultVerifyOpts) => {\n sig = abytes(sig, 64); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n publicKey = abytes(publicKey, L);\n // zip215=false keeps the library's stricter branch, which still canonicalizes `R` / `A` before\n // hashing and rejects small-order public keys earlier than pure RFC8032 text would require.\n // Preserve the exported ZIP-215 default for `{}` / `{ zip215: undefined }`, not just omitted opts.\n const { zip215 = true } = options;\n const r = sig.subarray(0, L);\n const s = bytesToNumberLE(sig.subarray(L, L * 2)); // Decode second half as an integer S;\n let A, R, SB;\n let hashable = Uint8Array.of();\n let finished = false;\n try {\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n A = Point.fromBytes(publicKey, zip215);\n R = Point.fromBytes(r, zip215);\n SB = G.multiply(s, false); // 0 <= s < l is done inside\n // ZIP-215 accepts noncanonical / unreduced point encodings, so the challenge hash must use the\n // exact signature/public-key bytes rather than canonicalized re-encodings of the decoded points.\n hashable = concatBytes(r, publicKey, msg); // dom2(F, C) || R || A || PH(M)\n finished = true;\n }\n catch (error) { }\n const finish = (hashed) => {\n if (!finished)\n return false;\n // Policy: strict mode intentionally rejects all small-order public keys, even though the raw RFC\n // equation text is looser here. This matches libsodium and avoids weak / ambiguous verification\n // outcomes where unusual low-order public keys can make distinct key/signature combinations verify.\n if (!zip215 && A.isSmallOrder())\n return false;\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const k = modL_LE(hashed);\n const RkA = R.add(A.multiply(k, false));\n // Extended group equation\n // [8][S]B = [8]R + [8][k]A'\n return RkA.subtract(SB).clearCofactor().is0();\n };\n return { hashable, finish };\n};\n/**\n * Verifies a signature on message and public key. Async.\n * The implementation is based on RFC8032 5.1.7, but default opts use ZIP-215 semantics; pass\n * `{ zip215: false }` for the library's stricter branch.\n * @param signature - 64-byte signature.\n * @param message - Signed message bytes.\n * @param publicKey - 32-byte public key.\n * @param opts - Verification options. Defaults to ZIP-215 semantics. See {@link EdDSAVerifyOpts}.\n * @returns `true` when the signature is valid.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Verify the signature against the same message and derived public key.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const message = new Uint8Array([1, 2, 3]);\n * const publicKey = await ed.getPublicKeyAsync(secretKey);\n * const signature = await ed.signAsync(message, secretKey);\n * const isValid = await ed.verifyAsync(signature, message, publicKey);\n * ```\n */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/**\n * Verifies a signature on message and public key using the synchronous hash path.\n * The implementation is based on RFC8032 5.1.7, but default opts use ZIP-215 semantics; pass\n * `{ zip215: false }` for the library's stricter branch.\n * @param signature - 64-byte signature.\n * @param message - Signed message bytes.\n * @param publicKey - 32-byte public key.\n * @param opts - Verification options. Defaults to ZIP-215 semantics. See {@link EdDSAVerifyOpts}.\n * @returns `true` when the signature is valid.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Verify a signature entirely through the synchronous API.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const secretKey = ed.utils.randomSecretKey();\n * const message = new Uint8Array([1, 2, 3]);\n * const publicKey = ed.getPublicKey(secretKey);\n * const signature = ed.sign(message, secretKey);\n * const isValid = ed.verify(signature, message, publicKey);\n * ```\n */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/**\n * Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves.\n * Exposes the same low-level field-default `mod` reducer and non-CT `invert` helper used\n * internally.\n * @example\n * Convert bytes to a hex string with the low-level helper namespace.\n *\n * ```ts\n * const hex = etc.bytesToHex(new Uint8Array([1, 2, 3]));\n * ```\n */\nconst etc = /* @__PURE__ */ Object.freeze({\n bytesToHex,\n hexToBytes,\n concatBytes,\n mod: M,\n invert: invert,\n randomBytes,\n});\n/**\n * Hash implementations used by the synchronous API plus the default async WebCrypto provider.\n * Both slots are configurable API surface; wrapper helpers revalidate that providers still return\n * 64-byte SHA-512 digests.\n * @example\n * Provide a SHA-512 implementation before calling synchronous helpers.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const { publicKey } = ed.keygen();\n * ```\n */\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// Returns the final 32-byte Ed25519 secret-key seed verbatim, generating fresh random bytes only\n// when omitted.\nconst randomSecretKey = (seed) => {\n seed = seed === undefined ? randomBytes(L) : seed;\n return abytes(seed, L);\n};\n/**\n * Generates a secret/public keypair.\n * @param seed - Optional 32-byte Ed25519 secret-key seed, returned verbatim as `secretKey`.\n * @returns Keypair with `secretKey` and `publicKey`.\n * @throws If synchronous SHA-512 has not been configured in `hashes`. {@link Error}\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Generate a new keypair through the synchronous API after wiring SHA-512.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n * import { sha512 } from '@noble/hashes/sha2.js';\n *\n * ed.hashes.sha512 = sha512;\n * const { secretKey, publicKey } = ed.keygen();\n * ```\n */\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\n/**\n * Generates a secret/public keypair asynchronously.\n * @param seed - Optional 32-byte Ed25519 secret-key seed, returned verbatim as `secretKey`.\n * @returns Keypair with `secretKey` and `publicKey`.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Generate a new keypair through the asynchronous WebCrypto-backed path.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const { secretKey, publicKey } = await ed.keygenAsync();\n * ```\n */\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/**\n * Ed25519-specific key utilities.\n * `utils.getExtendedPublicKey*` expose secret-derived internals (`head`, `prefix`, `scalar`, and\n * point objects), not just public-key bytes.\n * @example\n * Generate a new Ed25519 secret key and derive the matching public key.\n *\n * ```ts\n * import * as ed from '@noble/ed25519';\n *\n * const secretKey = ed.utils.randomSecretKey();\n * const publicKey = await ed.getPublicKeyAsync(secretKey);\n * ```\n */\nconst utils = /* @__PURE__ */ Object.freeze({\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n});\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\n// Layout is grouped by window: each block stores the positive multiples `1*base .. 128*base` for\n// that window, and the extra `+1` window in `pwindows` absorbs carries from signed-digit recoding.\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // shared process-wide cache of base-point precomputes\n// Branch-based negate helper used for JS/JIT mitigation symmetry, not a strict constant-time claim.\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n * Returns the real accumulator `p` plus a fake accumulator `f`; callers only care about `p`, while\n * `f` exists to keep similar work in zero-digit branches as a JS/JIT side-channel mitigation.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // callers only need `p`; `f` is kept for zero-digit mitigation symmetry\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync };\n","import * as ed from '@noble/ed25519';\nimport { sha512 } from '@noble/hashes/sha2.js';\n\ned.hashes.sha512 = sha512;\n\n// Ed25519 group order L (= 2^252 + 27742317777372353535851937790883648493).\nconst L = ed.Point.CURVE().n;\n\nexport interface SignEd25519Opts {\n readonly seed: Uint8Array;\n readonly message: Uint8Array;\n}\n\nexport interface VerifyEd25519Opts {\n readonly publicKey: Uint8Array;\n readonly message: Uint8Array;\n readonly signature: Uint8Array;\n}\n\nexport interface GetPublicKeyEd25519Opts {\n readonly seed: Uint8Array;\n}\n\nexport function signEd25519(opts: SignEd25519Opts): Uint8Array {\n return ed.sign(opts.message, opts.seed);\n}\n\n// Little-endian 32-byte scalar → bigint.\nfunction leBytesToBigInt(bytes: Uint8Array): bigint {\n let value = 0n;\n for (let i = bytes.length - 1; i >= 0; i--) {\n value = (value << 8n) | BigInt(bytes[i]!);\n }\n return value;\n}\n\n// Strict (non-cofactored) Ed25519 verification per RFC 8032 §5.1.7, matching\n// libsodium/PyNaCl `crypto_sign_verify_detached` and ed25519-dalek\n// `verify_strict`. The cofactor-less check rejects every small-order /\n// torsion-component edge case in the C2SP/CCTV corpus, which noble's\n// `{ zip215: false }` mode does NOT (it remains cofactored: it checks\n// `[8]([S]B - [k]A - R) == 0`, accepting torsion components).\n//\n// The verification equation is the unscaled `[S]B == R + [k]A`, rewritten as\n// `[S]B - [k]A - R == identity`. We reject S >= L (non-canonical scalar) and\n// any small-order A or R up front, so a torsion component can never be smuggled\n// through the cofactor multiplication the cofactored variant performs.\nexport function verifyEd25519(opts: VerifyEd25519Opts): boolean {\n const { signature, message, publicKey } = opts;\n if (signature.length !== 64 || publicKey.length !== 32) return false;\n\n // S = LE(sig[32..64]); reject if not a canonical scalar (S >= L).\n const S = leBytesToBigInt(signature.subarray(32, 64));\n if (S >= L) return false;\n\n // Decode A (public key) and R (sig[0..32]) with the canonical (non-zip215)\n // point encoding; a non-canonical encoding throws and rejects.\n let A: ed.Point;\n let R: ed.Point;\n try {\n A = ed.Point.fromBytes(publicKey);\n R = ed.Point.fromBytes(signature.subarray(0, 32));\n } catch {\n return false;\n }\n\n // Reject small-order (cofactor-torsion) A or R: this is exactly the strictness\n // that distinguishes verify_strict from the cofactored check.\n if (A.isSmallOrder() || R.isSmallOrder()) return false;\n\n // k = SHA-512(R || A || M) reduced mod L.\n const k =\n leBytesToBigInt(ed.hash(concatBytes(signature.subarray(0, 32), publicKey, message))) % L;\n\n // Accept iff [S]B - [k]A - R == identity. `multiplyUnsafe` returns the\n // identity for a 0 scalar, but guard explicitly to avoid relying on that.\n const sB = S === 0n ? ed.Point.ZERO : ed.Point.BASE.multiplyUnsafe(S);\n const kA = k === 0n ? ed.Point.ZERO : A.multiplyUnsafe(k);\n return sB.subtract(kA).subtract(R).is0();\n}\n\nfunction concatBytes(...parts: Uint8Array[]): Uint8Array {\n let total = 0;\n for (const p of parts) total += p.length;\n const out = new Uint8Array(total);\n let offset = 0;\n for (const p of parts) {\n out.set(p, offset);\n offset += p.length;\n }\n return out;\n}\n\nexport function getPublicKeyEd25519(opts: GetPublicKeyEd25519Opts): Uint8Array {\n return ed.getPublicKey(opts.seed);\n}\n","export type CoseVerifyErrorCode =\n | 'MALFORMED_SIG_COSE'\n | 'MALFORMED_SIG_COSE_SIGN1'\n | 'UNSUPPORTED_SIG_ALG'\n | 'KID_UNRESOLVED'\n | 'SIGNATURE_INVALID';\n\nexport class CoseVerifyError extends Error {\n readonly code: CoseVerifyErrorCode;\n\n constructor(code: CoseVerifyErrorCode, message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = 'CoseVerifyError';\n this.code = code;\n }\n}\n\nexport type CoseVerifyResult =\n | { ok: true; signerKey: Uint8Array; alg: number }\n | { ok: false; error: { code: CoseVerifyErrorCode; message: string } };\n","import {\n decodeCanonicalCbor,\n encodeCanonicalCbor,\n type CanonicalCborValue,\n} from '../cbor/canonical';\nimport { CanonicalCborError } from '../cbor/errors';\nimport { blake2b224 } from '../hash/blake2b-256';\nimport { signEd25519, verifyEd25519 } from '../sig/ed25519';\nimport { compareCt } from '../util/compare-ct';\n\nimport { CoseVerifyError, type CoseVerifyResult } from './errors';\n\nexport type CoseHeader = Map<number | string, unknown>;\n\n// Label 309 v1 domain separator embedded as a prefix on `Sig_structure[3]`\n// (`to_sign`). The separator is\n// NOT placed in `Sig_structure[2]` (`external_aad`) because CIP-30 `signData`\n// — the only realistic wallet-signing path on Cardano — explicitly forbids a\n// non-empty `external_aad`. Pinning the prefix into the payload preserves the\n// anti-replay property while keeping wallet-produced signatures byte-identical\n// to verifier-side recomputation.\nexport const CARDANO_POE_SIG_DOMAIN_PREFIX = 'cardano-poe-record-sig-v1' as const;\n// Composer path-2 wallet flow consumes the prefix bytes directly\n// to assemble `toSign = prefix || canonical_cbor(record_body)` BEFORE calling\n// `walletSignData` (the wallet's `signData()` receives this concatenation as\n// its `payload` argument verbatim per CIP-30). The bytes constant is exported\n// so a composer can build the input without re-encoding the prefix at every\n// call site.\nexport const CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES = new TextEncoder().encode(\n CARDANO_POE_SIG_DOMAIN_PREFIX,\n);\n\n// Fail-fast: the prefix length is byte-pinned at 25 UTF-8 bytes. A different\n// runtime encoding would silently break round-tripping\n// against the reference vectors.\nif (CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length !== 25) {\n throw new Error(\n `cardano-poe-record-sig-v1 prefix must encode to exactly 25 UTF-8 bytes, got ${CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length}`,\n );\n}\n\nconst EMPTY_BYTES = new Uint8Array(0);\n\nexport interface CoseSign1Decoded {\n readonly protectedHeader: CoseHeader;\n // preserved for Sig_structure reconstruction — never re-encode the decoded header map (RFC 9052 §4.4)\n readonly protectedBytes: Uint8Array;\n readonly unprotectedHeader: CoseHeader;\n readonly payload: Uint8Array | null;\n readonly signature: Uint8Array;\n}\n\nexport interface BuildSigStructureArgs {\n readonly context: 'Signature1';\n readonly bodyProtectedBytes: Uint8Array;\n readonly externalAad: Uint8Array;\n readonly payload: Uint8Array;\n}\n\n// Raw RFC 9052 §4.4 Sig_structure builder. General-purpose: callers control\n// `external_aad` and `payload` exactly. For Label 309 record signing use\n// `buildLabel309SigStructure` instead — it enforces the Label 309 record-signature invariants.\nexport function buildSigStructure(args: BuildSigStructureArgs): Uint8Array {\n return encodeCanonicalCbor([\n args.context,\n args.bodyProtectedBytes,\n args.externalAad,\n args.payload,\n ] as readonly CanonicalCborValue[]);\n}\n\nexport interface BuildLabel309SigStructureArgs {\n readonly bodyProtectedBytes: Uint8Array;\n // Canonical CBOR of the record body with `sigs` removed.\n readonly recordBodyCbor: Uint8Array;\n}\n\n// Label 309 v1 specialisation of `Sig_structure` (RFC 9052 §4.4 base structure):\n// to_sign = utf8(\"cardano-poe-record-sig-v1\") || canonical_cbor(record_body_minus_sigs)\n// Sig_structure = [ \"Signature1\", body_protected, h'' (empty), to_sign ]\n// Always forces `external_aad = h''` (empty bstr) — the CIP-30 wallet path\n// cannot carry a non-empty `external_aad`, so the domain separator lives in\n// `Sig_structure[3]` rather than `Sig_structure[2]`.\nexport function buildLabel309SigStructure(args: BuildLabel309SigStructureArgs): Uint8Array {\n const toSign = new Uint8Array(\n CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length + args.recordBodyCbor.length,\n );\n toSign.set(CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES, 0);\n toSign.set(args.recordBodyCbor, CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length);\n return buildSigStructure({\n context: 'Signature1',\n bodyProtectedBytes: args.bodyProtectedBytes,\n externalAad: EMPTY_BYTES,\n payload: toSign,\n });\n}\n\nexport interface EncodeCoseSign1Args {\n readonly protectedHeader: CoseHeader;\n readonly unprotectedHeader: CoseHeader;\n readonly payload: Uint8Array | null;\n readonly signature: Uint8Array;\n}\n\nexport function encodeCoseSign1(args: EncodeCoseSign1Args): Uint8Array {\n const protectedBytes =\n args.protectedHeader.size === 0\n ? EMPTY_BYTES\n : encodeCanonicalCbor(args.protectedHeader as CanonicalCborValue);\n return encodeCanonicalCbor([\n protectedBytes,\n args.unprotectedHeader as CanonicalCborValue,\n args.payload,\n args.signature,\n ] as readonly CanonicalCborValue[]);\n}\n\n// cbor2's decoder returns Map for integer-keyed maps but plain Object for empty\n// or string-keyed maps; normalise both representations to Map.\nfunction asCoseHeader(value: unknown): CoseHeader | null {\n if (value instanceof Map) return value as CoseHeader;\n if (value !== null && typeof value === 'object' && (value as object).constructor === Object) {\n return new Map(Object.entries(value as Record<string, unknown>));\n }\n return null;\n}\n\nexport function decodeCoseSign1(bytes: Uint8Array): CoseSign1Decoded {\n let arr: unknown;\n try {\n arr = decodeCanonicalCbor(bytes);\n } catch (cause) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'cose decode failed', { cause });\n }\n if (!Array.isArray(arr) || arr.length !== 4) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'expected 4-element array');\n }\n const [protectedBytesRaw, unprotectedRaw, payloadRaw, signatureRaw] = arr;\n if (!(protectedBytesRaw instanceof Uint8Array)) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'protected_bytes must be bytes');\n }\n const unprotectedHeader = asCoseHeader(unprotectedRaw);\n if (unprotectedHeader === null) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'unprotected header must be map');\n }\n if (payloadRaw !== null && !(payloadRaw instanceof Uint8Array)) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'payload must be bytes or null');\n }\n if (!(signatureRaw instanceof Uint8Array) || signatureRaw.length !== 64) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'signature must be 64 bytes');\n }\n let protectedHeader: CoseHeader;\n if (protectedBytesRaw.length === 0) {\n protectedHeader = new Map();\n } else {\n let decodedProtected: unknown;\n try {\n decodedProtected = decodeCanonicalCbor(protectedBytesRaw);\n } catch (cause) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'protected header decode failed', { cause });\n }\n const ph = asCoseHeader(decodedProtected);\n if (ph === null) {\n throw new CoseVerifyError('MALFORMED_SIG_COSE', 'protected header must decode to map');\n }\n // Empty protected header MUST encode as the single byte 0x40 (zero-length bstr),\n // not 0x41 0xA0 (a 1-byte bstr containing an empty CBOR map). RFC 9052 §3 +\n // Label 309 canonical-CBOR mandate.\n if (ph.size === 0) {\n throw new CoseVerifyError(\n 'MALFORMED_SIG_COSE',\n 'empty protected header must encode as 0x40 (zero-length bstr), not as an empty map',\n );\n }\n protectedHeader = ph;\n }\n return {\n protectedHeader,\n protectedBytes: protectedBytesRaw,\n unprotectedHeader,\n payload: payloadRaw,\n signature: signatureRaw,\n };\n}\n\nexport type CoseSign1BuildErrorCode = 'SIGNER_NOT_PROVIDED' | 'SIGNER_AND_SEED_BOTH_PROVIDED';\n\nexport class CoseSign1BuildError extends Error {\n readonly code: CoseSign1BuildErrorCode;\n\n constructor(code: CoseSign1BuildErrorCode, message: string) {\n super(message);\n this.name = 'CoseSign1BuildError';\n this.code = code;\n }\n}\n\nexport interface CoseSign1Label309BuildArgs {\n readonly protectedHeader: CoseHeader;\n readonly unprotectedHeader: CoseHeader;\n // Canonical CBOR of the record body with `sigs` removed. The\n // builder prepends the 25-byte UTF-8 domain prefix `cardano-poe-record-sig-v1`\n // internally — callers MUST NOT pre-concatenate it.\n readonly recordBodyCbor: Uint8Array;\n // EITHER the raw 32-byte Ed25519 seed (used by KAT tests, Python parity, and\n // the off-host signing helper) OR an injected signer closure that signs the\n // assembled Sig_structure bytes (composer-side use — keeps the private key\n // inside the unlock-store closure so it never escapes scope).\n // Exactly one of the two MUST be provided; mutual exclusion enforced at\n // runtime via CoseSign1BuildError.\n readonly signerSecretKey?: Uint8Array;\n readonly signer?: (sigStructureBytes: Uint8Array) => Uint8Array;\n}\n\n// Label 309 v1 record-signature builder:\n// 1. compute `to_sign = utf8(\"cardano-poe-record-sig-v1\") || recordBodyCbor`\n// 2. Sig_structure = [ \"Signature1\", bodyProtected, h'', to_sign ]\n// 3. Ed25519-sign Sig_structure (via seed OR injected closure)\n// 4. emit COSE_Sign1 with payload = CBOR null (detached signature, mandatory)\nexport function coseSign1Label309Build(args: CoseSign1Label309BuildArgs): Uint8Array {\n if (args.signerSecretKey === undefined && args.signer === undefined) {\n throw new CoseSign1BuildError(\n 'SIGNER_NOT_PROVIDED',\n 'coseSign1Label309Build requires either signerSecretKey or signer',\n );\n }\n if (args.signerSecretKey !== undefined && args.signer !== undefined) {\n throw new CoseSign1BuildError(\n 'SIGNER_AND_SEED_BOTH_PROVIDED',\n 'coseSign1Label309Build accepts signerSecretKey XOR signer (not both)',\n );\n }\n const protectedBytes =\n args.protectedHeader.size === 0\n ? EMPTY_BYTES\n : encodeCanonicalCbor(args.protectedHeader as CanonicalCborValue);\n const sigStructureBytes = buildLabel309SigStructure({\n bodyProtectedBytes: protectedBytes,\n recordBodyCbor: args.recordBodyCbor,\n });\n let signature: Uint8Array;\n if (args.signer !== undefined) {\n signature = args.signer(sigStructureBytes);\n if (!(signature instanceof Uint8Array) || signature.length !== 64) {\n throw new CoseSign1BuildError(\n 'SIGNER_NOT_PROVIDED',\n `injected signer must return a 64-byte Uint8Array; got ${signature instanceof Uint8Array ? `${signature.length}-byte Uint8Array` : typeof signature}`,\n );\n }\n } else {\n signature = signEd25519({ seed: args.signerSecretKey!, message: sigStructureBytes });\n }\n return encodeCoseSign1({\n protectedHeader: args.protectedHeader,\n unprotectedHeader: args.unprotectedHeader,\n payload: null,\n signature,\n });\n}\n\nexport interface CoseSign1Label309VerifyArgs {\n readonly message: Uint8Array;\n // Canonical CBOR of the record body with `sigs` removed (verifier-recomputed;\n // the 25-byte UTF-8 prefix is prepended internally — callers\n // MUST NOT pre-concatenate it).\n readonly detachedRecordBodyCbor: Uint8Array;\n // Optional out-of-band signer key (path-2 wallet path resolves the key from\n // `sigs[i].cose_key`). Path-1 records carry the 32-byte raw Ed25519 pubkey\n // in the protected header at label 4 (`kid`) and need no out-of-band hint.\n readonly expectedSignerKey?: Uint8Array;\n}\n\n// Label 309 v1 record-signature verifier:\n// - Decode COSE_Sign1\n// - Reject COSE_Sign1[2] != CBOR null (attached payload — including h'') as\n// MALFORMED_SIG_COSE_SIGN1\n// - Recompute to_sign = utf8(\"cardano-poe-record-sig-v1\") || detachedRecordBodyCbor\n// - Sig_structure = [ \"Signature1\", protectedBytes, h'', to_sign ]\n// - Strict Ed25519 verify (RFC 8032 §5.1.7 — `zip215: false` per ed25519.ts)\n//\n// The verifier does NOT accept an `externalAad` argument: Label 309 v1 pins\n// `external_aad = h''` and any deviation would either silently weaken the\n// domain separator or quietly accept malformed records. If a future CIP\n// revision re-enables external_aad, this helper takes a v-bump.\nexport function coseSign1Label309Verify(args: CoseSign1Label309VerifyArgs): CoseVerifyResult {\n let decoded: CoseSign1Decoded;\n try {\n decoded = decodeCoseSign1(args.message);\n } catch (e) {\n if (e instanceof CoseVerifyError) {\n return { ok: false, error: { code: e.code, message: 'errors.cose.malformed' } };\n }\n if (e instanceof CanonicalCborError) {\n return {\n ok: false,\n error: { code: 'MALFORMED_SIG_COSE', message: 'errors.cose.malformed_cbor' },\n };\n }\n throw e;\n }\n // Label 309 v1 mandate: COSE_Sign1[2] (payload field) MUST be CBOR `null` (0xF6).\n // Any non-null payload — including a zero-length byte string `h''` — MUST\n // be rejected as MALFORMED_SIG_COSE_SIGN1.\n if (decoded.payload !== null) {\n return {\n ok: false,\n error: {\n code: 'MALFORMED_SIG_COSE_SIGN1',\n message: 'errors.cose.attached_payload_forbidden',\n },\n };\n }\n const alg = decoded.protectedHeader.get(1);\n if (typeof alg !== 'number' || alg !== -8) {\n return {\n ok: false,\n error: { code: 'UNSUPPORTED_SIG_ALG', message: 'errors.cose.unsupported_alg' },\n };\n }\n const kidRaw = decoded.protectedHeader.get(4);\n let signerKey: Uint8Array | undefined;\n if (kidRaw instanceof Uint8Array && kidRaw.length === 32) {\n signerKey = kidRaw;\n } else if (args.expectedSignerKey instanceof Uint8Array && args.expectedSignerKey.length === 32) {\n signerKey = args.expectedSignerKey;\n }\n if (signerKey === undefined) {\n return {\n ok: false,\n error: { code: 'KID_UNRESOLVED', message: 'errors.cose.kid_unresolved' },\n };\n }\n // When both a protected-header kid AND an expectedSignerKey are provided,\n // require they agree (constant-time). A protected kid that disagrees with\n // the caller's out-of-band binding is a misuse, not a transient mismatch.\n if (\n kidRaw instanceof Uint8Array &&\n kidRaw.length === 32 &&\n args.expectedSignerKey instanceof Uint8Array &&\n args.expectedSignerKey.length === 32 &&\n !compareCt(kidRaw, args.expectedSignerKey)\n ) {\n return {\n ok: false,\n error: { code: 'KID_UNRESOLVED', message: 'errors.cose.kid_mismatch' },\n };\n }\n // CIP-8 `hashed = true` mode (the wallet-signed path-2 variant). The unprotected\n // header carries the literal text key `\"hashed\"` with boolean value `true`\n // (text-keyed CBOR maps decode to `Map<string, unknown>` via cbor2). When\n // set, both producer and verifier build `Sig_structure[3] = Blake2b-224(to_sign)`\n // (28-byte digest of the FULL `to_sign` payload including the 25-byte\n // domain prefix). When absent or false, the standard non-hashed path\n // applies unchanged.\n const hashedFlag = decoded.unprotectedHeader.get('hashed');\n let sigStructureBytes: Uint8Array;\n if (hashedFlag === true) {\n const toSign = new Uint8Array(\n CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length + args.detachedRecordBodyCbor.length,\n );\n toSign.set(CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES, 0);\n toSign.set(args.detachedRecordBodyCbor, CARDANO_POE_SIG_DOMAIN_PREFIX_BYTES.length);\n const hashedPayload = blake2b224(toSign);\n sigStructureBytes = buildSigStructure({\n context: 'Signature1',\n bodyProtectedBytes: decoded.protectedBytes,\n externalAad: EMPTY_BYTES,\n payload: hashedPayload,\n });\n } else {\n sigStructureBytes = buildLabel309SigStructure({\n bodyProtectedBytes: decoded.protectedBytes,\n recordBodyCbor: args.detachedRecordBodyCbor,\n });\n }\n const valid = verifyEd25519({\n publicKey: signerKey,\n message: sigStructureBytes,\n signature: decoded.signature,\n });\n if (!valid) {\n return {\n ok: false,\n error: { code: 'SIGNATURE_INVALID', message: 'errors.cose.signature_invalid' },\n };\n }\n return { ok: true, signerKey, alg };\n}\n","// Shared, byte-critical pieces of the sealed-PoE construction that the producer\n// (wrap / passphrase seal) and every verifier (unwrap, trial-decrypt,\n// passphrase open) MUST compute byte-for-byte identically:\n//\n// 1. The item-hashes digest `hashes_hash`.\n// 2. The slots transcript, its SHA-256 `slots_hash`, and the CEK-keyed\n// `slots_mac`.\n// 3. The passphrase transcript, its SHA-256 `pw_hash`, and the CEK-keyed\n// in-ciphertext `commitment`.\n// 4. The content `payload_key` derivations (both key paths).\n// 5. Both per-slot KEK HKDF salts (classical and hybrid).\n//\n// Keeping these in one module is the interop guarantee: a single divergence in\n// the canonical encoding silently yields a `slots_mac`, a commitment, or an\n// AEAD tag that another implementation cannot reproduce, with no typed error to\n// localise the fault. There is exactly one shared implementation, imported by\n// both sides.\n\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\n\nimport { encodeCanonicalCbor, type CanonicalCborValue } from '../cbor/canonical';\nimport { hkdfSha256 } from '../kdf/hkdf';\n\nimport { EciesSealedPoeError } from './errors';\nimport type { Mlkem768X25519Slot, SealedKem, X25519Slot } from './wrap';\n\n// Internal domain-separation labels. Each is exact ASCII with no terminator and\n// no length prefix; each is a fixed constant of the scheme, never serialised on\n// the wire and never registry-selectable. The byte-length invariants below keep\n// the SCREAMING_SNAKE constants in sync with the ASCII literals every conformant\n// verifier hashes against.\n\n// SHA-256 prefix for the item-hashes digest `hashes_hash`.\nexport const CARDANO_POE_ITEM_HASHES_PREFIX: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-item-hashes-v1',\n);\n// SHA-256 prefix for the slots-transcript hash `slots_hash`.\nexport const CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-slots-transcript-v1',\n);\n// SHA-256 prefix for the passphrase-transcript hash `pw_hash`.\nexport const CARDANO_POE_PASSPHRASE_TRANSCRIPT_PREFIX: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-passphrase-transcript-v1',\n);\n// HKDF info for the slot-set MAC key.\nexport const CARDANO_POE_HKDF_INFO_SLOTS_MAC: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-slots-mac-v1',\n);\n// HKDF info for the passphrase commitment MAC key.\nexport const CARDANO_POE_HKDF_INFO_PASSPHRASE_MAC: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-passphrase-mac-v1',\n);\n// HKDF info for the slots-path content `payload_key`.\nexport const CARDANO_POE_HKDF_INFO_PAYLOAD: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-payload-v1',\n);\n// HKDF info for the passphrase-path content `payload_key`.\nexport const CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-payload-passphrase-v1',\n);\n// SHA-256 prefix for the classical (x25519) per-slot KEK HKDF salt.\nexport const CARDANO_POE_X25519_KEK_SALT_PREFIX: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-x25519-kek-salt-v1',\n);\n// SHA-256 prefix for the hybrid (X-Wing) per-slot KEK HKDF salt.\nexport const CARDANO_POE_XWING_KEK_SALT_PREFIX: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-xwing-kek-salt-v1',\n);\n\nif (CARDANO_POE_ITEM_HASHES_PREFIX.length !== 26) {\n throw new Error('CARDANO_POE_ITEM_HASHES_PREFIX byte-length invariant violated (expected 26)');\n}\nif (CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX.length !== 31) {\n throw new Error(\n 'CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX byte-length invariant violated (expected 31)',\n );\n}\nif (CARDANO_POE_PASSPHRASE_TRANSCRIPT_PREFIX.length !== 36) {\n throw new Error(\n 'CARDANO_POE_PASSPHRASE_TRANSCRIPT_PREFIX byte-length invariant violated (expected 36)',\n );\n}\nif (CARDANO_POE_HKDF_INFO_SLOTS_MAC.length !== 24) {\n throw new Error('CARDANO_POE_HKDF_INFO_SLOTS_MAC byte-length invariant violated (expected 24)');\n}\nif (CARDANO_POE_HKDF_INFO_PASSPHRASE_MAC.length !== 29) {\n throw new Error(\n 'CARDANO_POE_HKDF_INFO_PASSPHRASE_MAC byte-length invariant violated (expected 29)',\n );\n}\nif (CARDANO_POE_HKDF_INFO_PAYLOAD.length !== 22) {\n throw new Error('CARDANO_POE_HKDF_INFO_PAYLOAD byte-length invariant violated (expected 22)');\n}\nif (CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE.length !== 33) {\n throw new Error(\n 'CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE byte-length invariant violated (expected 33)',\n );\n}\nif (CARDANO_POE_X25519_KEK_SALT_PREFIX.length !== 30) {\n throw new Error(\n 'CARDANO_POE_X25519_KEK_SALT_PREFIX byte-length invariant violated (expected 30)',\n );\n}\nif (CARDANO_POE_XWING_KEK_SALT_PREFIX.length !== 29) {\n throw new Error('CARDANO_POE_XWING_KEK_SALT_PREFIX byte-length invariant violated (expected 29)');\n}\n\n// Scheme-fixed constant pinning the passphrase normalization profile the CEK was\n// derived under. Fed into the passphrase transcript; never serialised on the\n// wire.\nexport const CARDANO_POE_PW_NORM_PROFILE = 'cardano-poe-pw-norm-v1' as const;\n\n// Verifier-side resource bounds a public parser MUST enforce BEFORE invoking any\n// KEM/AEAD primitive, so a malformed envelope cannot drive unbounded work. Both\n// are deployment-pinned reference constants (not wire fields); deployments MAY\n// tighten them. They sit far above the ~16 KiB Cardano transaction-metadata\n// ceiling that bounds honest records, so a conformant record never trips them.\n//\n// • MAX_SLOTS — the maximum slot count; an envelope with more slots is\n// rejected outright.\n// • MAX_DECODED_ENVELOPE_BYTES — a backstop on the decoded envelope's\n// aggregate byte size (nonce + slots_mac + every per-slot wire field),\n// bounding the work even before the slot-count cap would.\nexport const MAX_SLOTS = 1024;\nexport const MAX_DECODED_ENVELOPE_BYTES = 65536;\n\nconst EMPTY_SALT: Uint8Array = new Uint8Array(0);\n\n// The item's plaintext-hash claim: registered algorithm identifier → digest\n// bytes, exactly as carried in the record body. Both key paths bind this map\n// (via `hashes_hash`) into their commitment, so an envelope spliced onto an\n// item with a different hash claim is rejected before any ciphertext work.\nexport type ItemHashes = Readonly<Record<string, Uint8Array>>;\n\nfunction labelledSha256(prefix: Uint8Array, ...parts: ReadonlyArray<Uint8Array>): Uint8Array {\n let total = prefix.length;\n for (const p of parts) total += p.length;\n const message = new Uint8Array(total);\n message.set(prefix, 0);\n let offset = prefix.length;\n for (const p of parts) {\n message.set(p, offset);\n offset += p.length;\n }\n return sha256(message);\n}\n\n// SHA-256(\"cardano-poe-item-hashes-v1\" || canonicalEncode(item.hashes)).\n// The hashes map is encoded exactly as it appears in the record body\n// (registry-identifier keys → digest byte strings, canonical key order). An\n// `enc`-bearing item MUST declare at least one content hash — the ciphertext is\n// bound to the plaintext only through that digest — so an empty map is rejected\n// here, on both the producer and the verifier side.\nexport function itemHashesHash(hashes: ItemHashes): Uint8Array {\n if (Object.keys(hashes).length === 0) {\n throw new EciesSealedPoeError(\n 'ENC_REQUIRES_CONTENT_HASH',\n 'hashes MUST carry at least one content-hash entry',\n );\n }\n return labelledSha256(CARDANO_POE_ITEM_HASHES_PREFIX, encodeCanonicalCbor(hashes));\n}\n\n// SHA-256(\"cardano-poe-slots-transcript-v1\" || canonicalEncode(SLOTS_TRANSCRIPT)).\n// SLOTS_TRANSCRIPT is the closed seven-key map binding the cross-KEM header\n// fields (scheme, path, aead, kem, nonce) and the item's hash claim\n// (hashes_hash) to the on-wire slot set, so a relay that flips any header field\n// — or splices the envelope onto a different item — yields a different\n// `slots_hash` and the MAC fails. Computed ONCE per envelope and held constant\n// across the recipient trial-decrypt loop. The map keys are a SET — their wire\n// order is fixed by the canonical-encode sort, never hand-arranged here.\nexport function computeSlotsHash(args: {\n aead: string;\n kem: SealedKem;\n nonce: Uint8Array;\n slots: ReadonlyArray<X25519Slot | Mlkem768X25519Slot>;\n hashesHash: Uint8Array;\n}): Uint8Array {\n // The slot array is re-stated as explicit closed two-key maps (never the raw\n // caller objects), so an extra property on a caller's slot value can never\n // leak into the committed bytes.\n const slots: CanonicalCborValue =\n args.kem === 'x25519'\n ? (args.slots as ReadonlyArray<X25519Slot>).map((s) => ({ epk: s.epk, wrap: s.wrap }))\n : (args.slots as ReadonlyArray<Mlkem768X25519Slot>).map((s) => ({\n kem_ct: s.kem_ct,\n wrap: s.wrap,\n }));\n const transcript: CanonicalCborValue = {\n scheme: 1,\n path: 'slots',\n aead: args.aead,\n kem: args.kem,\n nonce: args.nonce,\n slots,\n hashes_hash: args.hashesHash,\n };\n return labelledSha256(CARDANO_POE_SLOTS_TRANSCRIPT_PREFIX, encodeCanonicalCbor(transcript));\n}\n\n// SHA-256(\"cardano-poe-passphrase-transcript-v1\" || canonicalEncode(PASSPHRASE_TRANSCRIPT)).\n// PASSPHRASE_TRANSCRIPT is the closed six-key map (with `passphrase` itself a\n// closed sub-map) binding the header fields, the Argon2id parameters, the\n// normalization profile, and the item's hash claim into the in-ciphertext\n// commitment. There is NO `kem` key on this path. The `normalization` value is\n// the scheme-fixed profile constant, pinned into the transcript and never\n// serialised on the wire.\nexport function computePassphraseHash(args: {\n aead: string;\n nonce: Uint8Array;\n hashesHash: Uint8Array;\n salt: Uint8Array;\n params: { m: number; t: number; p: number };\n}): Uint8Array {\n const transcript: CanonicalCborValue = {\n scheme: 1,\n path: 'passphrase',\n aead: args.aead,\n nonce: args.nonce,\n hashes_hash: args.hashesHash,\n passphrase: {\n alg: 'argon2id',\n salt: args.salt,\n params: { m: args.params.m, t: args.params.t, p: args.params.p },\n normalization: CARDANO_POE_PW_NORM_PROFILE,\n },\n };\n return labelledSha256(CARDANO_POE_PASSPHRASE_TRANSCRIPT_PREFIX, encodeCanonicalCbor(transcript));\n}\n\n// Slot-set MAC: HMAC-SHA-256 keyed by an HKDF leaf of the CEK over the 32-byte\n// `slots_hash`. Pre-hashing the transcript only changes the HMAC message from\n// the full transcript to its SHA-256, leaving the CEK-keyed commitment intact.\n// The fixed 32-byte HKDF key structurally excludes the HMAC over-block-length\n// key ambiguity.\nexport function computeSlotsMac(args: { cek: Uint8Array; slotsHash: Uint8Array }): Uint8Array {\n const macKey = hkdfSha256({\n ikm: args.cek,\n salt: EMPTY_SALT,\n info: CARDANO_POE_HKDF_INFO_SLOTS_MAC,\n length: 32,\n });\n return hmac(sha256, macKey, args.slotsHash);\n}\n\n// Passphrase-path key commitment: HMAC-SHA-256 keyed by an HKDF leaf of the CEK\n// over the 32-byte `pw_hash`. Prepended inside the ciphertext blob (never an\n// on-chain field), so testing a passphrase guess requires possession of the\n// blob itself.\nexport function computePassphraseCommitment(args: {\n cek: Uint8Array;\n pwHash: Uint8Array;\n}): Uint8Array {\n const macKey = hkdfSha256({\n ikm: args.cek,\n salt: EMPTY_SALT,\n info: CARDANO_POE_HKDF_INFO_PASSPHRASE_MAC,\n length: 32,\n });\n return hmac(sha256, macKey, args.pwHash);\n}\n\n// Slots-path content key: HKDF-SHA-256(ikm=CEK, salt=enc.nonce, info=payload-v1).\n// The content is encrypted under this leaf of the CEK, never under the CEK\n// directly, so the wrap layer and the content layer never key the same primitive\n// on the same bytes. The envelope-unique nonce salt makes the key single-use,\n// which is what keeps the STREAM counter nonces collision-free.\nexport function slotsPayloadKey(args: { cek: Uint8Array; nonce: Uint8Array }): Uint8Array {\n return hkdfSha256({\n ikm: args.cek,\n salt: args.nonce,\n info: CARDANO_POE_HKDF_INFO_PAYLOAD,\n length: 32,\n });\n}\n\n// Passphrase-path content key: HKDF-SHA-256(ikm=CEK, salt=enc.nonce,\n// info=payload-passphrase-v1).\nexport function passphrasePayloadKey(args: { cek: Uint8Array; nonce: Uint8Array }): Uint8Array {\n return hkdfSha256({\n ikm: args.cek,\n salt: args.nonce,\n info: CARDANO_POE_HKDF_INFO_PAYLOAD_PASSPHRASE,\n length: 32,\n });\n}\n\n// Classical (x25519) per-slot KEK salt:\n// SHA-256(\"cardano-poe-x25519-kek-salt-v1\" || enc.nonce || epk || pub_R).\n// The slot's own ephemeral anchors the KEK to a slot-unique value, `pub_R`\n// binds it to the specific recipient (defeating confused-deputy relay of the\n// ephemeral against a different recipient), and the envelope-unique `enc.nonce`\n// anchors it to one envelope — a CSPRNG failure that repeats KEM randomness\n// across records degrades to mere linkability instead of reproducing a\n// (KEK, zero-nonce) wrap pair.\nexport function x25519KekSalt(args: {\n nonce: Uint8Array;\n epk: Uint8Array;\n pubR: Uint8Array;\n}): Uint8Array {\n return labelledSha256(CARDANO_POE_X25519_KEK_SALT_PREFIX, args.nonce, args.epk, args.pubR);\n}\n\n// Hybrid (mlkem768x25519) per-slot KEK salt:\n// SHA-256(\"cardano-poe-xwing-kek-salt-v1\" || enc.nonce || kem_ct || pub_R).\n// `kem_ct` is the slot's 1120-byte X-Wing ciphertext exactly as carried on the\n// wire and `pub_R` the 1216-byte X-Wing recipient public key — the same three\n// bindings as the classical salt, computed outside the KEM over the slot's own\n// wire bytes so it holds X-Wing as a black box.\nexport function xwingKekSalt(args: {\n nonce: Uint8Array;\n kemCt: Uint8Array;\n pubR: Uint8Array;\n}): Uint8Array {\n return labelledSha256(CARDANO_POE_XWING_KEK_SALT_PREFIX, args.nonce, args.kemCt, args.pubR);\n}\n","// Multi-recipient sealed-PoE wrap (age-style KEM-then-wrap slots + segmented\n// STREAM content). Wire-field names are fixed by the standard: scheme, aead,\n// kem, nonce, slots, slots_mac.\n//\n// Two KEM branches share one envelope shape, discriminated on the envelope-level\n// `kem` field:\n//\n// • kem: 'x25519' — classical age-style ECIES. Per-slot epk(32) + wrap(48).\n// • kem: 'mlkem768x25519' — X-Wing hybrid (ML-KEM-768 + X25519). Per-slot the\n// 1120-byte X-Wing ciphertext as a single byte\n// string (`kem_ct`) + wrap(48). No per-slot epk.\n//\n// The slot type is a discriminated union so every consumer is forced — at compile\n// time — to branch on the KEM before touching kem-specific fields.\n\nimport { randomBytes } from '@noble/ciphers/utils.js';\n\nimport { chacha20Poly1305Encrypt } from '../aead/chacha20-poly1305';\nimport {\n mlkem768x25519Encapsulate,\n MLKEM768X25519_ENC_LENGTH,\n MLKEM768X25519_ESEED_LENGTH,\n MLKEM768X25519_PUBLIC_KEY_LENGTH,\n} from '../kem/mlkem768x25519';\nimport { x25519Ecdh, x25519PublicKey } from '../kem/x25519';\nimport { hkdfSha256 } from '../kdf/hkdf';\n\nimport { EciesSealedPoeError } from './errors';\nimport { streamSeal } from './stream';\nimport {\n computeSlotsHash,\n computeSlotsMac,\n itemHashesHash,\n slotsPayloadKey,\n x25519KekSalt,\n xwingKekSalt,\n type ItemHashes,\n} from './transcript';\n\n// The envelope-level KEM discriminator.\nexport type SealedKem = 'x25519' | 'mlkem768x25519';\n\n// The sole registered content format under enc.scheme 1: ChaCha20-Poly1305 in\n// the 64 KiB segmented STREAM layout. Producers MUST emit this identifier\n// byte-exact.\nexport const SEALED_POE_AEAD = 'chacha20-poly1305-stream64k' as const;\n\n// HKDF info strings — fixed protocol labels for KEK derivation. Each doubles as\n// the per-slot wrap AEAD AAD (never empty AAD). Byte-length invariants enforce\n// that the SCREAMING_SNAKE constants stay in sync with the ASCII literals every\n// conformant verifier hashes against.\nexport const CARDANO_POE_HKDF_INFO_KEK: Uint8Array = new TextEncoder().encode('cardano-poe-kek-v1');\n// Hybrid (X-Wing) per-slot KEK label. Distinct from the classical label so a\n// KEK derived under one KEM can never collide with the other.\nexport const CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519: Uint8Array = new TextEncoder().encode(\n 'cardano-poe-kek-mlkem768x25519-v1',\n);\n\nconst ZERO_NONCE_12: Uint8Array = new Uint8Array(12);\nconst X25519_PUBLIC_KEY_LENGTH = 32 as const;\nconst X25519_SECRET_KEY_LENGTH = 32 as const;\nconst CEK_LENGTH = 32 as const;\nconst NONCE_LENGTH = 24 as const;\nconst WRAP_LENGTH = 48 as const;\nconst SLOTS_MAC_LENGTH = 32 as const;\n\nif (CARDANO_POE_HKDF_INFO_KEK.length !== 18) {\n throw new Error('CARDANO_POE_HKDF_INFO_KEK byte-length invariant violated (expected 18)');\n}\nif (CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519.length !== 33) {\n throw new Error(\n 'CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519 byte-length invariant violated (expected 33)',\n );\n}\nif (ZERO_NONCE_12.length !== 12) {\n throw new Error('ZERO_NONCE_12 byte-length invariant violated (expected 12)');\n}\n\n// Classical per-slot wire shape: { epk: bstr(32), wrap: bstr(48) }.\nexport interface X25519Slot {\n readonly epk: Uint8Array;\n readonly wrap: Uint8Array;\n}\n\n// Hybrid per-slot wire shape: { kem_ct: bstr(1120), wrap: bstr(48) }. `kem_ct`\n// is the X-Wing ciphertext as a single byte string. There is NO per-slot epk\n// (the X25519 ephemeral is the trailing 32 bytes of kem_ct) and NO per-slot kem\n// field — the KEM identifier is hoisted to envelope scope (every slot shares it).\nexport interface Mlkem768X25519Slot {\n readonly kem_ct: Uint8Array;\n readonly wrap: Uint8Array;\n}\n\n// Sealed envelope wire shape (discriminated on `kem`).\nexport type SealedEnvelope =\n | {\n readonly scheme: 1;\n readonly aead: typeof SEALED_POE_AEAD;\n readonly kem: 'x25519';\n readonly nonce: Uint8Array;\n readonly slots: ReadonlyArray<X25519Slot>;\n readonly slots_mac: Uint8Array;\n }\n | {\n readonly scheme: 1;\n readonly aead: typeof SEALED_POE_AEAD;\n readonly kem: 'mlkem768x25519';\n readonly nonce: Uint8Array;\n readonly slots: ReadonlyArray<Mlkem768X25519Slot>;\n readonly slots_mac: Uint8Array;\n };\n\nexport interface SealedPoeOutput {\n readonly envelope: SealedEnvelope;\n readonly ciphertext: Uint8Array;\n}\n\nexport interface WrapArgs {\n readonly plaintext: Uint8Array;\n // The item's plaintext-hash claim (registered algorithm id → digest bytes).\n // Its labelled digest is bound into the slots transcript, so the on-chain\n // slots_mac match also confirms the envelope belongs to this hash claim.\n readonly hashes: ItemHashes;\n readonly recipientPublicKeys: ReadonlyArray<Uint8Array>;\n // KEM branch selector. Defaults to 'x25519' for the classical path. The\n // recipient public-key length is validated against the chosen KEM.\n readonly kem?: SealedKem;\n readonly cek?: Uint8Array;\n readonly nonce?: Uint8Array;\n // Deterministic X25519 ephemeral scalars — x25519 branch only.\n readonly ephemeralSecrets?: ReadonlyArray<Uint8Array>;\n // Deterministic X-Wing encapsulation randomness (64 bytes each) — hybrid\n // branch only. One per recipient, parallel to recipientPublicKeys.\n readonly eseeds?: ReadonlyArray<Uint8Array>;\n readonly skipShuffle?: boolean;\n}\n\n// Anonymity invariant: wire ordering MUST NOT encode \"primary\n// recipient first\". A CSPRNG-keyed Fisher-Yates shuffle uniformly permutes the\n// slot array so trial-decrypt order leaks no recipient identity. The\n// slot-set HMAC is computed AFTER this shuffle, binding the on-wire order.\n//\n// Draw an unbiased index in [0, m) from a CSPRNG uint32 via rejection sampling.\n// A plain `u32 % m` skews toward the low residues whenever `m` does not divide\n// 2^32 evenly: the values [0, 2^32 mod m) each occur one extra time. This\n// function exists purely to produce a UNIFORM permutation, so the bias — though\n// cryptographically negligible — is exactly the property we cannot tolerate.\n// We reject any draw landing in the final partial block [limit, 2^32) and\n// redraw, leaving only the residues that map uniformly onto [0, m).\n// Exported so the rejection-bound arithmetic can be asserted directly in tests\n// without relying on a flaky statistical-distribution check.\nexport function uniformIndexBelow(m: number): number {\n // 2^32 mod m, computed without overflowing the 32-bit space.\n const limit = 0x1_0000_0000 - (0x1_0000_0000 % m);\n const buf = new Uint32Array(1);\n let x: number;\n do {\n crypto.getRandomValues(buf);\n x = buf[0] as number;\n } while (x >= limit);\n return x % m;\n}\n\nfunction csprngShuffle<T>(arr: T[]): void {\n for (let i = arr.length - 1; i > 0; i--) {\n const j = uniformIndexBelow(i + 1);\n const tmp = arr[i] as T;\n arr[i] = arr[j] as T;\n arr[j] = tmp;\n }\n}\n\n// Wrap the CEK for one classical recipient: age-style ECIES stanza with the\n// labelled-hash KEK salt binding nonce, epk, and pub_R.\nfunction wrapSlotX25519(args: {\n pubR: Uint8Array;\n privEph: Uint8Array | undefined;\n cek: Uint8Array;\n nonce: Uint8Array;\n slotIdx: number;\n}): X25519Slot {\n const privEph = args.privEph ?? randomBytes(X25519_SECRET_KEY_LENGTH);\n if (privEph.length !== X25519_SECRET_KEY_LENGTH) {\n throw new EciesSealedPoeError(\n 'INVALID_EPHEMERAL_SECRET_LENGTH',\n `ephemeralSecrets[${args.slotIdx}] MUST be exactly ${X25519_SECRET_KEY_LENGTH} bytes, got ${privEph.length}`,\n );\n }\n const epk = x25519PublicKey({ secretKey: privEph });\n const shared = x25519Ecdh({ secretKey: privEph, theirPublicKey: args.pubR });\n const kek = hkdfSha256({\n ikm: shared,\n salt: x25519KekSalt({ nonce: args.nonce, epk, pubR: args.pubR }),\n info: CARDANO_POE_HKDF_INFO_KEK,\n length: 32,\n });\n // Per-slot wrap AAD MUST be the 18-byte ASCII literal of the KEK info\n // string (never empty AAD).\n const wrap = chacha20Poly1305Encrypt({\n key: kek,\n nonce: ZERO_NONCE_12,\n aad: CARDANO_POE_HKDF_INFO_KEK,\n plaintext: args.cek,\n });\n if (wrap.length !== WRAP_LENGTH) {\n throw new Error(`internal: wrap.length=${wrap.length}, expected ${WRAP_LENGTH}`);\n }\n return { epk, wrap };\n}\n\n// Wrap the CEK for one hybrid recipient: X-Wing encapsulation → HKDF → AEAD.\n// The KEK info label doubles as the wrap AEAD AAD, mirroring the classical path.\nfunction wrapSlotMlkem768X25519(args: {\n pubR: Uint8Array;\n eseed: Uint8Array | undefined;\n cek: Uint8Array;\n nonce: Uint8Array;\n}): Mlkem768X25519Slot {\n const { enc, ss } = mlkem768x25519Encapsulate({\n publicKey: args.pubR,\n ...(args.eseed !== undefined ? { eseed: args.eseed } : {}),\n });\n if (enc.length !== MLKEM768X25519_ENC_LENGTH) {\n throw new Error(`internal: enc.length=${enc.length}, expected ${MLKEM768X25519_ENC_LENGTH}`);\n }\n // The hybrid KEK salt binds the envelope nonce, the slot's own X-Wing\n // ciphertext, and the recipient public key, mirroring the classical salt: the\n // ciphertext anchors the KEK to a slot-unique value and `pub_R` binds it to\n // the specific recipient. It is computed outside the KEM, over the slot's wire\n // bytes, so it holds X-Wing as a black-box KEM.\n const kek = hkdfSha256({\n ikm: ss,\n salt: xwingKekSalt({ nonce: args.nonce, kemCt: enc, pubR: args.pubR }),\n info: CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519,\n length: 32,\n });\n const wrap = chacha20Poly1305Encrypt({\n key: kek,\n nonce: ZERO_NONCE_12,\n aad: CARDANO_POE_HKDF_INFO_KEK_MLKEM768X25519,\n plaintext: args.cek,\n });\n if (wrap.length !== WRAP_LENGTH) {\n throw new Error(`internal: wrap.length=${wrap.length}, expected ${WRAP_LENGTH}`);\n }\n return { kem_ct: enc, wrap };\n}\n\nexport function eciesSealedPoeWrap(args: WrapArgs): SealedPoeOutput {\n const { plaintext, recipientPublicKeys } = args;\n const kem: SealedKem = args.kem ?? 'x25519';\n const n = recipientPublicKeys.length;\n\n // The hash-claim digest is computed before any KEM/AEAD work: an item without\n // a content hash cannot be sealed (the ciphertext is bound to the plaintext\n // only through that digest).\n const hashesHash = itemHashesHash(args.hashes);\n\n // There is no fixed upper bound on slot count; the producer SDK polices the\n // per-record byte budget. Only the lower bound is enforced here.\n if (n < 1) {\n throw new EciesSealedPoeError(\n 'ENC_SLOTS_EMPTY',\n `recipientPublicKeys.length=${n} must be >= 1`,\n );\n }\n\n const expectedPubLen =\n kem === 'x25519' ? X25519_PUBLIC_KEY_LENGTH : MLKEM768X25519_PUBLIC_KEY_LENGTH;\n for (let i = 0; i < n; i++) {\n const pub = recipientPublicKeys[i];\n if (pub === undefined || pub.length !== expectedPubLen) {\n throw new EciesSealedPoeError(\n 'KEM_EPK_LENGTH_MISMATCH',\n `recipientPublicKeys[${i}] MUST be exactly ${expectedPubLen} bytes for kem='${kem}'`,\n );\n }\n }\n\n if (kem === 'x25519') {\n if (args.eseeds !== undefined) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n \"eseeds is an X-Wing (mlkem768x25519) override and MUST NOT be supplied for kem='x25519'\",\n );\n }\n if (args.ephemeralSecrets !== undefined && args.ephemeralSecrets.length !== n) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n `ephemeralSecrets.length=${args.ephemeralSecrets.length} must match recipientPublicKeys.length=${n}`,\n );\n }\n } else {\n if (args.ephemeralSecrets !== undefined) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n \"ephemeralSecrets is an X25519 override and MUST NOT be supplied for kem='mlkem768x25519'\",\n );\n }\n if (args.eseeds !== undefined) {\n if (args.eseeds.length !== n) {\n throw new EciesSealedPoeError(\n 'EPHEMERAL_SECRETS_COUNT_MISMATCH',\n `eseeds.length=${args.eseeds.length} must match recipientPublicKeys.length=${n}`,\n );\n }\n for (let i = 0; i < n; i++) {\n const eseed = args.eseeds[i]!;\n if (eseed.length !== MLKEM768X25519_ESEED_LENGTH) {\n throw new EciesSealedPoeError(\n 'INVALID_EPHEMERAL_SECRET_LENGTH',\n `eseeds[${i}] MUST be exactly ${MLKEM768X25519_ESEED_LENGTH} bytes, got ${eseed.length}`,\n );\n }\n }\n }\n }\n\n const cek = args.cek ?? randomBytes(CEK_LENGTH);\n const nonce = args.nonce ?? randomBytes(NONCE_LENGTH);\n if (cek.length !== CEK_LENGTH) {\n throw new EciesSealedPoeError(\n 'INVALID_CEK_LENGTH',\n `cek MUST be exactly ${CEK_LENGTH} bytes, got ${cek.length}`,\n );\n }\n if (nonce.length !== NONCE_LENGTH) {\n throw new EciesSealedPoeError(\n 'NONCE_LENGTH_MISMATCH',\n `nonce MUST be exactly ${NONCE_LENGTH} bytes, got ${nonce.length}`,\n );\n }\n\n let envelope: SealedEnvelope;\n if (kem === 'x25519') {\n const slots: X25519Slot[] = [];\n for (let i = 0; i < n; i++) {\n slots.push(\n wrapSlotX25519({\n pubR: recipientPublicKeys[i]!,\n privEph: args.ephemeralSecrets ? (args.ephemeralSecrets[i] as Uint8Array) : undefined,\n cek,\n nonce,\n slotIdx: i,\n }),\n );\n }\n // Anonymity invariant (see csprngShuffle comment). The transcript is built\n // AFTER the shuffle so the MAC binds the on-wire slot order.\n if (args.skipShuffle !== true) {\n csprngShuffle(slots);\n }\n const slotsHash = computeSlotsHash({\n aead: SEALED_POE_AEAD,\n kem: 'x25519',\n nonce,\n slots,\n hashesHash,\n });\n envelope = {\n scheme: 1,\n aead: SEALED_POE_AEAD,\n kem: 'x25519',\n nonce,\n slots,\n slots_mac: sizedSlotsMac(cek, slotsHash),\n };\n } else {\n const slots: Mlkem768X25519Slot[] = [];\n for (let i = 0; i < n; i++) {\n slots.push(\n wrapSlotMlkem768X25519({\n pubR: recipientPublicKeys[i]!,\n eseed: args.eseeds ? (args.eseeds[i] as Uint8Array) : undefined,\n cek,\n nonce,\n }),\n );\n }\n if (args.skipShuffle !== true) {\n csprngShuffle(slots);\n }\n const slotsHash = computeSlotsHash({\n aead: SEALED_POE_AEAD,\n kem: 'mlkem768x25519',\n nonce,\n slots,\n hashesHash,\n });\n envelope = {\n scheme: 1,\n aead: SEALED_POE_AEAD,\n kem: 'mlkem768x25519',\n nonce,\n slots,\n slots_mac: sizedSlotsMac(cek, slotsHash),\n };\n }\n\n // Content is encrypted under a derived `payload_key` (a separate HKDF leaf of\n // the CEK salted by the envelope-unique nonce), never under the CEK directly,\n // in the segmented STREAM format. There is no content AAD: the content binds\n // to the header transitively — payload_key derives from the CEK, and the CEK\n // is committed to the full header (including hashes_hash) by slots_mac.\n const ciphertext = streamSeal({\n payloadKey: slotsPayloadKey({ cek, nonce }),\n plaintext,\n });\n\n return { envelope, ciphertext };\n}\n\nfunction sizedSlotsMac(cek: Uint8Array, slotsHash: Uint8Array): Uint8Array {\n const slotsMac = computeSlotsMac({ cek, slotsHash });\n if (slotsMac.length !== SLOTS_MAC_LENGTH) {\n throw new Error(`internal: slots_mac.length=${slotsMac.length}, expected ${SLOTS_MAC_LENGTH}`);\n }\n return slotsMac;\n}\n","// cardano-poe-pw-norm-v1: the normative passphrase normalization profile.\n//\n// Two implementations MUST derive a byte-identical CEK from the same\n// passphrase, so the normalization applied before Argon2id is pinned, in\n// order:\n//\n// 1. Bound the raw input (a pre-KDF denial-of-service backstop).\n// 2. NFKC under the pinned Unicode 16.0.0 tables. Input the pinned tables\n// cannot normalize stably — an unpaired surrogate, or a code point that\n// Unicode 16.0 leaves unassigned (a later Unicode version may give it a\n// decomposition and silently change the derived key) — is rejected.\n// 3. Collapse every maximal run of White_Space characters to one U+0020.\n// 4. Trim leading/trailing U+0020.\n// 5. Reject the empty result — a whitespace-only passphrase normalizes to\n// zero bytes, which Argon2id would silently accept, keying the record to\n// a CEK any party can derive.\n// 6. UTF-8-encode; those bytes are the Argon2id password input.\n//\n// Every Unicode-sensitive step resolves against the pinned Unicode 16.0.0\n// data — the NFKC tables and the White_Space property both — never the host\n// engine, whose tables float with its Unicode version.\n\nimport { Nfkc16Error, isWhiteSpace16, nfkc16 } from '../unicode/nfkc16';\nimport { EciesSealedPoeError } from './errors';\n\n// Reference bound on the RAW UTF-8 byte length of a passphrase, enforced before\n// any normalization or hashing work. A deployment-pinned constant, not a wire\n// field; deployments MAY tighten it.\nexport const MAX_PASSPHRASE_INPUT_BYTES = 4096;\n\nconst UTF8 = new TextEncoder();\n\n// One code-point pass implementing profile steps 3 + 4: each maximal\n// White_Space run becomes a single U+0020, and a leading or trailing run is\n// dropped entirely (never emitted), which is exactly collapse-then-trim.\n// `isWhiteSpace16` is the pinned Unicode 16.0 White_Space property —\n// deliberately NOT JavaScript's `\\s`, which also matches U+FEFF, a character\n// the property (and therefore the profile) does not treat as whitespace.\nfunction collapseAndTrimWhiteSpace(input: string): string {\n let out = '';\n let pendingRun = false;\n for (const ch of input) {\n if (isWhiteSpace16(ch.codePointAt(0) as number)) {\n pendingRun = true;\n continue;\n }\n if (pendingRun && out.length > 0) {\n out += ' ';\n }\n pendingRun = false;\n out += ch;\n }\n return out;\n}\n\n// Apply the cardano-poe-pw-norm-v1 profile and return the exact Argon2id\n// password bytes. Throws PASSPHRASE_INPUT_TOO_LONG when the raw input exceeds\n// the pre-normalization bound, ENC_PASSPHRASE_UNNORMALIZABLE when the input\n// cannot normalize stably under Unicode 16.0 (an unpaired surrogate or an\n// unassigned code point), and ENC_PASSPHRASE_EMPTY when the normalized result\n// is the empty string.\nexport function normalizePassphrase(passphrase: string): Uint8Array {\n const rawBytes = UTF8.encode(passphrase);\n if (rawBytes.length > MAX_PASSPHRASE_INPUT_BYTES) {\n throw new EciesSealedPoeError(\n 'PASSPHRASE_INPUT_TOO_LONG',\n `passphrase raw UTF-8 length ${rawBytes.length} exceeds MAX_PASSPHRASE_INPUT_BYTES=${MAX_PASSPHRASE_INPUT_BYTES}`,\n );\n }\n let folded: string;\n try {\n folded = nfkc16(passphrase);\n } catch (error) {\n if (error instanceof Nfkc16Error) {\n throw new EciesSealedPoeError('ENC_PASSPHRASE_UNNORMALIZABLE', error.message, {\n cause: error,\n });\n }\n throw error;\n }\n const normalized = collapseAndTrimWhiteSpace(folded);\n if (normalized.length === 0) {\n throw new EciesSealedPoeError(\n 'ENC_PASSPHRASE_EMPTY',\n 'passphrase normalizes to the empty string',\n );\n }\n return UTF8.encode(normalized);\n}\n","// Label 309 v1 structural validator (the Part A structural-validation role).\n//\n// Pure function over the reassembled CBOR record body — performs no I/O,\n// opens no socket, verifies no signature cryptographically, decodes no\n// ciphertext. Chain resolution, URI fetching, decryption, and\n// confirmation-depth checks are the verifier's concern (the Part B role).\n// The transport chunk array is reassembled BEFORE this function runs (see\n// `carriage.ts`); the carriage codes (`CHUNK_TOO_LARGE`, the transport\n// `MALFORMED_CBOR` reuse) are emitted by that step, not here.\n//\n// Pipeline:\n// Step 1 Canonical CBOR decode — `decodeCanonicalCbor` surfaces malformed /\n// non-canonical / duplicate-key / indefinite-length inputs as the\n// single MALFORMED_CBOR code.\n// Step 2 Schema parse — the closed Zod shapes in `./schema.ts`; the mapper\n// below lifts each Zod issue to its canonical structural code.\n// Step 3 Domain checks — cross-field rules, registry membership, URI shape\n// (the offline CID profile), the encryption-envelope union\n// (typed scheme-1 vs the degrade-to-opaque reading), `sigs[i]`\n// COSE_Sign1 structural decode, `crit[]` shape, exact-integer\n// range enforcement.\n// Step 4 Result emission — every collected issue is sorted (path\n// segment-wise, registry-order tie-break) and the record is valid\n// iff no error-severity issue is present.\n//\n// The validator NEVER throws — failure paths route through the discriminated\n// `ValidationResult` union so callers handle errors as data, and its output\n// is deterministic for any given `(bytes, options)` pair.\n\nimport { z } from 'zod';\n\nimport {\n decodeCanonicalCbor,\n encodeCanonicalCbor,\n type CanonicalCborValue,\n} from '@cardanowall/crypto-core/cbor';\nimport { CoseVerifyError, decodeCoseSign1 } from '@cardanowall/crypto-core/cose';\n// The verifier resource bounds the sealed-PoE unwrap layer enforces. Importing\n// the same constants, rather than re-declaring them, makes the structural\n// validator and the unwrap layer default to identical thresholds. Both are\n// deployment-pinned reference values, not wire fields — `ValidatorOptions`\n// overrides them per deployment.\nimport { MAX_DECODED_ENVELOPE_BYTES, MAX_SLOTS } from '@cardanowall/crypto-core/sealed-poe';\n\nimport { SEVERITY, errorCodeRegistryIndex, type ErrorCode, type Severity } from './error-codes';\nimport {\n EncScheme1Schema,\n isExtensionKey,\n PoeRecordSchema,\n TOP_LEVEL_BASE_KEYS,\n type EncScheme1,\n type ItemEntry,\n type MerkleCommit,\n type PassphraseBlock,\n type PoeRecord,\n type SigEntry,\n type Slot,\n} from './schema';\n\n// =============================================================================\n// Registries (closed catalogue of this implementation)\n// =============================================================================\n\n// Content-hash algorithm registry. Map value = digest length.\nconst HASH_ALG_LENGTHS: Readonly<Record<string, number>> = {\n 'sha2-256': 32,\n 'blake2b-256': 32,\n};\n\n// Merkle list-commitment algorithm registry. Map value = root length.\nconst MERKLE_COMMIT_ALG_LENGTHS: Readonly<Record<string, number>> = {\n 'rfc9162-sha256': 32,\n};\n\n// Content-format (AEAD) registry. Value = the registered `enc.nonce` length.\nconst AEAD_NONCE_LENGTHS: Readonly<Record<string, number>> = {\n 'chacha20-poly1305-stream64k': 24,\n};\n\n// Unauthenticated-cipher family. An `enc.aead` naming any of these is rejected\n// with `UNAUTHENTICATED_CIPHER_FORBIDDEN` in EVERY role — a forbidden\n// primitive is a recognised hazard, not an unknown identifier, so it never\n// takes the degrade-to-opaque reading. Two arms:\n// - block-cipher modes with no integrity (`cbc`, `ctr`, `ecb`, `cfb`,\n// `ofb`) appearing as a delimited token, matching every key-size spelling\n// (`aes-cbc`, `aes-256-cbc`, `des-ede3-cbc`, …);\n// - legacy stream/block ciphers as a leading token (`rc4`, `des`, `3des`).\n// The token delimiters keep authenticated AEADs (`aes-256-gcm`,\n// `chacha20-poly1305-stream64k`) from matching.\nconst UNAUTHENTICATED_CIPHER_RE =\n /(?:^|[-_])(?:cbc|ctr|ecb|cfb|ofb)(?:[-_]|$)|^(?:rc4|des|3des)(?:[-_]|$)/i;\n\n// KEM registry, expressed as a per-KEM slot DESCRIPTOR. Each registered KEM\n// pins the exact recipient-slot shape:\n//\n// - x25519: `{ epk: bstr(32), wrap: bstr(48) }` — classical\n// ephemeral-static X25519.\n// - mlkem768x25519: `{ kem_ct: bstr(1120), wrap: bstr(48) }` — the X-Wing\n// hybrid; the encapsulation is a SINGLE 1120-byte byte string and there\n// is NO per-slot `epk` (the X25519 ephemeral is the trailing 32 bytes of\n// `kem_ct`).\n//\n// A descriptor declares the slot's ciphertext-bearing field and its exact\n// byte length; `wrap` is 48 bytes for every KEM (32-byte CEK + 16-byte AEAD\n// tag). The validator branches on the descriptor so adding a future KEM is a\n// registry edit, not a new code path.\ntype KemSlotField = 'epk' | 'kem_ct';\ninterface KemSlotDescriptor {\n readonly field: KemSlotField;\n readonly fieldLength: number;\n readonly wrapLength: number;\n}\nconst KEM_SLOT_DESCRIPTORS: Readonly<Record<string, KemSlotDescriptor>> = {\n x25519: { field: 'epk', fieldLength: 32, wrapLength: 48 },\n mlkem768x25519: { field: 'kem_ct', fieldLength: 1120, wrapLength: 48 },\n};\n\nconst KEM_FIELD_LENGTH_CODE: Readonly<Record<KemSlotField, ErrorCode>> = {\n epk: 'KEM_EPK_LENGTH_MISMATCH',\n kem_ct: 'KEM_CT_LENGTH_MISMATCH',\n};\n\n// Passphrase KDF registry.\nconst PASSPHRASE_KDF_ALGS: ReadonlySet<string> = new Set(['argon2id']);\n\n// Signature-algorithm registry: COSE `alg` labels. `-8` (EdDSA, pinned to\n// Ed25519) is the mandatory baseline; `-19` (Ed25519 fully-specified) is\n// verified identically when accepted. Anything else is tagged\n// `SIGNATURE_UNSUPPORTED` (info-severity) — signatures are optional, so an\n// unrecognised algorithm never fails the record by itself.\nconst KNOWN_SIG_ALG_IDS: ReadonlySet<number> = new Set([-8, -19]);\n\n// Every numeric wire field is a CBOR unsigned integer pinned to this range\n// and handled as an EXACT integer (the canonical decoder surfaces values\n// above 2^53 − 1 as `bigint`, so no precision is ever lost before the range\n// check rejects).\nconst UINT32_MAX = 0xffff_ffff;\n\n// =============================================================================\n// Options\n// =============================================================================\n\nexport type ValidatorRole = 'public' | 'recipient_or_strict';\n\nexport interface Argon2ParamsCeiling {\n readonly m: number;\n readonly t: number;\n readonly p: number;\n}\n\n// The reference deployment ceiling on Argon2id work factors — a verifier-side\n// denial-of-service backstop (a 64 GiB `m` must not be able to stall a\n// decrypt-on-paste consumer), enforced by default and distinct from the\n// normative floors. Ceilings are deployment policy, not a wire rule: override\n// per deployment, or pass `passphraseParamsCeiling: null` to disable.\nexport const DEFAULT_PASSPHRASE_PARAMS_CEILING: Argon2ParamsCeiling = Object.freeze({\n m: 2_097_152, // KiB = 2 GiB\n t: 16,\n p: 8,\n});\n\nexport interface ValidatorOptions {\n /**\n * Names of the critical extensions this validator implements. Default: the\n * empty set — a default-configured validator therefore fails every\n * `crit`-bearing record with `EXTENSION_UNSUPPORTED_CRITICAL`, by design.\n */\n readonly supportedCriticalExtensions?: ReadonlySet<string>;\n /**\n * The validation reading for dual-severity envelope dispositions.\n * `public` (default): an envelope under an unsupported `scheme` / `kem` /\n * `aead` degrades to opaque and `ENC_UNSUPPORTED` is informational.\n * `recipient_or_strict` (the recipient verifier and strict sealed-crypto\n * mode): the same condition is a hard reject — `ENC_UNSUPPORTED` escalates\n * to `error` and co-fires with the identifier-specific `UNSUPPORTED_*`\n * code.\n */\n readonly role?: ValidatorRole;\n /** Slot-count resource bound (reference bound 1024; deployments MAY tighten). */\n readonly maxSlots?: number;\n /** Decoded-envelope byte resource bound (reference bound 65536). */\n readonly maxEncEnvelopeBytes?: number;\n /**\n * Upper policy ceiling on Argon2id parameters\n * (`ENC_PASSPHRASE_PARAMS_EXCEED_POLICY`). Defaults to\n * `DEFAULT_PASSPHRASE_PARAMS_CEILING`; `null` disables the ceiling.\n */\n readonly passphraseParamsCeiling?: Argon2ParamsCeiling | null;\n}\n\ninterface ResolvedOptions {\n readonly supportedCriticalExtensions: ReadonlySet<string>;\n readonly role: ValidatorRole;\n readonly maxSlots: number;\n readonly maxEncEnvelopeBytes: number;\n readonly passphraseParamsCeiling: Argon2ParamsCeiling | null;\n}\n\nconst EMPTY_EXTENSION_SET: ReadonlySet<string> = new Set();\n\nfunction resolveOptions(options?: ValidatorOptions): ResolvedOptions {\n return {\n supportedCriticalExtensions: options?.supportedCriticalExtensions ?? EMPTY_EXTENSION_SET,\n role: options?.role ?? 'public',\n maxSlots: options?.maxSlots ?? MAX_SLOTS,\n maxEncEnvelopeBytes: options?.maxEncEnvelopeBytes ?? MAX_DECODED_ENVELOPE_BYTES,\n passphraseParamsCeiling:\n options?.passphraseParamsCeiling === undefined\n ? DEFAULT_PASSPHRASE_PARAMS_CEILING\n : options.passphraseParamsCeiling,\n };\n}\n\n// =============================================================================\n// Result types\n// =============================================================================\n\nexport interface ValidationIssue {\n /**\n * Segments from the record root: text map keys and integer array indices\n * (e.g. `[\"items\", 0, \"hashes\", \"sha2-256\"]`). A dotted string is a display\n * rendering only — the segment list is the API form, so map keys containing\n * `.` need no escaping.\n */\n readonly path: ReadonlyArray<string | number>;\n readonly code: ErrorCode;\n readonly severity: Severity;\n readonly message: string;\n}\n\nexport type ValidationResult =\n | {\n readonly valid: true;\n readonly record: PoeRecord;\n readonly warnings?: ReadonlyArray<ValidationIssue>;\n readonly info?: ReadonlyArray<ValidationIssue>;\n }\n | { readonly valid: false; readonly issues: ReadonlyArray<ValidationIssue> };\n\n// =============================================================================\n// Public entry point\n// =============================================================================\n\nexport function validatePoeRecord(bytes: Uint8Array, options?: ValidatorOptions): ValidationResult {\n const opts = resolveOptions(options);\n\n // Step 1 — canonical CBOR decode. Every decode failure surfaces as the\n // single MALFORMED_CBOR code: malformed/truncated bytes, indefinite-length\n // (streaming) encodings, non-canonical map-key ordering, duplicate map\n // keys, non-minimal integers, and invalid UTF-8. There is no separate\n // duplicate-key code — canonical-decode rejection covers it.\n let decoded: unknown;\n try {\n decoded = decodeCanonicalCbor(bytes);\n } catch (cause) {\n return {\n valid: false,\n issues: [\n {\n code: 'MALFORMED_CBOR',\n path: [],\n message: cause instanceof Error ? cause.message : String(cause),\n severity: 'error',\n },\n ],\n };\n }\n\n // Step 2 pre-guard — non-text map keys. Every map at a typed grammar\n // position is text-keyed; the canonical decoder surfaces a map carrying any\n // non-text key as a `Map` (an all-text-key map decodes to a plain object).\n // A `Map` is still a JS object, so an object schema run over it would read\n // its (absent) named properties and mis-report every required field as\n // missing — the violation is detected here instead and attributed at the\n // containing map as SCHEMA_TYPE_MISMATCH, foreclosing the parse the same\n // way any other unparseable shape does.\n const nonTextKeyIssues = collectNonTextKeyMapIssues(decoded);\n if (nonTextKeyIssues.length > 0) {\n return { valid: false, issues: sortIssues(nonTextKeyIssues) };\n }\n\n // Step 2 — schema parse. A failed parse forecloses the domain pass (there\n // is no typed record to walk); its issues are emitted sorted.\n const parse = PoeRecordSchema.safeParse(decoded);\n if (!parse.success) {\n return { valid: false, issues: sortIssues(mapZodIssues(parse.error.issues, decoded)) };\n }\n\n // Step 3 — domain checks. Issues of every severity are collected together;\n // no error-severity issue stops the walk.\n const record = parse.data;\n const issues: ValidationIssue[] = [];\n\n checkContentCommitmentPresence(record, issues);\n\n // `crit[]` shape rules run before the per-entry support check.\n const decodedTopKeys = topLevelKeysOf(decoded);\n checkCrit(record, decodedTopKeys, opts.supportedCriticalExtensions, issues);\n\n // Unknown top-level fields: keys outside the base set that match neither\n // extension-key namespace (typos, control-character keys).\n for (const key of decodedTopKeys) {\n if (TOP_LEVEL_BASE_KEYS.has(key)) continue;\n if (isExtensionKey(key)) continue;\n issues.push(issueOf('SCHEMA_UNKNOWN_FIELD', [key], `unknown top-level field: ${key}`));\n }\n\n const items = record.items ?? [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n checkItemHashes(item, i, issues);\n if (item.uris !== undefined) checkUris(item.uris, ['items', i, 'uris'], issues);\n if (item.enc !== undefined) checkItemEnc(item, i, opts, issues);\n }\n\n const merkle = record.merkle ?? [];\n for (let i = 0; i < merkle.length; i++) {\n checkMerkleCommit(merkle[i]!, i, issues);\n }\n\n if (record.sigs !== undefined) {\n if (record.sigs.length === 0) {\n issues.push(\n issueOf('SCHEMA_TYPE_MISMATCH', ['sigs'], 'sigs[] must be non-empty when present'),\n );\n }\n for (let i = 0; i < record.sigs.length; i++) {\n checkSigEntry(record.sigs[i]!, i, issues);\n }\n }\n\n // Step 4 — result emission. The full issue list is sorted once (path\n // segment-wise, registry-order tie-break); the record is valid iff no\n // error-severity issue is present, and warnings / info never fail it.\n const sorted = sortIssues(issues);\n if (sorted.some((issue) => issue.severity === 'error')) {\n return { valid: false, issues: sorted };\n }\n const warnings = sorted.filter((issue) => issue.severity === 'warning');\n const info = sorted.filter((issue) => issue.severity === 'info');\n const result: {\n valid: true;\n record: PoeRecord;\n warnings?: ReadonlyArray<ValidationIssue>;\n info?: ReadonlyArray<ValidationIssue>;\n } = { valid: true, record };\n if (warnings.length > 0) result.warnings = warnings;\n if (info.length > 0) result.info = info;\n return result;\n}\n\n// =============================================================================\n// Step 2 helpers — Zod issue → structural-code mapping\n// =============================================================================\n\n// Lift a Zod issue list to canonical structural issues. An\n// `unrecognized_keys` issue names every stray key of one closed map in a\n// single Zod issue; it is expanded here into one canonical issue per key,\n// attributed at the key itself — the same per-key attribution the domain\n// pass uses for closed maps it walks by hand.\nfunction mapZodIssues(\n zissues: ReadonlyArray<z.core.$ZodIssue>,\n decodedRoot?: unknown,\n): ValidationIssue[] {\n const out: ValidationIssue[] = [];\n for (const zissue of zissues) {\n if (zissue.code === 'unrecognized_keys') {\n for (const key of zissue.keys) {\n const path = [...(zissue.path as ReadonlyArray<string | number>), key];\n const code = unknownKeyCode(path);\n out.push(issueOf(code, path, `unrecognized key '${key}' in a closed map`));\n }\n continue;\n }\n out.push(mapZodIssue(zissue, decodedRoot));\n }\n return out;\n}\n\n// The canonical code for a stray key, by position: a stray key inside a\n// `sigs[i]` entry violates the sig-entry closed-map rule; everywhere else a\n// stray key in a closed map is the generic SCHEMA_UNKNOWN_FIELD. (Slot maps\n// never reach this dispatch — their schema is permissive and the KEM-driven\n// domain gate emits ENC_SLOT_INVALID_SHAPE for stray slot keys.)\nfunction unknownKeyCode(path: ReadonlyArray<string | number>): ErrorCode {\n if (path.length >= 2 && path[0] === 'sigs' && typeof path[1] === 'number') {\n return 'SIG_ENTRY_INVALID_SHAPE';\n }\n return 'SCHEMA_UNKNOWN_FIELD';\n}\n\n// Non-text-key detection over the typed grammar positions reachable from the\n// record root: the root map, each `items[i]` / `merkle[i]` / `sigs[i]` entry,\n// and the `hashes` / `enc` maps inside an item. Positions inside extension\n// values are deliberately NOT walked — extension values admit any CBOR value\n// the canonical profile allows, integer-keyed maps included. The interior of\n// a supported `enc` envelope is scanned by the envelope dispatch itself (the\n// opaque reading likewise admits arbitrary extension values).\nfunction collectNonTextKeyMapIssues(decoded: unknown): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const flag = (path: ReadonlyArray<string | number>): void => {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n path,\n 'CBOR map carries a non-text key where a text-keyed map is required',\n ),\n );\n };\n if (decoded instanceof Map) {\n flag([]);\n return issues;\n }\n if (decoded === null || typeof decoded !== 'object' || Array.isArray(decoded)) return issues;\n const record = decoded as Record<string, unknown>;\n for (const field of ['items', 'merkle', 'sigs'] as const) {\n const entries = record[field];\n if (!Array.isArray(entries)) continue;\n entries.forEach((entry, i) => {\n if (entry instanceof Map) {\n flag([field, i]);\n return;\n }\n if (field !== 'items' || entry === null || typeof entry !== 'object') return;\n const item = entry as Record<string, unknown>;\n if (item['hashes'] instanceof Map) flag([field, i, 'hashes']);\n if (item['enc'] instanceof Map) flag([field, i, 'enc']);\n });\n }\n return issues;\n}\n\nfunction mapZodIssue(zissue: z.core.$ZodIssue, decodedRoot?: unknown): ValidationIssue {\n const path = zissue.path as ReadonlyArray<string | number>;\n // Refinements with an explicit `params.code` win unconditionally — they are\n // the canonical taxonomy code attached at schema-definition time\n // (SUPERSEDES_TX_INVALID_LENGTH, ENC_SLOTS_MAC_INVALID_LENGTH, the salt\n // bounds).\n const explicit = (zissue as { params?: { code?: string } }).params?.code as ErrorCode | undefined;\n if (explicit !== undefined) {\n return issueOf(explicit, path, zissue.message);\n }\n\n const valueAtIssue = valueAtPath(decodedRoot, path);\n\n // A CBOR map carrying any non-text key decodes to a `Map` (an all-text-key\n // map decodes to a plain object), and every registered map position in the\n // grammar is text-keyed — so a `Map` anywhere a registered map is expected\n // is a non-text-key violation, reported as SCHEMA_TYPE_MISMATCH at the\n // containing map regardless of which position it sits in.\n if (valueAtIssue instanceof Map) {\n return issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n path,\n 'CBOR map carries a non-text key where a text-keyed map is required',\n );\n }\n\n // Path-based dispatch:\n // `sigs[i]…` → SIG_ENTRY_INVALID_SHAPE (the sig-entry closed-map rule)\n // a slot element or a field within a slot → ENC_SLOT_INVALID_SHAPE\n // `v` literal mismatch / missing → SCHEMA_INVALID_LITERAL vs\n // SCHEMA_MISSING_REQUIRED.\n const inSigsEntry = path.length >= 2 && path[0] === 'sigs' && typeof path[1] === 'number';\n\n // The typed envelope parse runs with the `enc` map as its root, so a slot\n // issue arrives with the relative path `slots[j]…`; `checkItemEnc` prefixes\n // the `items[i].enc` segments afterwards. (The top-level record parse never\n // descends into `enc` — the item schema holds it as `unknown` for the\n // typed-vs-opaque dispatch.)\n const isInSlotEntry = path.length >= 2 && path[0] === 'slots' && typeof path[1] === 'number';\n\n const isMissing = valueAtIssue === undefined;\n\n switch (zissue.code) {\n case 'invalid_type':\n if (isInSlotEntry) return issueOf('ENC_SLOT_INVALID_SHAPE', path, zissue.message);\n if (isMissing) {\n if (inSigsEntry) return issueOf('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issueOf('SCHEMA_MISSING_REQUIRED', path, zissue.message);\n }\n if (inSigsEntry) return issueOf('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issueOf('SCHEMA_TYPE_MISMATCH', path, zissue.message);\n case 'invalid_value':\n // `z.literal(1)` emits `invalid_value` for both a missing field AND a\n // present-but-wrong value; disambiguate via the runtime value.\n if (isMissing) return issueOf('SCHEMA_MISSING_REQUIRED', path, zissue.message);\n return issueOf('SCHEMA_INVALID_LITERAL', path, zissue.message);\n case 'invalid_union':\n case 'invalid_format':\n case 'too_big':\n case 'too_small':\n case 'invalid_key':\n case 'invalid_element':\n case 'custom':\n default:\n if (isInSlotEntry) return issueOf('ENC_SLOT_INVALID_SHAPE', path, zissue.message);\n if (inSigsEntry) return issueOf('SIG_ENTRY_INVALID_SHAPE', path, zissue.message);\n return issueOf('SCHEMA_TYPE_MISMATCH', path, zissue.message);\n }\n}\n\n// =============================================================================\n// Step 3 helpers — domain checks\n// =============================================================================\n\n// Content-commitment rule: a record MUST carry at least one of `items[]` or\n// `merkle[]` non-empty (SCHEMA_EMPTY_RECORD when both are empty or absent).\n// When exactly one of them is present-but-empty beside a non-empty sibling,\n// the empty array itself violates its `1*` cardinality.\nfunction checkContentCommitmentPresence(record: PoeRecord, issues: ValidationIssue[]): void {\n const itemsLen = record.items?.length ?? 0;\n const merkleLen = record.merkle?.length ?? 0;\n if (itemsLen === 0 && merkleLen === 0) {\n issues.push(\n issueOf(\n 'SCHEMA_EMPTY_RECORD',\n [],\n 'record must carry at least one of items[] or merkle[] non-empty',\n ),\n );\n return;\n }\n if (record.items !== undefined && itemsLen === 0) {\n issues.push(\n issueOf('SCHEMA_TYPE_MISMATCH', ['items'], 'items[] must be non-empty when present'),\n );\n }\n if (record.merkle !== undefined && merkleLen === 0) {\n issues.push(\n issueOf('SCHEMA_TYPE_MISMATCH', ['merkle'], 'merkle[] must be non-empty when present'),\n );\n }\n}\n\n// Hash-map: non-empty, registry membership, per-algorithm digest length.\nfunction checkItemHashes(item: ItemEntry, idx: number, issues: ValidationIssue[]): void {\n const entries = Object.entries(item.hashes);\n if (entries.length === 0) {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n ['items', idx, 'hashes'],\n 'hashes must be a non-empty CBOR map of <alg-id> -> <digest>',\n ),\n );\n return;\n }\n for (const [alg, digest] of entries) {\n if (!(alg in HASH_ALG_LENGTHS)) {\n issues.push(\n issueOf('UNSUPPORTED_HASH_ALG', ['items', idx, 'hashes', alg], `unknown hash alg: ${alg}`),\n );\n continue;\n }\n const expected = HASH_ALG_LENGTHS[alg]!;\n if (digest.length !== expected) {\n issues.push(\n issueOf(\n 'HASH_DIGEST_LENGTH_MISMATCH',\n ['items', idx, 'hashes', alg],\n `hashes['${alg}'] digest length ${digest.length} != ${expected}`,\n ),\n );\n }\n }\n}\n\n// URI shape: each entry is one absolute URI in a single text string.\nfunction checkUris(\n uris: ReadonlyArray<string>,\n basePath: ReadonlyArray<string | number>,\n issues: ValidationIssue[],\n): void {\n if (uris.length === 0) {\n issues.push(issueOf('SCHEMA_TYPE_MISMATCH', basePath, 'uris[] must be non-empty when present'));\n return;\n }\n uris.forEach((uri, ui) => checkOneUri(uri, [...basePath, ui], issues));\n}\n\nfunction checkOneUri(\n uri: string,\n path: ReadonlyArray<string | number>,\n issues: ValidationIssue[],\n): void {\n // Absolute URI, no fragment, scheme in `{ar://, ipfs://}`.\n if (uri.includes('#')) {\n issues.push(\n issueOf('INVALID_URI', path, \"URI contains a fragment identifier ('#'), which is forbidden\"),\n );\n return;\n }\n const sepIdx = uri.indexOf('://');\n if (sepIdx <= 0 || !/^[a-z][a-z0-9+.-]*$/i.test(uri.slice(0, sepIdx))) {\n issues.push(\n issueOf('INVALID_URI', path, 'URI is not absolute (missing scheme://hierarchical-part)'),\n );\n return;\n }\n // RFC 3986 §3.1: the scheme is case-insensitive, so case-fold the SCHEME\n // ONLY, then ALWAYS validate the body. The body is matched verbatim — a\n // base64url Arweave txid and a base58btc CID are case-significant.\n const scheme = uri.slice(0, sepIdx).toLowerCase();\n const rest = uri.slice(sepIdx + '://'.length);\n if (scheme === 'ar') {\n if (!/^[A-Za-z0-9_-]{43}$/.test(rest)) {\n issues.push(\n issueOf(\n 'INVALID_URI',\n path,\n 'ar:// URI does not match `^ar://[A-Za-z0-9_-]{43}$` (43-char base64url txid, no path/query/fragment)',\n ),\n );\n }\n return;\n }\n if (scheme === 'ipfs') {\n // Full offline CID parse (not a prefix heuristic).\n const slashIdx = rest.indexOf('/');\n const cid = slashIdx === -1 ? rest : rest.slice(0, slashIdx);\n if (!validateCidProfile(cid)) {\n issues.push(\n issueOf('INVALID_URI', path, 'ipfs:// URI is not a valid CID under the Label 309 profile'),\n );\n }\n return;\n }\n issues.push(\n issueOf('INVALID_URI', path, 'unsupported URI scheme; v1 PoE URI set is {ar://, ipfs://}'),\n );\n}\n\n// =============================================================================\n// Encryption envelope — the typed-vs-opaque union\n// =============================================================================\n//\n// `enc = enc-scheme-1 / enc-opaque`. The disposition is decided by identifier\n// support, never by shape success:\n//\n// - When `scheme`, `kem`, and `aead` are ALL supported identifiers, the\n// envelope is held to the full scheme-1 shape and key-path rules; an\n// envelope that fails them is rejected with its typed code, never\n// reclassified as opaque.\n// - When any of the three names an identifier this implementation does not\n// support, the envelope becomes OPAQUE: no shape, length, or key-path\n// rule is applied against an unknown identifier; the item is tagged\n// ENC_UNSUPPORTED (info in the public reading; error co-firing with the\n// identifier-specific UNSUPPORTED_* code in the recipient role / strict\n// sealed-crypto mode).\n// - Carve-out: an `aead` naming a forbidden unauthenticated cipher family\n// is rejected UNAUTHENTICATED_CIPHER_FORBIDDEN in every role — a\n// recognised hazard, not an unknown identifier.\n//\n// The content-hash binding (ENC_REQUIRES_CONTENT_HASH) inspects the item's\n// `hashes` map, not the envelope, so it applies even under an opaque\n// envelope.\n\nfunction checkItemEnc(\n item: ItemEntry,\n idx: number,\n opts: ResolvedOptions,\n issues: ValidationIssue[],\n): void {\n const encPath: ReadonlyArray<string | number> = ['items', idx, 'enc'];\n\n // Content-hash binding: an `enc`-bearing item MUST commit to at least one\n // REGISTERED content hash — the ciphertext is otherwise bound to no\n // plaintext digest. A presence check, not a non-empty check: `{md5: …}`\n // fails it (and MAY co-fire with UNSUPPORTED_HASH_ALG on the same item).\n const hasContentHash = Object.keys(item.hashes).some((alg) => alg in HASH_ALG_LENGTHS);\n if (!hasContentHash) {\n issues.push(\n issueOf(\n 'ENC_REQUIRES_CONTENT_HASH',\n encPath,\n 'item carries `enc` but `hashes` has no registered content-hash entry (sha2-256 or blake2b-256)',\n ),\n );\n }\n\n // The pre-guard has already rejected an `enc` that decoded to a `Map`\n // (non-text keys), so a well-typed envelope arrives here as a plain object.\n const rawEnc = item.enc;\n if (\n rawEnc === null ||\n typeof rawEnc !== 'object' ||\n Array.isArray(rawEnc) ||\n rawEnc instanceof Uint8Array\n ) {\n issues.push(issueOf('SCHEMA_TYPE_MISMATCH', encPath, 'enc must be a CBOR map'));\n return;\n }\n const enc = rawEnc as Record<string, unknown>;\n\n // Decoded-envelope byte resource bound — a generic decode limit that\n // applies in every reading, opaque included. Canonical decode → canonical\n // encode is byte-identical, so re-encoding the decoded envelope measures\n // exactly the wire bytes of the `enc` subtree.\n const envelopeBytes = encodeCanonicalCbor(rawEnc as CanonicalCborValue).length;\n if (envelopeBytes > opts.maxEncEnvelopeBytes) {\n issues.push(\n issueOf(\n 'ENC_ENVELOPE_TOO_LARGE',\n encPath,\n `decoded envelope is ${envelopeBytes} bytes; the resource bound is ${opts.maxEncEnvelopeBytes}`,\n ),\n );\n }\n\n // `scheme` is structurally required in BOTH readings, as a CBOR unsigned\n // integer (the opaque grammar admits any uint; the typed grammar pins 1).\n const scheme = enc['scheme'];\n if (scheme === undefined) {\n issues.push(\n issueOf('SCHEMA_MISSING_REQUIRED', [...encPath, 'scheme'], 'enc.scheme is required'),\n );\n return;\n }\n if (!isUint(scheme)) {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n [...encPath, 'scheme'],\n 'enc.scheme must be a CBOR unsigned integer',\n ),\n );\n return;\n }\n\n // Forbidden-cipher carve-out: rejected in every role, never opaque.\n const aead = enc['aead'];\n if (typeof aead === 'string' && UNAUTHENTICATED_CIPHER_RE.test(aead)) {\n issues.push(\n issueOf(\n 'UNAUTHENTICATED_CIPHER_FORBIDDEN',\n [...encPath, 'aead'],\n `'${aead}' is an unauthenticated cipher; Label 309 mandates an authenticated (AEAD) cipher`,\n ),\n );\n return;\n }\n\n // Unknown-envelope rule: collect every identifier outside the implemented\n // set. A non-text `kem` / `aead` is not an identifier at all — it is a type\n // violation of whichever reading applies, handled by the typed pass below.\n const kem = enc['kem'];\n const unsupported: Array<{ field: 'scheme' | 'kem' | 'aead'; code: ErrorCode; id: string }> = [];\n if (!(typeof scheme === 'number' && scheme === 1)) {\n unsupported.push({ field: 'scheme', code: 'UNSUPPORTED_ENVELOPE_SCHEME', id: String(scheme) });\n }\n if (typeof kem === 'string' && !(kem in KEM_SLOT_DESCRIPTORS)) {\n unsupported.push({ field: 'kem', code: 'UNSUPPORTED_KEM_ALG', id: kem });\n }\n if (typeof aead === 'string' && !(aead in AEAD_NONCE_LENGTHS)) {\n unsupported.push({ field: 'aead', code: 'UNSUPPORTED_AEAD_ALG', id: aead });\n }\n if (unsupported.length > 0) {\n // Degrade to opaque: the envelope is bounded metadata only. No shape,\n // length, nonce, slot, or key-path rule may be applied against an\n // unknown identifier.\n const named = unsupported.map((u) => `${u.field}=${u.id}`).join(', ');\n const message =\n `envelope uses identifiers this implementation does not support (${named}); ` +\n 'the envelope is opaque and only the content-hash claim is validated';\n if (opts.role === 'recipient_or_strict') {\n issues.push({ code: 'ENC_UNSUPPORTED', path: encPath, message, severity: 'error' });\n for (const u of unsupported) {\n issues.push(\n issueOf(u.code, [...encPath, u.field], `enc.${u.field} '${u.id}' is not supported`),\n );\n }\n } else {\n issues.push({ code: 'ENC_UNSUPPORTED', path: encPath, message, severity: 'info' });\n }\n return;\n }\n\n // Fully supported identifiers → the typed scheme-1 pass is mandatory.\n // Non-text-key maps inside the typed envelope (a slot, the passphrase\n // block, its params) are rejected first, at the containing map — the same\n // pre-guard rule the record level applies, scoped here because only the\n // typed reading constrains the envelope interior.\n const internalMapIssues = encInternalNonTextKeyIssues(enc, encPath);\n if (internalMapIssues.length > 0) {\n issues.push(...internalMapIssues);\n return;\n }\n const encParse = EncScheme1Schema.safeParse(rawEnc);\n if (!encParse.success) {\n for (const mapped of mapZodIssues(encParse.error.issues, rawEnc)) {\n issues.push({ ...mapped, path: [...encPath, ...mapped.path] });\n }\n return;\n }\n checkScheme1Envelope(encParse.data, rawEnc, encPath, opts, issues);\n}\n\n// Non-text-key maps at the typed envelope's interior positions: each slot,\n// the passphrase block, and its `params` map.\nfunction encInternalNonTextKeyIssues(\n enc: Record<string, unknown>,\n encPath: ReadonlyArray<string | number>,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const flag = (path: ReadonlyArray<string | number>): void => {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n path,\n 'CBOR map carries a non-text key where a text-keyed map is required',\n ),\n );\n };\n const slots = enc['slots'];\n if (Array.isArray(slots)) {\n slots.forEach((slot, i) => {\n if (slot instanceof Map) flag([...encPath, 'slots', i]);\n });\n }\n const passphrase = enc['passphrase'];\n if (passphrase instanceof Map) {\n flag([...encPath, 'passphrase']);\n } else if (passphrase !== null && typeof passphrase === 'object' && !Array.isArray(passphrase)) {\n const params = (passphrase as Record<string, unknown>)['params'];\n if (params instanceof Map) flag([...encPath, 'passphrase', 'params']);\n }\n return issues;\n}\n\nfunction checkScheme1Envelope(\n enc: EncScheme1,\n rawEnc: object,\n encPath: ReadonlyArray<string | number>,\n opts: ResolvedOptions,\n issues: ValidationIssue[],\n): void {\n // Nonce length is registered per content format (24 bytes for\n // chacha20-poly1305-stream64k). Checked only under a supported `aead` —\n // which is guaranteed on this path.\n const expectedNonceLen = AEAD_NONCE_LENGTHS[enc.aead]!;\n if (enc.nonce.length !== expectedNonceLen) {\n issues.push(\n issueOf(\n 'NONCE_LENGTH_MISMATCH',\n [...encPath, 'nonce'],\n `nonce length ${enc.nonce.length} != ${expectedNonceLen} for ${enc.aead}`,\n ),\n );\n }\n\n // Key-path cross-field rules. Exactly one of `slots` / `passphrase` is\n // present; `passphrase` forbids `kem`, `slots`, and `slots_mac`; `slots`\n // requires both `kem` and `slots_mac`; `slots_mac` binds nothing without\n // `slots`. Each independent rule emits its own code — they co-fire where\n // several apply.\n const hasSlots = enc.slots !== undefined;\n const hasSlotsMac = enc.slots_mac !== undefined;\n const hasPassphrase = enc.passphrase !== undefined;\n const hasKem = enc.kem !== undefined;\n\n if (hasPassphrase && (hasSlots || hasSlotsMac || hasKem)) {\n issues.push(\n issueOf(\n 'ENC_EXCLUSIVITY_VIOLATION',\n encPath,\n 'enc.passphrase is mutually exclusive with kem / slots / slots_mac; exactly one key path is allowed',\n ),\n );\n }\n if (hasSlots && !hasSlotsMac) {\n issues.push(\n issueOf('ENC_SLOTS_MAC_REQUIRED', encPath, 'enc.slots present but enc.slots_mac absent'),\n );\n }\n if (hasSlotsMac && !hasSlots) {\n issues.push(\n issueOf('ENC_SLOTS_REQUIRED', encPath, 'enc.slots_mac present but enc.slots absent'),\n );\n }\n if (hasSlots && !hasKem) {\n issues.push(issueOf('ENC_KEM_REQUIRED', encPath, 'enc.slots present but enc.kem absent'));\n }\n if (!hasSlots && !hasPassphrase) {\n issues.push(\n issueOf(\n 'ENC_NO_KEY_PATH',\n encPath,\n 'enc requires either slots or passphrase — no on-chain key path otherwise',\n ),\n );\n }\n\n if (hasSlots) {\n const slots = enc.slots!;\n if (slots.length < 1) {\n issues.push(\n issueOf('ENC_SLOTS_EMPTY', [...encPath, 'slots'], 'slots[] must carry at least one slot'),\n );\n } else if (slots.length > opts.maxSlots) {\n // Slot-count resource bound: reject before walking any slot, so a\n // hostile record cannot drive unbounded per-slot work.\n issues.push(\n issueOf(\n 'ENC_SLOTS_TOO_MANY',\n [...encPath, 'slots'],\n `slots length ${slots.length} exceeds the slot-count bound ${opts.maxSlots}`,\n ),\n );\n } else if (hasKem) {\n // The descriptor exists — `kem` is registered on this path.\n const descriptor = KEM_SLOT_DESCRIPTORS[enc.kem!]!;\n const rawSlotKeys = rawSlotKeySets(rawEnc);\n // Per-slot KEK uniqueness: the zero-nonce per-slot wrap is safe only\n // because each slot draws fresh KEM randomness; two slots sharing the\n // same encapsulation material would derive the same KEK. Reject the\n // repeat before any cryptographic layer would.\n const seenKemMaterial = new Set<string>();\n slots.forEach((slot, si) => {\n const slotPath = [...encPath, 'slots', si] as const;\n checkSlotShape(\n slot,\n rawSlotKeys[si] ?? new Set<string>(),\n descriptor,\n enc.kem!,\n slotPath,\n issues,\n );\n const material = descriptor.field === 'epk' ? slot.epk : slot.kem_ct;\n if (material !== undefined) {\n const key = bytesToHex(material);\n if (seenKemMaterial.has(key)) {\n issues.push(\n issueOf(\n 'ENC_SLOTS_DUPLICATE_KEM_MATERIAL',\n [...slotPath, descriptor.field],\n `slot ${si} ${descriptor.field} duplicates an earlier slot — per-slot KEK uniqueness is violated`,\n ),\n );\n } else {\n seenKemMaterial.add(key);\n }\n }\n });\n }\n }\n\n if (hasPassphrase) {\n checkPassphraseBlock(enc.passphrase!, [...encPath, 'passphrase'], opts, issues);\n }\n}\n\n// KEM-driven per-slot shape gate. The descriptor for the declared envelope\n// `kem` pins which ciphertext-bearing field MUST be present at what exact\n// length, and forbids everything else: the other KEM's field, any stray key\n// (a slot is a CLOSED 2-key map), and a missing required field all surface\n// as ENC_SLOT_INVALID_SHAPE. `rawKeys` is the slot's key set exactly as it\n// appeared on the wire, so the permissive slot schema cannot mask a foreign\n// field.\nconst SLOT_KEY_UNIVERSE: ReadonlySet<string> = new Set(['epk', 'kem_ct', 'wrap']);\n\nfunction checkSlotShape(\n slot: Slot,\n rawKeys: ReadonlySet<string>,\n descriptor: KemSlotDescriptor,\n kem: string,\n slotPath: ReadonlyArray<string | number>,\n issues: ValidationIssue[],\n): void {\n const foreignField: KemSlotField = descriptor.field === 'epk' ? 'kem_ct' : 'epk';\n if (rawKeys.has(foreignField)) {\n issues.push(\n issueOf(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, foreignField],\n `slot carries '${foreignField}' but kem='${kem}' expects '${descriptor.field}'`,\n ),\n );\n }\n for (const key of rawKeys) {\n if (!SLOT_KEY_UNIVERSE.has(key)) {\n issues.push(\n issueOf(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, key],\n `slot carries unexpected key '${key}'; a slot is a 2-key map {${descriptor.field}, wrap}`,\n ),\n );\n }\n }\n\n const ctField = descriptor.field === 'epk' ? slot.epk : slot.kem_ct;\n if (ctField === undefined) {\n issues.push(\n issueOf(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, descriptor.field],\n `slot for kem='${kem}' is missing required '${descriptor.field}'`,\n ),\n );\n } else if (ctField.length !== descriptor.fieldLength) {\n issues.push(\n issueOf(\n KEM_FIELD_LENGTH_CODE[descriptor.field],\n [...slotPath, descriptor.field],\n `slot.${descriptor.field} length ${ctField.length} != ${descriptor.fieldLength} for ${kem}`,\n ),\n );\n }\n\n if (slot.wrap === undefined) {\n issues.push(\n issueOf(\n 'ENC_SLOT_INVALID_SHAPE',\n [...slotPath, 'wrap'],\n `slot for kem='${kem}' is missing required 'wrap'`,\n ),\n );\n } else if (slot.wrap.length !== descriptor.wrapLength) {\n issues.push(\n issueOf(\n 'WRAP_LENGTH_MISMATCH',\n [...slotPath, 'wrap'],\n `slot.wrap length ${slot.wrap.length} != ${descriptor.wrapLength}`,\n ),\n );\n }\n}\n\n// Passphrase block: KDF registry membership, then the registered algorithm's\n// CLOSED parameter map with exact-integer range, floors, and the deployment\n// ceiling. Salt bounds are schema refinements and have already fired.\nfunction checkPassphraseBlock(\n pp: PassphraseBlock,\n ppPath: ReadonlyArray<string | number>,\n opts: ResolvedOptions,\n issues: ValidationIssue[],\n): void {\n if (!PASSPHRASE_KDF_ALGS.has(pp.alg)) {\n issues.push(\n issueOf(\n 'ENC_PASSPHRASE_ALG_UNSUPPORTED',\n [...ppPath, 'alg'],\n `unknown passphrase kdf alg: ${pp.alg}`,\n ),\n );\n return; // no algorithm-specific params rule can apply\n }\n\n // argon2id: `params` is the CLOSED map of exactly {m, t, p}.\n const paramsPath = [...ppPath, 'params'] as const;\n const params = pp.params;\n for (const key of Object.keys(params)) {\n if (key !== 'm' && key !== 't' && key !== 'p') {\n issues.push(\n issueOf(\n 'SCHEMA_UNKNOWN_FIELD',\n [...paramsPath, key],\n `unknown argon2id params field: ${key}`,\n ),\n );\n }\n }\n\n const floors = { m: 65_536, t: 3, p: 1 } as const;\n const ceiling = opts.passphraseParamsCeiling;\n for (const name of ['m', 't', 'p'] as const) {\n const value: unknown = params[name];\n if (value === undefined) {\n issues.push(\n issueOf(\n 'SCHEMA_MISSING_REQUIRED',\n [...paramsPath, name],\n `argon2id params.${name} is required`,\n ),\n );\n continue;\n }\n // Exact-integer discipline: values above 2^53 − 1 arrive as `bigint`,\n // so an out-of-range value is rejected without precision loss.\n if (!isUint(value)) {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n [...paramsPath, name],\n `argon2id params.${name} must be a CBOR unsigned integer`,\n ),\n );\n continue;\n }\n if (!uintWithin(value, 0, UINT32_MAX)) {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n [...paramsPath, name],\n `argon2id params.${name} exceeds the pinned wire range 0 .. 2^32 - 1`,\n ),\n );\n continue;\n }\n const num = Number(value);\n if (num < floors[name]) {\n issues.push(\n issueOf(\n 'ENC_PASSPHRASE_ARGON2_PARAMS_TOO_LOW',\n [...paramsPath, name],\n `argon2id requires ${name} >= ${floors[name]}`,\n ),\n );\n continue;\n }\n if (ceiling !== null && num > ceiling[name]) {\n issues.push(\n issueOf(\n 'ENC_PASSPHRASE_PARAMS_EXCEED_POLICY',\n [...paramsPath, name],\n `argon2id params.${name} = ${num} exceeds the deployment ceiling ${ceiling[name]}`,\n ),\n );\n }\n }\n}\n\n// Extract the per-slot RAW key sets from the decoded `enc` value, so the\n// closed-slot rule sees keys the permissive slot schema does not model. The\n// canonical decoder yields a plain object for a text-keyed CBOR map and a\n// `Map` for a map carrying any non-text key.\nfunction rawSlotKeySets(rawEnc: object): ReadonlyArray<ReadonlySet<string>> {\n const slots = (rawEnc as Record<string, unknown>)['slots'];\n if (!Array.isArray(slots)) return [];\n return slots.map((slot) => {\n const keys = new Set<string>();\n if (slot instanceof Map) {\n for (const k of slot.keys()) if (typeof k === 'string') keys.add(k);\n } else if (typeof slot === 'object' && slot !== null) {\n for (const k of Object.keys(slot as Record<string, unknown>)) keys.add(k);\n }\n return keys;\n });\n}\n\n// =============================================================================\n// Merkle commitments\n// =============================================================================\n\nfunction checkMerkleCommit(commit: MerkleCommit, idx: number, issues: ValidationIssue[]): void {\n const basePath: ReadonlyArray<string | number> = ['merkle', idx];\n if (!(commit.alg in MERKLE_COMMIT_ALG_LENGTHS)) {\n issues.push(\n issueOf(\n 'UNSUPPORTED_MERKLE_COMMIT_ALG',\n [...basePath, 'alg'],\n `unknown merkle commitment alg: ${commit.alg}`,\n ),\n );\n } else {\n const expected = MERKLE_COMMIT_ALG_LENGTHS[commit.alg]!;\n if (commit.root.length !== expected) {\n issues.push(\n issueOf(\n 'HASH_DIGEST_LENGTH_MISMATCH',\n [...basePath, 'root'],\n `merkle entry root length ${commit.root.length} != ${expected} for ${commit.alg}`,\n ),\n );\n }\n }\n\n // `leaf_count` is REQUIRED and pinned to `1 .. 2^32 − 1`, compared as an\n // exact integer: the decoder surfaces values above 2^53 − 1 as `bigint`,\n // so 2^53 + 1 cannot round to a boundary value before rejection. A\n // negative value is a CBOR type violation (nint where uint is required),\n // distinct from an out-of-range unsigned value.\n const leafCount = commit.leaf_count;\n if (!isUint(leafCount)) {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n [...basePath, 'leaf_count'],\n 'leaf_count must be a CBOR unsigned integer',\n ),\n );\n } else if (!uintWithin(leafCount, 1, UINT32_MAX)) {\n issues.push(\n issueOf(\n 'SCHEMA_MERKLE_LEAF_COUNT_INVALID',\n [...basePath, 'leaf_count'],\n `leaf_count ${String(leafCount)} is outside the pinned range 1 .. 2^32 - 1`,\n ),\n );\n }\n\n if (commit.uris !== undefined) {\n checkUris(commit.uris, [...basePath, 'uris'], issues);\n }\n}\n\n// =============================================================================\n// Record-level signature entries\n// =============================================================================\n\nfunction checkSigEntry(entry: SigEntry, idx: number, issues: ValidationIssue[]): void {\n // Path-2 `cose_key` private-material guard runs FIRST: a leaked private\n // scalar must be named even when the COSE_Sign1 is also malformed.\n if (entry.cose_key !== undefined) {\n const keyIssue = inspectCoseKey(entry.cose_key, idx);\n if (keyIssue !== null) {\n issues.push(keyIssue);\n return;\n }\n }\n\n let cose: ReturnType<typeof decodeCoseSign1>;\n try {\n cose = decodeCoseSign1(entry.cose_sign1);\n } catch (cause) {\n issues.push(\n issueOf(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', idx],\n cause instanceof CoseVerifyError || cause instanceof Error ? cause.message : String(cause),\n ),\n );\n return;\n }\n\n // Detached-only: the COSE_Sign1 payload MUST be CBOR null. An attached\n // payload — even zero-length — is rejected; a producer chaining a CIP-30\n // signData result must null the payload before embedding.\n if (cose.payload !== null) {\n issues.push(\n issueOf(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', idx],\n 'COSE_Sign1 payload must be null (detached); attached form forbidden',\n ),\n );\n return;\n }\n\n // Signature-algorithm registry check (info severity — signatures are\n // optional, so an unrecognised algorithm never fails the record alone).\n const alg = cose.protectedHeader.get(1);\n if (typeof alg !== 'number' || !KNOWN_SIG_ALG_IDS.has(alg)) {\n issues.push(\n issueOf(\n 'SIGNATURE_UNSUPPORTED',\n ['sigs', idx],\n `COSE_Sign1 protected alg ${String(alg)} not in {-8, -19}`,\n ),\n );\n }\n\n // Path-1 (32-byte protected-header `kid`) and path-2 (`cose_key` sidecar)\n // are mutually exclusive.\n const protectedKid = cose.protectedHeader.get(4);\n if (\n protectedKid instanceof Uint8Array &&\n protectedKid.length === 32 &&\n entry.cose_key !== undefined\n ) {\n issues.push(\n issueOf(\n 'SIG_ENTRY_KID_COSE_KEY_CONFLICT',\n ['sigs', idx],\n 'sigs[i] carries both a 32-byte protected `kid` (path 1) and an inline `cose_key` (path 2); paths are mutually exclusive',\n ),\n );\n }\n}\n\n// COSE_Key inspector (path-2 `sigs[i].cose_key` blob). Two structural checks:\n// 1. Private-material guard (FIRST). COSE_Key label `-4` (the private\n// scalar `d` for OKP / EC2 per RFC 9052 §7.1) → SIG_PRIVATE_KEY_LEAKED.\n// Publishing a private key on the permanent ledger is catastrophic and\n// irreversible, so this is a load-bearing producer-side preflight.\n// 2. Positive-shape guard: `kty = 1` (OKP), `crv = 6` (Ed25519), and a\n// 32-byte `-2` (x). Any failure → MALFORMED_SIG_COSE_SIGN1.\nfunction inspectCoseKey(keyBytes: Uint8Array, i: number): ValidationIssue | null {\n let decoded: unknown;\n try {\n decoded = decodeCanonicalCbor(keyBytes);\n } catch (cause) {\n return issueOf(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key failed to decode as cbor<COSE_Key>: ${cause instanceof Error ? cause.message : String(cause)}`,\n );\n }\n\n // A COSE_Key map is int-keyed, so the canonical decoder surfaces it as a\n // `Map`; a text-keyed look-alike arrives as a plain object and fails the\n // label lookups below.\n const getLabel = (label: number): unknown => {\n if (decoded instanceof Map) return decoded.get(label);\n return undefined;\n };\n const hasLabel = (label: number): boolean => {\n if (decoded instanceof Map) return decoded.has(label);\n return false;\n };\n\n if (hasLabel(-4)) {\n return issueOf(\n 'SIG_PRIVATE_KEY_LEAKED',\n ['sigs', i, 'cose_key'],\n 'cose_key carries COSE_Key private-key material (label -4, the OKP/EC2 private scalar d); publishing a private key on the permanent ledger is forbidden',\n );\n }\n\n const kty = getLabel(1);\n if (kty !== 1) {\n return issueOf(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key COSE_Key kty (label 1) must be 1 (OKP); got ${String(kty)}`,\n );\n }\n const crv = getLabel(-1);\n if (crv !== 6) {\n return issueOf(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key COSE_Key crv (label -1) must be 6 (Ed25519); got ${String(crv)}`,\n );\n }\n const x = getLabel(-2);\n if (!(x instanceof Uint8Array) || x.length !== 32) {\n const got = x instanceof Uint8Array ? `${x.length}-byte bstr` : typeof x;\n return issueOf(\n 'MALFORMED_SIG_COSE_SIGN1',\n ['sigs', i, 'cose_key'],\n `sigs[${i}].cose_key COSE_Key label -2 must be a 32-byte byte string (Ed25519 public key); got ${got}`,\n );\n }\n return null;\n}\n\n// =============================================================================\n// `crit[]` shape + critical-extension support\n// =============================================================================\n\nfunction checkCrit(\n record: PoeRecord,\n decodedTopKeys: ReadonlySet<string>,\n supportedCriticalExtensions: ReadonlySet<string>,\n issues: ValidationIssue[],\n): void {\n if (!Array.isArray(record.crit)) return;\n // `crit` has `1*` cardinality: an empty array is a malformed shape.\n if (record.crit.length === 0) {\n issues.push(\n issueOf(\n 'SCHEMA_TYPE_MISMATCH',\n ['crit'],\n 'crit[] must carry at least one entry when present',\n ),\n );\n return;\n }\n const seen = new Set<string>();\n for (let i = 0; i < record.crit.length; i++) {\n const critName = record.crit[i]!;\n let reason: string | null = null;\n if (TOP_LEVEL_BASE_KEYS.has(critName)) {\n reason = `'${critName}' is a base key and MUST NOT appear in crit[]`;\n } else if (!isExtensionKey(critName)) {\n reason = `'${critName}' does not match the extension-key form (^x-.+ or ^[a-z]+-.+, no control characters)`;\n } else if (!decodedTopKeys.has(critName)) {\n reason = `'${critName}' is named in crit but absent from the record map`;\n } else if (seen.has(critName)) {\n reason = `'${critName}' appears more than once in crit[]`;\n }\n seen.add(critName);\n if (reason !== null) {\n issues.push(issueOf('CRIT_SHAPE_INVALID', ['crit', i], reason));\n continue;\n }\n // Shape-valid entry: accepted iff this validator implements the named\n // extension. The default supported set is empty, so a default-configured\n // validator fails every `crit`-bearing record — by design.\n if (!supportedCriticalExtensions.has(critName)) {\n issues.push(\n issueOf(\n 'EXTENSION_UNSUPPORTED_CRITICAL',\n ['crit', i],\n `crit lists extension '${critName}' that this validator does not implement`,\n ),\n );\n }\n }\n}\n\nfunction topLevelKeysOf(decoded: unknown): Set<string> {\n if (decoded === null || typeof decoded !== 'object') return new Set();\n if (decoded instanceof Map) {\n const out = new Set<string>();\n for (const k of decoded.keys()) {\n if (typeof k === 'string') out.add(k);\n }\n return out;\n }\n return new Set(Object.keys(decoded as Record<string, unknown>));\n}\n\n// =============================================================================\n// Label 309 CID profile\n// =============================================================================\n//\n// Accept CIDv0 (`Qm` prefix, 46-char base58btc, sha2-256 multihash) and\n// CIDv1 (multibase prefix + version 0x01 + codec + multihash) per the\n// closed profile:\n// - Multibase: b, B, f, F, z\n// - Multicodec: 0x55 (raw), 0x70 (dag-pb), 0x71 (dag-cbor)\n// - Multihash: 0x12 (sha2-256, 32 B), 0xb220 (blake2b-256, 32 B)\n//\n// Returns true iff the CID conforms to the Label 309 profile.\n\nconst ACCEPTED_CIDV1_MULTIBASE: ReadonlySet<string> = new Set(['b', 'B', 'f', 'F', 'z']);\n\nconst ACCEPTED_MULTICODECS: ReadonlySet<number> = new Set([0x55, 0x70, 0x71]);\n\n// Multihash table: code → digest length (bytes).\nconst ACCEPTED_MULTIHASHES: ReadonlyMap<number, number> = new Map([\n [0x12, 32],\n [0xb220, 32],\n]);\n\nexport function validateCidProfile(cid: string): boolean {\n if (cid.length === 0) return false;\n // CIDv0: a base58btc-encoded sha2-256 multihash. Decode the WHOLE string\n // and verify the multihash prefix (0x12 = sha2-256, 0x20 = 32-byte digest)\n // and total length (34 bytes); a `Qm` prefix alone is not sufficient.\n if (cid.startsWith('Qm')) {\n let decoded: Uint8Array;\n try {\n decoded = decodeBase58btc(cid);\n } catch {\n return false;\n }\n return decoded.length === 34 && decoded[0] === 0x12 && decoded[1] === 0x20;\n }\n // CIDv1: multibase + binary CID body.\n const mbPrefix = cid[0]!;\n if (!ACCEPTED_CIDV1_MULTIBASE.has(mbPrefix)) return false;\n let bytes: Uint8Array;\n try {\n bytes = decodeMultibase(mbPrefix, cid.slice(1));\n } catch {\n return false;\n }\n if (bytes.length < 4) return false;\n // CIDv1 layout: <version varint> <multicodec varint> <multihash>\n const versionParse = readVarint(bytes, 0);\n if (versionParse === null || versionParse.value !== 1) return false;\n const codecParse = readVarint(bytes, versionParse.next);\n if (codecParse === null) return false;\n if (!ACCEPTED_MULTICODECS.has(codecParse.value)) return false;\n const mhParse = readVarint(bytes, codecParse.next);\n if (mhParse === null) return false;\n const lenParse = readVarint(bytes, mhParse.next);\n if (lenParse === null) return false;\n const digestLen = lenParse.value;\n const expectedLen = ACCEPTED_MULTIHASHES.get(mhParse.value);\n if (expectedLen === undefined || digestLen !== expectedLen) return false;\n if (lenParse.next + digestLen !== bytes.length) return false;\n return true;\n}\n\nfunction readVarint(bytes: Uint8Array, start: number): { value: number; next: number } | null {\n let value = 0;\n let shift = 0;\n let i = start;\n while (i < bytes.length) {\n const b = bytes[i]!;\n value |= (b & 0x7f) << shift;\n i++;\n if ((b & 0x80) === 0) return { value, next: i };\n shift += 7;\n if (shift > 28) return null; // overflow guard; the profile uses ≤ 16-bit codes\n }\n return null;\n}\n\n// Multibase decoders for the closed set the CID profile admits.\nfunction decodeMultibase(prefix: string, body: string): Uint8Array {\n switch (prefix) {\n case 'b':\n return decodeBase32(body.toLowerCase(), 'rfc4648-lower');\n case 'B':\n return decodeBase32(body.toUpperCase(), 'rfc4648-upper');\n case 'f':\n return decodeBase16(body.toLowerCase());\n case 'F':\n return decodeBase16(body.toUpperCase());\n case 'z':\n return decodeBase58btc(body);\n default:\n throw new Error(`unsupported multibase prefix ${prefix}`);\n }\n}\n\nconst BASE16_LOWER = '0123456789abcdef';\nconst BASE16_UPPER = '0123456789ABCDEF';\n\nfunction decodeBase16(s: string): Uint8Array {\n if (s.length % 2 !== 0) throw new Error('base16: odd-length');\n const out = new Uint8Array(s.length / 2);\n const alphabet = s === s.toLowerCase() ? BASE16_LOWER : BASE16_UPPER;\n for (let i = 0; i < out.length; i++) {\n const hi = alphabet.indexOf(s[i * 2]!);\n const lo = alphabet.indexOf(s[i * 2 + 1]!);\n if (hi < 0 || lo < 0) throw new Error(`base16: non-hex char at ${i * 2}`);\n out[i] = (hi << 4) | lo;\n }\n return out;\n}\n\nconst BASE32_RFC4648_LOWER = 'abcdefghijklmnopqrstuvwxyz234567';\nconst BASE32_RFC4648_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\nfunction decodeBase32(s: string, variant: 'rfc4648-lower' | 'rfc4648-upper'): Uint8Array {\n const alphabet = variant === 'rfc4648-lower' ? BASE32_RFC4648_LOWER : BASE32_RFC4648_UPPER;\n // Multibase strips padding per spec; accept either form for robustness.\n const trimmed = s.replace(/=+$/, '');\n const out: number[] = [];\n let buf = 0;\n let bits = 0;\n for (const ch of trimmed) {\n const idx = alphabet.indexOf(ch);\n if (idx < 0) throw new Error(`base32: invalid char '${ch}'`);\n buf = (buf << 5) | idx;\n bits += 5;\n if (bits >= 8) {\n bits -= 8;\n out.push((buf >> bits) & 0xff);\n }\n }\n return Uint8Array.from(out);\n}\n\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\nfunction decodeBase58btc(s: string): Uint8Array {\n if (s.length === 0) return new Uint8Array(0);\n let zeros = 0;\n while (zeros < s.length && s[zeros] === '1') zeros++;\n const size = Math.floor(((s.length - zeros) * 733) / 1000) + 1;\n const b256 = new Uint8Array(size);\n let length = 0;\n for (let i = zeros; i < s.length; i++) {\n const ch = s[i]!;\n const carryIdx = BASE58_ALPHABET.indexOf(ch);\n if (carryIdx < 0) throw new Error(`base58: invalid char '${ch}'`);\n let carry = carryIdx;\n let k = 0;\n for (let j = size - 1; (carry !== 0 || k < length) && j >= 0; j--, k++) {\n carry += 58 * b256[j]!;\n b256[j] = carry % 256;\n carry = Math.floor(carry / 256);\n }\n length = k;\n }\n let it = size - length;\n while (it < size && b256[it] === 0) it++;\n const out = new Uint8Array(zeros + (size - it));\n let j = zeros;\n while (it < size) {\n out[j++] = b256[it++]!;\n }\n return out;\n}\n\n// Hex rendering for byte-equality keys (the duplicate-KEM-material set).\nfunction bytesToHex(bytes: Uint8Array): string {\n let out = '';\n for (const b of bytes) out += b.toString(16).padStart(2, '0');\n return out;\n}\n\n// =============================================================================\n// Exact-integer helpers\n// =============================================================================\n\n// A CBOR unsigned integer as the canonical decoder surfaces it: a\n// non-negative `number` for values up to 2^53 − 1, a non-negative `bigint`\n// above (exact in both representations). A negative value is a different\n// CBOR major type and is never a uint.\nfunction isUint(value: unknown): value is number | bigint {\n if (typeof value === 'number') return Number.isInteger(value) && value >= 0;\n if (typeof value === 'bigint') return value >= 0n;\n return false;\n}\n\nfunction uintWithin(value: number | bigint, min: number, max: number): boolean {\n if (typeof value === 'bigint') return value >= BigInt(min) && value <= BigInt(max);\n return value >= min && value <= max;\n}\n\n// =============================================================================\n// Issue construction and deterministic ordering\n// =============================================================================\n\nfunction issueOf(\n code: ErrorCode,\n path: ReadonlyArray<string | number>,\n message: string,\n): ValidationIssue {\n return { code, path, message, severity: SEVERITY[code] };\n}\n\nconst PATH_UTF8 = new TextEncoder();\n\n// Bytewise comparison of the UTF-8 encodings — the only collation that is\n// byte-stable across runs and across language implementations (no locale\n// tables, no UTF-16 code-unit artefacts for non-BMP keys).\nfunction compareTextSegments(a: string, b: string): number {\n const ab = PATH_UTF8.encode(a);\n const bb = PATH_UTF8.encode(b);\n const n = Math.min(ab.length, bb.length);\n for (let i = 0; i < n; i++) {\n const d = ab[i]! - bb[i]!;\n if (d !== 0) return d;\n }\n return ab.length - bb.length;\n}\n\n// Segment-wise path order: integer segments compare numerically, text\n// segments compare by UTF-8 bytes, an integer segment orders before a text\n// segment where the kinds differ, and a strict prefix orders before its\n// extensions. Issues on an identical path tie-break by the position of their\n// code in the canonical error-code registry.\nfunction compareIssues(a: ValidationIssue, b: ValidationIssue): number {\n const ap = a.path;\n const bp = b.path;\n const n = Math.min(ap.length, bp.length);\n for (let i = 0; i < n; i++) {\n const x = ap[i]!;\n const y = bp[i]!;\n const xIsNum = typeof x === 'number';\n const yIsNum = typeof y === 'number';\n if (xIsNum !== yIsNum) return xIsNum ? -1 : 1;\n if (xIsNum && yIsNum) {\n if (x !== y) return (x as number) < (y as number) ? -1 : 1;\n } else {\n const d = compareTextSegments(x as string, y as string);\n if (d !== 0) return d;\n }\n }\n if (ap.length !== bp.length) return ap.length - bp.length;\n return errorCodeRegistryIndex(a.code) - errorCodeRegistryIndex(b.code);\n}\n\nfunction sortIssues(issues: ReadonlyArray<ValidationIssue>): ValidationIssue[] {\n return [...issues].sort(compareIssues);\n}\n\nfunction valueAtPath(root: unknown, path: ReadonlyArray<string | number>): unknown {\n let cur: unknown = root;\n for (const seg of path) {\n if (cur === null || cur === undefined) return undefined;\n if (cur instanceof Map) {\n cur = cur.get(seg);\n continue;\n }\n if (typeof cur !== 'object') return undefined;\n cur = (cur as Record<string | number, unknown>)[seg];\n }\n return cur;\n}\n"]}
|