Skip to main content

openentropy_core/
lib.rs

1//! # openentropy-core
2//!
3//! **Your computer is a hardware noise observatory.**
4//!
5//! `openentropy-core` is the core entropy harvesting library that extracts randomness
6//! from 60+ unconventional hardware sources — clock jitter, DRAM row buffer timing,
7//! CPU speculative execution, Bluetooth RSSI, NVMe latency, and more.
8//!
9//! ## Quick Start
10//!
11//! ```no_run
12//! use openentropy_core::EntropyPool;
13//!
14//! // Auto-detect all available sources and create a pool
15//! let pool = EntropyPool::auto();
16//!
17//! // Get conditioned random bytes
18//! let random_bytes = pool.get_random_bytes(256);
19//! assert_eq!(random_bytes.len(), 256);
20//!
21//! // Check pool health
22//! let health = pool.health_report();
23//! println!("{}/{} sources healthy", health.healthy, health.total);
24//! ```
25//!
26//! ## Architecture
27//!
28//! Sources → Pool (concatenate) → Conditioning → Output
29//!
30//! Three output modes:
31//! - **Sha256** (default): SHA-256 conditioning mixes all source bytes with state,
32//!   counter, timestamp, and OS entropy. Cryptographically strong output.
33//! - **VonNeumann**: debiases raw bytes without destroying noise structure.
34//! - **Raw** (`get_raw_bytes`): source bytes pass through unchanged — no hashing,
35//!   no whitening, no mixing between sources.
36//!
37//! Raw mode preserves the actual hardware noise signal for researchers studying
38//! device entropy characteristics. Most QRNG APIs (ANU, Outshift) run DRBG
39//! post-processing that destroys the raw hardware signal. We don't.
40//!
41//! Every source implements the [`EntropySource`] trait. The [`EntropyPool`]
42//! collects from all registered sources and concatenates their byte streams.
43
44pub mod analysis;
45pub mod benchmark;
46pub mod chaos;
47pub mod comparison;
48pub mod conditioning;
49pub mod dispatcher;
50pub(crate) mod math;
51pub mod platform;
52pub mod pool;
53pub mod session;
54pub mod source;
55pub mod source_resolution;
56pub mod sources;
57pub mod statistics;
58pub mod telemetry;
59pub mod temporal;
60pub mod trials;
61pub mod verdict;
62
63pub use analysis::{
64    AndersonDarlingResult, ApproxEntropyResult, AutocorrResult, BitBiasResult, CrossCorrMatrix,
65    CrossCorrPair, DistributionResult, PermutationEntropyResult, RunsResult, SourceAnalysis,
66    SpectralResult, StationarityResult, anderson_darling, approximate_entropy,
67    approximate_entropy_default, autocorrelation_profile, bit_bias, cross_correlation_matrix,
68    distribution_stats, full_analysis, pearson_correlation, permutation_entropy,
69    permutation_entropy_default, runs_analysis, spectral_analysis, stationarity_test,
70};
71pub use benchmark::{
72    BenchConfig, BenchReport, BenchSourceReport, PoolQualityReport, RankBy, benchmark_sources,
73};
74pub use chaos::{
75    BiEntropyResult, BootstrapHurstResult, ChaosAnalysis, CorrelationDimResult, DfaResult,
76    EpiplexityResult, HurstResult, LyapunovResult, RollingHurstResult, RollingHurstWindow,
77    RqaResult, SampleEntropyResult, bientropy, bootstrap_hurst, bootstrap_hurst_default,
78    chaos_analysis, correlation_dimension, dfa, dfa_default, epiplexity, hurst_exponent,
79    lyapunov_exponent, rolling_hurst, rolling_hurst_default, rqa, rqa_default, sample_entropy,
80    sample_entropy_default,
81};
82pub use comparison::{
83    AggregateDelta, ComparisonResult, DigramAnalysis, MarkovAnalysis, MultiLagAnalysis,
84    RunLengthComparison, TemporalAnalysis, TwoSampleTests, WindowAnomaly, aggregate_delta,
85    cliffs_delta, compare, compare_with_analysis, digram_analysis, markov_analysis,
86    multi_lag_analysis, run_length_comparison, temporal_analysis, two_sample_tests,
87};
88pub use conditioning::{
89    ConditioningMode, MinEntropyReport, QualityReport, condition, grade_min_entropy,
90    min_entropy_estimate, quick_autocorrelation_lag1, quick_min_entropy, quick_quality,
91    quick_shannon,
92};
93pub use dispatcher::{
94    AnalysisConfig, AnalysisProfile, AnalysisReport, SourceReport, VerdictSummary, analyze,
95};
96pub use platform::{detect_available_sources, platform_info};
97pub use pool::{EntropyPool, HealthReport, SourceHealth, SourceInfoSnapshot};
98pub use session::{
99    MachineInfo, SessionConfig, SessionMeta, SessionSourceAnalysis, SessionWriter,
100    detect_machine_info, list_sessions, load_session_raw_data,
101};
102pub use source::{EntropySource, Platform, Requirement, SourceCategory, SourceInfo};
103pub use source_resolution::{SourceMatchMode, SourceResolution, resolve_source_names};
104pub use statistics::{
105    AnovaResult, CramerVonMisesResult, GapTestResult, KruskalWallisResult, LeveneResult,
106    LjungBoxResult, MultipleCorrectionResult, PowerResult, StatisticsAnalysis, anova,
107    bonferroni_correction, cramer_von_mises, gap_test, gap_test_default,
108    holm_bonferroni_correction, kruskal_wallis, levene_test, ljung_box, ljung_box_default,
109    power_analysis, power_analysis_default, statistics_analysis,
110};
111pub use telemetry::{
112    MODEL_ID as TELEMETRY_MODEL_ID, MODEL_VERSION as TELEMETRY_MODEL_VERSION, TelemetryMetric,
113    TelemetryMetricDelta, TelemetrySnapshot, TelemetryWindowReport, build_telemetry_window,
114    collect_telemetry_snapshot, collect_telemetry_window,
115};
116pub use temporal::{
117    Anomaly, AnomalyDetectionResult, Burst, BurstResult, ChangePoint, ChangePointResult,
118    DriftResult, DriftSegment, SessionStats, Shift, ShiftResult, StabilityResult,
119    TemporalAnalysisSuite, anomaly_detection, anomaly_detection_default, burst_detection,
120    burst_detection_default, change_point_detection, change_point_detection_default,
121    inter_session_stability, shift_detection, shift_detection_default, temporal_analysis_suite,
122    temporal_drift, temporal_drift_default,
123};
124pub use trials::{
125    CalibrationResult, StoufferResult, TrialAnalysis, TrialConfig, calibration_check,
126    stouffer_combine, trial_analysis,
127};
128pub use verdict::{
129    Verdict, metric_or_na, verdict_anderson_darling, verdict_apen, verdict_autocorr, verdict_bias,
130    verdict_bientropy, verdict_compression, verdict_corrdim, verdict_cramer_von_mises, verdict_dfa,
131    verdict_distribution, verdict_hurst, verdict_ljung_box, verdict_lyapunov, verdict_permen,
132    verdict_rqa_det, verdict_runs, verdict_sampen, verdict_spectral, verdict_stationarity,
133};
134pub mod synchrony;
135pub use synchrony::{
136    CrossSyncResult, GlobalEvent, GlobalEventResult, MutualInfoResult, PhaseCoherenceResult,
137    SynchronyAnalysis, cross_sync, global_event_detection, mutual_information, phase_coherence,
138    synchrony_analysis,
139};
140/// Library version (from Cargo.toml).
141pub const VERSION: &str = env!("CARGO_PKG_VERSION");