Skip to main content

define_security_level

Macro define_security_level 

Source
macro_rules! define_security_level {
    ($struct_name:ident {
        kappa_bits: $k:expr,
        rsa_prime_bitlen: $rsa_prime_bitlen:expr,
        rsa_pubkey_bitlen: $rsa_pubkey_bitlen:expr,
        epsilon: $e:expr,
        ell: $ell:expr,
        ell_prime: $ell_prime:expr,
        m: $m:tt,
    }) => { ... };
    ($struct_name:ident {
        rsa_prime_bitlen: $rsa_prime_bitlen:expr,
        rsa_pubkey_bitlen: $rsa_pubkey_bitlen:expr,
        epsilon: $e:expr,
        ell: $ell:expr,
        ell_prime: $ell_prime:expr,
        m: 128,
    }) => { ... };
    ($struct_name:ident {
        rsa_prime_bitlen: $rsa_prime_bitlen:expr,
        rsa_pubkey_bitlen: $rsa_pubkey_bitlen:expr,
        epsilon: $e:expr,
        ell: $ell:expr,
        ell_prime: $ell_prime:expr,
        m: $m:tt,
    }) => { ... };
}
Expand description

Defines security level

§Example

This code defines security level corresponding to $\kappa=1024$, RSA prime bitlen = 256, RSA public key bitlen = 511, $\varepsilon=128$, $\ell = \ell’ = 1024$, and $m = 128$ (note: choice of parameters is random, it does not correspond to meaningful security level):

use cggmp24::security_level::define_security_level;

#[derive(Clone)]
pub struct MyLevel;
define_security_level!(MyLevel {
    kappa_bits: 1024,
    rsa_prime_bitlen: 256,
    rsa_pubkey_bitlen: 511,
    epsilon: 128,
    ell: 1024,
    ell_prime: 1024,
    m: 128,
});

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.