1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
macro_rules! bliss_param {
(
$q:expr, $n:expr, $d:expr, $p:expr, $kappa:expr, $b_inf:expr, $b_l2:expr,
$nz1:expr, $nz2:expr, $pmax:expr, $sigma:expr, $m:expr,
$f:expr, $g:expr, $a:expr, $t:expr, $z:expr, $cidx:expr
) => {
pub const Q: i32 = $q;
pub const N: usize = $n;
pub const D: i32 = $d;
pub const P: i32 = $p;
pub const KAPPA: usize = $kappa;
pub const B_INF: i32 = $b_inf;
pub const B_L2: i32 = $b_l2;
pub const NZ1: i32 = $nz1;
pub const NZ2: i32 = $nz2;
pub const PMAX: i32 = $pmax;
pub const SIGMA: f64 = $sigma;
pub const M: f64 = $m;
pub const F_BITS: usize = $f;
pub const G_BITS: usize = $g;
pub const A_BITS: usize = $a;
pub const T_BITS: usize = $t;
pub const Z_BITS: usize = $z;
pub const CIDX_BITS: usize = $cidx;
pub const PRIVATEKEY_LENGTH: usize =
(F_BITS * N / 8) + (G_BITS * N / 8) + (A_BITS * N / 8);
pub const PUBLICKEY_LENGTH: usize = A_BITS * N / 8;
pub const SIGNATURE_LENGTH: usize =
(T_BITS * N / 8) + (Z_BITS * N / 8) + ((CIDX_BITS * KAPPA + 8 - 1) / 8);
}
}
#[cfg(feature = "i")]
bliss_param!(
12289, 512, 10, 24, 23, 2100, 12872 * 12872,
154, 0, 17825, 215.0, 1.21,
2, 3, 14, 12, 3, 9
);
#[cfg(feature = "ii")]
bliss_param!(
12289, 512, 10, 24, 23, 1563, 11073 * 11073,
154, 0, 17825, 107.0, 2.18,
2, 3, 14, 12, 3, 9
);
#[cfg(feature = "iii")]
bliss_param!(
12289, 512, 9, 48, 30, 1760, 10206 * 10206,
216, 16, 42270, 250.0, 1.40,
3, 4, 14, 12, 3, 9
);
#[cfg(feature = "iv")]
bliss_param!(
12289, 512, 8, 96, 39, 1613, 9901 * 9901,
231, 31, 69576, 271.0, 1.61,
3, 4, 14, 12, 4, 9
);
#[cfg(feature = "o")]
pub const W: [i32; 256] = [
1, 7146, 2028, 5722, 3449, 5906, 4862, 2689,
5413, 7463, 1415, 3394, 4607, 856, 2900, 62,
5235, 2840, 1438, 6451, 5165, 1885, 5417, 5323,
1846, 3239, 3041, 1437, 6986, 3137, 3844, 1968,
7098, 4665, 550, 5309, 1655, 5571, 7424, 6918,
1112, 4198, 4603, 2996, 2469, 217, 6801, 2259,
5033, 3376, 6556, 2757, 7438, 7109, 6461, 7496,
6803, 1189, 1408, 7139, 5773, 6888, 1800, 4806,
1925, 7060, 1952, 296, 2941, 1170, 3892, 7012,
4589, 2805, 4801, 4600, 4601, 4066, 6094, 4135,
7584, 5809, 2990, 5679, 3411, 3193, 4608, 321,
4928, 5784, 1003, 1065, 6300, 1459, 2897, 1667,
6832, 1036, 6453, 4095, 5941, 1499, 4540, 5977,
5282, 738, 4582, 6550, 5967, 2951, 3501, 1129,
2784, 674, 417, 7335, 766, 4964, 1886, 4882,
7351, 7568, 6688, 1266, 6299, 1994, 869, 3626,
3383, 2811, 1591, 1406, 528, 1717, 3125, 2583,
675, 7563, 1682, 6488, 732, 111, 2063, 2359,
5300, 6470, 2681, 2012, 6601, 1725, 6526, 3445,
365, 4431, 2844, 6979, 6882, 5010, 319, 5998,
1728, 4921, 1848, 2169, 7097, 5200, 6203, 7268,
5887, 7346, 2562, 4229, 3380, 4416, 3188, 7283,
5543, 7042, 3901, 2197, 7479, 536, 5118, 3987,
2273, 5224, 1044, 2173, 4957, 5631, 6048, 5702,
6468, 3751, 5637, 2838, 2508, 2395, 1402, 2668,
1286, 3280, 4149, 94, 3477, 6288, 198, 1604,
2132, 3849, 6974, 1876, 2551, 2433, 4115, 2922,
3654, 3765, 5828, 506, 5806, 4595, 7276, 1607,
527, 2252, 1097, 4542, 4907, 1657, 4501, 3799,
3000, 329, 648, 6646, 693, 5614, 7462, 1950,
1366, 6566, 5088, 4675, 2881, 2546, 5108, 1656,
5036, 1771, 4959, 4561, 2423, 1784, 5685, 201
];
#[cfg(feature = "o")]
pub const R: [i32; 256] = [
30, 6993, 7073, 2678, 3617, 517, 7602, 3860,
1089, 1141, 4045, 1967, 7633, 2637, 2509, 1860,
3430, 709, 4735, 1505, 1330, 2783, 1209, 6070,
1613, 4998, 6739, 4705, 2193, 1938, 105, 5273,
5553, 1692, 1138, 5650, 3564, 5829, 7652, 153,
2636, 3044, 7513, 5389, 4941, 6510, 4324, 6322,
5051, 1427, 4655, 5900, 391, 5883, 1805, 2131,
4384, 4946, 3835, 6783, 4208, 6934, 233, 5922,
3983, 4413, 4793, 1199, 3739, 4376, 1545, 2973,
7093, 7340, 5772, 7423, 7453, 6765, 6157, 1154,
4771, 5288, 5209, 1388, 2477, 3618, 7663, 1949,
1901, 4538, 7047, 1226, 4656, 5365, 2419, 3924,
5254, 356, 1565, 7635, 1567, 6565, 5623, 2647,
4840, 6778, 6883, 4475, 2347, 4039, 5177, 3146,
6710, 4858, 4829, 4982, 7618, 2981, 2813, 521,
5462, 4291, 934, 7256, 4626, 6053, 3027, 1246,
1637, 7520, 1644, 3775, 478, 5424, 1578, 680,
4888, 4141, 4374, 2615, 6598, 3330, 442, 1641,
5380, 2075, 3620, 6593, 6005, 5664, 3755, 3497,
3269, 2353, 829, 1983, 6754, 4361, 1889, 3277,
5754, 1691, 1673, 3622, 5523, 2380, 1746, 2972,
7628, 5312, 50, 3974, 1547, 1903, 3468, 3422,
4989, 3873, 1815, 4462, 1621, 718, 7601, 4395,
6742, 3100, 596, 3742, 2771, 7629, 4777, 2078,
2015, 4996, 128, 649, 6111, 2721, 3655, 3230,
175, 6228, 1574, 2820, 4457, 4296, 5940, 2034,
2512, 255, 1833, 2513, 7401, 3861, 554, 3169,
2086, 5416, 5858, 7499, 5198, 7273, 3212, 2124,
448, 6112, 2186, 5683, 1271, 3624, 4453, 6436,
5509, 2189, 4078, 7355, 5428, 7119, 1111, 4733,
2575, 4955, 6701, 1992, 1939, 7251, 7301, 3594,
5141, 7044, 2831, 6253, 3561, 7434, 1568, 6030
];
#[cfg(any(
feature = "i",
feature = "ii",
feature = "iii",
feature = "iv"
))]
pub const W: [i32; 512] = [
1, 10302, 3400, 3150, 8340, 6281, 5277, 9407,
12149, 7822, 3271, 1404, 12144, 5468, 10849, 10232,
7311, 10930, 9042, 64, 8011, 8687, 4976, 5333,
8736, 5925, 12176, 3329, 9048, 431, 3833, 3009,
5860, 6152, 3531, 922, 11336, 1105, 4096, 8855,
2963, 11239, 9509, 6099, 10530, 5057, 4143, 1489,
3006, 11821, 8241, 6370, 480, 4782, 9852, 453,
9275, 4075, 1426, 5297, 6534, 6415, 9377, 10314,
4134, 7083, 9273, 8049, 6915, 11286, 2143, 6142,
11112, 3789, 4414, 3728, 2731, 5241, 7205, 350,
5023, 10256, 8779, 6507, 10908, 3600, 11287, 156,
9542, 1973, 12129, 10695, 9005, 12138, 5101, 2738,
3621, 6427, 10111, 1958, 5067, 8851, 10911, 9928,
9198, 9606, 9984, 8527, 3382, 2049, 8585, 11026,
2625, 6950, 3186, 10542, 5791, 8076, 2422, 4774,
1170, 10120, 8653, 11089, 334, 12237, 5012, 7535,
8246, 8724, 5191, 8243, 2396, 7280, 11082, 1954,
726, 7540, 10600, 1146, 8652, 787, 9223, 9087,
8961, 1254, 2969, 11606, 5331, 421, 11414, 5876,
11227, 8775, 2166, 9597, 3289, 2505, 11899, 723,
1212, 400, 3985, 8210, 6522, 5681, 5444, 9381,
2366, 5445, 7394, 5766, 8595, 3445, 12047, 1583,
563, 11907, 9405, 3834, 1022, 9260, 9302, 11871,
7203, 4324, 10512, 3956, 4388, 6234, 354, 9364,
11567, 9090, 3000, 11454, 130, 12048, 11885, 3963,
2768, 5456, 10115, 6299, 6378, 9162, 7404, 10474,
5728, 10367, 9424, 2948, 4177, 7665, 8005, 8320,
9154, 11011, 7852, 5106, 5092, 8332, 9888, 2655,
8785, 6874, 6730, 10211, 12171, 975, 4337, 9259,
11289, 8471, 4053, 8273, 4231, 10968, 7270, 6374,
4821, 6093, 10163, 9235, 9821, 605, 2187, 4737,
955, 7210, 2704, 9734, 1428, 1323, 1045, 426,
1479, 10587, 2399, 1319, 8993, 11404, 1168, 1805,
1853, 4789, 8232, 11964, 6747, 1010, 8526, 5369,
10938, 5435, 2686, 8633, 1673, 6068, 10682, 10258,
4805, 1018, 4919, 7991, 11560, 10710, 3778, 1693,
3195, 4948, 11813, 11848, 3748, 12147, 11796, 8760,
7393, 7753, 5195, 295, 3707, 7591, 7575, 2500,
9545, 8301, 10040, 7856, 9447, 6403, 8643, 6381,
3201, 5315, 7635, 6170, 4632, 677, 6591, 3757,
6553, 5529, 243, 8719, 2837, 3532, 11224, 2447,
4255, 147, 2847, 8240, 8357, 9369, 1632, 1512,
6461, 3998, 6957, 1566, 9764, 3263, 5011, 9522,
4846, 5574, 9140, 1962, 9408, 10162, 11222, 6421,
9744, 6136, 10745, 7967, 10092, 2844, 1912, 10446,
12208, 1190, 7247, 2919, 355, 7377, 2678, 12240,
11340, 5446, 5407, 9166, 11745, 11785, 6039, 6860,
9970, 11767, 4938, 7105, 2426, 9115, 2481, 10431,
5146, 11635, 9153, 709, 4452, 1956, 9041, 2051,
4611, 5537, 8925, 11341, 3459, 8807, 27, 7796,
5777, 11316, 3978, 9830, 7300, 8209, 8509, 2281,
2294, 1041, 8374, 168, 10276, 5906, 773, 174,
10643, 1728, 7384, 1058, 11462, 8812, 2381, 218,
9238, 3860, 10805, 11637, 5179, 7509, 10752, 6347,
9314, 316, 11136, 5257, 12280, 5594, 6267, 8517,
10963, 4916, 1663, 1360, 1260, 3336, 7428, 11942,
1305, 12233, 671, 6224, 7935, 12231, 4645, 11713,
1635, 7840, 4372, 1159, 7399, 8120, 1017, 6906,
4591, 8410, 2370, 9786, 8705, 6077, 5088, 3991,
8577, 2344, 3, 6328, 10200, 9450, 442, 6554,
3542, 3643, 11869, 11177, 9813, 4212, 11854, 4115,
7969, 6118, 9644, 8212, 2548, 192, 11744, 1483,
2639, 3710, 1630, 5486, 11950, 9987, 2566, 1293,
11499, 9027, 5291, 6167, 10593, 2766, 9430, 3315
];
#[cfg(any(
feature = "i",
feature = "ii",
feature = "iii",
feature = "iv"
))]
pub const R: [i32; 512] = [
24, 1468, 7866, 1866, 3536, 3276, 3758, 4566,
8929, 3393, 4770, 9118, 8809, 8342, 2307, 12077,
3418, 4251, 8095, 1536, 7929, 11864, 8823, 5102,
751, 7021, 9577, 6162, 8239, 10344, 5969, 10771,
5461, 180, 11010, 9839, 1706, 1942, 12281, 3607,
9667, 11667, 7014, 11197, 6940, 10767, 1120, 11158,
10699, 1057, 1160, 5412, 11520, 4167, 2957, 10872,
1398, 11777, 9646, 4238, 9348, 6492, 3846, 1756,
904, 10235, 1350, 8841, 6203, 506, 2276, 12229,
8619, 4913, 7624, 3449, 4099, 2894, 874, 8400,
9951, 364, 1783, 8700, 3723, 377, 530, 3744,
7806, 10485, 8449, 10900, 7207, 8665, 11823, 4267,
881, 6780, 9173, 10125, 11007, 3511, 3795, 4781,
11839, 9342, 6125, 8024, 7434, 20, 9416, 6555,
1555, 7043, 2730, 7228, 3805, 9489, 8972, 3975,
3502, 9389, 11048, 8067, 8016, 11041, 9687, 8794,
1280, 463, 1694, 1208, 8348, 2674, 7899, 10029,
5135, 8914, 8620, 2926, 11024, 6599, 150, 9175,
6151, 5518, 9811, 8186, 5054, 10104, 3578, 5845,
11379, 1687, 2828, 9126, 5202, 10964, 2929, 5063,
4510, 9600, 9617, 416, 9060, 1165, 7766, 3942,
7628, 7790, 5410, 3205, 9656, 8946, 6481, 1125,
1223, 3121, 4518, 5993, 12239, 1038, 2046, 2257,
826, 5464, 6508, 8921, 7000, 2148, 8496, 3534,
7250, 9247, 10555, 4538, 3120, 6505, 2593, 9089,
4987, 8054, 9269, 3708, 5604, 10975, 5650, 5596,
2293, 3028, 4974, 9307, 1936, 11914, 7785, 3056,
10783, 6195, 4113, 11943, 11607, 3344, 3821, 2275,
1927, 5219, 1763, 11573, 9457, 11111, 5776, 1014,
578, 6680, 11249, 1928, 3232, 5163, 2434, 5508,
5103, 11053, 10421, 438, 2213, 2231, 3332, 3087,
10631, 994, 3451, 125, 9694, 7174, 502, 10224,
10918, 8308, 8420, 7078, 6919, 3338, 3454, 6453,
7605, 4335, 944, 4489, 2171, 11951, 8000, 5966,
4443, 7550, 3019, 10568, 3285, 10453, 10588, 412,
4719, 12143, 7455, 7449, 7082, 11260, 4649, 3765,
2946, 8151, 865, 1705, 3929, 8881, 457, 1327,
5386, 1737, 1790, 7080, 2945, 10138, 9754, 10844,
7878, 2600, 7469, 4209, 5526, 6204, 10808, 5676,
3090, 4670, 11194, 612, 567, 3959, 10716, 4145,
9804, 9806, 5832, 343, 6643, 11034, 11307, 9572,
3808, 3528, 6883, 1136, 3944, 3654, 2301, 11710,
7596, 9929, 7211, 717, 845, 4578, 9663, 7326,
5703, 10886, 10447, 10221, 4590, 10397, 11259, 6636,
365, 12085, 12100, 6873, 8717, 6811, 9021, 4924,
10345, 3982, 1882, 8611, 8520, 5002, 2827, 11113,
1802, 7814, 6878, 11071, 11522, 193, 9757, 4883,
5789, 12050, 7911, 10763, 9068, 9847, 10388, 4564,
614, 8882, 10759, 4727, 8536, 10077, 8071, 68,
63, 9998, 5287, 1826, 9282, 2455, 648, 2769,
3469, 1226, 9449, 2429, 3154, 392, 7592, 5588,
5900, 406, 4352, 4032, 844, 6565, 6263, 4176,
9652, 4605, 5170, 814, 4730, 2575, 7988, 5232,
510, 6617, 1251, 8930, 1406, 8170, 12268, 4860,
2334, 7584, 9195, 3278, 12073, 11366, 2940, 7784,
5043, 7383, 3045, 8062, 5662, 6330, 6226, 3961,
6742, 10945, 3815, 1908, 6105, 10897, 879, 10754,
2373, 3825, 6616, 3238, 5530, 10545, 12119, 5987,
11872, 5216, 7724, 1373, 7, 10669, 11511, 9761,
9224, 7100, 72, 4404, 11309, 5598, 10608, 9828,
11274, 1409, 2209, 10179, 2021, 2776, 1849, 448,
6921, 11653, 10254, 464, 11996, 4608, 11498, 11014,
1891, 3017, 2253, 8774, 4153, 6197, 139, 6454,
5618, 7735, 4094, 540, 8452, 4939, 5118, 5826
];