use crate::math::MAX_N;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Params {
n: usize,
q: i64,
eta: u8,
kappa: usize,
gamma: i64,
beta: i64,
omega: usize,
max_attempts: usize,
}
impl Params {
#[must_use]
#[allow(clippy::too_many_arguments)]
pub(crate) const fn new(
n: usize,
q: i64,
eta: u8,
kappa: usize,
gamma: i64,
beta: i64,
omega: usize,
max_attempts: usize,
) -> Self {
assert!(n > 0 && n <= MAX_N);
assert!(q > 2 && q % 2 == 1);
assert!(eta > 0);
assert!(kappa > 0 && kappa < n);
assert!(gamma > 0);
assert!(beta > 0 && beta < gamma);
assert!(omega > 0);
assert!(max_attempts > 0);
Self {
n,
q,
eta,
kappa,
gamma,
beta,
omega,
max_attempts,
}
}
#[must_use]
pub const fn n(&self) -> usize {
self.n
}
#[must_use]
pub const fn q(&self) -> i64 {
self.q
}
#[must_use]
pub const fn eta(&self) -> u8 {
self.eta
}
#[must_use]
pub const fn kappa(&self) -> usize {
self.kappa
}
#[must_use]
pub const fn gamma(&self) -> i64 {
self.gamma
}
#[must_use]
pub const fn beta(&self) -> i64 {
self.beta
}
#[must_use]
pub const fn response_bound(&self) -> i64 {
self.gamma - self.beta
}
#[must_use]
pub const fn omega(&self) -> usize {
self.omega
}
#[must_use]
pub const fn max_attempts(&self) -> usize {
self.max_attempts
}
}
pub const RUNE_128: Params = Params::new(256, 998_244_353, 2, 60, 249_561_088, 120, 60, 256);
pub const RUNE_256: Params = Params::new(512, 8_380_417, 3, 60, 524_288, 180, 120, 256);
#[cfg(test)]
mod param_tests {
use super::*;
#[test]
fn params_constants_are_valid() {
let _ = RUNE_128.n();
let _ = RUNE_256.n();
}
}