pub mod agent;
pub mod aligned;
pub mod arena;
pub mod block;
pub mod crypto;
pub mod error;
pub mod event;
pub mod merkle;
pub mod proof;
pub mod rkyv_types;
#[cfg(test)]
mod proptest;
pub use aligned::{AlignedHash, AlignedHashArray, CacheLinePadded, CACHE_LINE_SIZE};
pub use arena::{BatchArena, CanonicalBytesArena, DEFAULT_ARENA_CAPACITY};
pub use block::{
compute_events_root, compute_events_root_parallel, Block, BlockBuilder, BlockHash, BlockHeader,
SealerId,
};
pub use crypto::{
batch_verify, batch_verify_with_fallback, hash, hash_pair, BatchVerifyResult, Hash, PublicKey,
SecretKey, Sig,
};
pub use error::{Error, Result};
pub use event::{
ActorId, ActorKind, AuditEvent, EventId, EventType, Outcome, ResourceId, ResourceKind,
};
pub use merkle::{compute_proof, compute_root_optimized, compute_roots_batch, verify_proof};
pub use proof::{
BlockInclusionProof, ConsistencyProof, InclusionProof, MmrProof, Position, ProofNode,
};
pub use agent::{
ActionModifications, ActionOutcome, AgentAttestation, AgentAttestationBuilder, Alternative,
ApprovalContext, ApprovalDecision, ApprovalPolicy, ApprovalRequest, ApprovalRequestId,
ApprovalResponse, ApprovalStatus, AttestationError, AttestationRegistry, Attestor,
CancellationActor, Capability, CapabilityBuilder, CapabilityCheck, CapabilityConstraints,
CapabilityId, CapabilityKind, CapabilitySet, CapabilitySetId, CausalContext,
CausalContextBuilder, Confidence, CoordinatedAction, CoordinatedActionBuilder,
CoordinatedActionSpec, CoordinationEvent, CoordinationId, CoordinationMetrics,
CoordinationProtocol, CoordinationResult, CoordinationStatus, CoordinationType, Cost,
CrossSessionReference, DayOfWeek, Decision, DenialReason, DisputeStatus, DurationMs,
EmergencyAction, EmergencyEvent, EmergencyEventBuilder, EmergencyPriority, EmergencyResolution,
EmergencyTrigger, EscalationPolicy, Evidence, Factor, FailureHandling, Goal, GoalSource,
IdempotencyKey, IdempotencyRecord, ImpactAssessment, OutcomeAttestation,
OutcomeAttestationBuilder, OutcomeDispute, Participant, ParticipantRole, PostMortem,
PrincipalId, PrincipalKind, Priority, ProposedAction, ProposedActionBuilder, RateLimit,
ReasoningStep, ReasoningTrace, ReasoningTraceBuilder, RequiredCapability, Resolution,
ResourceScope, Responsibility, RuntimeAttestation, Session, SessionBuilder, SessionEndReason,
SessionId, SessionSummary, Severity, StepAction, SuspensionScope, Task, TaskDependency, TaskId,
TeeQuote, TeeType, TimeOfDay, TimeWindow, ToolAttestation, TraceId,
};
pub fn batch_verify_events(events: &[AuditEvent]) -> Result<()> {
if events.is_empty() {
return Ok(());
}
let canonical: Vec<Vec<u8>> = events.iter().map(|e| e.canonical_bytes()).collect();
let items: Vec<(&PublicKey, &[u8], &Sig)> = events
.iter()
.zip(canonical.iter())
.map(|(e, bytes)| (e.attester(), bytes.as_slice(), e.signature()))
.collect();
batch_verify(&items)
}
pub fn batch_verify_events_parallel(events: &[AuditEvent]) -> Result<()> {
use rayon::prelude::*;
if events.is_empty() {
return Ok(());
}
let canonical: Vec<Vec<u8>> = events.par_iter().map(|e| e.canonical_bytes()).collect();
let items: Vec<(&PublicKey, &[u8], &Sig)> = events
.iter()
.zip(canonical.iter())
.map(|(e, bytes)| (e.attester(), bytes.as_slice(), e.signature()))
.collect();
batch_verify(&items)
}