mod ct;
mod error;
mod kem;
mod params;
mod r3;
mod rq;
mod types;
mod utils;
mod zx;
pub use error::Error;
pub use params::{
Sntrup653Params, Sntrup761Params, Sntrup857Params, Sntrup953Params, Sntrup1013Params,
Sntrup1277Params, SntrupParams,
};
pub use types::{Ciphertext, DecapsulationKey, EncapsulationKey, SharedSecret, SntrupKem};
pub type Sntrup653 = SntrupKem<Sntrup653Params>;
pub type Sntrup761 = SntrupKem<Sntrup761Params>;
pub type Sntrup857 = SntrupKem<Sntrup857Params>;
pub type Sntrup953 = SntrupKem<Sntrup953Params>;
pub type Sntrup1013 = SntrupKem<Sntrup1013Params>;
pub type Sntrup1277 = SntrupKem<Sntrup1277Params>;
macro_rules! sntrup_module {
($modname:ident, $params:ident, $kem:ident, $doc:expr) => {
#[doc = $doc]
pub mod $modname {
use crate::params::SntrupParams;
pub const PUBLIC_KEY_SIZE: usize = crate::$params::PK_BYTES;
pub const SECRET_KEY_SIZE: usize = crate::$params::SK_BYTES;
pub const CIPHERTEXT_SIZE: usize = crate::$params::CT_BYTES;
pub const SHARED_SECRET_SIZE: usize = crate::params::SS_BYTES;
pub type EncapsulationKey = crate::EncapsulationKey<crate::$params>;
pub type DecapsulationKey = crate::DecapsulationKey<crate::$params>;
pub type Ciphertext = crate::Ciphertext<crate::$params>;
pub type SharedSecret = crate::SharedSecret<crate::$params>;
#[cfg(feature = "kgen")]
pub fn generate_key(
rng: &mut impl rand::CryptoRng,
) -> (EncapsulationKey, DecapsulationKey) {
crate::$kem::generate_key(rng)
}
#[cfg(feature = "kgen")]
pub fn generate_key_deterministic(
seed: &[u8; 32],
) -> (EncapsulationKey, DecapsulationKey) {
crate::$kem::generate_key_deterministic(seed)
}
}
};
}
sntrup_module!(
sntrup653,
Sntrup653Params,
Sntrup653,
"sntrup653: NIST Level 1 (128-bit security), p=653, q=4621, w=288.\n\n**Not recommended for production use.** Prefer [`sntrup761`] or higher."
);
sntrup_module!(
sntrup761,
Sntrup761Params,
Sntrup761,
"sntrup761: NIST Level 2 (128-bit+ security), p=761, q=4591, w=286. Used by OpenSSH."
);
sntrup_module!(
sntrup857,
Sntrup857Params,
Sntrup857,
"sntrup857: NIST Level 3 (192-bit security), p=857, q=5167, w=322."
);
sntrup_module!(
sntrup953,
Sntrup953Params,
Sntrup953,
"sntrup953: NIST Level 4 (192-bit+ security), p=953, q=6343, w=396."
);
sntrup_module!(
sntrup1013,
Sntrup1013Params,
Sntrup1013,
"sntrup1013: NIST Level 5 (256-bit security), p=1013, q=7177, w=448."
);
sntrup_module!(
sntrup1277,
Sntrup1277Params,
Sntrup1277,
"sntrup1277: NIST Level 5 (256-bit security, extra margin), p=1277, q=7879, w=492."
);