fpr_ff1/lib.rs
1#![doc = include_str!("../README.md")]
2//!
3//! ## Relationship to the Python package
4//!
5//! Validation matches the `fpr-ff1` Python package rule for rule, in the same
6//! order and with the same messages, so an input either both accept or both
7//! reject in the same way. [`ErrorKind`] maps one to one onto the Python
8//! exception classes.
9//!
10//! No type from `num-bigint`, `aes` or `cipher` appears in the public API
11//! (plan 00009 D10), so their major versions never become this crate's.
12
13// The FF1 core stays private: nothing in it is reachable from outside the
14// crate except through the public API below or the `internal` feature.
15mod engine;
16mod error;
17mod ff1;
18mod validate;
19
20pub use error::{Error, ErrorKind};
21pub use ff1::{Builder, FF1};
22
23#[cfg(test)]
24mod conformance_tests;
25#[cfg(test)]
26mod property_tests;
27#[cfg(test)]
28mod test_fixtures;
29#[cfg(test)]
30mod tests;
31#[cfg(test)]
32mod validate_tests;
33#[cfg(test)]
34mod validation_case_tests;
35
36/// Unvalidated core and test seams for the PyO3 binding and the
37/// conformance tests. Not public API; not covered by semver (plan 00009
38/// D10). Inputs must already be validated by the caller.
39#[cfg(feature = "internal")]
40#[doc(hidden)]
41pub mod __internal {
42 pub use crate::engine::{cipher_block_with_key, ff1, ff1_traced, prf_with_key, TraceRecord};
43}