Skip to main content

dcrypt_params/pqc/
sphincs.rs

1//! Constants for SPHINCS+ hash-based signatures
2
3/// SPHINCS+ parameter set using SHA-256
4pub struct SphincsSha256Params {
5    /// Security level in bits
6    pub security: usize,
7
8    /// Height of the hypertree
9    pub h: usize,
10
11    /// Number of layers in the hypertree
12    pub d: usize,
13
14    /// Winternitz parameter
15    pub w: usize,
16
17    /// Number of FORS trees
18    pub k: usize,
19
20    /// Height of FORS trees
21    pub t: usize,
22
23    /// Public key size in bytes
24    pub public_key_size: usize,
25
26    /// Secret key size in bytes
27    pub secret_key_size: usize,
28
29    /// Signature size in bytes
30    pub signature_size: usize,
31}
32
33/// SPHINCS+-SHA256-128s parameters
34pub const SPHINCS_SHA256_128S: SphincsSha256Params = SphincsSha256Params {
35    security: 128,
36    h: 16,
37    d: 2,
38    w: 16,
39    k: 10,
40    t: 16,
41    public_key_size: 32,
42    secret_key_size: 64,
43    signature_size: 7856,
44};
45
46/// SPHINCS+-SHA256-128f parameters
47pub const SPHINCS_SHA256_128F: SphincsSha256Params = SphincsSha256Params {
48    security: 128,
49    h: 60,
50    d: 20,
51    w: 16,
52    k: 14,
53    t: 12,
54    public_key_size: 32,
55    secret_key_size: 64,
56    signature_size: 16976,
57};
58
59/// SPHINCS+-SHA256-192s parameters
60pub const SPHINCS_SHA256_192S: SphincsSha256Params = SphincsSha256Params {
61    security: 192,
62    h: 24,
63    d: 3,
64    w: 16,
65    k: 14,
66    t: 17,
67    public_key_size: 48,
68    secret_key_size: 96,
69    signature_size: 16224,
70};
71
72/// SPHINCS+-SHA256-192f parameters
73pub const SPHINCS_SHA256_192F: SphincsSha256Params = SphincsSha256Params {
74    security: 192,
75    h: 66,
76    d: 22,
77    w: 16,
78    k: 17,
79    t: 13,
80    public_key_size: 48,
81    secret_key_size: 96,
82    signature_size: 35664,
83};
84
85/// SPHINCS+ parameter set using SHAKE-256
86pub struct SphincsShakeParams {
87    /// Security level in bits
88    pub security: usize,
89
90    /// Height of the hypertree
91    pub h: usize,
92
93    /// Number of layers in the hypertree
94    pub d: usize,
95
96    /// Winternitz parameter
97    pub w: usize,
98
99    /// Number of FORS trees
100    pub k: usize,
101
102    /// Height of FORS trees
103    pub t: usize,
104
105    /// Public key size in bytes
106    pub public_key_size: usize,
107
108    /// Secret key size in bytes
109    pub secret_key_size: usize,
110
111    /// Signature size in bytes
112    pub signature_size: usize,
113}
114
115/// SPHINCS+-SHAKE-128s parameters
116pub const SPHINCS_SHAKE_128S: SphincsShakeParams = SphincsShakeParams {
117    security: 128,
118    h: 16,
119    d: 2,
120    w: 16,
121    k: 10,
122    t: 16,
123    public_key_size: 32,
124    secret_key_size: 64,
125    signature_size: 7856,
126};