{
  "all_vectors_discriminate": true,
  "conformance_rule": "for two inputs differing ONLY in mlkem_pk, a conformant (MAL-BIND-K-PK) combiner produces different KEKs; a combiner that omits the pk produces equal KEKs (FAIL).",
  "how_to_use": "compute your KEK on inputA and inputB (identical except mlkem_pk); PASS iff they differ.",
  "module": "pqc_binding_conformance_kat",
  "n_standards": 4,
  "purpose": "portable conformance test: does a combiner bind the recipient ML-KEM public key?",
  "real_mlkem_anchor": {
    "anchor_ok": true,
    "binding_discriminates": true,
    "keys_differ": true,
    "nonbinding_collides": true,
    "real_crypto": true
  },
  "rows": [
    {
      "fixed_combiner": "PASS (binds pk)",
      "kdf": "SHA3-256",
      "spec_combiner": "FAIL (omits pk)",
      "standard": "LAMPS Composite ML-KEM",
      "vector_discriminates": true
    },
    {
      "fixed_combiner": "PASS (binds pk)",
      "kdf": "SHA3-256",
      "spec_combiner": "FAIL (omits pk)",
      "standard": "OpenPGP RFC 9980",
      "vector_discriminates": true
    },
    {
      "fixed_combiner": "PASS (binds pk)",
      "kdf": "HKDF-SHA256",
      "spec_combiner": "FAIL (omits pk)",
      "standard": "CMS KEMRecipientInfo RFC 9629",
      "vector_discriminates": true
    },
    {
      "fixed_combiner": "PASS (binds pk)",
      "kdf": "KMAC",
      "spec_combiner": "FAIL (omits pk)",
      "standard": "JOSE/COSE PQ-KEM",
      "vector_discriminates": true
    }
  ],
  "self_test": "each vector is confirmed to FAIL a reference non-binding combiner and PASS a reference binding combiner (so the vector genuinely discriminates), across SHA3-256/HKDF/KMAC.",
  "sprint": 140,
  "status": "positive remediation-verification artifact for the ecosystem. Findings on third-party constructions remain RED candidates (human+counsel; never auto-promoted). No legal/novelty/FTO/essentiality/price conclusion."
}
