@@ -236,6 +236,12 @@ continues past the relevant dependency point.
236236| Production signing providers needed side-channel and entropy admission rules. | Expanded ` v0.29.0 ` , ` v0.36.1 ` , and ` v0.36.2 ` with provider side-channel declarations, zeroization, entropy health, hedged-signing fallback policy, fault-injection behavior, platform capability declarations, and external-provider guarantee boundaries. |
237237| Graph semantics needed an early executable reference model before profile and persistent adapter work. | Added ` v0.20.1 - Minimal Graph Reference Model ` for atomic insertion, competing inserts, missing-parent promotion, pruning/finalization boundaries, duplicate delivery, and cycles through pruned ancestors. |
238238| Security controls needed to mirror the new outcome, budget, commitment, hybrid, and quorum rules. | Updated ` docs/security-controls.md ` and attached ongoing security-control traceability to ` v0.17.1 ` , ` v0.31.0 ` , ` v0.47.0 ` , and ` v0.79.0 ` . |
239+ | Unsupported-suite outcomes could become a downgrade escape hatch. | Tightened ` v0.17.1 ` to distinguish unknown critical suites, policy-forbidden suites, locally unsupported recognized suites, and temporarily unavailable providers. |
240+ | Verification receipts needed trust semantics. | Added receipt trust rules to ` v0.17.1 ` and tied receipt classification into ` v0.41.0 ` . Sender-provided receipts cannot suppress required local verification unless policy admits the receipt signer role. |
241+ | Historical key validity cannot be selected by an unsigned claimed timestamp. | Expanded ` v0.27.0 ` and ` v0.31.0 ` with authenticated evaluation points such as admission receipts, checkpoint sequence/time, transparency inclusion, or profile trusted-clock evidence. |
242+ | Threshold quorum safety needed exact mathematics. | Expanded ` v0.79.0 ` with supported fault model, exact quorum formula, weighted-quorum policy, overflow-safe arithmetic, and policy-time rejection of impossible configurations. |
243+ | Provider side-channel wording could admit variable-time signing into high-assurance profiles. | Added provider assurance classes in ` v0.28.1 ` and required high-assurance profiles to admit only constant-time software or appropriately isolated hardware signing providers. |
244+ | Invalid-result caching needed a complete semantic cache key. | Added cache-key requirements to ` v0.17.1 ` covering statement, policy, trust, revocation, conflict, checkpoint, suite, and profile roots. |
239245
240246## Phase 0: Published Foundation And Direction Pivot
241247
@@ -829,12 +835,32 @@ Deliverables:
829835 states,
830836- ` Indeterminate(ResourceExhausted) ` outcome,
831837- ` Indeterminate(MissingEvidence) ` outcome,
832- - ` Indeterminate(UnsupportedSuite) ` outcome,
838+ - unknown critical suite or algorithm is structurally invalid,
839+ - suite forbidden by exact policy is invalid for admission,
840+ - protocol-recognized and policy-allowed suite missing in the local
841+ implementation is ` Indeterminate(UnsupportedLocally) ` ,
842+ - temporarily unavailable external provider is
843+ ` Indeterminate(ProviderUnavailable) ` ,
844+ - missing required authorization evidence remains indeterminate as a truth
845+ claim but causes fail-closed denial for consequential admission,
846+ - separate result dimensions for verification truth, evidence completeness,
847+ and authorization usability,
833848- rule that budget exhaustion cannot be cached as an invalid result,
849+ - rule that invalid outcomes may be cached only when the cache key includes
850+ every relevant statement, policy, trust, revocation, conflict, checkpoint,
851+ suite, and profile root,
834852- rule that retrying with a larger locally permitted budget may complete
835853 verification without changing the underlying statement validity,
836- - verification receipt recording ` CostScheduleId ` , consumed units, and
837- completion state,
854+ - unsigned local verification receipts are diagnostics only,
855+ - attestable verification receipt binding statement ID, verification context,
856+ roots, policy epoch, ` CostScheduleId ` , outcome, and completion state,
857+ - explicit trusted role requirement for receipt signers,
858+ - consumer rule to either re-execute verification or accept an attestable
859+ receipt under policy,
860+ - rule that sender-provided receipts cannot suppress required local
861+ verification,
862+ - rejection of receipt replay across different roots, policies, or
863+ checkpoints,
838864- offline-bundle field identifying the cost schedule used when claiming
839865 completed verification,
840866- documentation that local resource policies affect completion, not the
@@ -845,16 +871,22 @@ Verification:
845871
846872- outcome classification tests,
847873- cache-behavior tests proving resource exhaustion is not stored as invalid,
874+ - complete invalid-result cache-key tests,
848875- retry-with-larger-budget tests,
849876- verification receipt fixtures,
877+ - unsigned receipt diagnostic-only fixtures,
878+ - attestable receipt signer-role fixtures,
879+ - receipt replay rejection fixtures,
850880- offline-bundle cost-schedule fixtures,
851881- conformance vectors for valid, invalid, resource-exhausted,
852- missing-evidence, and unsupported-suite outcomes.
882+ missing-evidence, unsupported-locally, provider-unavailable, and
883+ policy-forbidden-suite outcomes.
853884
854885Exit criteria:
855886
856887- two implementations with different local budgets can disagree about
857- completion without disagreeing about semantic validity.
888+ completion without disagreeing about semantic validity,
889+ - verification receipts are trusted only through local policy or re-execution.
858890
859891### v0.18.0 - Public Identifier Storage Policy
860892
@@ -975,12 +1007,16 @@ Deliverables:
9751007- pruning and finalization boundary model,
9761008- duplicate-delivery model,
9771009- cycle-through-pruned-ancestor model,
1010+ - operation-history generator,
1011+ - state-machine differential test harness comparing the reference model and
1012+ bounded graph implementation after every operation,
9781013- trace fixtures shared with ` bcx-testkit ` .
9791014
9801015Verification:
9811016
9821017- reference-model property test run,
9831018- model-to-implementation fixture replay,
1019+ - generated operation-history differential tests,
9841020- competing insert and missing-parent promotion tests,
9851021- pruning/finalization cycle tests.
9861022
@@ -1209,7 +1245,7 @@ Verification:
12091245
12101246- policy commitment fixtures,
12111247- wrong evaluator, version, input, and resolver fixtures,
1212- - admission evidence mutation tests.
1248+ - admission evidence mutation tests,
12131249- fixtures for attested, reproducible, and proven decision modes.
12141250
12151251Exit criteria:
@@ -1231,6 +1267,12 @@ Deliverables:
12311267- issuer, realm, audience, algorithm, and key-usage binding,
12321268- validity intervals,
12331269- rotation, compromise, and revocation evidence,
1270+ - authenticated evaluation point for historical key and revocation selection,
1271+ - admitted evaluation points: trusted admission receipt time, checkpoint
1272+ sequence and authenticated checkpoint time, transparency inclusion point, or
1273+ profile-defined trusted clock evidence,
1274+ - explicit rejection of unsigned self-declared timestamps for selecting a
1275+ historical key, validity interval, or revocation state,
12341276- trust-anchor selection,
12351277- deterministic failure for ambiguous ` kid ` matches,
12361278- no network I/O during primitive verification,
@@ -1240,6 +1282,8 @@ Verification:
12401282
12411283- ambiguous key fixtures,
12421284- wrong realm, audience, usage, and interval fixtures,
1285+ - unsigned self-declared timestamp rejection fixtures,
1286+ - checkpoint-relative historical key fixtures,
12431287- revocation and rotation fixtures.
12441288
12451289Exit criteria:
@@ -1270,6 +1314,37 @@ Exit criteria:
12701314- primitive verification providers cannot resolve keys, perform network I/O, or
12711315 choose policy inside the core verification operation.
12721316
1317+ ### v0.28.1 - Provider Assurance Classes
1318+
1319+ Goal: classify provider side-channel assurance before production provider
1320+ crates are admitted.
1321+
1322+ Deliverables:
1323+
1324+ - ` ConstantTimeSoftware ` provider assurance class,
1325+ - ` HardwareIsolated ` provider assurance class,
1326+ - ` SideChannelUnassessed ` provider assurance class,
1327+ - ` TestOnly ` provider assurance class,
1328+ - high-assurance policy rule requiring admitted constant-time software or
1329+ appropriately isolated hardware providers for consequential signing,
1330+ - rule that documented variable-time behavior does not qualify for
1331+ high-assurance consequential signing,
1332+ - verifier-provider adversary model for malicious or compromised providers,
1333+ - resource-amplification input handling requirements for provider dispatch.
1334+
1335+ Verification:
1336+
1337+ - assurance-class policy tests,
1338+ - high-assurance rejection tests for side-channel-unassessed providers,
1339+ - test-only provider feature-guard tests,
1340+ - malicious verifier provider fixtures,
1341+ - resource-amplification fixtures.
1342+
1343+ Exit criteria:
1344+
1345+ - provider admission distinguishes documentation from assurance, and
1346+ high-assurance profiles cannot accidentally admit variable-time signing.
1347+
12731348### v0.29.0 - Signing Provider Boundary
12741349
12751350Goal: define how BCX creates attestations without exposing private key material
@@ -1279,6 +1354,7 @@ Deliverables:
12791354
12801355- opaque private-key handles,
12811356- signer capability metadata,
1357+ - provider assurance class from ` v0.28.1 ` ,
12821358- injected RNG or entropy interface for no-std,
12831359- ML-DSA and SLH-DSA deterministic versus hedged mode policy,
12841360- rule that providers cannot fall back from hedged to deterministic signing
@@ -1299,6 +1375,7 @@ Deliverables:
12991375Verification:
13001376
13011377- fake signer tests,
1378+ - provider assurance-class tests,
13021379- entropy failure tests,
13031380- hedged-signing fallback rejection tests,
13041381- malformed internal-state rejection tests,
@@ -1358,8 +1435,11 @@ Deliverables:
13581435 composite key for new acceptance,
13591436- rule that components from different key epochs cannot be mixed,
13601437- partial component rotation creates a new composite commitment,
1361- - historical verification uses the checkpoint-relative composite record valid
1362- at signing time,
1438+ - historical verification uses the composite record valid at an authenticated
1439+ evaluation point, not at an unsigned claimed signing timestamp,
1440+ - admitted composite-key evaluation points: trusted admission receipt time,
1441+ checkpoint sequence and authenticated checkpoint time, transparency inclusion
1442+ point, or profile-defined trusted clock evidence,
13631443- rule that one component cannot be silently reused in incompatible composite
13641444 suites,
13651445- compromise recovery and emergency downgrade behavior is policy-bound and
@@ -1371,6 +1451,8 @@ Verification:
13711451- component substitution tests,
13721452- old-Ed25519/new-ML-DSA component mixing tests,
13731453- expired-component and revoked-component tests,
1454+ - unsigned claimed signing timestamp rejection tests,
1455+ - authenticated evaluation point fixtures,
13741456- component order mutation tests,
13751457- cross-suite key reuse rejection tests.
13761458
@@ -1534,8 +1616,11 @@ Deliverables:
15341616
15351617- optional Ed25519 provider crate or integration,
15361618- feature-gated provider selection,
1537- - constant-time or documented side-channel properties for signing and key
1538- operations,
1619+ - provider assurance class from ` v0.28.1 ` ,
1620+ - constant-time software or hardware-isolated admission requirement for
1621+ high-assurance consequential signing,
1622+ - side-channel-unassessed provider admission limited to non-high-assurance or
1623+ test-only policy where explicitly allowed,
15391624- secret-key and seed zeroization guarantees,
15401625- entropy-source health and failure propagation,
15411626- hedged-signing fallback policy where the provider supports hedged signing,
@@ -1553,7 +1638,8 @@ Verification:
15531638
15541639- ` cargo test -p <ed25519-provider-crate> ` ,
15551640- RFC 8032 vector smoke tests,
1556- - side-channel declaration review,
1641+ - provider assurance-class review,
1642+ - high-assurance provider admission tests,
15571643- entropy failure tests,
15581644- malformed internal-state tests,
15591645- no root dependency regression.
@@ -1572,8 +1658,11 @@ Deliverables:
15721658
15731659- optional ML-DSA-65 provider crate or integration,
15741660- feature-gated provider selection,
1575- - constant-time or documented side-channel properties for signing and key
1576- operations,
1661+ - provider assurance class from ` v0.28.1 ` ,
1662+ - constant-time software or hardware-isolated admission requirement for
1663+ high-assurance consequential signing,
1664+ - side-channel-unassessed provider admission limited to non-high-assurance or
1665+ test-only policy where explicitly allowed,
15771666- secret-key and seed zeroization guarantees,
15781667- entropy-source health and failure propagation,
15791668- hedged-versus-deterministic signing mode declaration,
@@ -1593,7 +1682,8 @@ Verification:
15931682
15941683- ` cargo test -p <ml-dsa-provider-crate> ` ,
15951684- NIST KAT or ACVP-vector smoke tests where available,
1596- - side-channel declaration review,
1685+ - provider assurance-class review,
1686+ - high-assurance provider admission tests,
15971687- entropy failure tests,
15981688- malformed internal-state tests,
15991689- hedged fallback policy tests,
@@ -1768,14 +1858,25 @@ Deliverables:
17681858
17691859- operational receipt vocabulary for admission, execution, observation,
17701860 witness, settlement, and synchronization,
1861+ - verification receipt vocabulary from ` v0.17.1 ` ,
1862+ - distinction between unsigned local diagnostic receipts and attestable
1863+ verification receipts,
1864+ - trusted verifier role requirements for receipt acceptance,
1865+ - policy rule that consumers re-execute verification unless they accept a
1866+ receipt under an explicit trusted verifier role,
17711867- transparency receipt vocabulary for inclusion, consistency, disclosure, and
17721868 non-inclusion,
17731869- receipt-to-statement commitment rules,
1870+ - receipt binding to statement ID, verification context, roots, policy epoch,
1871+ ` CostScheduleId ` , outcome, and completion state where applicable,
17741872- receipt assurance classification.
17751873
17761874Verification:
17771875
17781876- receipt validation fixtures,
1877+ - forged verification receipt fixtures,
1878+ - sender-provided receipt cannot suppress local verification fixtures,
1879+ - cross-root, cross-policy, and cross-checkpoint receipt replay fixtures,
17791880- wrong receipt class fixtures,
17801881- explanation bundle receipt tests.
17811882
@@ -2814,6 +2915,14 @@ sets.
28142915Deliverables:
28152916
28162917- threshold policy vocabulary,
2918+ - supported fault model declaration,
2919+ - exact quorum formula; for the unweighted Byzantine model, quorum size ` q `
2920+ from ` n ` members must satisfy ` 2q > n + f ` to intersect in more than ` f `
2921+ members,
2922+ - weighted quorum forbidden through ` v1.0.0 ` ,
2923+ - overflow-safe arithmetic for threshold and quorum calculations,
2924+ - rejection of impossible threshold, quorum, and fault configurations at
2925+ policy construction time,
28172926- signer-set epoch binding,
28182927- signer membership commitment,
28192928- fault assumption and maximum tolerated faulty witnesses,
@@ -2824,6 +2933,7 @@ Deliverables:
28242933- threshold change binding,
28252934- behavior when the threshold or signer set changes,
28262935- joint-consensus or overlapping-epoch transition rules,
2936+ - old-and-new quorum requirements during joint transitions,
28272937- proof-of-possession for witness keys where required by the admitted suite,
28282938- signer set commitment,
28292939- threshold count validation,
@@ -2834,11 +2944,15 @@ Verification:
28342944
28352945- ` cargo test -p bcx-proof-threshold ` ,
28362946- signer-set epoch and rotation fixtures,
2947+ - exact quorum-formula fixtures,
2948+ - overflow-safe arithmetic fixtures,
2949+ - impossible-configuration rejection tests,
28372950- quorum-intersection fixtures,
28382951- insufficient-intersection conflicting checkpoint tests,
28392952- sufficient-intersection conflict rejection tests,
28402953- equivocation evidence fixtures,
28412954- joint-consensus transition tests,
2955+ - old-and-new quorum transition tests,
28422956- proof-of-possession fixtures,
28432957- threshold mutation tests.
28442958
@@ -3038,19 +3152,18 @@ release-candidate fixture set.
30383152
30393153Deliverables:
30403154
3041- - statement builders,
3042- - attestation builders,
3043- - binding builders,
3044- - tamper helpers,
3045- - deterministic keys for tests only,
3046- - compile-time guards blocking deterministic keys from production facade
3047- features,
3048- - conspicuous test-only key and signer type names.
3155+ - expanded statement, attestation, and binding scenario catalog,
3156+ - advanced tamper helper catalog,
3157+ - additional deterministic test-only key sets behind the ` v0.16.2 `
3158+ production-facade guards,
3159+ - adversarial receipt, graph, provider, and profile fixture packs,
3160+ - fixture coverage report.
30493161
30503162Verification:
30513163
30523164- ` cargo test -p bcx-testkit ` ,
3053- - production facade feature-guard check.
3165+ - production facade feature-guard check,
3166+ - fixture coverage report check.
30543167
30553168Exit criteria:
30563169
0 commit comments