Role-attestation profile requirement map

Copy Markdown View Source

This map traces every normative REQ-RA1-* requirement in spec/bap-role-attestation-v1.md to executable evidence or an explicit downstream/release gate. The certified profile corpus is revision 1 (40 cases) at priv/conformance/attestation-profiles/role-attestation/v1, index SHA-256 be5275c69539a0f31734242ff00a484c2f855f39181c55689d8b0f671195d62a.

RequirementsEvidenceStatus
CORE-profile-identity, CORE-typ, HEADER-closed-set, HEADER-signed-identityattestation-cases.json; exact producer/assembly bytes; the unknown-header-member, wrong-typ, and tamper casespopulated
CORE-cross-profile-reject, CORE-no-inference-fallbackthe wrong-typ and cross-profile-grant-rejected cases both directions; the separately named BoundedAuthorityProtocol.RoleAttestation.V1 namespace; architecture export/import lockspopulated
CLAIM-v, CLAIM-jti, CLAIM-key-id, CLAIM-public-key, CLAIM-role-closed-set, CLAIM-window, CLAIM-closed-required, CLAIM-canonicalthe missing-member matrix (7 cases), role-outside-closed-set, public-key-wrong-width, inverted/empty window, v-float-lexeme, non-canonical-payload-order, duplicate-member casespopulated
VERIFY-caller-supplied, VERIFY-fail-closedevery corpus case drives verify_attestation/2 to exactly {:error, :invalid} or facts; expected context (attestor, subject binding, now, bounds) is caller-supplied in every casepopulated
VERIFY-closed-sets, VERIFY-attestor-signature, VERIFY-subject-bindingwrong-attestor-kid, signature-by-other-key, attestor-key-mismatch, subject-key-id-mismatch, subject-key-mismatch casespopulated
VERIFY-no-self-attestationself-attestation-same-material and self-attestation-same-key-id cases; key-transition distinct-fingerprint precedentpopulated
VERIFY-window-containmentnbf-before-attestor-window and exp-outliving-attestor-window rejects; nbf-at-attestor-valid-from and exp-at-attestor-valid-before boundary acceptspopulated
VERIFY-now-windownow-at-nbf accept; now-before-window and now-at-exp rejects (half-open [nbf, exp))populated
VERIFY-facts, VERIFY-facts-non-authorizing, VERIFY-policy-caller-sidefacts-shape ExUnit assertions (anchor posture, trust: :not_evaluated, no authorization marker, Inspect redaction, RFC 7638 fingerprints); no decision surface exists in the profile APIpopulated
API-complete, API-namespace, API-return-shape, API-no-signer, API-assembly-revalidate, API-symmetryfour separately named public surfaces; corpus producer/assembly/decode/verify checks; external-signature-only assemblypopulated
SECURITY-not-authority, SECURITY-holder-semantics, SECURITY-runtime-privatenormative security section; facts carry no decision; holder-role corpus case verifies without granting per-grant standing; pure-library architecture gatepopulated
SECURITY-trust-scopecontainment makes the attestor window the attestation-lifetime ceiling; documented posture (no new bound)populated
CONFORMANCE-complete40-case certified corpus: both valid roles, missing-member matrix, every rejection family, boundary equalities, both self-attestation discriminating forms (same key id, same key material), outliving window, ES256 confusion, meaningful-byte tampers, cross-profile legs both directions; v1/v2/v3 corpora execute unchangedpopulated
CONFORMANCE-certified-pinindex SHA-256 pinned independently by the ExUnit suite, this map, the profile spec, and every SDK consumerpopulated
CONFORMANCE-sdksElixir reference plus in-repo Python/Rust/Go legs (this landing); the graduated TypeScript verifier adopts the surface as a release precondition coordinated at corpus freezepopulated
IANA-templateexact active registry entry plus machine-readable and rendered RFC 6838 templates; filing remains externally gatedpopulated
CONFORMANCE-cross-repo-receiptsThe artifact has no public transport; the authority-runtime issuance receipt and the companion-signer consumption receipt are named release preconditions discharged by their own private closeouts before any 0.x.0 release bearing this profile.release gate
RELEASE-immutableRequires the exact reviewed package and corpus identity before adopters consume it; release is the owner's decision, not authorized by design approval.release gate

“Populated” means the repository contains executable evidence for the public-library obligation. It does not claim live revocation, trust selection, replay reservation, or a business effect; those remain downstream authority-host responsibilities.