round5 0.1.2

Implementation of Round5 post-quantum PKE and KEM algorithms
Documentation
pub const API_SECRET: usize = 0;
pub const API_PUBLIC: usize = 1;
pub const API_BYTES: usize = 2;
pub const API_CIPHER: usize = 3;
pub const POS_KAPPA_BYTES: usize = 4;
pub const POS_D: usize = 5;
pub const POS_N: usize = 6;
pub const POS_H: usize = 7;
pub const POS_Q_BITS: usize = 8;
pub const POS_P_BITS: usize = 9;
pub const POS_T_BITS: usize = 10;
pub const POS_B_BITS: usize = 11;
pub const POS_N_BAR: usize = 12;
pub const POS_M_BAR: usize = 13;
pub const POS_F: usize = 14;
pub const POS_XE: usize = 15;

pub const ROUND5_API_TAU: u8 = 2;
pub const ROUND5_API_TAU2_LEN: u32 = 1<<11;

//ROUND5_API_TAU2_LEN must be less than or equal to 2^31
const_assert!(ROUND5_API_TAU2_LEN <= (1<<31)); 
//ROUND5_API_TAU2_LEN must be a power of two
const_assert!((ROUND5_API_TAU2_LEN & (ROUND5_API_TAU2_LEN - 1)) == 0);

pub static R5_PARAMETERS_NAMES: [&str; 81] = ["R5ND_1KEM_0d", "R5ND_3KEM_0d", "R5ND_5KEM_0d", "R5ND_1PKE_0d", "R5ND_3PKE_0d", "R5ND_5PKE_0d", "R5ND_1KEM_5d", "R5ND_3KEM_5d", "R5ND_5KEM_5d", "R5ND_1PKE_5d", "R5ND_3PKE_5d", "R5ND_5PKE_5d", "R5N1_1KEM_0d", "R5N1_3KEM_0d", "R5N1_5KEM_0d", "R5N1_1PKE_0d", "R5N1_3PKE_0d", "R5N1_5PKE_0d", "R5ND_0KEM_2iot", "R5ND_1KEM_4longkey", "R5N1_3PKE_0smallCT", "R5ND_0KEM_0fail_phi_0", "R5ND_0KEM_0fail_phi_1", "R5ND_0KEM_0fail_phi_2", "R5ND_0KEM_0fail_phi_3", "R5ND_0KEM_0fail_phi_4", "R5ND_0KEM_0fail_phi_5", "R5ND_0KEM_0fail_phi_6", "R5ND_0KEM_0fail_phi_7", "R5ND_0KEM_0fail_phi_8", "R5ND_0KEM_0fail_phi_9", "R5ND_0KEM_0fail_phi_10", "R5ND_0KEM_0fail_phi_11", "R5ND_0KEM_0fail_phi_12", "R5ND_0KEM_0fail_phi_13", "R5ND_0KEM_0fail_phi_14", "R5ND_0KEM_0fail_phi_15", "R5ND_0KEM_0fail_phi_16", "R5ND_0KEM_0fail_phi_17", "R5ND_0KEM_0fail_phi_18", "R5ND_0KEM_0fail_phi_19", "R5ND_0KEM_0fail_phi_20", "R5ND_0KEM_0fail_phi_21", "R5ND_0KEM_0fail_phi_22", "R5ND_0KEM_0fail_phi_23", "R5ND_0KEM_0fail_phi_24", "R5ND_0KEM_0fail_phi_25", "R5ND_0KEM_0fail_phi_26", "R5ND_0KEM_0fail_phi_27", "R5ND_0KEM_0fail_phi_28", "R5ND_0KEM_0fail_phi_29", "R5ND_0KEM_xfail_ntru_0", "R5ND_0KEM_xfail_ntru_1", "R5ND_0KEM_xfail_ntru_2", "R5ND_0KEM_xfail_ntru_3", "R5ND_0KEM_xfail_ntru_4", "R5ND_0KEM_xfail_ntru_5", "R5ND_0KEM_xfail_ntru_6", "R5ND_0KEM_xfail_ntru_7", "R5ND_0KEM_xfail_ntru_8", "R5ND_0KEM_xfail_ntru_9", "R5ND_0KEM_xfail_ntru_10", "R5ND_0KEM_xfail_ntru_11", "R5ND_0KEM_xfail_ntru_12", "R5ND_0KEM_xfail_ntru_13", "R5ND_0KEM_xfail_ntru_14", "R5ND_0KEM_xfail_ntru_15", "R5ND_0KEM_xfail_ntru_16", "R5ND_0KEM_xfail_ntru_17", "R5ND_0KEM_xfail_ntru_18", "R5ND_0KEM_xfail_ntru_19", "R5ND_0KEM_xfail_ntru_20", "R5ND_0KEM_xfail_ntru_21", "R5ND_0KEM_xfail_ntru_22", "R5ND_0KEM_xfail_ntru_23", "R5ND_0KEM_xfail_ntru_24", "R5ND_0KEM_xfail_ntru_25", "R5ND_0KEM_xfail_ntru_26", "R5ND_0KEM_xfail_ntru_27", "R5ND_0KEM_xfail_ntru_28", "R5ND_0KEM_xfail_ntru_29"];

pub static R5_PARAMETERS_SETS: [[u32; 16]; 81] = [
    [16, 634, 16, 682, 16, 618, 618, 104, 11, 8, 4, 1, 1, 1, 0, 0], 
    [24, 909, 24, 981, 24, 786, 786, 384, 13, 9, 4, 1, 1, 1, 0, 0], 
    [32, 1178, 32, 1274, 32, 1018, 1018, 428, 14, 9, 4, 1, 1, 1, 0, 0], 
    [708, 676, 756, 0, 16, 586, 586, 182, 13, 9, 4, 1, 1, 1, 0, 0], 
    [1031, 983, 1119, 0, 24, 852, 852, 212, 12, 9, 5, 1, 1, 1, 0, 0], 
    [1413, 1349, 1525, 0, 32, 1170, 1170, 222, 13, 9, 5, 1, 1, 1, 0, 0], 
    [16, 445, 16, 549, 16, 490, 490, 162, 10, 7, 3, 1, 1, 1, 5, 190], 
    [24, 780, 24, 859, 24, 756, 756, 242, 12, 8, 2, 1, 1, 1, 5, 218], 
    [32, 972, 32, 1063, 32, 940, 940, 414, 12, 8, 2, 1, 1, 1, 5, 234], 
    [493, 461, 636, 0, 16, 508, 508, 136, 10, 7, 4, 1, 1, 1, 5, 190], 
    [828, 780, 950, 0, 24, 756, 756, 242, 12, 8, 3, 1, 1, 1, 5, 218], 
    [1042, 978, 1301, 0, 32, 946, 946, 388, 11, 8, 5, 1, 1, 1, 5, 234], 
    [16, 5214, 16, 5236, 16, 594, 1, 238, 13, 10, 7, 3, 7, 7, 0, 0], 
    [24, 8834, 24, 8866, 24, 881, 1, 238, 13, 10, 7, 3, 8, 8, 0, 0], 
    [32, 14264, 32, 14288, 32, 1186, 1, 712, 15, 12, 7, 4, 8, 8, 0, 0], 
    [5772, 5740, 5804, 0, 16, 636, 1, 114, 12, 9, 6, 2, 8, 8, 0, 0], 
    [9708, 9660, 9732, 0, 24, 876, 1, 446, 15, 11, 7, 3, 8, 8, 0, 0], 
    [14700, 14636, 14724, 0, 32, 1217, 1, 462, 15, 12, 9, 4, 8, 8, 0, 0], 
    [16, 342, 16, 394, 16, 372, 372, 178, 11, 7, 3, 1, 1, 1, 2, 53], 
    [24, 453, 24, 563, 24, 490, 490, 162, 10, 7, 3, 1, 1, 1, 4, 163], 
    [163_584, 163_536, 988, 0, 24, 757, 1, 378, 14, 9, 4, 1, 192, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 170, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 180, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 200, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 220, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 250, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 270, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 300, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 320, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 350, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 370, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 400, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 420, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 440, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 450, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 470, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 500, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 520, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 540, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 550, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 570, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 590, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 600, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 620, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 640, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 650, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 670, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 700, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 720, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 740, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 750, 11, 7, 4, 1, 1, 1, 0, 0], 
    [16, 716, 16, 764, 16, 800, 800, 170, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 180, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 200, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 220, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 250, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 270, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 300, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 320, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 350, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 370, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 400, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 420, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 440, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 450, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 470, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 500, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 520, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 540, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 550, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 570, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 590, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 600, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 620, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 640, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 650, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 670, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 700, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 720, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 740, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
    [16, 716, 16, 764, 16, 800, 800, 750, 11, 7, 4, 1, 1, 1, u32::max_value(), 0], 
];