Skip to main content

pqrascv_hardware/
lib.rs

1//! # pqrascv-hardware
2//!
3//! Hardware trust validation layer for PQ-RASCV v2.
4//!
5//! This crate provides the typed abstractions, verification logic, and policy
6//! rules for hardware-rooted attestation. It is the bridge between raw hardware
7//! evidence (TPM quotes, DICE CDIs, TDX reports) and the policy engine.
8//!
9//! ## Module Overview
10//!
11//! | Module | Purpose |
12//! |--------|---------|
13//! | [`digest`] | Typed digest model — eliminates SHA-256/SHA3-256 ambiguity |
14//! | [`pcr`] | PCR semantic specification — canonical slot meanings |
15//! | [`counter`] | Hardware monotonic counter evidence |
16//! | [`backend`] | Hardware backend trait and evidence types |
17//! | [`tpm_verify`] | TPM 2.0 quote structural verification |
18//! | [`policy`] | Hardware-aware policy rules |
19//! | [`audit_trace`] | Cryptographically linked, append-only lineage of evaluation events |
20//! | [`invariants`] | System-wide assertions to prevent Byzantine violations and equivocation |
21//! | [`consistency_checker`] | Full divergence drift validation for the global audit trace |
22//!
23//! ## Trust Model
24//!
25//! ```text
26//! Hardware (TPM/DICE/TDX/SEV-SNP)
27//!   └── HardwareRootOfTrust::collect_evidence(nonce)
28//!         └── HardwareEvidence { backend_type, pcr_bank, counter, ... }
29//!               └── TpmQuoteVerifier::verify_structure(...)
30//!                     └── HardwarePolicyEngine::evaluate(...)
31//!                           └── Ok(()) → evidence is trustworthy
32//! ```
33//!
34//! ## Feature Flags
35//!
36//! | Feature | Effect |
37//! |---------|--------|
38//! | `std` (default) | Enables `std::error::Error` on error types |
39//! | `unsafe-test-backend` | Enables `HardwareBackendType::TestOnly` — NEVER in production |
40//!
41//! ## Security Invariants
42//!
43//! 1. `HardwareBackendType::TestOnly` is only constructible with `unsafe-test-backend`.
44//! 2. All PCR digests in `TypedPcrBank` must be SHA3-256 before policy evaluation.
45//! 3. `TpmQuoteVerifier` checks nonce binding FIRST, before any other validation.
46//! 4. `HardwarePolicyEngine::hardware_production()` rejects non-hardware-rooted backends.
47//! 5. `CounterEvidence::HardwareMonotonic` is the only counter variant accepted by
48//!    `RequireHardwareMonotonicCounter`.
49
50#![cfg_attr(not(feature = "std"), no_std)]
51#![deny(clippy::all, clippy::pedantic)]
52#![allow(clippy::module_name_repetitions)]
53#![allow(clippy::missing_errors_doc)]
54
55extern crate alloc;
56
57pub mod attested_node_report;
58pub mod audit_trace;
59pub mod backend;
60pub mod baseline;
61pub mod bitcoin_node_identity;
62pub mod bitcoin_node_timeline;
63pub mod bitcoin_policy_profiles;
64pub mod bitcoin_runtime_monitor;
65pub mod consistency_checker;
66pub mod invariants;
67
68pub mod bitcoin_workload_integrity;
69pub mod boot_chain;
70pub mod continuous_attestation;
71pub mod counter;
72pub mod deployment_reference;
73pub mod digest;
74pub mod distributed_consensus;
75pub mod drift;
76#[cfg(test)]
77mod proptests;
78
79// Phase 3.1 Live Evidence Modules
80#[cfg(feature = "live-evidence")]
81pub mod attestation_transport;
82#[cfg(feature = "live-evidence")]
83pub mod bitcoin_process_monitor;
84#[cfg(feature = "live-evidence")]
85pub mod evidence_cache;
86#[cfg(feature = "live-evidence")]
87pub mod evidence_pipeline;
88#[cfg(feature = "live-evidence")]
89pub mod freshness;
90#[cfg(feature = "live-evidence")]
91pub mod linux_ima_collector;
92#[cfg(feature = "live-evidence")]
93pub mod live_node_observer;
94#[cfg(feature = "live-evidence")]
95pub mod live_tpm;
96#[cfg(feature = "live-evidence")]
97pub mod secure_boot_collector;
98
99// Phase 3.2 Incremental Runtime Integrity & PQ Transport
100pub mod checkpointing;
101pub mod delta_attestation;
102pub mod federation_transport;
103pub mod pq_transport;
104pub mod retention_policy;
105pub mod runtime_stream;
106pub mod stream_reconciliation;
107pub mod timeline_compaction;
108
109// Phase 3.3 Byzantine Federation Convergence
110pub mod byzantine_quorum;
111pub mod cross_federation;
112pub mod epoch_key_binding;
113pub mod equivocation;
114pub mod federation_sync;
115pub mod federation_time;
116pub mod federation_topology;
117pub mod governance_continuity;
118pub mod retention_governance;
119pub mod verifier_revocation;
120
121// Phase 3.5 Infrastructure Resilience
122pub mod deterministic_replay;
123pub mod disaster_recovery;
124pub mod federation_migration;
125pub mod federation_snapshot;
126pub mod partition_detection;
127pub mod partition_healing;
128pub mod quorum_reformation;
129pub mod recovery_governance;
130pub mod recovery_lineage;
131pub mod verifier_rejoin;
132
133// Phase 3.6 Adaptive Federation Synchronization
134pub mod adaptive_sync;
135pub mod canonicalization;
136pub mod eclipse_resistance;
137pub mod federation_liveness;
138pub mod gossip_protocol;
139pub mod hashing;
140
141pub mod network_governance;
142pub mod peer_reputation;
143pub mod snapshot_sync;
144pub mod state_reconstruction;
145
146pub mod ima_integration;
147pub mod linux_ima_collector;
148pub mod node_attestation_session;
149pub mod pcr;
150pub mod platform_profiles;
151pub mod policy;
152pub mod policy_federation;
153
154pub mod ek_framework;
155pub mod governance;
156pub mod profiles;
157pub mod reputation;
158pub mod runtime_attestation;
159pub mod runtime_drift;
160pub mod runtime_integrity;
161pub mod secure_boot;
162pub mod temporal_ambiguity;
163pub mod timeline_reconciliation;
164pub mod tpm_structures;
165pub mod tpm_verify;
166pub mod transparency_log;
167pub mod trust_domains;
168pub mod verifier_federation;
169pub mod verifier_identity;
170pub mod verifier_orchestrator;
171pub mod verifier_timeline;
172pub mod verifier_transparency;
173pub mod workload_integrity;
174
175// ── Convenience re-exports ────────────────────────────────────────────────
176
177pub use backend::{
178    BackendSpecificEvidence, DiceEvidence, HardwareBackendType, HardwareCapabilities,
179    HardwareError, HardwareEvidence, HardwareRootOfTrust, NitroEnclaveEvidence, SevSnpEvidence,
180    TdxEvidence, TpmClockInfo, TpmIdentity, TpmQuoteEvidence,
181};
182pub use baseline::{ExpectedPcr, PcrBaseline, PolicyVersion};
183pub use boot_chain::BootChainEvidence;
184pub use continuous_attestation::{AttestationSession, SessionError};
185pub use counter::CounterEvidence;
186pub use digest::{DigestAlgorithm, TypedDigest};
187pub use distributed_consensus::{ConsensusDecision, ConsensusEvaluation, VerifierVote};
188pub use drift::{DriftDetectionEngine, DriftPolicyMode, DriftReport, DriftSeverity};
189pub use governance::{GovernanceAction, GovernanceError, GovernanceLog, GovernanceRecord};
190pub use ima_integration::{ImaEvidence, ImaMeasurement, ImaParseError};
191pub use pcr::{PcrMeasurement, PcrSemantic, SlotSemanticMismatch, TypedPcrBank};
192pub use platform_profiles::{
193    PlatformClass, PlatformProfile, PlatformVendor, PlatformVerificationReport,
194    RuntimeVerificationReport,
195};
196pub use policy::{
197    HardwarePolicyContext, HardwarePolicyEngine, HardwarePolicyError, HardwarePolicyRule,
198};
199pub use policy_federation::{FederatedPolicyEpoch, FederatedPolicyError, FederatedPolicyRegistry};
200pub use profiles::sovereign_bitcoin_node_profile;
201pub use reputation::VerifierReputation;
202pub use runtime_attestation::{
203    RuntimeAttestationEvidence, RuntimeMeasurement, RuntimeMeasurementDomain, RuntimePolicyEpoch,
204};
205pub use runtime_drift::{RuntimeDriftEngine, RuntimeDriftReport, RuntimeDriftSeverity};
206pub use runtime_integrity::RuntimeIntegrityEvidence;
207pub use secure_boot::{SecureBootEvidence, SecureBootState};
208pub use timeline_reconciliation::{
209    TimelineConflict, TimelineConflictType, TimelineReconciler, TimelineReconciliationReport,
210};
211pub use tpm_verify::{TpmQuoteVerifier, TpmVerifyError};
212pub use transparency_log::TransparencyEvent;
213pub use trust_domains::{TrustDomain, TrustEvaluation, VerificationDecisionReason};
214pub use verifier_federation::{FederationError, QuorumPolicy, VerifierFederation};
215pub use verifier_identity::{
216    CertificateError, IdentityError, VerifierCapability, VerifierCertificate, VerifierIdentity,
217};
218pub use verifier_timeline::{AttestationEvent, AttestationTimeline, TimelineValidationError};
219pub use verifier_transparency::{
220    TransparencyLogError, VerifierEventType, VerifierTransparencyEvent, VerifierTransparencyLog,
221};
222pub use workload_integrity::{WorkloadIdentity, WorkloadIntegrityEvidence};