qp_rusty_crystals_dilithium/
lib.rs

1#![cfg_attr(not(feature = "std"), no_std)]
2#![allow(clippy::identity_op)]
3#![allow(clippy::needless_range_loop)]
4#![allow(clippy::precedence)]
5#![allow(clippy::unnecessary_cast)]
6#![allow(clippy::enum_variant_names)]
7
8extern crate alloc;
9
10mod errors;
11pub mod fips202;
12pub mod ml_dsa_44;
13pub mod ml_dsa_65;
14pub mod ml_dsa_87;
15pub mod ntt;
16pub mod packing;
17pub mod params;
18pub mod poly;
19pub mod polyvec;
20pub mod reduce;
21pub mod rounding;
22pub mod sign;
23
24pub enum PH {
25	SHA256,
26	SHA512,
27}
28
29#[cfg(feature = "std")]
30use rand::RngCore;
31/// Generate random bytes.
32///
33/// # Arguments
34///
35/// * 'bytes' - an array to fill with random data
36/// * 'n' - number of bytes to generate
37#[cfg(feature = "std")]
38fn random_bytes(bytes: &mut [u8], n: usize) {
39	rand::prelude::thread_rng().try_fill_bytes(&mut bytes[..n]).unwrap();
40}
41
42#[cfg(test)]
43mod tests {
44	#[test]
45	fn params() {
46		assert_eq!(crate::params::Q, 8380417);
47		assert_eq!(crate::params::N, 256);
48		assert_eq!(crate::params::R, 1753);
49		assert_eq!(crate::params::D, 13);
50	}
51	#[test]
52	fn params_lvl2() {
53		assert_eq!(crate::params::lvl2::TAU, 39);
54		assert_eq!(crate::params::lvl2::CHALLENGE_ENTROPY, 192);
55		assert_eq!(crate::params::lvl2::GAMMA1, 131072);
56		assert_eq!(crate::params::lvl2::GAMMA2, 95232);
57		assert_eq!(crate::params::lvl2::K, 4);
58		assert_eq!(crate::params::lvl2::L, 4);
59		assert_eq!(crate::params::lvl2::ETA, 2);
60		assert_eq!(crate::params::lvl2::BETA, 78);
61		assert_eq!(crate::params::lvl2::OMEGA, 80);
62	}
63	#[test]
64	fn params_lvl3() {
65		assert_eq!(crate::params::lvl3::TAU, 49);
66		assert_eq!(crate::params::lvl3::CHALLENGE_ENTROPY, 225);
67		assert_eq!(crate::params::lvl3::GAMMA1, 524288);
68		assert_eq!(crate::params::lvl3::GAMMA2, 261888);
69		assert_eq!(crate::params::lvl3::K, 6);
70		assert_eq!(crate::params::lvl3::L, 5);
71		assert_eq!(crate::params::lvl3::ETA, 4);
72		assert_eq!(crate::params::lvl3::BETA, 196);
73		assert_eq!(crate::params::lvl3::OMEGA, 55);
74	}
75	#[test]
76	fn params_lvl5() {
77		assert_eq!(crate::params::lvl5::TAU, 60);
78		assert_eq!(crate::params::lvl5::CHALLENGE_ENTROPY, 257);
79		assert_eq!(crate::params::lvl5::GAMMA1, 524288);
80		assert_eq!(crate::params::lvl5::GAMMA2, 261888);
81		assert_eq!(crate::params::lvl5::K, 8);
82		assert_eq!(crate::params::lvl5::L, 7);
83		assert_eq!(crate::params::lvl5::ETA, 2);
84		assert_eq!(crate::params::lvl5::BETA, 120);
85		assert_eq!(crate::params::lvl5::OMEGA, 75);
86	}
87}