dcrypt_params/pqc/
rainbow.rs

1//! Constants for Rainbow signature algorithm
2
3/// Structure containing Rainbow-I parameters
4pub struct RainbowIParams {
5    /// Number of variables
6    pub v: usize,
7
8    /// Number of oil variables for each layer
9    pub o: [usize; 1],
10
11    /// Number of equations for central map
12    pub l: [usize; 2],
13
14    /// Field size
15    pub q: usize,
16
17    /// Public key size in bytes
18    pub public_key_size: usize,
19
20    /// Secret key size in bytes
21    pub secret_key_size: usize,
22
23    /// Signature size in bytes
24    pub signature_size: usize,
25}
26
27/// Rainbow-I parameters (NIST security level 1)
28pub const RAINBOW_I: RainbowIParams = RainbowIParams {
29    v: 100,
30    o: [36],
31    l: [32, 32],
32    q: 16,
33    public_key_size: 161600,
34    secret_key_size: 103648,
35    signature_size: 64,
36};
37
38/// Structure containing Rainbow-III parameters
39pub struct RainbowIIIParams {
40    /// Number of variables
41    pub v: usize,
42
43    /// Number of oil variables for each layer
44    pub o: [usize; 1],
45
46    /// Number of equations for central map
47    pub l: [usize; 2],
48
49    /// Field size
50    pub q: usize,
51
52    /// Public key size in bytes
53    pub public_key_size: usize,
54
55    /// Secret key size in bytes
56    pub secret_key_size: usize,
57
58    /// Signature size in bytes
59    pub signature_size: usize,
60}
61
62/// Rainbow-III parameters (NIST security level 3)
63pub const RAINBOW_III: RainbowIIIParams = RainbowIIIParams {
64    v: 148,
65    o: [56],
66    l: [48, 44],
67    q: 256,
68    public_key_size: 861400,
69    secret_key_size: 611300,
70    signature_size: 96,
71};
72
73/// Structure containing Rainbow-V parameters
74pub struct RainbowVParams {
75    /// Number of variables
76    pub v: usize,
77
78    /// Number of oil variables for each layer
79    pub o: [usize; 1],
80
81    /// Number of equations for central map
82    pub l: [usize; 2],
83
84    /// Field size
85    pub q: usize,
86
87    /// Public key size in bytes
88    pub public_key_size: usize,
89
90    /// Secret key size in bytes
91    pub secret_key_size: usize,
92
93    /// Signature size in bytes
94    pub signature_size: usize,
95}
96
97/// Rainbow-V parameters (NIST security level 5)
98pub const RAINBOW_V: RainbowVParams = RainbowVParams {
99    v: 196,
100    o: [84],
101    l: [64, 48],
102    q: 256,
103    public_key_size: 1885400,
104    secret_key_size: 1375700,
105    signature_size: 128,
106};