Skip to main content

u280_hardware_promoter/
lib.rs

1//! Fail-closed core for final HashSigs U280 hardware-evidence promotion.
2//!
3//! This crate owns canonical request/result models, exact integer performance
4//! arithmetic, complete coordination-history replay checks, private promotion
5//! state, and atomic no-overwrite publication. It deliberately does **not**
6//! parse or accept the current Vitis route evidence: the checked-in raw format
7//! profile is `adaptation-required`. [`AcceptedRouteEvidence`] now models the
8//! exact policy output required from a future descriptor-retaining parser, but
9//! its private descriptor guard remains uninhabited, no public or production
10//! constructor is reachable, and the public result document remains
11//! failure-only. The legacy schema-1 request can never produce a success
12//! document.
13//!
14//! RTL simulation, generated Verilog, out-of-context synthesis, a routed
15//! `xclbin`, XRT exit status, and synthetic fixtures are not hardware evidence.
16//! No API in this source slice can set a hardware-completion claim.
17#![forbid(unsafe_code)]
18
19mod canonical;
20mod coordination;
21mod failure;
22mod journal;
23mod model;
24mod policy;
25mod publication;
26mod result;
27mod route;
28mod state;
29
30pub use coordination::{
31    CoordinationChain, VerifiedCoordinationBurn, VerifiedCoordinationGrant,
32    verify_complete_burn_history,
33};
34pub use failure::{FailureCode, PromotionError, PromotionResult};
35pub use journal::{
36    PreacceptanceJournalRecord, PromotionJournalState, PromotionTransactionIdentity,
37    verify_promotion_journal,
38};
39pub use model::{
40    BASELINE_CLOCK_HZ, MAXIMUM_CAPTURE_CYCLES_PER_RESULT, MAXIMUM_DSPS, MAXIMUM_LUTS,
41    MAXIMUM_REGISTERS, MINIMUM_MEASURED_SAMPLES, MINIMUM_SIGNATURES_PER_SECOND, PERFORMANCE_BATCH,
42    PERFORMANCE_PROFILE, PromotionRequest,
43};
44pub use policy::PerformanceAssessment;
45pub use publication::{AtomicPublication, PublicationReceipt};
46pub use result::{PromotionDocument, PromotionFailure};
47pub use route::{AcceptedRouteEvidence, require_accepted_route};
48pub use state::DurablePromotionBurn;
49#[cfg(test)]
50pub(crate) use state::burn_promotion_identity;