Macro cggmp21::define_security_level

source ·
macro_rules! define_security_level {
    ($struct_name:ident {
        security_bits = $k:expr,
        epsilon = $e:expr,
        ell = $ell:expr,
        ell_prime = $ell_prime:expr,
        m = $m:tt,
        q = $q:expr,
    }) => { ... };
    ($struct_name:ident {
        epsilon = $e:expr,
        ell = $ell:expr,
        ell_prime = $ell_prime:expr,
        m = 128,
        q = $q:expr,
    }) => { ... };
    ($struct_name:ident {
        epsilon = $e:expr,
        ell = $ell:expr,
        ell_prime = $ell_prime:expr,
        m = $m:tt,
        q = $q:expr,
    }) => { ... };
}
Expand description

Defines security level

§Example

This code defines security level corresponding to $\kappa=1024$, $\varepsilon=128$, $\ell = \ell’ = 1024$, $m = 128$, and $q = 2^{48}-1$ (note: choice of parameters is random, it does not correspond to meaningful security level):

use cggmp21::security_level::define_security_level;
use cggmp21::rug::Integer;

#[derive(Clone)]
pub struct MyLevel;
define_security_level!(MyLevel{
    security_bits = 1024,
    epsilon = 128,
    ell = 1024,
    ell_prime = 1024,
    m = 128,
    q = (Integer::ONE.clone() << 48_u32) - 1,
});

Note: currently, security parameter $m$ is hardcoded to the M = 128 due to compiler limitations. Setting any other value of $m$ results into compilation error. We’re going to fix that once generic_const_exprs feature is stable.