crystals-dilithium 1.0.0

Pure RUST implementation of CRYSTALS-Dilithium digital signature scheme
Documentation
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
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
pub const SECRETKEYBYTES: usize = crate::params::lvl2::SECRETKEYBYTES;
pub const PUBLICKEYBYTES: usize = crate::params::lvl2::PUBLICKEYBYTES;
pub const SIGNBYTES: usize = crate::params::lvl2::SIGNBYTES;
pub const KEYPAIRBYTES: usize = SECRETKEYBYTES + PUBLICKEYBYTES;

pub type Signature = [u8; SIGNBYTES];

/// A pair of private and public keys.
pub struct Keypair {
    pub secret: SecretKey,
    pub public: PublicKey
}

impl Keypair {
    /// Generate a Keypair instance.
    /// 
    /// # Arguments
    /// 
    /// * 'entropy' - optional bytes for determining the generation process
    /// 
    /// Returns an instance of Keypair
    pub fn generate(entropy: Option<&[u8]>) -> Keypair {
        let mut pk = [0u8; PUBLICKEYBYTES];
        let mut sk = [0u8; SECRETKEYBYTES];
        crate::sign::lvl2::keypair(&mut pk, &mut sk, entropy);
        Keypair {
            secret: SecretKey::from_bytes(&sk),
            public: PublicKey::from_bytes(&pk)
        }
    }

    /// Convert a Keypair to a bytes array.
    /// 
    /// Returns an array containing private and public keys bytes
    pub fn to_bytes(&self) -> [u8; KEYPAIRBYTES] {
        let mut result = [0u8; KEYPAIRBYTES];
        result[..SECRETKEYBYTES].copy_from_slice(&self.secret.to_bytes());
        result[SECRETKEYBYTES..].copy_from_slice(&self.public.to_bytes());
        result
    }

    /// Create a Keypair from bytes.
    /// 
    /// # Arguments
    /// 
    /// * 'bytes' - private and public keys bytes
    /// 
    /// Returns a Keypair
    pub fn from_bytes(bytes: &[u8]) -> Keypair {
        Keypair {
            secret: SecretKey::from_bytes(&bytes[..SECRETKEYBYTES]),
            public: PublicKey::from_bytes(&bytes[SECRETKEYBYTES..])
        }
    }

    /// Compute a signature for a given message.
    ///
    /// # Arguments
    ///
    /// * 'msg' - message to sign
    /// 
    /// Returns a Signature
    pub fn sign(&self, msg: &[u8]) -> Signature {
        self.secret.sign(msg)
    }

    /// Verify a signature for a given message with a public key.
    /// 
    /// # Arguments
    /// 
    /// * 'msg' - message that is claimed to be signed
    /// * 'sig' - signature to verify
    /// 
    /// Returns 'true' if the verification process was successful, 'false' otherwise
    pub fn verify(&self, msg: &[u8], sig: &[u8]) -> bool {
        self.public.verify(msg, sig)
    }
}

/// Private key.
pub struct SecretKey {
    pub bytes: [u8; SECRETKEYBYTES]
}

impl SecretKey {
    /// Returns a copy of underlying bytes.
    pub fn to_bytes(&self) -> [u8; SECRETKEYBYTES] {
       self.bytes.clone() 
    }

    /// Create a SecretKey from bytes.
    /// 
    /// # Arguments
    /// 
    /// * 'bytes' - private key bytes
    /// 
    /// Returns a SecretKey
    pub fn from_bytes(bytes: &[u8]) -> SecretKey {
        SecretKey {
            bytes: bytes.try_into().expect("")
        }
    }

    /// Compute a signature for a given message.
    ///
    /// # Arguments
    ///
    /// * 'msg' - message to sign
    /// 
    /// Returns a Signature
    pub fn sign(&self, msg: &[u8]) -> Signature {
        let mut sig: Signature = [0u8; SIGNBYTES];
        crate::sign::lvl2::signature(&mut sig, msg, &self.bytes, false);
        sig
    }
}

pub struct PublicKey {
    pub bytes: [u8; PUBLICKEYBYTES]
}

impl PublicKey {
    /// Returns a copy of underlying bytes.
    pub fn to_bytes(&self) -> [u8; PUBLICKEYBYTES] {
        self.bytes.clone()
    }

    /// Create a PublicKey from bytes.
    /// 
    /// # Arguments
    /// 
    /// * 'bytes' - public key bytes
    /// 
    /// Returns a PublicKey
    pub fn from_bytes(bytes: &[u8]) -> PublicKey {
        PublicKey {
            bytes: bytes.try_into().expect("")
        }
    }

    /// Verify a signature for a given message with a public key.
    /// 
    /// # Arguments
    /// 
    /// * 'msg' - message that is claimed to be signed
    /// * 'sig' - signature to verify
    /// 
    /// Returns 'true' if the verification process was successful, 'false' otherwise
    pub fn verify(&self, msg: &[u8], sig: &[u8]) -> bool {
        if sig.len() != SIGNBYTES {
            return false;
        }
        return crate::sign::lvl2::verify(sig, msg, &self.bytes);
    }
}

#[cfg(test)]
mod tests {
    const TEST_PK: [u8; crate::params::lvl2::PUBLICKEYBYTES] = [
        0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE,
        0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5,
        0x06, 0xD8, 0x5B, 0xEF, 0x61, 0x77, 0xE3, 0xDE, 0x0D, 0x4F, 0x1E, 0xF5, 0x84, 0x77,
        0x35, 0x94, 0x7B, 0x56, 0xD0, 0x8E, 0x84, 0x1D, 0xB2, 0x44, 0x4F, 0xA2, 0xB7, 0x29,
        0xAD, 0xEB, 0x14, 0x17, 0xCA, 0x7A, 0xDF, 0x42, 0xA1, 0x49, 0x0C, 0x5A, 0x09, 0x7F,
        0x00, 0x27, 0x60, 0xC1, 0xFC, 0x41, 0x9B, 0xE8, 0x32, 0x5A, 0xAD, 0x01, 0x97, 0xC5,
        0x2C, 0xED, 0x80, 0xD3, 0xDF, 0x18, 0xE7, 0x77, 0x42, 0x65, 0xB2, 0x89, 0x91, 0x2C,
        0xEC, 0xA1, 0xBE, 0x3A, 0x90, 0xD8, 0xA4, 0xFD, 0xE6, 0x5C, 0x84, 0xC6, 0x10, 0x86,
        0x4E, 0x47, 0xDE, 0xEC, 0xAE, 0x3E, 0xEA, 0x44, 0x30, 0xB9, 0x90, 0x95, 0x59, 0x40,
        0x8D, 0x11, 0xA6, 0xAB, 0xDB, 0x7D, 0xB9, 0x33, 0x6D, 0xF7, 0xF9, 0x6E, 0xAB, 0x48,
        0x64, 0xA6, 0x57, 0x97, 0x91, 0x26, 0x5F, 0xA5, 0x6C, 0x34, 0x8C, 0xB7, 0xD2, 0xDD,
        0xC9, 0x0E, 0x13, 0x3A, 0x95, 0xC3, 0xF6, 0xB1, 0x36, 0x01, 0x42, 0x9F, 0x54, 0x08,
        0xBD, 0x99, 0x9A, 0xA4, 0x79, 0xC1, 0x01, 0x81, 0x59, 0x55, 0x0E, 0xC5, 0x5A, 0x11,
        0x3C, 0x49, 0x3B, 0xE6, 0x48, 0xF4, 0xE0, 0x36, 0xDD, 0x4F, 0x8C, 0x80, 0x9E, 0x03,
        0x6B, 0x4F, 0xBB, 0x91, 0x8C, 0x2C, 0x48, 0x4A, 0xD8, 0xE1, 0x74, 0x7A, 0xE0, 0x55,
        0x85, 0xAB, 0x43, 0x3F, 0xDF, 0x46, 0x1A, 0xF0, 0x3C, 0x25, 0xA7, 0x73, 0x70, 0x07,
        0x21, 0xAA, 0x05, 0xF7, 0x37, 0x9F, 0xE7, 0xF5, 0xED, 0x96, 0x17, 0x5D, 0x40, 0x21,
        0x07, 0x6E, 0x7F, 0x52, 0xB6, 0x03, 0x08, 0xEF, 0xF5, 0xD4, 0x2B, 0xA6, 0xE0, 0x93,
        0xB3, 0xD0, 0x81, 0x5E, 0xB3, 0x49, 0x66, 0x46, 0xE4, 0x92, 0x30, 0xA9, 0xB3, 0x5C,
        0x8D, 0x41, 0x90, 0x0C, 0x2B, 0xB8, 0xD3, 0xB4, 0x46, 0xA2, 0x31, 0x27, 0xF7, 0xE0,
        0x96, 0xD8, 0x5A, 0x1C, 0x79, 0x4A, 0xD4, 0xC8, 0x92, 0x77, 0x90, 0x4F, 0xC6, 0xBF,
        0xEC, 0x57, 0xB1, 0xCD, 0xD8, 0x0D, 0xF9, 0x95, 0x50, 0x30, 0xFD, 0xCA, 0x74, 0x1A,
        0xFB, 0xDA, 0xC8, 0x27, 0xB1, 0x3C, 0xCD, 0x54, 0x03, 0x58, 0x8A, 0xF4, 0x64, 0x40,
        0x03, 0xC2, 0x26, 0x5D, 0xFA, 0x4D, 0x41, 0x9D, 0xBC, 0xCD, 0x20, 0x64, 0x89, 0x23,
        0x86, 0x51, 0x8B, 0xE9, 0xD5, 0x1C, 0x16, 0x49, 0x82, 0x75, 0xEB, 0xEC, 0xF5, 0xCD,
        0xC7, 0xA8, 0x20, 0xF2, 0xC2, 0x93, 0x14, 0xAC, 0x4A, 0x6F, 0x08, 0xB2, 0x25, 0x2A,
        0xD3, 0xCF, 0xB1, 0x99, 0xAA, 0x42, 0xFE, 0x0B, 0x4F, 0xB5, 0x71, 0x97, 0x5C, 0x10,
        0x20, 0xD9, 0x49, 0xE1, 0x94, 0xEE, 0x1E, 0xAD, 0x93, 0x7B, 0xFB, 0x55, 0x0B, 0xB3,
        0xBA, 0x8E, 0x35, 0x7A, 0x02, 0x9C, 0x29, 0xF0, 0x77, 0x55, 0x46, 0x02, 0xE1, 0xCA,
        0x2F, 0x22, 0x89, 0xCB, 0x91, 0x69, 0x94, 0x1C, 0x3A, 0xAF, 0xDB, 0x8E, 0x58, 0xC7,
        0xF2, 0xAC, 0x77, 0x29, 0x1F, 0xB4, 0x14, 0x7C, 0x65, 0xF6, 0xB0, 0x31, 0xD3, 0xEB,
        0xA4, 0x2F, 0x2A, 0xCF, 0xD9, 0x44, 0x8A, 0x5B, 0xC2, 0x2B, 0x47, 0x6E, 0x07, 0xCC,
        0xCE, 0xDA, 0x23, 0x06, 0xC5, 0x54, 0xEC, 0x9B, 0x7A, 0xB6, 0x55, 0xF1, 0xD7, 0x31,
        0x8C, 0x2B, 0x7E, 0x67, 0xD5, 0xF6, 0x9B, 0xED, 0xF5, 0x60, 0x00, 0xFD, 0xA9, 0x89,
        0x86, 0xB5, 0xAB, 0x1B, 0x3A, 0x22, 0xD8, 0xDF, 0xD6, 0x68, 0x16, 0x97, 0xB2, 0x3A,
        0x55, 0xC9, 0x6E, 0x87, 0x10, 0xF3, 0xF9, 0x8C, 0x04, 0x4F, 0xB1, 0x5F, 0x60, 0x63,
        0x13, 0xEE, 0x56, 0xC0, 0xF1, 0xF5, 0xCA, 0x0F, 0x51, 0x2E, 0x08, 0x48, 0x4F, 0xCB,
        0x35, 0x8E, 0x6E, 0x52, 0x8F, 0xFA, 0x89, 0xF8, 0xA8, 0x66, 0xCC, 0xFF, 0x3C, 0x0C,
        0x58, 0x13, 0x14, 0x7E, 0xC5, 0x9A, 0xF0, 0x47, 0x0C, 0x4A, 0xAD, 0x01, 0x41, 0xD3,
        0x4F, 0x10, 0x1D, 0xA2, 0xE5, 0xE1, 0xBD, 0x52, 0xD0, 0xD4, 0xC9, 0xB1, 0x3B, 0x3E,
        0x3D, 0x87, 0xD1, 0x58, 0x61, 0x05, 0x79, 0x67, 0x54, 0xE7, 0x97, 0x8C, 0xA1, 0xC6,
        0x8A, 0x7D, 0x85, 0xDF, 0x11, 0x2B, 0x7A, 0xB9, 0x21, 0xB3, 0x59, 0xA9, 0xF0, 0x3C,
        0xBD, 0x27, 0xA7, 0xEA, 0xC8, 0x7A, 0x9A, 0x80, 0xB0, 0xB2, 0x6B, 0x4C, 0x96, 0x57,
        0xED, 0x85, 0xAD, 0x7F, 0xA2, 0x61, 0x6A, 0xB3, 0x45, 0xEB, 0x82, 0x26, 0xF6, 0x9F,
        0xC0, 0xF4, 0x81, 0x83, 0xFF, 0x57, 0x4B, 0xCD, 0x76, 0x7B, 0x56, 0x76, 0x41, 0x3A,
        0xDB, 0x12, 0xEA, 0x21, 0x50, 0xA0, 0xE9, 0x76, 0x83, 0xEE, 0x54, 0x24, 0x3C, 0x25,
        0xB7, 0xEA, 0x8A, 0x71, 0x86, 0x06, 0xF8, 0x69, 0x93, 0xD8, 0xD0, 0xDA, 0xCE, 0x83,
        0x4E, 0xD3, 0x41, 0xEE, 0xB7, 0x24, 0xFE, 0x3D, 0x5F, 0xF0, 0xBC, 0x8B, 0x8A, 0x7B,
        0x81, 0x04, 0xBA, 0x26, 0x9D, 0x34, 0x13, 0x3A, 0x4C, 0xF8, 0x30, 0x0A, 0x2D, 0x68,
        0x84, 0x96, 0xB5, 0x9B, 0x6F, 0xCB, 0xC6, 0x1A, 0xE9, 0x60, 0x62, 0xEA, 0x1D, 0x8E,
        0x5B, 0x41, 0x0C, 0x56, 0x71, 0xF4, 0x24, 0x41, 0x7E, 0xD6, 0x93, 0x32, 0x9C, 0xD9,
        0x83, 0x00, 0x1F, 0xFC, 0xD1, 0x00, 0x23, 0xD5, 0x98, 0x85, 0x9F, 0xB7, 0xAD, 0x5F,
        0xD2, 0x63, 0x54, 0x71, 0x17, 0x10, 0x06, 0x90, 0xC6, 0xCE, 0x74, 0x38, 0x95, 0x6E,
        0x6C, 0xC5, 0x7F, 0x1B, 0x5D, 0xE5, 0x3B, 0xB0, 0xDC, 0x72, 0xCE, 0x9B, 0x6D, 0xEA,
        0xA8, 0x57, 0x89, 0x59, 0x9A, 0x70, 0xF0, 0x05, 0x1F, 0x1A, 0x0E, 0x25, 0xE8, 0x6D,
        0x88, 0x8B, 0x00, 0xDF, 0x36, 0xBD, 0xBC, 0x93, 0xEF, 0x72, 0x17, 0xC4, 0x5A, 0xCE,
        0x11, 0xC0, 0x79, 0x0D, 0x70, 0xE9, 0x95, 0x3E, 0x5B, 0x41, 0x7B, 0xA2, 0xFD, 0x9A,
        0x4C, 0xAF, 0x82, 0xF1, 0xFC, 0xE6, 0xF4, 0x5F, 0x53, 0xE2, 0x15, 0xB8, 0x35, 0x5E,
        0xF6, 0x1D, 0x89, 0x1D, 0xF1, 0xC7, 0x94, 0x23, 0x1C, 0x16, 0x2D, 0xD2, 0x41, 0x64,
        0xB5, 0x34, 0xA9, 0xD4, 0x84, 0x67, 0xCD, 0xC3, 0x23, 0x62, 0x4C, 0x2F, 0x95, 0xD4,
        0x40, 0x2F, 0xF9, 0xD6, 0x6A, 0xB1, 0x19, 0x1A, 0x81, 0x24, 0x14, 0x4A, 0xFA, 0x35,
        0xD4, 0xE3, 0x1D, 0xC8, 0x6C, 0xAA, 0x79, 0x7C, 0x31, 0xF6, 0x8B, 0x85, 0x85, 0x4C,
        0xD9, 0x59, 0xC4, 0xFA, 0xC5, 0xEC, 0x53, 0xB3, 0xB5, 0x6D, 0x37, 0x4B, 0x88, 0x8A,
        0x9E, 0x97, 0x9A, 0x65, 0x76, 0xB6, 0x34, 0x5E, 0xC8, 0x52, 0x2C, 0x96, 0x06, 0x99,
        0x02, 0x81, 0xBF, 0x3E, 0xF7, 0xC5, 0x94, 0x5D, 0x10, 0xFD, 0x21, 0xA2, 0xA1, 0xD2,
        0xE5, 0x40, 0x4C, 0x5C, 0xF2, 0x12, 0x20, 0x64, 0x13, 0x91, 0xB9, 0x8B, 0xCF, 0x82,
        0x53, 0x98, 0x30, 0x5B, 0x56, 0xE5, 0x8B, 0x61, 0x1F, 0xE5, 0x25, 0x32, 0x03, 0xE3,
        0xDF, 0x0D, 0x22, 0x46, 0x6A, 0x73, 0xB3, 0xF0, 0xFB, 0xE4, 0x3B, 0x9A, 0x62, 0x92,
        0x80, 0x91, 0x89, 0x8B, 0x8A, 0x0E, 0x5B, 0x26, 0x9D, 0xB5, 0x86, 0xB0, 0xE4, 0xDD,
        0xEF, 0x50, 0xD6, 0x82, 0xA1, 0x2D, 0x2C, 0x1B, 0xE8, 0x24, 0x14, 0x9A, 0xA2, 0x54,
        0xC6, 0x38, 0x1B, 0xB4, 0x12, 0xD7, 0x7C, 0x3F, 0x9A, 0xA9, 0x02, 0xB6, 0x88, 0xC8,
        0x17, 0x15, 0xA5, 0x9C, 0x83, 0x95, 0x58, 0x55, 0x6D, 0x35, 0xED, 0x4F, 0xC8, 0x3B,
        0x4A, 0xB1, 0x81, 0x81, 0xF4, 0x0F, 0x73, 0xDC, 0xD7, 0x68, 0x60, 0xD8, 0xD8, 0xBF,
        0x94, 0x52, 0x02, 0x37, 0xC2, 0xAC, 0x0E, 0x46, 0x3B, 0xA0, 0x9E, 0x3C, 0x97, 0x82,
        0x38, 0x0D, 0xC0, 0x7F, 0xE4, 0xFC, 0xBA, 0x34, 0x0C, 0xC2, 0x00, 0x34, 0x39, 0xFD,
        0x23, 0x14, 0x61, 0x06, 0x38, 0x07, 0x0D, 0x6C, 0x9E, 0xEA, 0x0A, 0x70, 0xBA, 0xE8,
        0x3B, 0x5D, 0x5D, 0x3C, 0x5D, 0x3F, 0xDE, 0x26, 0xDD, 0x01, 0x60, 0x6C, 0x8C, 0x52,
        0x01, 0x58, 0xE7, 0xE5, 0x10, 0x40, 0x20, 0xF2, 0x48, 0xCE, 0xAA, 0x66, 0x64, 0x57,
        0xC1, 0x0A, 0xEB, 0xF0, 0x68, 0xF8, 0xA3, 0xBD, 0x5C, 0xE7, 0xB5, 0x2C, 0x6A, 0xF0,
        0xAB, 0xD5, 0x94, 0x4A, 0xF1, 0xAD, 0x47, 0x52, 0xC9, 0x11, 0x39, 0x76, 0x08, 0x3C,
        0x03, 0xB6, 0xC3, 0x4E, 0x1D, 0x47, 0xED, 0x69, 0x64, 0x4C, 0xAD, 0x78, 0x2C, 0x2F,
        0x7D, 0x05, 0xF8, 0xA1, 0x48, 0x96, 0x1D, 0x96, 0x5F, 0xA2, 0xE1, 0x72, 0x3A, 0x8D,
        0xDE, 0xBC, 0x22, 0xA9, 0x0C, 0xD7, 0x83, 0xDD, 0x1F, 0x4D, 0xB3, 0x8F, 0xB9, 0xAE,
        0x5A, 0x67, 0x14, 0xB3, 0xD9, 0x46, 0x78, 0x16, 0x43, 0xD3, 0x17, 0xB7, 0xDD, 0x79,
        0x38, 0x1C, 0xF7, 0x89, 0xA9, 0x58, 0x8B, 0xB3, 0xE1, 0x93, 0xB9, 0x2A, 0x0B, 0x60,
        0xD6, 0xB0, 0x7D, 0x04, 0x7F, 0x69, 0x84, 0xB0, 0x60, 0x9E, 0xC5, 0x75, 0x43, 0xC3,
        0x94, 0xCA, 0x8D, 0x5E, 0x5B, 0xCC, 0x2A, 0x73, 0x1A, 0x79, 0x61, 0x8B, 0xD1, 0xE2,
        0xE0, 0xDA, 0x87, 0x04, 0xAF, 0x98, 0xF2, 0x0F, 0x5F, 0x8F, 0x54, 0x52, 0xDD, 0xF6,
        0x46, 0xB9, 0x5B, 0x34, 0x1D, 0xD7, 0xF0, 0xD2, 0xCC, 0x1F, 0xA1, 0x5B, 0xD9, 0x89,
        0x5C, 0xD5, 0xB6, 0x5A, 0xA1, 0xCB, 0x94, 0xB5, 0xE2, 0xE7, 0x88, 0xFD, 0xA9, 0x82,
        0x5B, 0x65, 0x66, 0x39, 0x19, 0x3D, 0x98, 0x32, 0x81, 0x54, 0xA4, 0xF2, 0xC3, 0x54,
        0x95, 0xA3, 0x8B, 0x6E, 0xA0, 0xD2, 0xFF, 0xAA, 0xA3, 0x5D, 0xF9, 0x2C, 0x20, 0x3C,
        0x7F, 0x31, 0xCB, 0xBC, 0xA7, 0xBD, 0x03, 0xC3, 0xC2, 0x30, 0x21, 0x90, 0xCE, 0xCD,
        0x16, 0x1F, 0xD4, 0x92, 0x37, 0xE4, 0xF8, 0x39, 0xE3, 0xF3,
    ];
    const TEST_SK: [u8; crate::params::lvl2::SECRETKEYBYTES] = [
        0x1C, 0x0E, 0xE1, 0x11, 0x1B, 0x08, 0x00, 0x3F, 0x28, 0xE6, 0x5E, 0x8B, 0x3B, 0xDE,
        0xB0, 0x37, 0xCF, 0x8F, 0x22, 0x1D, 0xFC, 0xDA, 0xF5, 0x95, 0x0E, 0xDB, 0x38, 0xD5,
        0x06, 0xD8, 0x5B, 0xEF, 0x39, 0x4D, 0x16, 0x95, 0x05, 0x9D, 0xFF, 0x40, 0xAE, 0x25,
        0x6C, 0x5D, 0x5E, 0xDA, 0xBF, 0xB6, 0x9F, 0x5F, 0x40, 0xF3, 0x7A, 0x58, 0x8F, 0x50,
        0x53, 0x2C, 0xA4, 0x08, 0xA8, 0x16, 0x8A, 0xB1, 0x87, 0xD0, 0xAD, 0x11, 0x52, 0x21,
        0x10, 0x93, 0x14, 0x94, 0xBF, 0x2C, 0xAE, 0xAE, 0x36, 0x97, 0x97, 0x11, 0xBC, 0x58,
        0x5B, 0x32, 0xF0, 0x8C, 0x78, 0x49, 0x6F, 0x37, 0x9D, 0x60, 0x4D, 0x53, 0xC0, 0xA6,
        0x71, 0x1A, 0x96, 0x6C, 0x11, 0x31, 0x2A, 0xD9, 0xA8, 0x21, 0xD8, 0x08, 0x65, 0x42,
        0xA6, 0x00, 0xA4, 0xB4, 0x2C, 0x19, 0x40, 0x72, 0x02, 0x42, 0x62, 0x81, 0x06, 0x21,
        0x0A, 0x43, 0x85, 0x23, 0x31, 0x70, 0x93, 0x08, 0x10, 0x8B, 0x18, 0x8C, 0x02, 0x24,
        0x92, 0xC1, 0xB2, 0x84, 0x12, 0xC4, 0x21, 0x8B, 0x04, 0x21, 0x81, 0xC8, 0x61, 0x02,
        0x48, 0x05, 0x9C, 0x92, 0x01, 0xC0, 0x34, 0x88, 0x19, 0x32, 0x6C, 0x58, 0x20, 0x46,
        0x89, 0x18, 0x68, 0xA2, 0xC2, 0x8D, 0x82, 0x34, 0x6A, 0x1C, 0x09, 0x42, 0x00, 0xA2,
        0x8C, 0xE3, 0xA6, 0x49, 0x1C, 0x11, 0x2C, 0xC2, 0x48, 0x12, 0xE0, 0x90, 0x21, 0x91,
        0x98, 0x50, 0x62, 0xC0, 0x84, 0x62, 0x24, 0x51, 0xCA, 0x06, 0x2C, 0x64, 0x24, 0x0E,
        0x1B, 0xB3, 0x31, 0x24, 0x96, 0x85, 0x4B, 0x46, 0x06, 0xDB, 0x26, 0x68, 0xC3, 0x82,
        0x68, 0x44, 0x10, 0x46, 0xC9, 0xB6, 0x21, 0x14, 0x04, 0x81, 0x14, 0x45, 0x50, 0x24,
        0x42, 0x08, 0x44, 0x22, 0x71, 0x0B, 0x92, 0x45, 0x9A, 0xA0, 0x81, 0x1A, 0x91, 0x70,
        0x9C, 0x24, 0x10, 0x03, 0x95, 0x70, 0x04, 0xC5, 0x04, 0xC8, 0x26, 0x92, 0xD2, 0x92,
        0x00, 0xC0, 0xB2, 0x60, 0xC0, 0xA2, 0x68, 0x09, 0x19, 0x0A, 0xA2, 0x30, 0x0E, 0x18,
        0x89, 0x69, 0xE0, 0x00, 0x8D, 0xD8, 0x48, 0x62, 0xDA, 0x14, 0x71, 0x20, 0x18, 0x05,
        0x19, 0x07, 0x44, 0x04, 0x12, 0x40, 0x9B, 0x12, 0x40, 0x11, 0x80, 0x10, 0xD1, 0x42,
        0x81, 0x99, 0x28, 0x50, 0x8B, 0x10, 0x91, 0x02, 0x24, 0x64, 0xA0, 0x20, 0x6D, 0x12,
        0x46, 0x21, 0x1C, 0x83, 0x8C, 0x1B, 0x47, 0x69, 0x01, 0x06, 0x90, 0xCC, 0x06, 0x24,
        0x81, 0x84, 0x69, 0x20, 0x98, 0x2C, 0x24, 0x12, 0x05, 0x21, 0xB1, 0x50, 0x41, 0x36,
        0x02, 0x98, 0x44, 0x6E, 0xD1, 0xA6, 0x31, 0x11, 0x05, 0x6A, 0xD3, 0xA8, 0x40, 0xCA,
        0xA8, 0x4C, 0x62, 0xB0, 0x00, 0x03, 0x13, 0x4A, 0x53, 0x34, 0x46, 0x14, 0x19, 0x40,
        0x04, 0xC5, 0x4C, 0xE3, 0x06, 0x69, 0x5A, 0xB0, 0x89, 0x61, 0x16, 0x8E, 0xCB, 0x10,
        0x80, 0x8B, 0x16, 0x8E, 0xD9, 0x90, 0x64, 0x0B, 0x94, 0x60, 0x24, 0x83, 0x85, 0x1A,
        0xB3, 0x04, 0x54, 0x26, 0x22, 0x51, 0xB8, 0x25, 0x1C, 0x42, 0x4A, 0x0B, 0x81, 0x48,
        0x42, 0xC4, 0x44, 0x5A, 0x10, 0x20, 0x23, 0x80, 0x84, 0x09, 0xB7, 0x25, 0x4C, 0xC6,
        0x48, 0x14, 0x85, 0x4D, 0x19, 0x38, 0x0E, 0x60, 0x16, 0x51, 0xD8, 0x32, 0x6A, 0x0A,
        0x91, 0x89, 0x08, 0xC1, 0x70, 0xE0, 0x96, 0x4D, 0x18, 0x46, 0x8C, 0x01, 0x32, 0x8D,
        0x91, 0xC4, 0x05, 0x4A, 0x00, 0x61, 0x23, 0x08, 0x68, 0xA2, 0x10, 0x42, 0x10, 0xA8,
        0x61, 0x13, 0x06, 0x21, 0x8A, 0x24, 0x8E, 0x62, 0x06, 0x89, 0xC9, 0xB2, 0x45, 0x08,
        0x27, 0x84, 0x51, 0x20, 0x0D, 0x98, 0x04, 0x66, 0xDC, 0x42, 0x05, 0x44, 0x24, 0x85,
        0x24, 0x26, 0x28, 0x22, 0x21, 0x61, 0x20, 0x16, 0x09, 0x0B, 0xA6, 0x2C, 0x0A, 0x11,
        0x44, 0xE0, 0x92, 0x81, 0x58, 0x48, 0x0D, 0x42, 0x22, 0x10, 0xA0, 0x06, 0x09, 0x8B,
        0x24, 0x6E, 0x81, 0x28, 0x8C, 0xC0, 0x24, 0x80, 0x90, 0x30, 0x8D, 0x84, 0x36, 0x40,
        0x4C, 0xA6, 0x84, 0x50, 0x04, 0x24, 0x94, 0xB6, 0x8D, 0xA2, 0x92, 0x6D, 0x18, 0xB3,
        0x44, 0xA0, 0x00, 0x85, 0xE3, 0xB8, 0x05, 0x14, 0x05, 0x04, 0xA4, 0xC2, 0x90, 0x84,
        0x22, 0x81, 0xC3, 0x26, 0x2D, 0x0B, 0x20, 0x66, 0xCC, 0x90, 0x31, 0x98, 0x38, 0x28,
        0x10, 0x16, 0x6C, 0xC1, 0x34, 0x45, 0xC0, 0x10, 0x22, 0x24, 0xC6, 0x88, 0x03, 0x46,
        0x32, 0xD8, 0x40, 0x90, 0x1C, 0x20, 0x68, 0x04, 0x15, 0x28, 0x9A, 0x18, 0x81, 0x44,
        0x98, 0x8D, 0x9C, 0x20, 0x6E, 0x9C, 0x30, 0x2C, 0xC1, 0xB8, 0x20, 0x61, 0x42, 0x21,
        0x08, 0x03, 0x10, 0xA0, 0xC2, 0x8C, 0x58, 0x12, 0x85, 0x53, 0x20, 0x4C, 0x03, 0x30,
        0x81, 0x4C, 0xA4, 0x8D, 0x44, 0xC0, 0x8D, 0x51, 0x40, 0x4C, 0x1C, 0xA7, 0x2C, 0x44,
        0x08, 0x65, 0xA0, 0x38, 0x40, 0xDA, 0x20, 0x80, 0x81, 0x06, 0x85, 0x8C, 0x26, 0x0D,
        0xE2, 0xA8, 0x8C, 0x9C, 0x44, 0x11, 0x59, 0x42, 0x28, 0xC4, 0x26, 0x04, 0x44, 0x14,
        0x26, 0xA1, 0x42, 0x64, 0x08, 0xC0, 0x85, 0x11, 0x01, 0x86, 0x9B, 0x48, 0x31, 0x99,
        0xB2, 0x0C, 0x80, 0x46, 0x44, 0x59, 0xA8, 0x8C, 0x00, 0x42, 0x08, 0x98, 0x82, 0x90,
        0x0A, 0xB5, 0x45, 0x62, 0x24, 0x48, 0x12, 0x96, 0x05, 0x44, 0x12, 0x46, 0x00, 0xC8,
        0x88, 0x13, 0xA0, 0x61, 0xE1, 0x28, 0x4D, 0x0A, 0xB9, 0x91, 0x4B, 0x96, 0x20, 0x99,
        0xB8, 0x44, 0x00, 0x31, 0x4E, 0x98, 0x12, 0x85, 0x00, 0xB6, 0x01, 0x83, 0xA0, 0x0D,
        0x14, 0x15, 0x0E, 0x18, 0x81, 0x10, 0x19, 0x01, 0x22, 0x4A, 0x06, 0x68, 0x1A, 0x49,
        0x8D, 0xE1, 0xA2, 0x84, 0x11, 0xC6, 0x31, 0x21, 0x26, 0x25, 0x91, 0xA0, 0x6D, 0x03,
        0x05, 0x24, 0xA1, 0xB6, 0x08, 0x94, 0x44, 0x72, 0x43, 0x34, 0x12, 0x5B, 0xB4, 0x20,
        0x41, 0xB6, 0x50, 0xD0, 0x88, 0x8D, 0x0B, 0x07, 0x4D, 0x1C, 0x94, 0x64, 0x4C, 0x20,
        0x8E, 0x8B, 0x88, 0x08, 0xE0, 0x30, 0x09, 0x44, 0x20, 0x05, 0x49, 0x86, 0x4D, 0x03,
        0x13, 0x4E, 0x19, 0xC9, 0x84, 0x09, 0x37, 0x61, 0x1A, 0x43, 0x68, 0x4A, 0x80, 0x90,
        0x02, 0x04, 0x31, 0x1C, 0x17, 0x42, 0x18, 0x40, 0x80, 0xC8, 0x30, 0x8E, 0xE1, 0xA2,
        0x41, 0xC3, 0x34, 0x04, 0xA3, 0x28, 0x22, 0x51, 0x24, 0x71, 0x88, 0xD6, 0xFE, 0xF4,
        0x67, 0x12, 0xCA, 0x18, 0x28, 0x72, 0xAB, 0x29, 0x19, 0x67, 0x8A, 0xFF, 0x9D, 0x94,
        0xE7, 0x43, 0xE0, 0x63, 0xA3, 0x9E, 0x0C, 0x35, 0xCA, 0xF7, 0x2A, 0x7F, 0x2E, 0xDA,
        0x28, 0xE6, 0x58, 0x58, 0x52, 0x0D, 0x5D, 0x84, 0x67, 0xDE, 0x74, 0x7C, 0xF3, 0x40,
        0x65, 0x3B, 0x52, 0xC2, 0x68, 0xF5, 0x54, 0x13, 0xF5, 0xAD, 0xDC, 0x7D, 0x49, 0x01,
        0x1E, 0xC3, 0x3E, 0xDD, 0x53, 0x74, 0x23, 0xA8, 0x42, 0x88, 0x86, 0x93, 0x37, 0xAE,
        0xA0, 0x78, 0x1A, 0x12, 0x42, 0x69, 0x07, 0x14, 0x51, 0x72, 0x2D, 0xB3, 0xBB, 0x8F,
        0x2C, 0xE5, 0xB1, 0x55, 0x2F, 0x83, 0xD2, 0xAF, 0x07, 0xF2, 0x56, 0x13, 0x91, 0x8A,
        0x9F, 0x4E, 0x6F, 0x12, 0x57, 0x60, 0x38, 0x88, 0xE5, 0x89, 0x30, 0x8C, 0xA5, 0xF9,
        0x5F, 0x07, 0x14, 0x3D, 0x23, 0xBA, 0xAE, 0x17, 0x52, 0x0B, 0x36, 0xB6, 0xE0, 0xE9,
        0x4F, 0xAF, 0x68, 0x45, 0xEB, 0x21, 0x31, 0xAE, 0xC3, 0x83, 0xE6, 0x3B, 0xC8, 0x64,
        0x4E, 0xE5, 0xF1, 0xAC, 0xCB, 0xA8, 0x2F, 0x92, 0x11, 0xE5, 0x7A, 0xFC, 0xBF, 0x50,
        0x9C, 0x11, 0x31, 0xA3, 0x74, 0x66, 0xBC, 0x91, 0xB3, 0x57, 0xDC, 0xBB, 0xBC, 0x14,
        0xCC, 0xC3, 0x19, 0xC4, 0xCC, 0x6A, 0xC7, 0x5F, 0xCD, 0xC8, 0x2C, 0x65, 0x96, 0xD0,
        0x77, 0x70, 0xC8, 0x27, 0x7A, 0xD3, 0x70, 0xB1, 0x92, 0xA0, 0xB4, 0xE0, 0x5F, 0x81,
        0x2E, 0x0E, 0x26, 0x5D, 0x29, 0x12, 0xAA, 0x29, 0xF0, 0x3F, 0xC9, 0xF7, 0x2D, 0xFA,
        0x69, 0xC9, 0xB1, 0x29, 0x1A, 0x3F, 0xC5, 0x83, 0x64, 0x2B, 0x23, 0x5F, 0x69, 0x91,
        0xA9, 0x54, 0x78, 0x83, 0x47, 0xF6, 0x0A, 0x03, 0x28, 0xC4, 0x8E, 0xCE, 0xE5, 0x1B,
        0xA0, 0x2D, 0xFF, 0x32, 0x3A, 0xBD, 0x91, 0x16, 0x67, 0xCB, 0x14, 0x54, 0x9B, 0x61,
        0x8F, 0x1C, 0x5D, 0x25, 0x0C, 0xAC, 0x9E, 0x35, 0xE0, 0x71, 0x60, 0x19, 0x92, 0xFB,
        0xEC, 0x0B, 0xAE, 0x6F, 0x74, 0x21, 0x30, 0x81, 0x40, 0x47, 0x44, 0xD1, 0x2F, 0x2A,
        0x0E, 0x04, 0xBD, 0xB2, 0x65, 0xE0, 0x92, 0x4C, 0xAD, 0xA4, 0x0D, 0x1F, 0xA1, 0xF3,
        0x8A, 0xCA, 0x46, 0x06, 0xBF, 0xD4, 0x57, 0x57, 0x12, 0xB8, 0x26, 0x0A, 0x45, 0x6F,
        0xDD, 0xEE, 0xEF, 0xE7, 0xCA, 0x25, 0x9B, 0xCD, 0xA9, 0x7B, 0x9B, 0x93, 0x9A, 0x5F,
        0xD2, 0x88, 0x9C, 0x9B, 0x49, 0xFB, 0x7D, 0x4E, 0x35, 0x53, 0xDE, 0xA6, 0x1B, 0x33,
        0x39, 0xBD, 0x0E, 0x6B, 0x16, 0xBF, 0x3B, 0xB2, 0x27, 0x10, 0x3B, 0xF9, 0x20, 0x2E,
        0x72, 0xDC, 0x50, 0x2E, 0x28, 0xF7, 0xCE, 0x15, 0x59, 0xA4, 0x63, 0x1F, 0x37, 0x25,
        0x20, 0x32, 0x4E, 0x4E, 0xBA, 0x07, 0x54, 0x5F, 0x78, 0xBF, 0x4D, 0x94, 0xB0, 0xE5,
        0xB8, 0xBF, 0x51, 0xB8, 0xF1, 0x76, 0x53, 0x3D, 0x5C, 0xFE, 0xA5, 0x23, 0x2F, 0x28,
        0x3A, 0x47, 0x60, 0x5F, 0xA6, 0x5D, 0xDB, 0x17, 0xC8, 0x91, 0xC2, 0x51, 0x01, 0x1C,
        0x4E, 0x98, 0xEE, 0xB6, 0xEB, 0x00, 0xCB, 0x65, 0xBA, 0x31, 0xC8, 0xF0, 0x25, 0xC8,
        0x7A, 0x9F, 0xE0, 0x2D, 0xBC, 0x10, 0xC5, 0xD8, 0x3A, 0x06, 0x5E, 0xBA, 0x5D, 0x7B,
        0x2A, 0x19, 0xD5, 0xA1, 0xCB, 0x2C, 0x16, 0x0A, 0xE1, 0x66, 0xE8, 0x67, 0xF2, 0xAF,
        0x8C, 0x7D, 0x49, 0xD6, 0x3F, 0xB8, 0x3A, 0x61, 0x49, 0x57, 0xFC, 0x0A, 0x3B, 0x5A,
        0x5C, 0x74, 0x99, 0x0E, 0x9A, 0x2B, 0x02, 0x12, 0x0C, 0x7E, 0x6D, 0xE3, 0x7E, 0x15,
        0x5F, 0xB4, 0x72, 0xF5, 0x0F, 0x0A, 0x45, 0xE4, 0x7C, 0xF5, 0xF9, 0xD7, 0xA4, 0xC8,
        0x29, 0x82, 0xC9, 0xDC, 0x86, 0xAE, 0x87, 0x7C, 0x3F, 0xD1, 0x88, 0x59, 0x43, 0xE4,
        0x39, 0xFB, 0x00, 0x3C, 0x7A, 0x9A, 0x42, 0xF7, 0x1B, 0x4F, 0xF6, 0xF0, 0xA2, 0x8B,
        0x14, 0x0C, 0xBD, 0xBA, 0x6E, 0x71, 0xB1, 0x3A, 0xC3, 0x1B, 0x23, 0xDE, 0x9E, 0xAB,
        0x78, 0x37, 0xE1, 0x5A, 0x69, 0xF8, 0x33, 0xEB, 0x7B, 0x56, 0xA7, 0x1D, 0x8B, 0xC2,
        0xCA, 0xF1, 0xF2, 0xA3, 0x1C, 0x34, 0x5B, 0xD5, 0xF4, 0x6E, 0xE0, 0x13, 0xA7, 0xC6,
        0x89, 0x37, 0x23, 0x37, 0x19, 0x1D, 0xAA, 0x80, 0x0C, 0x0A, 0xC6, 0xC4, 0x6C, 0x9F,
        0xF6, 0x88, 0xB1, 0xA0, 0x13, 0x47, 0xF2, 0x57, 0xC4, 0x74, 0xAA, 0x3D, 0x97, 0xC1,
        0xD6, 0x3A, 0x8C, 0x00, 0xE0, 0xA3, 0x7B, 0x68, 0x16, 0x73, 0xF5, 0x7C, 0x1C, 0x9C,
        0x8F, 0xCC, 0xD4, 0x6F, 0x17, 0x4C, 0x74, 0xA2, 0x9D, 0x84, 0xCE, 0xB7, 0x1F, 0x7E,
        0x6B, 0x2F, 0x8C, 0xD2, 0xB0, 0x89, 0xED, 0x43, 0xF7, 0xC9, 0x6D, 0xAE, 0x81, 0xA2,
        0x23, 0x41, 0x8C, 0x20, 0xB1, 0x6F, 0x1D, 0xF3, 0xD1, 0xA9, 0x78, 0xAE, 0x28, 0xF6,
        0xDF, 0x35, 0xEC, 0x55, 0x9D, 0x04, 0xD2, 0x0E, 0xC7, 0x4B, 0x22, 0x4A, 0xEA, 0x31,
        0xA2, 0x89, 0xB0, 0x15, 0xB0, 0x69, 0xE9, 0xCB, 0xBB, 0xF7, 0xCF, 0x6D, 0xE9, 0x4C,
        0xFB, 0x2A, 0x96, 0xE4, 0xAE, 0x34, 0x62, 0xC9, 0x60, 0x03, 0xCD, 0xDA, 0x87, 0xDB,
        0x56, 0x1A, 0xF2, 0xCE, 0x3C, 0x0B, 0xA1, 0xD9, 0x04, 0x13, 0xFD, 0xCE, 0x3C, 0xCF,
        0x43, 0x90, 0xC0, 0x2C, 0x1C, 0xB9, 0xF6, 0x54, 0xF4, 0x82, 0x0E, 0xC3, 0x30, 0x15,
        0x45, 0x7D, 0x4A, 0x62, 0x9F, 0xBF, 0x39, 0x41, 0x9C, 0xAB, 0x76, 0x42, 0xD6, 0x88,
        0x5E, 0x10, 0x3F, 0xCE, 0x0D, 0x42, 0x06, 0xCC, 0xE7, 0xC1, 0x2C, 0x6F, 0xC4, 0x4F,
        0xA3, 0x3A, 0xD0, 0x86, 0x4C, 0x33, 0x71, 0xA7, 0xCB, 0xE8, 0x20, 0xE3, 0xB3, 0x71,
        0xB6, 0x56, 0xA3, 0x8F, 0x2E, 0x7F, 0xF1, 0x8F, 0xE4, 0xA5, 0x0C, 0x8A, 0xB3, 0xF8,
        0x5D, 0x78, 0x3F, 0xB5, 0x78, 0x35, 0xCE, 0xD8, 0x49, 0x0B, 0x84, 0xEE, 0x0D, 0x99,
        0xAF, 0x0D, 0x64, 0xC4, 0x83, 0xCE, 0xB6, 0x36, 0x6F, 0xF5, 0x4F, 0x8A, 0xC8, 0xA4,
        0x0D, 0xB1, 0xAF, 0xA5, 0x73, 0xA4, 0xFB, 0x32, 0x6C, 0x74, 0xF0, 0x23, 0x6E, 0xCE,
        0xF3, 0xDA, 0x71, 0x20, 0x66, 0x5C, 0xCE, 0x05, 0xDD, 0x65, 0x4B, 0x50, 0x71, 0x72,
        0x3A, 0x83, 0x48, 0xE7, 0xCD, 0x77, 0x93, 0x51, 0x38, 0x19, 0xB6, 0x1C, 0xB6, 0x4E,
        0x13, 0x28, 0xE8, 0xB2, 0x2E, 0x76, 0x64, 0xBD, 0x6B, 0x41, 0xB5, 0x71, 0x0D, 0x19,
        0xEA, 0x88, 0x09, 0xD4, 0x45, 0x08, 0x50, 0xE9, 0x07, 0xDF, 0xC4, 0xD0, 0xB7, 0x5F,
        0x58, 0x8C, 0xEC, 0xE9, 0x62, 0xE9, 0xE0, 0x93, 0x7C, 0xE1, 0x40, 0x24, 0x46, 0xA4,
        0xD2, 0x89, 0x1A, 0x46, 0xE6, 0x61, 0x7F, 0xB2, 0x9D, 0x4F, 0xCD, 0x71, 0x26, 0x06,
        0xF7, 0x81, 0x9E, 0xCA, 0x60, 0xF7, 0xE0, 0xD5, 0xB1, 0x9E, 0x7F, 0xFB, 0x57, 0xC7,
        0x3C, 0x16, 0xFF, 0xEE, 0xB9, 0x00, 0x38, 0x41, 0x0C, 0xB9, 0xFC, 0xBB, 0x5E, 0x9D,
        0x51, 0xEB, 0x3E, 0xB6, 0x29, 0x7E, 0x9F, 0xF6, 0xAB, 0x70, 0x88, 0xFE, 0x2D, 0x9B,
        0x23, 0x7B, 0xC2, 0x4C, 0xF7, 0xF8, 0x29, 0x01, 0x18, 0xA5, 0xE0, 0xE0, 0x0A, 0x0B,
        0x90, 0x3F, 0xB6, 0x37, 0x5C, 0x84, 0x81, 0x76, 0xCD, 0x0A, 0x8C, 0x88, 0x75, 0xCC,
        0x59, 0x19, 0x9C, 0xDA, 0x11, 0xA8, 0x7A, 0x78, 0xF6, 0x5C, 0xC4, 0x04, 0x33, 0x0B,
        0x08, 0x75, 0x71, 0xFD, 0x06, 0x33, 0xE2, 0x71, 0x29, 0xFD, 0xAB, 0x5A, 0x8A, 0x1F,
        0x79, 0x3E, 0x52, 0x41, 0x2B, 0x00, 0x83, 0xFD, 0x5C, 0x74, 0xDB, 0x3C, 0xF6, 0x0C,
        0x25, 0x43, 0xCE, 0x7C, 0x91, 0xB2, 0x80, 0x0E, 0x40, 0x20, 0x3F, 0x8D, 0x99, 0xFE,
        0x5F, 0xDE, 0x5B, 0x10, 0x8E, 0x7E, 0xDC, 0x80, 0xEB, 0xB9, 0xBB, 0x34, 0x98, 0x6E,
        0xC5, 0xC5, 0xA8, 0xF5, 0x80, 0xE7, 0x57, 0x52, 0x90, 0x7F, 0xF0, 0xF2, 0x94, 0xC8,
        0x66, 0xC2, 0xCF, 0x1F, 0x36, 0x2E, 0x84, 0x0B, 0x68, 0x81, 0xBD, 0x43, 0x21, 0x92,
        0x01, 0x78, 0x1C, 0x63, 0xB0, 0x03, 0x9A, 0x95, 0xBC, 0xFB, 0x4A, 0x0F, 0xEC, 0xE5,
        0x69, 0xDF, 0x00, 0x52, 0x3C, 0xE9, 0xC0, 0x84, 0xB0, 0x22, 0xB3, 0xB0, 0x22, 0x24,
        0x2E, 0x28, 0x41, 0x97, 0x96, 0xAC, 0xF0, 0xA0, 0xC9, 0x95, 0xF9, 0x48, 0xDB, 0xFF,
        0xFD, 0x30, 0xD7, 0x7E, 0xD1, 0x05, 0xA3, 0xC9, 0x94, 0x3C, 0x40, 0x6B, 0x30, 0x5B,
        0xC8, 0x1A, 0x6A, 0x24, 0x8A, 0x29, 0x15, 0x48, 0xF2, 0xA6, 0x7F, 0x43, 0x8D, 0x96,
        0x6A, 0x57, 0xD5, 0x3F, 0x4B, 0x7B, 0xE1, 0x53, 0x54, 0xE5, 0x81, 0xBE, 0x16, 0xF7,
        0xAD, 0x64, 0xD1, 0x64, 0xE8, 0x57, 0x87, 0xDF, 0x58, 0x49, 0xC8, 0x10, 0xAF, 0xC2,
        0x8D, 0x06, 0x48, 0x2F, 0x44, 0x1B, 0x5F, 0xDE, 0x3D, 0xB2, 0xED, 0x36, 0xDD, 0x25,
        0xAA, 0x66, 0x64, 0xD4, 0xD4, 0x3F, 0xFA, 0x32, 0xED, 0xA2, 0x56, 0x89, 0xC9, 0xF4,
        0xA5, 0xD5, 0x14, 0xFC, 0x66, 0x23, 0x1C, 0x54, 0x01, 0x52, 0x09, 0x22, 0x52, 0x44,
        0x38, 0xEF, 0x1D, 0xC7, 0x8D, 0x69, 0x3C, 0x97, 0x18, 0xDE, 0xBB, 0xD2, 0x43, 0x31,
        0x26, 0x74, 0xC8, 0x99, 0xF1, 0x89, 0x10, 0xE3, 0x89, 0xC8, 0xEB, 0xE5, 0x05, 0x82,
        0x4B, 0xCC, 0x42, 0xCD, 0x4A, 0x9A, 0xCE, 0x19, 0x37, 0x68, 0x22, 0x02, 0x19, 0x01,
        0x1F, 0x3B, 0x1F, 0x33, 0x54, 0x27, 0xBF, 0xF9, 0xE8, 0xBD, 0xED, 0x5C, 0x08, 0x71,
        0x1A, 0x09, 0xC2, 0xB7, 0x1C, 0xB9, 0x64, 0xC5, 0x6A, 0x83, 0x93, 0xBF, 0xD2, 0xB5,
        0x6E, 0x9B, 0x6B, 0x2F, 0x51, 0x3E, 0x68, 0x25, 0x87, 0xDC, 0x1B, 0x8E, 0xD1, 0x96,
        0x06, 0x63, 0x26, 0x87, 0x10, 0x25, 0x62, 0x80, 0x36, 0x70, 0x00, 0x63, 0x17, 0x6D,
        0x34, 0x5D, 0xE3, 0x84, 0xE1, 0x82, 0xD6, 0xC4, 0x17, 0xA3, 0x2A, 0xB1, 0x10, 0x95,
        0xEF, 0x59, 0xBB, 0x4D, 0x17, 0x1B, 0x9C, 0xF8, 0x1D, 0x17, 0xAC, 0x42, 0x66, 0x4D,
        0xED, 0x93, 0x3C, 0xCB, 0x72, 0x2C, 0x69, 0x85, 0x7F, 0xFC, 0x53, 0xC8, 0xE7, 0xF2,
        0x47, 0x4B, 0x0C, 0xB2, 0xDF, 0xF2, 0xDD, 0xC8, 0xA5, 0xC6, 0x01, 0xC8, 0x4A, 0x70,
        0x19, 0x81, 0x19, 0x9B, 0xCC, 0xF7, 0x41, 0x12, 0xA6, 0xEC, 0x06, 0x2C, 0x4F, 0xEB,
        0x60, 0x1A, 0x02, 0x8A, 0xF0, 0x10, 0x32, 0xAD, 0xB6, 0xBD, 0x15, 0xD4, 0xC2, 0xB9,
        0x55, 0x0A, 0xA8, 0x50, 0xAD, 0x62, 0xCC, 0xC3, 0xA3, 0x66, 0x5D, 0x52, 0x12, 0xB1,
        0x2E, 0x0F, 0xD5, 0xC5, 0x32, 0x6A, 0x1E, 0x5E, 0xB1, 0xF1, 0x0D, 0x55, 0x7D, 0x94,
        0x60, 0x5E, 0x8E, 0x3F, 0x35, 0x6E, 0x08, 0xFF, 0x7F, 0xD8, 0x84, 0xED, 0x3C, 0x42,
        0x05, 0x46, 0x35, 0x94, 0xC9, 0xAF, 0x2F, 0x39, 0xE4, 0xB1, 0x27, 0x46, 0x95, 0x23,
        0x4B, 0x54, 0xEE, 0xCE, 0xD9, 0x3F, 0x46, 0x0E, 0xDF, 0x1A, 0x13, 0xC2, 0xCB, 0x4B,
        0x17, 0xD3, 0x22, 0xF6, 0xF7, 0x9F, 0xE1, 0x6F, 0x03, 0x57, 0xC1, 0xC4, 0x73, 0x98,
        0x63, 0xE7, 0x96, 0x79, 0x1F, 0x86, 0x47, 0xFA, 0xBF, 0x73, 0x0A, 0xB0, 0x0E, 0x0D,
        0xA5, 0x09, 0x70, 0x6D, 0x94, 0x57, 0x17, 0x40, 0xF6, 0x1F, 0x7B, 0xAF, 0x36, 0x6D,
        0x27, 0x74, 0xC9, 0xB5, 0xB8, 0xC6, 0x1D, 0xD6, 0xBE, 0x98, 0x19, 0xA6, 0x02, 0x8B,
        0x26, 0x4B, 0xB2, 0xE4, 0xAE, 0xA5, 0x4B, 0x56, 0xD4, 0xEC, 0xAB, 0x5B, 0x52, 0x8C,
        0xE0, 0xC0, 0xC0, 0xCC, 0xDB, 0x73, 0x02, 0x33, 0x52, 0xCB, 0x00, 0x44, 0x5B, 0xAB,
        0x6F, 0x74, 0x67, 0xB4, 0x64, 0x4D, 0x43, 0x61, 0xC4, 0x64, 0xFA, 0xC6, 0xB5, 0xB1,
        0x37, 0xD3, 0x23, 0x91, 0x02, 0x1B, 0x47, 0x5F, 0xCB, 0x5F, 0x31, 0x77, 0x4F, 0xD8,
        0xEC, 0xAB, 0xDF, 0x65, 0x47, 0x5F, 0x25, 0x57, 0x4C, 0x65, 0x55, 0x9C, 0xB3, 0x31,
        0xF4, 0x1C, 0x0F, 0x49, 0x8B, 0x74, 0xDD, 0x94, 0x1C, 0x34, 0x4C, 0x50, 0xD8, 0xE6,
        0x4F, 0x95, 0x78, 0x71, 0x4A, 0x32, 0x56, 0x1F, 0xAA, 0xCE, 0xAF, 0x78, 0x14, 0x8E,
        0x6D, 0xA4, 0xB5, 0x66, 0x82, 0x69, 0x25, 0x71, 0x4B, 0x17, 0x10, 0x8A, 0xFD, 0xD5,
        0x46, 0x38, 0x5A, 0x3C, 0xD4, 0x54, 0xD5, 0xCA, 0xA1, 0x69, 0x60, 0x91, 0x62, 0x82,
        0xA4, 0x7C, 0x43, 0x15, 0xCE, 0x23, 0x6B, 0xD9, 0xE3, 0x25, 0x5C, 0x60, 0x4E, 0xBD,
        0xC3, 0x97, 0x72, 0xDB, 0x5C, 0xE0, 0xB2, 0x36,
    ];
    const TEST_MSG: [u8; 33] = [0xD8, 0x1C, 0x4D, 0x8D, 0x73, 0x4F, 0xCB, 0xFB, 0xEA, 0xDE, 0x3D, 0x3F, 0x8A, 0x03, 0x9F, 0xAA, 0x2A, 0x2C, 0x99, 0x57, 0xE8, 0x35, 0xAD, 0x55, 0xB2, 0x2E, 0x75, 0xBF, 0x57, 0xBB, 0x55, 0x6A, 0xC8];
    const TEST_SIG: [u8; crate::params::lvl2::SIGNBYTES] = [0xAF, 0x59, 0x20, 0x77, 0x46, 0x03, 0xD2, 0x0E, 0x98, 0xA7, 0x9A, 0xA3, 0xAB, 0xFA, 0x32, 0xB6, 0xE2, 0x25, 0x19, 0xE6, 0x73, 0xE3, 0x7A, 0xC4, 0xAC, 0x73, 0xFE, 0x85, 0x34, 0x1E, 0x2C, 0x29, 0x23, 0xC1, 0x99, 0x2E, 0x1B, 0x0B, 0xBE, 0x38, 0x73, 0xD7, 0xC8, 0xFC, 0x56, 0x62, 0xF2, 0x07, 0xBF, 0x58, 0xEA, 0x38, 0x1C, 0xD4, 0xA3, 0xA0, 0xC0, 0x62, 0xDE, 0xC4, 0x5B, 0xDA, 0xF8, 0xBA, 0x0A, 0xA5, 0x2B, 0xEF, 0x6F, 0xA1, 0x4F, 0x3F, 0x6C, 0xF2, 0x8F, 0x76, 0x20, 0xBF, 0x94, 0xA9, 0x2C, 0xC2, 0x7D, 0x04, 0x54, 0x14, 0xA6, 0x4D, 0x65, 0xC0, 0x14, 0x96, 0x30, 0x52, 0x80, 0x24, 0x28, 0xBF, 0x39, 0x87, 0xA2, 0xD4, 0x75, 0x16, 0xCA, 0x5C, 0x78, 0xAA, 0xB9, 0x6B, 0x7B, 0xE1, 0x1B, 0xCA, 0x5F, 0x2C, 0x5A, 0x26, 0xF3, 0xFC, 0xE3, 0xA2, 0x6E, 0x8E, 0x09, 0xA2, 0x73, 0x8F, 0x38, 0x6F, 0x75, 0xD4, 0x48, 0xF9, 0x37, 0xEF, 0x19, 0xA8, 0x46, 0xBD, 0x4D, 0xD9, 0x49, 0xCA, 0xAF, 0x36, 0xDB, 0x56, 0x29, 0x88, 0x4A, 0xF5, 0x3A, 0x02, 0x3E, 0x3F, 0x18, 0x0F, 0xE4, 0xC0, 0xFA, 0xFF, 0x7B, 0xE5, 0xDF, 0xE4, 0xE8, 0x9A, 0xDE, 0x30, 0x95, 0xA6, 0x56, 0x00, 0x42, 0x14, 0x61, 0xAD, 0x08, 0xC1, 0x29, 0xD6, 0xCE, 0xA8, 0x51, 0xBB, 0x39, 0xC0, 0xD7, 0xA7, 0xD1, 0x51, 0x40, 0x56, 0x89, 0xA0, 0x91, 0xFA, 0x4D, 0xEB, 0xAC, 0x37, 0x3C, 0xF5, 0x4A, 0xE0, 0x78, 0xF0, 0xAF, 0x75, 0x57, 0xBB, 0xC6, 0xF0, 0x6A, 0x53, 0x5A, 0xE8, 0x94, 0x9E, 0x0C, 0x65, 0x30, 0x8A, 0x59, 0x84, 0x00, 0x72, 0x37, 0x52, 0x95, 0x80, 0x2D, 0x0E, 0x2C, 0xE9, 0xA3, 0xDA, 0x98, 0x42, 0x6A, 0x00, 0xFF, 0x03, 0xFE, 0x80, 0x21, 0x8C, 0x0E, 0xEC, 0x8E, 0xFE, 0x58, 0x1C, 0xB9, 0xCC, 0x9A, 0x7D, 0x66, 0xB2, 0x06, 0x45, 0xA8, 0xCD, 0x04, 0x90, 0xD3, 0xCE, 0x4F, 0x7E, 0x6F, 0xEA, 0xE9, 0xC9, 0xEB, 0x7A, 0x57, 0xF9, 0x64, 0xD0, 0xEB, 0xC7, 0xC9, 0x0B, 0x7A, 0x9F, 0x86, 0x30, 0x0B, 0x3E, 0x80, 0x95, 0xE6, 0x4D, 0x12, 0x94, 0xCF, 0xC4, 0xB4, 0xD9, 0xE2, 0x72, 0xE8, 0xFA, 0x8D, 0xB5, 0x70, 0x7D, 0x70, 0x04, 0xAF, 0x22, 0xDB, 0xFF, 0x9C, 0xFD, 0x48, 0x63, 0xDF, 0x57, 0x3F, 0xE0, 0x04, 0x34, 0x1D, 0xA3, 0xCD, 0x4A, 0x30, 0x82, 0x53, 0x2C, 0x26, 0x20, 0x45, 0x5F, 0xA3, 0x7C, 0x56, 0x2B, 0xAF, 0xD5, 0x68, 0x4E, 0xA1, 0x28, 0xAF, 0xC7, 0x9E, 0x01, 0xFC, 0x9B, 0x31, 0xE8, 0x43, 0x3B, 0xAD, 0x7C, 0x02, 0x9F, 0x2F, 0x13, 0xCC, 0x10, 0x59, 0x2D, 0x23, 0x32, 0xE3, 0xE0, 0x8B, 0x80, 0xD3, 0x50, 0x46, 0x3D, 0xE7, 0x27, 0x50, 0xB1, 0xF8, 0x06, 0xF4, 0x93, 0xE1, 0x43, 0xBD, 0x5F, 0xCA, 0x7D, 0x16, 0x98, 0x08, 0x1B, 0x31, 0xBF, 0x87, 0x6B, 0x2A, 0x1B, 0xC9, 0xDF, 0x50, 0x95, 0x2D, 0x13, 0xB6, 0xC1, 0x32, 0x1B, 0x11, 0x11, 0x17, 0x21, 0x45, 0xA6, 0x27, 0xAE, 0x0B, 0x44, 0x27, 0xB9, 0x89, 0x75, 0xCB, 0xFF, 0xF7, 0xD6, 0x82, 0x75, 0x75, 0x4B, 0x45, 0xB6, 0x82, 0xD7, 0x09, 0xE1, 0x68, 0x52, 0x2E, 0x84, 0xFE, 0xA7, 0xDD, 0x3B, 0xB0, 0xF4, 0x15, 0x05, 0xFF, 0x71, 0x92, 0x64, 0x31, 0xD1, 0xA9, 0x0D, 0x4C, 0xBF, 0x9A, 0x52, 0x7A, 0xD4, 0xE2, 0x84, 0x97, 0x6F, 0xFF, 0x8B, 0xD9, 0xD6, 0x22, 0x4A, 0x4F, 0x26, 0x03, 0x91, 0xA9, 0x87, 0xFB, 0x6D, 0xA6, 0xEE, 0x42, 0xC2, 0xA4, 0x90, 0x0F, 0x40, 0x7C, 0xE1, 0xF0, 0x2E, 0x32, 0x24, 0x75, 0xD3, 0x13, 0xFB, 0xEB, 0xB6, 0x8C, 0x2E, 0x05, 0x73, 0x08, 0x09, 0x44, 0x8A, 0x74, 0x28, 0xA5, 0x94, 0x01, 0x39, 0xEB, 0xDF, 0x1B, 0x55, 0x56, 0xFC, 0xC5, 0xD4, 0x2E, 0x1A, 0x13, 0xF3, 0x22, 0x30, 0xCB, 0x6F, 0x07, 0x24, 0x83, 0x1D, 0x0D, 0x07, 0x1B, 0xBA, 0x5A, 0x67, 0x04, 0x80, 0x6F, 0x47, 0x5B, 0x74, 0xBA, 0x91, 0xB6, 0xE3, 0x85, 0xD4, 0x86, 0x20, 0x95, 0x8D, 0x0A, 0xB1, 0xBF, 0x2B, 0x18, 0x4E, 0x10, 0xF3, 0xE7, 0x53, 0xB7, 0x13, 0x37, 0xBE, 0x9E, 0xB6, 0x53, 0x78, 0x67, 0x85, 0xB4, 0x3A, 0xC7, 0xE5, 0xC4, 0x94, 0xAC, 0x1B, 0xCB, 0x04, 0x3D, 0x46, 0x14, 0x25, 0xB3, 0x60, 0x98, 0xAC, 0x93, 0x05, 0x5A, 0x01, 0x05, 0xAB, 0x85, 0x23, 0xB6, 0x1D, 0x02, 0x4A, 0x6E, 0x9B, 0x56, 0xA4, 0x2D, 0x3C, 0x04, 0x72, 0x65, 0x12, 0xAE, 0x4C, 0xFE, 0x05, 0x71, 0x04, 0x46, 0xB0, 0x6F, 0x69, 0x42, 0x34, 0xEE, 0x4F, 0xA8, 0xFE, 0xED, 0xDD, 0xC5, 0xF2, 0x8A, 0x65, 0xED, 0xE2, 0xEB, 0x58, 0xE9, 0x65, 0xFE, 0x36, 0x27, 0xA5, 0x71, 0xBC, 0x45, 0xB3, 0x97, 0xED, 0x09, 0x2A, 0xB4, 0xBE, 0x00, 0x04, 0x17, 0x29, 0xC4, 0xD1, 0x92, 0xFE, 0x30, 0x67, 0x82, 0x79, 0xD2, 0x23, 0xA8, 0x48, 0xCF, 0x43, 0x66, 0xE9, 0x2B, 0x3F, 0x68, 0xDE, 0xE9, 0x7C, 0x9B, 0x4A, 0x7F, 0xF2, 0x2F, 0x93, 0x7B, 0xE6, 0xC5, 0x66, 0x39, 0x96, 0x1D, 0xB2, 0x9F, 0xA3, 0xCF, 0xEC, 0xFF, 0xF2, 0x93, 0x14, 0x08, 0x86, 0xFF, 0xB9, 0x2E, 0xBC, 0x79, 0xDA, 0xB5, 0x9C, 0xEA, 0xF8, 0x69, 0xC6, 0x4F, 0x8E, 0xAF, 0x58, 0x5C, 0xE9, 0x7D, 0xD6, 0xB7, 0x8F, 0x89, 0x27, 0x72, 0xDB, 0x88, 0xA9, 0x58, 0xCF, 0x0A, 0xB5, 0x57, 0xA7, 0xFA, 0xA8, 0x3F, 0xE6, 0x21, 0x47, 0x7E, 0x2B, 0x84, 0x49, 0x7A, 0xB5, 0xA8, 0xEC, 0xF4, 0xA7, 0xBD, 0x32, 0xDF, 0xB9, 0x02, 0xF0, 0x5D, 0x2C, 0xA3, 0x10, 0x47, 0xD0, 0xF1, 0x91, 0x9A, 0xDD, 0xE1, 0xEE, 0x6D, 0xFD, 0x58, 0xE5, 0x9B, 0xC4, 0xDA, 0xB3, 0xCC, 0xBB, 0xA3, 0x6A, 0xAA, 0xF6, 0xAF, 0xCC, 0xC7, 0xB0, 0x95, 0xCA, 0x94, 0xA1, 0x95, 0xBE, 0x9A, 0x28, 0x95, 0x26, 0xB5, 0x88, 0xC3, 0xA9, 0xC5, 0x68, 0x76, 0xFC, 0x41, 0x5D, 0x52, 0x1D, 0x44, 0x2B, 0xAC, 0x02, 0x98, 0xD3, 0x02, 0x41, 0x9A, 0xD5, 0x27, 0xDA, 0x24, 0x9C, 0x2A, 0x66, 0x0C, 0xD0, 0x64, 0x21, 0x3F, 0xFA, 0xD5, 0x63, 0x18, 0x3F, 0x37, 0x97, 0x25, 0x78, 0xEE, 0xB9, 0xF7, 0x0A, 0xC6, 0x7A, 0xEE, 0x6C, 0xC2, 0xB7, 0x1F, 0x28, 0x3A, 0x95, 0x93, 0x0B, 0x55, 0x47, 0x38, 0x55, 0x57, 0x91, 0xC2, 0x5E, 0x7A, 0x39, 0x9E, 0x68, 0x56, 0x36, 0xD5, 0x8D, 0x69, 0xCB, 0x6B, 0xE7, 0x93, 0xB4, 0x5C, 0x19, 0x69, 0xE7, 0xD5, 0x61, 0x56, 0x27, 0xEB, 0xC3, 0x2E, 0xED, 0x45, 0x44, 0x0F, 0x87, 0x88, 0x0D, 0x28, 0x29, 0xFA, 0x4F, 0xC8, 0x71, 0x86, 0x61, 0x64, 0xD2, 0x59, 0xED, 0x95, 0xD2, 0x73, 0x18, 0x71, 0x01, 0x7F, 0xF5, 0x18, 0x94, 0x06, 0x6F, 0xAE, 0x1F, 0xFA, 0x6F, 0x4B, 0x4A, 0x6F, 0x84, 0xFC, 0xFF, 0xDA, 0x09, 0xE7, 0x18, 0xFA, 0x17, 0x13, 0x5E, 0xDB, 0x3F, 0x48, 0x55, 0x8D, 0x5B, 0xA6, 0x7F, 0x9E, 0x6F, 0x09, 0x00, 0x34, 0x0B, 0xD0, 0x4D, 0xFE, 0x59, 0xB7, 0xBD, 0x67, 0x74, 0x58, 0x84, 0xFB, 0x84, 0xAE, 0x3F, 0x8E, 0xE7, 0x63, 0xD2, 0x02, 0x74, 0x36, 0x52, 0xD4, 0xF7, 0x33, 0x34, 0x50, 0x58, 0x04, 0x90, 0xB9, 0xC7, 0x44, 0x93, 0x5B, 0x19, 0xC1, 0xD5, 0xFB, 0x0D, 0xB5, 0xFB, 0xB4, 0x61, 0x41, 0x13, 0x62, 0x83, 0x80, 0x37, 0xEB, 0x7E, 0xC3, 0xF6, 0x3F, 0x26, 0xC8, 0x93, 0xE7, 0xCC, 0x1C, 0x3B, 0x3F, 0x47, 0x67, 0xAB, 0xAE, 0x00, 0xFE, 0xB7, 0xBB, 0x99, 0xB1, 0x42, 0x0B, 0xB2, 0x9E, 0xA6, 0x14, 0x74, 0x78, 0x96, 0xD9, 0xED, 0xCF, 0x81, 0x07, 0xFE, 0x50, 0x4C, 0x9C, 0x30, 0x8A, 0x82, 0x64, 0xDA, 0xCE, 0x31, 0x8D, 0x87, 0xCF, 0xE4, 0x76, 0x18, 0x03, 0xE9, 0xA6, 0x0D, 0xEF, 0xA6, 0x14, 0x4A, 0xAB, 0xC1, 0xF1, 0x0A, 0x45, 0xB1, 0x40, 0xDE, 0xD7, 0x54, 0xE7, 0x35, 0x86, 0xC4, 0x67, 0xBB, 0x7B, 0xF1, 0x9E, 0xDE, 0xF2, 0x5B, 0xE0, 0xC6, 0x5E, 0x93, 0xC5, 0xE5, 0xEB, 0x8F, 0x88, 0x0C, 0xCE, 0x4A, 0x85, 0x87, 0x57, 0xF8, 0xFF, 0x56, 0x06, 0x2B, 0x10, 0x67, 0xF4, 0x10, 0x6F, 0x76, 0xB7, 0x00, 0x7F, 0x6E, 0xA6, 0xF9, 0x45, 0x04, 0x7E, 0x85, 0xBD, 0x0F, 0xAD, 0x9D, 0x26, 0x99, 0x4F, 0x67, 0x8A, 0x06, 0x12, 0xB8, 0x7C, 0xCF, 0x9C, 0x0C, 0xF9, 0xA4, 0x33, 0xD8, 0x89, 0xC9, 0x6E, 0x4C, 0x12, 0xBE, 0x37, 0x22, 0x77, 0x00, 0x5B, 0x06, 0xAD, 0x12, 0x71, 0x05, 0xD1, 0x6D, 0x8F, 0xB1, 0x42, 0xAE, 0xAE, 0x53, 0x73, 0xAB, 0xD6, 0x1D, 0x9A, 0xDC, 0xFC, 0x55, 0x50, 0xD6, 0x23, 0xCA, 0x3B, 0x88, 0x24, 0xB0, 0xE2, 0xE0, 0x8C, 0x2B, 0xF4, 0xE2, 0x84, 0x1E, 0xAC, 0x4C, 0x5D, 0xC5, 0x6C, 0xF8, 0x95, 0x4C, 0xF2, 0x07, 0xC2, 0x63, 0xF2, 0x7C, 0x9F, 0x30, 0x9F, 0x10, 0x30, 0x7C, 0x0D, 0x84, 0xA6, 0x58, 0x78, 0x42, 0x50, 0x31, 0x37, 0x5D, 0xD8, 0x10, 0xD2, 0xD7, 0xE5, 0x10, 0x98, 0xA3, 0x81, 0x43, 0x50, 0x79, 0x5C, 0x4A, 0x07, 0x7F, 0xA4, 0x0D, 0xD4, 0x4F, 0x0F, 0xA7, 0x51, 0x0F, 0x7C, 0x3F, 0x63, 0x14, 0x07, 0xCF, 0x34, 0xF6, 0x04, 0xC7, 0xB3, 0x35, 0x63, 0x2A, 0x20, 0xD2, 0xAD, 0x41, 0x9B, 0xD7, 0xCC, 0x6D, 0x42, 0x42, 0xB1, 0xC6, 0x6C, 0x35, 0xE5, 0xA5, 0xED, 0xCC, 0xB1, 0x3C, 0xA3, 0x7D, 0x3B, 0x50, 0x46, 0x5F, 0x3B, 0x4A, 0xAF, 0xF7, 0xE3, 0x16, 0x1E, 0x79, 0x36, 0x08, 0x8A, 0xE0, 0x84, 0x01, 0xFD, 0x2C, 0x37, 0xD6, 0x7A, 0x2F, 0xF9, 0x1D, 0x3E, 0x6F, 0x08, 0x68, 0x6D, 0x64, 0xBC, 0x2F, 0xC6, 0xC5, 0x71, 0x06, 0xE4, 0x9F, 0xA3, 0x84, 0xAC, 0x22, 0x21, 0x9F, 0x07, 0xEE, 0x89, 0x96, 0xCA, 0x3D, 0xFF, 0x59, 0xDC, 0xC5, 0x09, 0x2A, 0x4B, 0xAD, 0xBE, 0x87, 0xAE, 0xDE, 0x7F, 0x69, 0xA0, 0x4C, 0x79, 0xB3, 0x3B, 0xDF, 0x35, 0xD4, 0xA0, 0xE4, 0xCB, 0x4B, 0x55, 0x01, 0x9C, 0xB0, 0xBF, 0x27, 0x52, 0x95, 0xB9, 0x3B, 0xDA, 0xBE, 0xA5, 0x16, 0xCA, 0x2B, 0x61, 0x6A, 0x56, 0x91, 0x86, 0x00, 0xB7, 0x24, 0xBE, 0x7A, 0x01, 0xEC, 0x4E, 0xF5, 0x43, 0x12, 0xB3, 0x0D, 0x66, 0xF5, 0x07, 0x81, 0x5F, 0x27, 0x80, 0xFF, 0xEE, 0x7C, 0x30, 0xF8, 0x42, 0x5A, 0x92, 0x25, 0x2C, 0xE5, 0x50, 0xFA, 0xB4, 0xE9, 0x02, 0xE7, 0xB3, 0x82, 0xD4, 0x6D, 0xBD, 0x20, 0xEF, 0xE1, 0xBB, 0x0E, 0xF8, 0xA4, 0x96, 0x87, 0x3C, 0x09, 0xC4, 0xCE, 0xB0, 0x30, 0x3C, 0x7F, 0x1D, 0xAB, 0xA0, 0x10, 0x2D, 0xE9, 0x41, 0x90, 0xB6, 0xAC, 0x6D, 0xC8, 0x10, 0xF7, 0x2B, 0xCA, 0x3A, 0xA2, 0x92, 0xFF, 0x38, 0xBD, 0x51, 0xA7, 0xFA, 0xB8, 0x50, 0x9E, 0xC4, 0xFB, 0xE0, 0xEA, 0xA3, 0xC9, 0x86, 0x16, 0x6A, 0x67, 0x4B, 0x78, 0x71, 0x15, 0x5C, 0x34, 0x8C, 0x47, 0x7E, 0xF8, 0xCE, 0xDC, 0x83, 0x2B, 0x5A, 0xBE, 0xE7, 0x1A, 0x8D, 0x18, 0xD0, 0x6D, 0xD0, 0xF5, 0x22, 0x11, 0x60, 0xAB, 0xEB, 0x71, 0xE6, 0xE8, 0x2C, 0xFA, 0xBF, 0x73, 0x1E, 0xA3, 0x51, 0x5A, 0x76, 0xEF, 0x07, 0xB2, 0xC1, 0x6C, 0x63, 0xB3, 0x7F, 0x7A, 0xB7, 0x3B, 0x67, 0xF0, 0x05, 0x92, 0x9A, 0x75, 0x3E, 0x45, 0x3B, 0x93, 0x0C, 0x0A, 0xF4, 0x32, 0x27, 0x7F, 0xD7, 0x7D, 0x8A, 0x1E, 0xB8, 0x02, 0x2C, 0xDE, 0x96, 0x65, 0x76, 0x3B, 0x01, 0x4F, 0x0A, 0x67, 0x2A, 0x04, 0x16, 0x0B, 0x0A, 0x06, 0xF5, 0x54, 0x0F, 0x4C, 0x26, 0x4B, 0x7F, 0x22, 0x74, 0x06, 0x90, 0xA2, 0x35, 0x2D, 0xC8, 0x63, 0xB5, 0x88, 0x30, 0x3A, 0xD5, 0x1F, 0x0A, 0xE1, 0x62, 0xBF, 0x79, 0x79, 0x7F, 0x07, 0xB5, 0x34, 0x50, 0x1C, 0xBB, 0xFD, 0xB7, 0x13, 0xA7, 0x24, 0xAA, 0x98, 0xE1, 0x95, 0x32, 0x18, 0x71, 0x80, 0xCC, 0xFA, 0xDC, 0x6E, 0xBE, 0x31, 0x42, 0xFA, 0x7D, 0xB6, 0x6C, 0xD4, 0xDE, 0x7B, 0x9F, 0xBD, 0x4C, 0x82, 0x35, 0x68, 0x6D, 0xB6, 0x8C, 0xAF, 0x48, 0x9A, 0xFA, 0x4E, 0x1E, 0x87, 0xAE, 0xF0, 0xCE, 0xFD, 0x80, 0x37, 0xE3, 0xA5, 0x78, 0xEE, 0x62, 0xEB, 0x7F, 0x94, 0xED, 0x5B, 0xC0, 0xB5, 0x8E, 0xEA, 0x4B, 0x4C, 0x45, 0xFC, 0x56, 0xD3, 0x1D, 0x29, 0x94, 0x4D, 0x09, 0x5A, 0xC9, 0x6C, 0x29, 0x08, 0x3D, 0xA2, 0xC7, 0x71, 0x81, 0xD9, 0x7A, 0x55, 0xFE, 0x6E, 0x90, 0x3A, 0x2F, 0x27, 0x83, 0xDE, 0x0B, 0xAA, 0x5F, 0x47, 0xD7, 0x04, 0x78, 0x5C, 0x33, 0xE8, 0xD5, 0xC8, 0x7E, 0xD6, 0x1E, 0x65, 0x45, 0x91, 0x67, 0x31, 0x0E, 0xB7, 0xA9, 0x95, 0x74, 0xEF, 0x81, 0x9A, 0xE9, 0x16, 0x1A, 0x3B, 0xD0, 0x96, 0x34, 0x80, 0x3D, 0x9E, 0x1E, 0x4E, 0xC7, 0x38, 0x6D, 0x79, 0x46, 0x98, 0x45, 0x17, 0x21, 0x3A, 0xB9, 0xCF, 0x66, 0xAE, 0xA5, 0x51, 0xCC, 0x45, 0x7C, 0x39, 0xF8, 0x6A, 0xF2, 0x94, 0xCF, 0x7B, 0x07, 0x3F, 0x56, 0x3E, 0xD4, 0xDA, 0xB9, 0x41, 0x9B, 0xDF, 0x00, 0x4B, 0xD0, 0x5C, 0x92, 0xB4, 0xE8, 0x0E, 0xC3, 0xCF, 0xEA, 0xC9, 0x7E, 0x1D, 0xDA, 0x55, 0x4F, 0xDA, 0x62, 0x5C, 0x4B, 0x9B, 0x03, 0x9B, 0xAA, 0x7C, 0x5A, 0x2F, 0x6F, 0x97, 0x05, 0x77, 0x92, 0x48, 0x3C, 0xF5, 0xF8, 0x52, 0xD4, 0xC3, 0xAC, 0x71, 0xAD, 0x50, 0xF7, 0x79, 0x95, 0x3D, 0xCF, 0xE2, 0xF6, 0x3E, 0xD2, 0x35, 0xD8, 0xE1, 0xD5, 0x34, 0x5D, 0x6C, 0x6D, 0xF0, 0x55, 0x5C, 0xC2, 0x63, 0x1D, 0xEA, 0xD9, 0xB7, 0x14, 0xBC, 0x4C, 0x16, 0x50, 0x1E, 0x01, 0x26, 0x13, 0x81, 0xF3, 0x67, 0x97, 0x15, 0x34, 0x51, 0x23, 0x38, 0x8C, 0x85, 0x2D, 0x57, 0xDC, 0xF1, 0x94, 0x1D, 0x09, 0x11, 0xD4, 0x9F, 0xEA, 0x71, 0x43, 0xFD, 0x2F, 0xC3, 0x43, 0xA5, 0x07, 0x5B, 0x64, 0xCC, 0xA4, 0x82, 0x91, 0xDC, 0x28, 0xB8, 0x3F, 0x76, 0x07, 0x45, 0x89, 0xEA, 0xB2, 0x17, 0xC7, 0x84, 0x78, 0x40, 0x65, 0x2C, 0x0E, 0x3A, 0xE2, 0x78, 0xB3, 0xB6, 0xFB, 0x0D, 0x80, 0x0C, 0x5E, 0x7D, 0xB7, 0x9D, 0x5C, 0xB9, 0xCC, 0x1A, 0x87, 0x45, 0x0C, 0x00, 0xB7, 0x67, 0x78, 0x12, 0xD2, 0x2E, 0xE2, 0x0F, 0xDE, 0x8C, 0x17, 0x53, 0xA7, 0xFB, 0x93, 0xBA, 0x8B, 0xBB, 0x85, 0x95, 0xA6, 0x39, 0x3D, 0xF5, 0x4A, 0xA9, 0xCD, 0xB6, 0xE0, 0x87, 0x9A, 0x26, 0xE4, 0x9B, 0xD3, 0xB0, 0x15, 0x13, 0xC6, 0x05, 0x3A, 0x07, 0x46, 0xC8, 0x59, 0x6C, 0xE5, 0xE5, 0xB2, 0x25, 0xCF, 0xCA, 0x26, 0xAB, 0x8B, 0xF1, 0x2F, 0x1F, 0xE0, 0xA6, 0x47, 0xA9, 0xE4, 0x45, 0x30, 0x39, 0xA1, 0x22, 0x61, 0x94, 0xC4, 0x6E, 0x8B, 0x98, 0xAC, 0xD7, 0x10, 0xF1, 0x8F, 0xB7, 0xEC, 0x05, 0x47, 0x6C, 0x1C, 0xD8, 0xFC, 0x31, 0x12, 0xCC, 0xDD, 0xB1, 0x58, 0x2B, 0x88, 0x17, 0xC1, 0x8F, 0xE3, 0x15, 0x35, 0x3E, 0x7A, 0x47, 0xC8, 0x21, 0xE9, 0xEE, 0x3A, 0x43, 0xCA, 0xDE, 0x1B, 0x80, 0xD9, 0x2A, 0x0A, 0xE8, 0xDC, 0xEB, 0x4D, 0xFF, 0x76, 0x6A, 0x54, 0xDF, 0x36, 0x65, 0xFE, 0xFE, 0x3C, 0x25, 0x2B, 0x72, 0xDA, 0xD7, 0xB1, 0xE3, 0x35, 0x9E, 0x7F, 0xA2, 0x55, 0x62, 0xC3, 0xE3, 0x9D, 0xB5, 0x21, 0xCE, 0x18, 0x74, 0x11, 0x1F, 0xB0, 0x90, 0xDB, 0xD3, 0x8B, 0x31, 0x80, 0xAD, 0x03, 0x4B, 0x57, 0xB0, 0x31, 0xDC, 0x4D, 0xD6, 0xAF, 0x7C, 0x1A, 0x8A, 0xF3, 0xF6, 0xCE, 0x7E, 0xDB, 0x1A, 0x9E, 0x4B, 0x6D, 0x4A, 0x59, 0x20, 0xE3, 0x62, 0x08, 0x18, 0x82, 0x06, 0x59, 0x76, 0x2E, 0xF7, 0xA4, 0x24, 0x3F, 0x51, 0xDF, 0x2D, 0x8A, 0x90, 0x07, 0x37, 0xD5, 0x81, 0x05, 0x69, 0x9B, 0x4E, 0x10, 0xCB, 0xCB, 0x35, 0x9C, 0x7F, 0x3A, 0x40, 0x07, 0x69, 0x7C, 0x48, 0x20, 0x50, 0xEC, 0x33, 0xCF, 0x80, 0x41, 0x91, 0x6A, 0x3B, 0x91, 0x9A, 0x50, 0xD9, 0x6E, 0xF0, 0xF5, 0x89, 0xFD, 0x45, 0x56, 0xF3, 0x0D, 0xBD, 0xD9, 0x42, 0xEA, 0xB7, 0x9D, 0xFA, 0x97, 0xC0, 0x7E, 0x30, 0x24, 0x70, 0x74, 0x35, 0x2E, 0x1B, 0xF9, 0x8E, 0x34, 0x9C, 0xC7, 0xEF, 0xA5, 0xA1, 0xB8, 0xFC, 0xE4, 0xF1, 0x8F, 0x1F, 0xAF, 0x6F, 0x07, 0xC9, 0x9C, 0x32, 0x14, 0x48, 0xB0, 0x39, 0x5C, 0x8A, 0x9C, 0xBC, 0x46, 0x64, 0x12, 0xF8, 0x9C, 0x1A, 0x98, 0xBF, 0x57, 0x15, 0x84, 0x28, 0x44, 0xF0, 0xE8, 0x23, 0x6F, 0xA4, 0x69, 0x6C, 0x46, 0x58, 0xB8, 0xFD, 0xE4, 0x42, 0x5D, 0x09, 0xD6, 0x7A, 0x38, 0xAC, 0x72, 0x58, 0xE5, 0xD5, 0x96, 0x6F, 0x2D, 0x3F, 0xF6, 0x6A, 0x0C, 0x0C, 0xE7, 0x6E, 0x7F, 0x6B, 0x81, 0xA1, 0xBC, 0xD0, 0x47, 0xFD, 0x3A, 0x20, 0x5B, 0xF0, 0xCC, 0xAE, 0xA3, 0xB1, 0x10, 0x79, 0x90, 0x9C, 0x6C, 0xE5, 0x69, 0x8F, 0x32, 0xE1, 0xF3, 0x40, 0x96, 0x58, 0xFF, 0xA0, 0x1E, 0xAE, 0xCB, 0x4A, 0xE2, 0xB0, 0x92, 0xB7, 0x89, 0x89, 0xDA, 0xAD, 0x66, 0x23, 0xBB, 0x11, 0xF4, 0x9F, 0x0F, 0x8F, 0x86, 0x99, 0xEC, 0x05, 0x66, 0x15, 0x02, 0xFF, 0xCA, 0xD0, 0x3C, 0xF4, 0x15, 0x19, 0x1A, 0x22, 0x2D, 0x3C, 0x4C, 0x7B, 0x8A, 0xB0, 0xB5, 0xB9, 0xBB, 0xC2, 0xD9, 0xDC, 0xEF, 0xF7, 0x20, 0x2D, 0x3F, 0x42, 0x44, 0x49, 0x4F, 0x52, 0x53, 0x64, 0x66, 0x69, 0x74, 0xC4, 0xD9, 0xE6, 0xF5, 0xFA, 0x00, 0x01, 0x04, 0x19, 0x27, 0x37, 0x3D, 0x5A, 0x76, 0x80, 0xB8, 0xC1, 0xC9, 0xFE, 0x20, 0x29, 0x38, 0x3B, 0x3C, 0x48, 0x4D, 0x56, 0x5F, 0x65, 0x79, 0x9D, 0x9E, 0xA6, 0xA9, 0xAD, 0xD2, 0xDE, 0xE5, 0xE7, 0xF7, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x32, 0x48];

    #[test]
    fn keypair() {
        let seed: [u8; crate::params::SEEDBYTES] = [
            0x7C, 0x99, 0x35, 0xA0, 0xB0, 0x76, 0x94, 0xAA, 0x0C, 0x6D, 0x10, 0xE4, 0xDB, 0x6B,
            0x1A, 0xDD, 0x2F, 0xD8, 0x1A, 0x25, 0xCC, 0xB1, 0x48, 0x03, 0x2D, 0xCD, 0x73, 0x99,
            0x36, 0x73, 0x7F, 0x2D,
        ];
        let test = super::Keypair::generate(Some(&seed));
        assert_eq!(test.public.to_bytes(), TEST_PK);
        assert_eq!(test.secret.to_bytes(), TEST_SK);
        assert_eq!(test.sign(&TEST_MSG), TEST_SIG);
        assert!(test.verify(&TEST_MSG, &TEST_SIG));
    }

    #[test]
    fn secretkey() {
        let test = super::SecretKey::from_bytes(&TEST_SK);
        assert_eq!(test.to_bytes(), TEST_SK);
        assert_eq!(test.sign(&TEST_MSG), TEST_SIG);
    }

    #[test]
    fn publickey() {
        let test = super::PublicKey::from_bytes(&TEST_PK);
        assert_eq!(test.to_bytes(), TEST_PK);
        assert!(test.verify(&TEST_MSG, &TEST_SIG));
    }
}