xref: /freebsd/crypto/openssl/providers/fips/self_test_data.inc (revision e7be843b4a162e68651d3911f0357ed464915629)
1/*
2 * Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License").  You may not use
5 * this file except in compliance with the License.  You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10/*
11 * This file contains self test data required by FIPS 140-3 IG
12 * 10.3.A Cryptographic Algorithm Self test Requirements
13 *
14 * Note that in the 'General CAST requirements': Note33 Allows individual
15 * self tests for low level algorithms (such as digests) to be omitted, if
16 * they are tested as part of a higher level algorithm (such as HMAC).
17 */
18
19/* Macros to build Self test data */
20#define ITM(x) ((void *)&x), sizeof(x)
21#define ITM_STR(x) ((void *)&x), (sizeof(x) - 1)
22
23#define ST_KAT_PARAM_END() { "", 0, NULL, 0 }
24#define ST_KAT_PARAM_BIGNUM(name, data)                                        \
25    { name, OSSL_PARAM_UNSIGNED_INTEGER, ITM(data) }
26#define ST_KAT_PARAM_OCTET(name, data)                                         \
27    { name, OSSL_PARAM_OCTET_STRING, ITM(data) }
28#define ST_KAT_PARAM_UTF8STRING(name, data)                                    \
29    { name, OSSL_PARAM_UTF8_STRING, ITM_STR(data) }
30#define ST_KAT_PARAM_UTF8CHAR(name, data)                                      \
31    { name, OSSL_PARAM_UTF8_STRING, ITM(data) }
32#define ST_KAT_PARAM_INT(name, i)                                              \
33    { name, OSSL_PARAM_INTEGER, ITM(i) }
34
35/* used to store raw parameters for keys and algorithms */
36typedef struct st_kat_param_st {
37    const char *name;  /* an OSSL_PARAM name */
38    size_t type;       /* the type associated with the data */
39    const void *data;  /* unsigned char [], or char [] depending on the type */
40    size_t data_len;   /* the length of the data */
41} ST_KAT_PARAM;
42
43typedef struct st_kat_st {
44    const char *desc;
45    const char *algorithm;
46    const unsigned char *pt;
47    size_t pt_len;
48    const unsigned char *expected;
49    size_t expected_len;
50} ST_KAT;
51
52#define CIPHER_MODE_ENCRYPT 1
53#define CIPHER_MODE_DECRYPT 2
54#define CIPHER_MODE_ALL     (CIPHER_MODE_ENCRYPT | CIPHER_MODE_DECRYPT)
55
56/* FIPS 140-3 only allows DSA verification for legacy purposes */
57#define SIGNATURE_MODE_VERIFY_ONLY  1
58#define SIGNATURE_MODE_SIGN_ONLY    2
59#define SIGNATURE_MODE_DIGESTED     4
60#define SIGNATURE_MODE_SIG_DIGESTED 8
61
62typedef ST_KAT ST_KAT_DIGEST;
63typedef struct st_kat_cipher_st {
64    ST_KAT base;
65    int mode;
66    const unsigned char *key;
67    size_t key_len;
68    const unsigned char *iv;
69    size_t iv_len;
70    const unsigned char *aad;
71    size_t aad_len;
72    const unsigned char *tag;
73    size_t tag_len;
74} ST_KAT_CIPHER;
75
76typedef struct st_kat_kdf_st {
77    const char *desc;
78    const char *algorithm;
79    const ST_KAT_PARAM *params;
80    const unsigned char *expected;
81    size_t expected_len;
82} ST_KAT_KDF;
83
84typedef struct st_kat_drbg_st {
85    const char *desc;
86    const char *algorithm;
87    const char *param_name;
88    char *param_value;
89    const unsigned char *entropyin;
90    size_t entropyinlen;
91    const unsigned char *nonce;
92    size_t noncelen;
93    const unsigned char *persstr;
94    size_t persstrlen;
95    const unsigned char *entropyinpr1;
96    size_t entropyinpr1len;
97    const unsigned char *entropyinpr2;
98    size_t entropyinpr2len;
99    const unsigned char *entropyaddin1;
100    size_t entropyaddin1len;
101    const unsigned char *entropyaddin2;
102    size_t entropyaddin2len;
103    const unsigned char *expected;
104    size_t expectedlen;
105} ST_KAT_DRBG;
106
107typedef struct st_kat_kas_st {
108    const char *desc;
109    const char *algorithm;
110
111    const ST_KAT_PARAM *key_group;
112    const ST_KAT_PARAM *key_host_data;
113    const ST_KAT_PARAM *key_peer_data;
114
115    const unsigned char *expected;
116    size_t expected_len;
117} ST_KAT_KAS;
118
119typedef struct st_kat_sign_st {
120    const char *desc;
121    const char *keytype;
122    const char *sigalgorithm;
123    int mode;
124    const ST_KAT_PARAM *key;
125    const unsigned char *msg;
126    size_t msg_len;
127    const unsigned char *entropy;
128    size_t entropy_len;
129    const unsigned char *nonce;
130    size_t nonce_len;
131    const unsigned char *persstr;
132    size_t persstr_len;
133    const unsigned char *sig_expected; /* Set to NULL if this value changes */
134    size_t sig_expected_len;
135    const ST_KAT_PARAM *init;
136    const ST_KAT_PARAM *verify;
137} ST_KAT_SIGN;
138
139typedef struct st_kat_asym_cipher_st {
140    const char *desc;
141    const char *algorithm;
142    int encrypt;
143    const ST_KAT_PARAM *key;
144    const ST_KAT_PARAM *postinit;
145    const unsigned char *in;
146    size_t in_len;
147    const unsigned char *expected;
148    size_t expected_len;
149} ST_KAT_ASYM_CIPHER;
150
151typedef struct st_kat_keygen_st {
152    const char *desc;
153    const char *algorithm;
154    const ST_KAT_PARAM *keygen_params;
155    const ST_KAT_PARAM *expected_params;
156} ST_KAT_ASYM_KEYGEN;
157
158typedef struct st_kat_kem_st {
159    const char *desc;
160    const char *algorithm;
161    const ST_KAT_PARAM *key;
162    const unsigned char *cipher_text;
163    size_t cipher_text_len;
164    const unsigned char *entropy;
165    size_t entropy_len;
166    const unsigned char *secret;
167    size_t secret_len;
168    const unsigned char *reject_secret;
169} ST_KAT_KEM;
170
171/*- DIGEST SELF TEST DATA */
172static const unsigned char sha512_pt[] = "abc";
173static const unsigned char sha512_digest[] = {
174    0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, 0xCC, 0x41, 0x73, 0x49,
175    0xAE, 0x20, 0x41, 0x31, 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2,
176    0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, 0x21, 0x92, 0x99, 0x2A,
177    0x27, 0x4F, 0xC1, 0xA8, 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD,
178    0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, 0x2A, 0x9A, 0xC9, 0x4F,
179    0xA5, 0x4C, 0xA4, 0x9F
180};
181static const unsigned char sha3_256_pt[] = { 0xe7, 0x37, 0x21, 0x05 };
182static const unsigned char sha3_256_digest[] = {
183    0x3a, 0x42, 0xb6, 0x8a, 0xb0, 0x79, 0xf2, 0x8c, 0x4c, 0xa3, 0xc7, 0x52,
184    0x29, 0x6f, 0x27, 0x90, 0x06, 0xc4, 0xfe, 0x78, 0xb1, 0xeb, 0x79, 0xd9,
185    0x89, 0x77, 0x7f, 0x05, 0x1e, 0x40, 0x46, 0xae
186};
187
188/*
189 * Note:
190 *  SHA1 and SHA256 are tested by higher level algorithms so a
191 *  CAST is not needed.
192 */
193static const ST_KAT_DIGEST st_kat_digest_tests[] =
194{
195    {
196         OSSL_SELF_TEST_DESC_MD_SHA2,
197         "SHA512",
198         ITM_STR(sha512_pt),
199         ITM(sha512_digest),
200    },
201    {
202         OSSL_SELF_TEST_DESC_MD_SHA3,
203         "SHA3-256",
204         ITM(sha3_256_pt),
205         ITM(sha3_256_digest),
206    },
207};
208
209/*- CIPHER TEST DATA */
210
211/* DES3 test data */
212static const unsigned char des_ede3_cbc_pt[] = {
213    0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
214    0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
215    0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
216    0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51
217};
218static const unsigned char des_ede3_cbc_key[] = {
219    0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
220    0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01,
221    0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23
222};
223static const unsigned char des_ede3_cbc_iv[] = {
224    0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17
225};
226static const unsigned char des_ede3_cbc_ct[] = {
227    0x20, 0x79, 0xC3, 0xD5, 0x3A, 0xA7, 0x63, 0xE1,
228    0x93, 0xB7, 0x9E, 0x25, 0x69, 0xAB, 0x52, 0x62,
229    0x51, 0x65, 0x70, 0x48, 0x1F, 0x25, 0xB5, 0x0F,
230    0x73, 0xC0, 0xBD, 0xA8, 0x5C, 0x8E, 0x0D, 0xA7
231};
232
233/* AES-256 GCM test data */
234static const unsigned char aes_256_gcm_key[] = {
235    0x92, 0xe1, 0x1d, 0xcd, 0xaa, 0x86, 0x6f, 0x5c,
236    0xe7, 0x90, 0xfd, 0x24, 0x50, 0x1f, 0x92, 0x50,
237    0x9a, 0xac, 0xf4, 0xcb, 0x8b, 0x13, 0x39, 0xd5,
238    0x0c, 0x9c, 0x12, 0x40, 0x93, 0x5d, 0xd0, 0x8b
239};
240static const unsigned char aes_256_gcm_iv[] = {
241    0xac, 0x93, 0xa1, 0xa6, 0x14, 0x52, 0x99, 0xbd,
242    0xe9, 0x02, 0xf2, 0x1a
243};
244static const unsigned char aes_256_gcm_pt[] = {
245    0x2d, 0x71, 0xbc, 0xfa, 0x91, 0x4e, 0x4a, 0xc0,
246    0x45, 0xb2, 0xaa, 0x60, 0x95, 0x5f, 0xad, 0x24
247};
248static const unsigned char aes_256_gcm_aad[] = {
249    0x1e, 0x08, 0x89, 0x01, 0x6f, 0x67, 0x60, 0x1c,
250    0x8e, 0xbe, 0xa4, 0x94, 0x3b, 0xc2, 0x3a, 0xd6
251};
252static const unsigned char aes_256_gcm_ct[] = {
253    0x89, 0x95, 0xae, 0x2e, 0x6d, 0xf3, 0xdb, 0xf9,
254    0x6f, 0xac, 0x7b, 0x71, 0x37, 0xba, 0xe6, 0x7f
255};
256static const unsigned char aes_256_gcm_tag[] = {
257    0xec, 0xa5, 0xaa, 0x77, 0xd5, 0x1d, 0x4a, 0x0a,
258    0x14, 0xd9, 0xc5, 0x1e, 0x1d, 0xa4, 0x74, 0xab
259};
260
261/* AES-ECB test data */
262static const unsigned char aes_128_ecb_key[] = {
263    0x10, 0xa5, 0x88, 0x69, 0xd7, 0x4b, 0xe5, 0xa3,
264    0x74, 0xcf, 0x86, 0x7c, 0xfb, 0x47, 0x38, 0x59
265};
266static const unsigned char aes_128_ecb_pt[] = {
267    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
269};
270static const unsigned char aes_128_ecb_ct[] = {
271    0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0,
272    0x4e, 0xaa, 0x6f, 0xb4, 0xdb, 0xf7, 0x84, 0x65
273};
274
275#ifndef OPENSSL_NO_DES
276/*
277 * TDES-ECB test data from
278 * https://github.com/usnistgov/ACVP-Server/blob/master/gen-val/json-files/ACVP-TDES-ECB-1.0
279 * Decrypt
280 */
281static const unsigned char tdes_key[] = {
282    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
283    0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
284    0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
285};
286static const unsigned char tdes_ct[] = {
287    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
288};
289static const unsigned char tdes_pt[] = {
290    0x4B, 0xAB, 0x3B, 0xE1, 0x50, 0x2E, 0x3B, 0x36
291};
292#endif
293
294static const ST_KAT_CIPHER st_kat_cipher_tests[] = {
295    {
296        {
297            OSSL_SELF_TEST_DESC_CIPHER_AES_GCM,
298            "AES-256-GCM",
299            ITM(aes_256_gcm_pt),
300            ITM(aes_256_gcm_ct)
301        },
302        CIPHER_MODE_ENCRYPT | CIPHER_MODE_DECRYPT,
303        ITM(aes_256_gcm_key),
304        ITM(aes_256_gcm_iv),
305        ITM(aes_256_gcm_aad),
306        ITM(aes_256_gcm_tag)
307    },
308    {
309        {
310            OSSL_SELF_TEST_DESC_CIPHER_AES_ECB,
311            "AES-128-ECB",
312            ITM(aes_128_ecb_pt),
313            ITM(aes_128_ecb_ct)
314        },
315        CIPHER_MODE_DECRYPT,
316        ITM(aes_128_ecb_key)
317    },
318#ifndef OPENSSL_NO_DES
319    {
320        {
321            OSSL_SELF_TEST_DESC_CIPHER_TDES,
322            "DES-EDE3-ECB",
323            ITM(tdes_pt),
324            ITM(tdes_ct)
325        },
326        CIPHER_MODE_DECRYPT,
327        ITM(tdes_key)
328    }
329#endif
330};
331
332static const char hkdf_digest[] = "SHA256";
333/*
334 * Input parameters and expected result are from RFC 5869 test case 1, which is
335 * with a key-derivation key >= 112 bits required by NIST SP 800-131Ar2
336 * section 8.
337 */
338static const unsigned char hkdf_secret[] = {
339    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
340    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
341    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
342};
343static const unsigned char hkdf_salt[] = {
344    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
345    0x08, 0x09, 0x0a, 0x0b, 0x0c
346};
347static const unsigned char hkdf_info[] = {
348    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
349    0xf8, 0xf9
350};
351static const unsigned char hkdf_expected[] = {
352    0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a,
353    0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a,
354    0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c,
355    0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf,
356    0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18,
357    0x58, 0x65
358};
359static const ST_KAT_PARAM hkdf_params[] = {
360    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, hkdf_digest),
361    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, hkdf_secret),
362    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SALT, hkdf_salt),
363    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, hkdf_info),
364    ST_KAT_PARAM_END()
365};
366
367static const char sskdf_digest[] = "SHA224";
368static const unsigned char sskdf_secret[] = {
369    0x6d, 0xbd, 0xc2, 0x3f, 0x04, 0x54, 0x88, 0xe4,
370    0x06, 0x27, 0x57, 0xb0, 0x6b, 0x9e, 0xba, 0xe1,
371    0x83, 0xfc, 0x5a, 0x59, 0x46, 0xd8, 0x0d, 0xb9,
372    0x3f, 0xec, 0x6f, 0x62, 0xec, 0x07, 0xe3, 0x72,
373    0x7f, 0x01, 0x26, 0xae, 0xd1, 0x2c, 0xe4, 0xb2,
374    0x62, 0xf4, 0x7d, 0x48, 0xd5, 0x42, 0x87, 0xf8,
375    0x1d, 0x47, 0x4c, 0x7c, 0x3b, 0x18, 0x50, 0xe9
376};
377static const unsigned char sskdf_otherinfo[] = {
378    0xa1, 0xb2, 0xc3, 0xd4, 0xe5, 0x43, 0x41, 0x56,
379    0x53, 0x69, 0x64, 0x3c, 0x83, 0x2e, 0x98, 0x49,
380    0xdc, 0xdb, 0xa7, 0x1e, 0x9a, 0x31, 0x39, 0xe6,
381    0x06, 0xe0, 0x95, 0xde, 0x3c, 0x26, 0x4a, 0x66,
382    0xe9, 0x8a, 0x16, 0x58, 0x54, 0xcd, 0x07, 0x98,
383    0x9b, 0x1e, 0xe0, 0xec, 0x3f, 0x8d, 0xbe
384};
385static const unsigned char sskdf_expected[] = {
386    0xa4, 0x62, 0xde, 0x16, 0xa8, 0x9d, 0xe8, 0x46,
387    0x6e, 0xf5, 0x46, 0x0b, 0x47, 0xb8
388};
389static const ST_KAT_PARAM sskdf_params[] = {
390    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, sskdf_digest),
391    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, sskdf_secret),
392    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, sskdf_otherinfo),
393    ST_KAT_PARAM_END()
394};
395
396static const char x942kdf_digest[] = "SHA1";
397static const char x942kdf_cekalg[] = "AES-128-WRAP";
398static const unsigned char x942kdf_secret[] = {
399    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
400    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
401    0x10, 0x11, 0x12, 0x13
402};
403static const unsigned char x942kdf_expected[] = {
404    0xd6, 0xd6, 0xb0, 0x94, 0xc1, 0x02, 0x7a, 0x7d,
405    0xe6, 0xe3, 0x11, 0x72, 0x94, 0xa3, 0x53, 0x64
406};
407static const ST_KAT_PARAM x942kdf_params[] = {
408    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, x942kdf_digest),
409    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_CEK_ALG, x942kdf_cekalg),
410    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, x942kdf_secret),
411    ST_KAT_PARAM_END()
412};
413
414static const char x963kdf_digest[] = "SHA256";
415static const unsigned char x963kdf_otherinfo[] = {
416    0x75, 0xee, 0xf8, 0x1a, 0xa3, 0x04, 0x1e, 0x33,
417    0xb8, 0x09, 0x71, 0x20, 0x3d, 0x2c, 0x0c, 0x52
418};
419static const unsigned char x963kdf_secret[] = {
420    0x22, 0x51, 0x8b, 0x10, 0xe7, 0x0f, 0x2a, 0x3f,
421    0x24, 0x38, 0x10, 0xae, 0x32, 0x54, 0x13, 0x9e,
422    0xfb, 0xee, 0x04, 0xaa, 0x57, 0xc7, 0xaf, 0x7d
423};
424static const unsigned char x963kdf_expected[] = {
425    0xc4, 0x98, 0xaf, 0x77, 0x16, 0x1c, 0xc5, 0x9f,
426    0x29, 0x62, 0xb9, 0xa7, 0x13, 0xe2, 0xb2, 0x15,
427    0x15, 0x2d, 0x13, 0x97, 0x66, 0xce, 0x34, 0xa7,
428    0x76, 0xdf, 0x11, 0x86, 0x6a, 0x69, 0xbf, 0x2e
429};
430static const ST_KAT_PARAM x963kdf_params[] = {
431    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, x963kdf_digest),
432    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, x963kdf_secret),
433    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, x963kdf_otherinfo),
434    ST_KAT_PARAM_END()
435};
436
437static const char pbkdf2_digest[] = "SHA256";
438/*
439 * Input parameters from RFC 6070, vector 5 (because it is the only one with
440 * a salt >= 16 bytes, which NIST SP 800-132 section 5.1 requires). The
441 * expected output is taken from
442 *   https://github.com/brycx/Test-Vector-Generation/blob/master/PBKDF2/pbkdf2-hmac-sha2-test-vectors.md,
443 * which ran these test vectors with SHA-256.
444 * Note that the output only uses 2 iterations.
445 */
446static const unsigned char pbkdf2_password[] = {
447    0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x41, 0x53, 0x53,
448    0x57, 0x4f, 0x52, 0x44, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64
449};
450static const unsigned char pbkdf2_salt[] = {
451    0x73, 0x61, 0x6c, 0x74, 0x53, 0x41, 0x4c, 0x54, 0x73, 0x61, 0x6c, 0x74,
452    0x53, 0x41, 0x4c, 0x54, 0x73, 0x61, 0x6c, 0x74, 0x53, 0x41, 0x4c, 0x54,
453    0x73, 0x61, 0x6c, 0x74, 0x53, 0x41, 0x4c, 0x54, 0x73, 0x61, 0x6c, 0x74
454};
455static const unsigned char pbkdf2_expected[] = {
456    0x13, 0xdc, 0x8a, 0x7c, 0x13, 0xd3, 0x72, 0xc9,
457    0x03, 0x82, 0x82, 0x2d, 0x2d, 0xc4, 0x92, 0xf2,
458    0xed, 0x52, 0x46, 0x7f, 0xb7, 0x82, 0x8e, 0xa8,
459    0x64
460};
461/*
462 * FIPS 140-3 IG 10.3.A.8 allows the iteration count to be smaller
463 * so we use the minimum of 2 here.
464 */
465static int pbkdf2_iterations = 2;
466static int pbkdf2_pkcs5 = 1; /* Disable compliance checks so a smaller iteration count can be used */
467static const ST_KAT_PARAM pbkdf2_params[] = {
468    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, pbkdf2_digest),
469    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_PASSWORD, pbkdf2_password),
470    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SALT, pbkdf2_salt),
471    ST_KAT_PARAM_INT(OSSL_KDF_PARAM_ITER, pbkdf2_iterations),
472    ST_KAT_PARAM_INT(OSSL_KDF_PARAM_PKCS5, pbkdf2_pkcs5),
473    ST_KAT_PARAM_END()
474};
475
476static const char tls12prf_digest[] = "SHA256";
477static const unsigned char tls12prf_secret[] = {
478    0x20, 0x2c, 0x88, 0xc0, 0x0f, 0x84, 0xa1, 0x7a,
479    0x20, 0x02, 0x70, 0x79, 0x60, 0x47, 0x87, 0x46,
480    0x11, 0x76, 0x45, 0x55, 0x39, 0xe7, 0x05, 0xbe,
481    0x73, 0x08, 0x90, 0x60, 0x2c, 0x28, 0x9a, 0x50,
482    0x01, 0xe3, 0x4e, 0xeb, 0x3a, 0x04, 0x3e, 0x5d,
483    0x52, 0xa6, 0x5e, 0x66, 0x12, 0x51, 0x88, 0xbf,
484};
485static const unsigned char tls12prf_seed[] = {
486    'k', 'e', 'y', ' ', 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n',
487    0xae, 0x6c, 0x80, 0x6f, 0x8a, 0xd4, 0xd8, 0x07,
488    0x84, 0x54, 0x9d, 0xff, 0x28, 0xa4, 0xb5, 0x8f,
489    0xd8, 0x37, 0x68, 0x1a, 0x51, 0xd9, 0x28, 0xc3,
490    0xe3, 0x0e, 0xe5, 0xff, 0x14, 0xf3, 0x98, 0x68,
491    0x62, 0xe1, 0xfd, 0x91, 0xf2, 0x3f, 0x55, 0x8a,
492    0x60, 0x5f, 0x28, 0x47, 0x8c, 0x58, 0xcf, 0x72,
493    0x63, 0x7b, 0x89, 0x78, 0x4d, 0x95, 0x9d, 0xf7,
494    0xe9, 0x46, 0xd3, 0xf0, 0x7b, 0xd1, 0xb6, 0x16,
495 };
496static const unsigned char tls12prf_expected[] = {
497    0xd0, 0x61, 0x39, 0x88, 0x9f, 0xff, 0xac, 0x1e,
498    0x3a, 0x71, 0x86, 0x5f, 0x50, 0x4a, 0xa5, 0xd0,
499    0xd2, 0xa2, 0xe8, 0x95, 0x06, 0xc6, 0xf2, 0x27,
500    0x9b, 0x67, 0x0c, 0x3e, 0x1b, 0x74, 0xf5, 0x31,
501    0x01, 0x6a, 0x25, 0x30, 0xc5, 0x1a, 0x3a, 0x0f,
502    0x7e, 0x1d, 0x65, 0x90, 0xd0, 0xf0, 0x56, 0x6b,
503    0x2f, 0x38, 0x7f, 0x8d, 0x11, 0xfd, 0x4f, 0x73,
504    0x1c, 0xdd, 0x57, 0x2d, 0x2e, 0xae, 0x92, 0x7f,
505    0x6f, 0x2f, 0x81, 0x41, 0x0b, 0x25, 0xe6, 0x96,
506    0x0b, 0xe6, 0x89, 0x85, 0xad, 0xd6, 0xc3, 0x84,
507    0x45, 0xad, 0x9f, 0x8c, 0x64, 0xbf, 0x80, 0x68,
508    0xbf, 0x9a, 0x66, 0x79, 0x48, 0x5d, 0x96, 0x6f,
509    0x1a, 0xd6, 0xf6, 0x8b, 0x43, 0x49, 0x5b, 0x10,
510    0xa6, 0x83, 0x75, 0x5e, 0xa2, 0xb8, 0x58, 0xd7,
511    0x0c, 0xca, 0xc7, 0xec, 0x8b, 0x05, 0x3c, 0x6b,
512    0xd4, 0x1c, 0xa2, 0x99, 0xd4, 0xe5, 0x19, 0x28,
513};
514static const ST_KAT_PARAM tls12prf_params[] = {
515    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, tls12prf_digest),
516    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SECRET, tls12prf_secret),
517    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SEED, tls12prf_seed),
518    ST_KAT_PARAM_END()
519};
520
521static const char kbkdf_digest[] = "SHA256";
522static const char kbkdf_mac[] = "HMAC";
523static const unsigned char kbkdf_salt[] = { 'p', 'r', 'f' };
524static const unsigned char kbkdf_prfinput[] = { 't', 'e', 's', 't' };
525static unsigned char kbkdf_key[] = {
526    0x37, 0x05, 0xD9, 0x60, 0x80, 0xC1, 0x77, 0x28,
527    0xA0, 0xE8, 0x00, 0xEA, 0xB6, 0xE0, 0xD2, 0x3C,
528};
529static unsigned char kbkdf_expected[] = {
530    0x9D, 0x18, 0x86, 0x16, 0xF6, 0x38, 0x52, 0xFE,
531    0x86, 0x91, 0x5B, 0xB8, 0x40, 0xB4, 0xA8, 0x86,
532    0xFF, 0x3E, 0x6B, 0xB0, 0xF8, 0x19, 0xB4, 0x9B,
533    0x89, 0x33, 0x93, 0xD3, 0x93, 0x85, 0x42, 0x95,
534};
535static const ST_KAT_PARAM kbkdf_params[] = {
536    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, kbkdf_digest),
537    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_MAC, kbkdf_mac),
538    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, kbkdf_key),
539    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SALT, kbkdf_salt),
540    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, kbkdf_prfinput),
541    ST_KAT_PARAM_END()
542};
543
544static const char kbkdf_kmac_mac[] = "KMAC128";
545static unsigned char kbkdf_kmac_label[] = {
546    0xB5, 0xB5, 0xF3, 0x71, 0x9F, 0xBE, 0x5B, 0x3D,
547    0x7B, 0x8D, 0x05, 0xA1, 0xD3, 0x25, 0x19, 0x50,
548};
549static unsigned char kbkdf_kmac_context[] = {
550    0x36, 0x60, 0x0E, 0xF3, 0xC3, 0x70, 0xB5, 0xEF,
551    0x58, 0xBE, 0xF1, 0xBA, 0x1C, 0xF2, 0x74, 0xCB,
552};
553static unsigned char kbkdf_kmac_key[] = {
554    0xB2, 0x51, 0x4C, 0xC1, 0xD5, 0xCD, 0x7B, 0x6B,
555    0xA3, 0x3C, 0x90, 0x05, 0xBD, 0xAC, 0x32, 0x2A,
556};
557static unsigned char kbkdf_kmac_expected[] = {
558    0xB1, 0x58, 0xEE, 0xB1, 0x34, 0xA4, 0xDD, 0x9D,
559    0xAC, 0x52, 0xBD, 0x9E, 0x30, 0xE8, 0x0D, 0x76,
560    0x42, 0x57, 0x01, 0x89, 0x5F, 0x82, 0x74, 0xB9,
561    0xEB, 0x3E, 0x84, 0xD8, 0xA5, 0xDE, 0x6E, 0x54,
562};
563static const ST_KAT_PARAM kbkdf_kmac_params[] = {
564    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_MAC, kbkdf_kmac_mac),
565    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, kbkdf_kmac_key),
566    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SALT, kbkdf_kmac_label),
567    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, kbkdf_kmac_context),
568    ST_KAT_PARAM_END()
569};
570
571static const char tls13_kdf_digest[] = "SHA256";
572static int tls13_kdf_extract_mode = EVP_KDF_HKDF_MODE_EXTRACT_ONLY;
573static int tls13_kdf_expand_mode = EVP_KDF_HKDF_MODE_EXPAND_ONLY;
574static const unsigned char tls13_kdf_prefix[] = {
575    0x74, 0x6C, 0x73, 0x31, 0x33, 0x20          /* "tls13 " */
576};
577static const unsigned char tls13_kdf_client_early_secret_label[] = {
578    0x63, 0x20, 0x65, 0x20, 0x74, 0x72, 0x61, 0x66,
579    0x66, 0x69, 0x63                            /* "c e traffic"*/
580};
581static const unsigned char tls13_kdf_psk[] = {
582    0xF8, 0xAF, 0x6A, 0xEA, 0x2D, 0x39, 0x7B, 0xAF,
583    0x29, 0x48, 0xA2, 0x5B, 0x28, 0x34, 0x20, 0x06,
584    0x92, 0xCF, 0xF1, 0x7E, 0xEE, 0x91, 0x65, 0xE4,
585    0xE2, 0x7B, 0xAB, 0xEE, 0x9E, 0xDE, 0xFD, 0x05
586};
587static const unsigned char tls13_kdf_client_hello_hash[] = {
588    0x7c, 0x92, 0xf6, 0x8b, 0xd5, 0xbf, 0x36, 0x38,
589    0xea, 0x33, 0x8a, 0x64, 0x94, 0x72, 0x2e, 0x1b,
590    0x44, 0x12, 0x7e, 0x1b, 0x7e, 0x8a, 0xad, 0x53,
591    0x5f, 0x23, 0x22, 0xa6, 0x44, 0xff, 0x22, 0xb3
592};
593
594static const unsigned char tls13_kdf_early_secret[] = {
595    0x15, 0x3B, 0x63, 0x94, 0xA9, 0xC0, 0x3C, 0xF3,
596    0xF5, 0xAC, 0xCC, 0x6E, 0x45, 0x5A, 0x76, 0x93,
597    0x28, 0x11, 0x38, 0xA1, 0xBC, 0xFA, 0x38, 0x03,
598    0xC2, 0x67, 0x35, 0xDD, 0x11, 0x94, 0xD2, 0x16
599};
600static const unsigned char tls13_kdf_client_early_traffic_secret[] = {
601    0xC8, 0x05, 0x83, 0xA9, 0x0E, 0x99, 0x5C, 0x48,
602    0x96, 0x00, 0x49, 0x2A, 0x5D, 0xA6, 0x42, 0xE6,
603    0xB1, 0xF6, 0x79, 0xBA, 0x67, 0x48, 0x28, 0x79,
604    0x2D, 0xF0, 0x87, 0xB9, 0x39, 0x63, 0x61, 0x71
605};
606static const ST_KAT_PARAM tls13_kdf_early_secret_params[] = {
607    ST_KAT_PARAM_INT(OSSL_KDF_PARAM_MODE, tls13_kdf_extract_mode),
608    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, tls13_kdf_digest),
609    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, tls13_kdf_psk),
610    ST_KAT_PARAM_END()
611};
612static const ST_KAT_PARAM tls13_kdf_client_early_secret_params[] = {
613    ST_KAT_PARAM_INT(OSSL_KDF_PARAM_MODE, tls13_kdf_expand_mode),
614    ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, tls13_kdf_digest),
615    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, tls13_kdf_early_secret),
616    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_DATA, tls13_kdf_client_hello_hash),
617    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_PREFIX, tls13_kdf_prefix),
618    ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_LABEL,
619                       tls13_kdf_client_early_secret_label),
620    ST_KAT_PARAM_END()
621};
622
623/*
624 * NOTES:
625 * According to FIPS 140-3 10.3.A Note18: SSH KDF is not required, since it is
626 * sufficient to self-test the underlying SHA hash functions.
627 */
628static const ST_KAT_KDF st_kat_kdf_tests[] =
629{
630    {
631        OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT,
632        OSSL_KDF_NAME_TLS1_3_KDF,
633        tls13_kdf_early_secret_params,
634        ITM(tls13_kdf_early_secret)
635    },
636    {
637        OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND,
638        OSSL_KDF_NAME_TLS1_3_KDF,
639        tls13_kdf_client_early_secret_params,
640        ITM(tls13_kdf_client_early_traffic_secret)
641    },
642    {
643        OSSL_SELF_TEST_DESC_KDF_TLS12_PRF,
644        OSSL_KDF_NAME_TLS1_PRF,
645        tls12prf_params,
646        ITM(tls12prf_expected)
647    },
648    {
649        OSSL_SELF_TEST_DESC_KDF_PBKDF2,
650        OSSL_KDF_NAME_PBKDF2,
651        pbkdf2_params,
652        ITM(pbkdf2_expected)
653    },
654    {
655        OSSL_SELF_TEST_DESC_KDF_KBKDF,
656        OSSL_KDF_NAME_KBKDF,
657        kbkdf_params,
658        ITM(kbkdf_expected)
659    },
660    {
661        OSSL_SELF_TEST_DESC_KDF_KBKDF_KMAC,
662        OSSL_KDF_NAME_KBKDF,
663        kbkdf_kmac_params,
664        ITM(kbkdf_kmac_expected)
665    },
666    {
667        OSSL_SELF_TEST_DESC_KDF_HKDF,
668        OSSL_KDF_NAME_HKDF,
669        hkdf_params,
670        ITM(hkdf_expected)
671    },
672    {
673        OSSL_SELF_TEST_DESC_KDF_SSKDF,
674        OSSL_KDF_NAME_SSKDF,
675        sskdf_params,
676        ITM(sskdf_expected)
677    },
678    {
679        OSSL_SELF_TEST_DESC_KDF_X963KDF,
680        OSSL_KDF_NAME_X963KDF,
681        x963kdf_params,
682        ITM(x963kdf_expected)
683    },
684    {
685        OSSL_SELF_TEST_DESC_KDF_X942KDF,
686        OSSL_KDF_NAME_X942KDF_ASN1,
687        x942kdf_params,
688        ITM(x942kdf_expected)
689    },
690};
691
692/*-
693* DRBG test vectors are a small subset of
694* https://csrc.nist.rip/groups/STM/cavp/documents/drbg/drbgtestvectors.zip
695* Using the folder drbgvectors_pr_true
696* Generated for CAVS 14.3.
697*/
698
699/*
700 * Hash_DRBG.rsp
701 *
702 * [SHA-256]
703 * [PredictionResistance = True]
704 * [EntropyInputLen = 256]
705 * [NonceLen = 128]
706 * [PersonalizationStringLen = 256]
707 * [AdditionalInputLen = 256]
708 * [ReturnedBitsLen = 1024]
709 *
710 * COUNT = 14
711 */
712static const unsigned char drbg_hash_sha256_pr_entropyin[] = {
713    0x06, 0x6d, 0xc8, 0xce, 0x75, 0xb2, 0x89, 0x66, 0xa6, 0x85, 0x16, 0x3f,
714    0xe2, 0xa4, 0xd4, 0x27, 0xfb, 0xdb, 0x61, 0x66, 0x50, 0x61, 0x6b, 0xa2,
715    0x82, 0xfc, 0x33, 0x2b, 0x4e, 0x6f, 0x12, 0x20
716};
717static const unsigned char drbg_hash_sha256_pr_nonce[] = {
718    0x55, 0x9f, 0x7c, 0x64, 0x89, 0x70, 0x83, 0xec, 0x2d, 0x73, 0x70, 0xd9,
719    0xf0, 0xe5, 0x07, 0x1f
720};
721static const unsigned char drbg_hash_sha256_pr_persstr[] = {
722    0x88, 0x6f, 0x54, 0x9a, 0xad, 0x1a, 0xc6, 0x3d, 0x18, 0xcb, 0xcc, 0x66,
723    0x85, 0xda, 0xa2, 0xc2, 0xf7, 0x9e, 0xb0, 0x89, 0x4c, 0xb4, 0xae, 0xf1,
724    0xac, 0x54, 0x4f, 0xce, 0x57, 0xf1, 0x5e, 0x11
725};
726static const unsigned char drbg_hash_sha256_pr_entropyinpr0[] = {
727    0xff, 0x80, 0xb7, 0xd2, 0x6a, 0x05, 0xbc, 0x8a, 0x7a, 0xbe, 0x53, 0x28,
728    0x6b, 0x0e, 0xeb, 0x73, 0x3b, 0x71, 0x5a, 0x20, 0x5b, 0xfa, 0x4f, 0xf6,
729    0x37, 0x03, 0xde, 0xad, 0xb6, 0xea, 0x0e, 0xf4
730};
731static const unsigned char drbg_hash_sha256_pr_entropyinpr1[] = {
732    0xc7, 0x38, 0x32, 0x53, 0x46, 0x81, 0xed, 0xe3, 0x7e, 0x03, 0x84, 0x6d,
733    0x3c, 0x84, 0x17, 0x67, 0x29, 0x7d, 0x24, 0x6c, 0x68, 0x92, 0x41, 0xd2,
734    0xe7, 0x75, 0xbe, 0x7e, 0xc9, 0x96, 0x29, 0x3d
735};
736static const unsigned char drbg_hash_sha256_pr_addin0[] = {
737    0xb7, 0x21, 0x5f, 0x14, 0xac, 0x7b, 0xaf, 0xd0, 0xa9, 0x17, 0x72, 0xba,
738    0x22, 0xf7, 0x19, 0xaf, 0xbd, 0x20, 0xb3, 0x11, 0x63, 0x6c, 0x2b, 0x1e,
739    0x83, 0xe4, 0xa8, 0x23, 0x35, 0x3f, 0xc6, 0xea
740};
741static const unsigned char drbg_hash_sha256_pr_addin1[] = {
742    0xce, 0xd3, 0x1f, 0x7e, 0x0d, 0xae, 0x5b, 0xb5, 0xc0, 0x43, 0xe2, 0x46,
743    0xb2, 0x94, 0x73, 0xe2, 0xfd, 0x39, 0x51, 0x2e, 0xad, 0x45, 0x69, 0xee,
744    0xe3, 0xe3, 0x80, 0x33, 0x14, 0xab, 0xa7, 0xa3
745};
746static const unsigned char drbg_hash_sha256_pr_expected[] = {
747    0x60, 0xc2, 0x34, 0xcf, 0xaf, 0xb4, 0x68, 0x03, 0x3b, 0xf1, 0x95, 0xe5,
748    0x78, 0xce, 0x26, 0x6e, 0x14, 0x65, 0x32, 0x6a, 0x96, 0xa9, 0xe0, 0x3f,
749    0x8b, 0x89, 0x36, 0x70, 0xef, 0x62, 0x75, 0x4d, 0x5e, 0x80, 0xd5, 0x53,
750    0xa1, 0xf8, 0x49, 0x50, 0x20, 0x8b, 0x93, 0x43, 0x07, 0x9f, 0x2e, 0xf8,
751    0x56, 0xe9, 0xc5, 0x70, 0x61, 0x85, 0x97, 0xb5, 0xdc, 0x82, 0xa2, 0xda,
752    0xea, 0xa3, 0xfd, 0x9b, 0x2f, 0xd2, 0xa0, 0xd7, 0x1b, 0xc6, 0x29, 0x35,
753    0xcc, 0xb8, 0x3d, 0xa0, 0x67, 0x98, 0x05, 0xa0, 0xe3, 0x1e, 0xfe, 0xe4,
754    0xf0, 0xe5, 0x13, 0xb0, 0x83, 0x17, 0xfa, 0xca, 0x93, 0x5e, 0x38, 0x29,
755    0x48, 0xd2, 0x72, 0xdb, 0x76, 0x3e, 0x6d, 0xf3, 0x25, 0x10, 0xff, 0x1b,
756    0x99, 0xff, 0xf8, 0xc6, 0x0e, 0xb0, 0xdd, 0x29, 0x2e, 0xbc, 0xbb, 0xc8,
757    0x0a, 0x01, 0x6e, 0xd3, 0xb0, 0x0e, 0x4e, 0xab
758};
759
760/*
761 * CTR_DRBG.rsp
762 *
763 * [AES-128 use df]
764 * [PredictionResistance = True]
765 * [EntropyInputLen = 128]
766 * [NonceLen = 64]
767 * [PersonalizationStringLen = 128]
768 * [AdditionalInputLen = 128]
769 * [ReturnedBitsLen = 512]
770 *
771 * COUNT = 0
772 */
773static const unsigned char drbg_ctr_aes128_pr_df_entropyin[] = {
774    0x92, 0x89, 0x8f, 0x31, 0xfa, 0x1c, 0xff, 0x6d, 0x18, 0x2f, 0x26, 0x06,
775    0x43, 0xdf, 0xf8, 0x18
776};
777static const unsigned char drbg_ctr_aes128_pr_df_nonce[] = {
778    0xc2, 0xa4, 0xd9, 0x72, 0xc3, 0xb9, 0xb6, 0x97
779};
780static const unsigned char drbg_ctr_aes128_pr_df_persstr[] = {
781    0xea, 0x65, 0xee, 0x60, 0x26, 0x4e, 0x7e, 0xb6, 0x0e, 0x82, 0x68, 0xc4,
782    0x37, 0x3c, 0x5c, 0x0b
783};
784static const unsigned char drbg_ctr_aes128_pr_df_entropyinpr0[] = {
785    0x20, 0x72, 0x8a, 0x06, 0xf8, 0x6f, 0x8d, 0xd4, 0x41, 0xe2, 0x72, 0xb7,
786    0xc4, 0x2c, 0xe8, 0x10
787};
788static const unsigned char drbg_ctr_aes128_pr_df_entropyinpr1[] = {
789    0x3d, 0xb0, 0xf0, 0x94, 0xf3, 0x05, 0x50, 0x33, 0x17, 0x86, 0x3e, 0x22,
790    0x08, 0xf7, 0xa5, 0x01
791};
792static const unsigned char drbg_ctr_aes128_pr_df_addin0[] = {
793    0x1a, 0x40, 0xfa, 0xe3, 0xcc, 0x6c, 0x7c, 0xa0, 0xf8, 0xda, 0xba, 0x59,
794    0x23, 0x6d, 0xad, 0x1d
795};
796static const unsigned char drbg_ctr_aes128_pr_df_addin1[] = {
797    0x9f, 0x72, 0x76, 0x6c, 0xc7, 0x46, 0xe5, 0xed, 0x2e, 0x53, 0x20, 0x12,
798    0xbc, 0x59, 0x31, 0x8c
799};
800static const unsigned char drbg_ctr_aes128_pr_df_expected[] = {
801    0x5a, 0x35, 0x39, 0x87, 0x0f, 0x4d, 0x22, 0xa4, 0x09, 0x24, 0xee, 0x71,
802    0xc9, 0x6f, 0xac, 0x72, 0x0a, 0xd6, 0xf0, 0x88, 0x82, 0xd0, 0x83, 0x28,
803    0x73, 0xec, 0x3f, 0x93, 0xd8, 0xab, 0x45, 0x23, 0xf0, 0x7e, 0xac, 0x45,
804    0x14, 0x5e, 0x93, 0x9f, 0xb1, 0xd6, 0x76, 0x43, 0x3d, 0xb6, 0xe8, 0x08,
805    0x88, 0xf6, 0xda, 0x89, 0x08, 0x77, 0x42, 0xfe, 0x1a, 0xf4, 0x3f, 0xc4,
806    0x23, 0xc5, 0x1f, 0x68
807};
808
809/*
810 * HMAC_DRBG.rsp
811 *
812 * [SHA-1]
813 * [PredictionResistance = True]
814 * [EntropyInputLen = 128]
815 * [NonceLen = 64]
816 * [PersonalizationStringLen = 128]
817 * [AdditionalInputLen = 128]
818 * [ReturnedBitsLen = 640]
819 *
820 * COUNT = 0
821 */
822static const unsigned char drbg_hmac_sha1_pr_entropyin[] = {
823    0x68, 0x0f, 0xac, 0xe9, 0x0d, 0x7b, 0xca, 0x21, 0xd4, 0xa0, 0xed, 0xb7,
824    0x79, 0x9e, 0xe5, 0xd8
825};
826static const unsigned char drbg_hmac_sha1_pr_nonce[] = {
827    0xb7, 0xbe, 0x9e, 0xed, 0xdd, 0x0e, 0x3b, 0x4b
828};
829static const unsigned char drbg_hmac_sha1_pr_persstr[] = {
830    0xf5, 0x8c, 0x40, 0xae, 0x70, 0xf7, 0xa5, 0x56, 0x48, 0xa9, 0x31, 0xa0,
831    0xa9, 0x31, 0x3d, 0xd7
832};
833static const unsigned char drbg_hmac_sha1_pr_entropyinpr0[] = {
834    0x7c, 0xaf, 0xe2, 0x31, 0x63, 0x0a, 0xa9, 0x5a, 0x74, 0x2c, 0x4e, 0x5f,
835    0x5f, 0x22, 0xc6, 0xa4
836};
837static const unsigned char drbg_hmac_sha1_pr_entropyinpr1[] = {
838    0x1c, 0x0d, 0x77, 0x92, 0x89, 0x88, 0x27, 0x94, 0x8a, 0x58, 0x9f, 0x82,
839    0x2d, 0x1a, 0xf7, 0xa6
840};
841static const unsigned char drbg_hmac_sha1_pr_addin0[] = {
842    0xdc, 0x36, 0x63, 0xf0, 0x62, 0x78, 0x9c, 0xd1, 0x5c, 0xbb, 0x20, 0xc3,
843    0xc1, 0x8c, 0xd9, 0xd7
844};
845static const unsigned char drbg_hmac_sha1_pr_addin1[] = {
846    0xfe, 0x85, 0xb0, 0xab, 0x14, 0xc6, 0x96, 0xe6, 0x9c, 0x24, 0xe7, 0xb5,
847    0xa1, 0x37, 0x12, 0x0c
848};
849static const unsigned char drbg_hmac_sha1_pr_expected[] = {
850    0x68, 0x00, 0x4b, 0x3a, 0x28, 0xf7, 0xf0, 0x1c, 0xf9, 0xe9, 0xb5, 0x71,
851    0x20, 0x79, 0xef, 0x80, 0x87, 0x1b, 0x08, 0xb9, 0xa9, 0x1b, 0xcd, 0x2b,
852    0x9f, 0x09, 0x4d, 0xa4, 0x84, 0x80, 0xb3, 0x4c, 0xaf, 0xd5, 0x59, 0x6b,
853    0x0c, 0x0a, 0x48, 0xe1, 0x48, 0xda, 0xbc, 0x6f, 0x77, 0xb8, 0xff, 0xaf,
854    0x18, 0x70, 0x28, 0xe1, 0x04, 0x13, 0x7a, 0x4f, 0xeb, 0x1c, 0x72, 0xb0,
855    0xc4, 0x4f, 0xe8, 0xb1, 0xaf, 0xab, 0xa5, 0xbc, 0xfd, 0x86, 0x67, 0xf2,
856    0xf5, 0x5b, 0x46, 0x06, 0x63, 0x2e, 0x3c, 0xbc
857};
858
859static const ST_KAT_DRBG st_kat_drbg_tests[] =
860{
861    {
862        OSSL_SELF_TEST_DESC_DRBG_HASH,
863        "HASH-DRBG", "digest", "SHA256",
864        ITM(drbg_hash_sha256_pr_entropyin),
865        ITM(drbg_hash_sha256_pr_nonce),
866        ITM(drbg_hash_sha256_pr_persstr),
867        ITM(drbg_hash_sha256_pr_entropyinpr0),
868        ITM(drbg_hash_sha256_pr_entropyinpr1),
869        ITM(drbg_hash_sha256_pr_addin0),
870        ITM(drbg_hash_sha256_pr_addin1),
871        ITM(drbg_hash_sha256_pr_expected)
872    },
873    {
874        OSSL_SELF_TEST_DESC_DRBG_CTR,
875        "CTR-DRBG", "cipher", "AES-128-CTR",
876        ITM(drbg_ctr_aes128_pr_df_entropyin),
877        ITM(drbg_ctr_aes128_pr_df_nonce),
878        ITM(drbg_ctr_aes128_pr_df_persstr),
879        ITM(drbg_ctr_aes128_pr_df_entropyinpr0),
880        ITM(drbg_ctr_aes128_pr_df_entropyinpr1),
881        ITM(drbg_ctr_aes128_pr_df_addin0),
882        ITM(drbg_ctr_aes128_pr_df_addin1),
883        ITM(drbg_ctr_aes128_pr_df_expected)
884    },
885    {
886        OSSL_SELF_TEST_DESC_DRBG_HMAC,
887        "HMAC-DRBG", "digest", "SHA1",
888        ITM(drbg_hmac_sha1_pr_entropyin),
889        ITM(drbg_hmac_sha1_pr_nonce),
890        ITM(drbg_hmac_sha1_pr_persstr),
891        ITM(drbg_hmac_sha1_pr_entropyinpr0),
892        ITM(drbg_hmac_sha1_pr_entropyinpr1),
893        ITM(drbg_hmac_sha1_pr_addin0),
894        ITM(drbg_hmac_sha1_pr_addin1),
895        ITM(drbg_hmac_sha1_pr_expected)
896    }
897};
898
899/* KEY EXCHANGE TEST DATA */
900
901#ifndef OPENSSL_NO_DH
902/* DH KAT */
903static const unsigned char dh_priv[] = {
904    0x14, 0x33, 0xe0, 0xb5, 0xa9, 0x17, 0xb6, 0x0a,
905    0x30, 0x23, 0xf2, 0xf8, 0xaa, 0x2c, 0x2d, 0x70,
906    0xd2, 0x96, 0x8a, 0xba, 0x9a, 0xea, 0xc8, 0x15,
907    0x40, 0xb8, 0xfc, 0xe6
908};
909static const unsigned char dh_pub[] = {
910    0x95, 0xdd, 0x33, 0x8d, 0x29, 0xe5, 0x71, 0x04,
911    0x92, 0xb9, 0x18, 0x31, 0x7b, 0x72, 0xa3, 0x69,
912    0x36, 0xe1, 0x95, 0x1a, 0x2e, 0xe5, 0xa5, 0x59,
913    0x16, 0x99, 0xc0, 0x48, 0x6d, 0x0d, 0x4f, 0x9b,
914    0xdd, 0x6d, 0x5a, 0x3f, 0x6b, 0x98, 0x89, 0x0c,
915    0x62, 0xb3, 0x76, 0x52, 0xd3, 0x6e, 0x71, 0x21,
916    0x11, 0xe6, 0x8a, 0x73, 0x55, 0x37, 0x25, 0x06,
917    0x99, 0xef, 0xe3, 0x30, 0x53, 0x73, 0x91, 0xfb,
918    0xc2, 0xc5, 0x48, 0xbc, 0x5a, 0xc3, 0xe5, 0xb2,
919    0x33, 0x86, 0xc3, 0xee, 0xf5, 0xeb, 0x43, 0xc0,
920    0x99, 0xd7, 0x0a, 0x52, 0x02, 0x68, 0x7e, 0x83,
921    0x96, 0x42, 0x48, 0xfc, 0xa9, 0x1f, 0x40, 0x90,
922    0x8e, 0x8f, 0xb3, 0x31, 0x93, 0x15, 0xf6, 0xd2,
923    0x60, 0x6d, 0x7f, 0x7c, 0xd5, 0x2c, 0xc6, 0xe7,
924    0xc5, 0x84, 0x3a, 0xfb, 0x22, 0x51, 0x9c, 0xf0,
925    0xf0, 0xf9, 0xd3, 0xa0, 0xa4, 0xe8, 0xc8, 0x88,
926    0x99, 0xef, 0xed, 0xe7, 0x36, 0x43, 0x51, 0xfb,
927    0x6a, 0x36, 0x3e, 0xe7, 0x17, 0xe5, 0x44, 0x5a,
928    0xda, 0xb4, 0xc9, 0x31, 0xa6, 0x48, 0x39, 0x97,
929    0xb8, 0x7d, 0xad, 0x83, 0x67, 0x7e, 0x4d, 0x1d,
930    0x3a, 0x77, 0x75, 0xe0, 0xf6, 0xd0, 0x0f, 0xdf,
931    0x73, 0xc7, 0xad, 0x80, 0x1e, 0x66, 0x5a, 0x0e,
932    0x5a, 0x79, 0x6d, 0x0a, 0x03, 0x80, 0xa1, 0x9f,
933    0xa1, 0x82, 0xef, 0xc8, 0xa0, 0x4f, 0x5e, 0x4d,
934    0xb9, 0x0d, 0x1a, 0x86, 0x37, 0xf9, 0x5d, 0xb1,
935    0x64, 0x36, 0xbd, 0xc8, 0xf3, 0xfc, 0x09, 0x6c,
936    0x4f, 0xf7, 0xf2, 0x34, 0xbe, 0x8f, 0xef, 0x47,
937    0x9a, 0xc4, 0xb0, 0xdc, 0x4b, 0x77, 0x26, 0x3e,
938    0x07, 0xd9, 0x95, 0x9d, 0xe0, 0xf1, 0xbf, 0x3f,
939    0x0a, 0xe3, 0xd9, 0xd5, 0x0e, 0x4b, 0x89, 0xc9,
940    0x9e, 0x3e, 0xa1, 0x21, 0x73, 0x43, 0xdd, 0x8c,
941    0x65, 0x81, 0xac, 0xc4, 0x95, 0x9c, 0x91, 0xd3
942};
943static const unsigned char dh_peer_pub[] = {
944    0x1f, 0xc1, 0xda, 0x34, 0x1d, 0x1a, 0x84, 0x6a,
945    0x96, 0xb7, 0xbe, 0x24, 0x34, 0x0f, 0x87, 0x7d,
946    0xd0, 0x10, 0xaa, 0x03, 0x56, 0xd5, 0xad, 0x58,
947    0xaa, 0xe9, 0xc7, 0xb0, 0x8f, 0x74, 0x9a, 0x32,
948    0x23, 0x51, 0x10, 0xb5, 0xd8, 0x8e, 0xb5, 0xdb,
949    0xfa, 0x97, 0x8d, 0x27, 0xec, 0xc5, 0x30, 0xf0,
950    0x2d, 0x31, 0x14, 0x00, 0x5b, 0x64, 0xb1, 0xc0,
951    0xe0, 0x24, 0xcb, 0x8a, 0xe2, 0x16, 0x98, 0xbc,
952    0xa9, 0xe6, 0x0d, 0x42, 0x80, 0x86, 0x22, 0xf1,
953    0x81, 0xc5, 0x6e, 0x1d, 0xe7, 0xa9, 0x6e, 0x6e,
954    0xfe, 0xe9, 0xd6, 0x65, 0x67, 0xe9, 0x1b, 0x97,
955    0x70, 0x42, 0xc7, 0xe3, 0xd0, 0x44, 0x8f, 0x05,
956    0xfb, 0x77, 0xf5, 0x22, 0xb9, 0xbf, 0xc8, 0xd3,
957    0x3c, 0xc3, 0xc3, 0x1e, 0xd3, 0xb3, 0x1f, 0x0f,
958    0xec, 0xb6, 0xdb, 0x4f, 0x6e, 0xa3, 0x11, 0xe7,
959    0x7a, 0xfd, 0xbc, 0xd4, 0x7a, 0xee, 0x1b, 0xb1,
960    0x50, 0xf2, 0x16, 0x87, 0x35, 0x78, 0xfb, 0x96,
961    0x46, 0x8e, 0x8f, 0x9f, 0x3d, 0xe8, 0xef, 0xbf,
962    0xce, 0x75, 0x62, 0x4b, 0x1d, 0xf0, 0x53, 0x22,
963    0xa3, 0x4f, 0x14, 0x63, 0xe8, 0x39, 0xe8, 0x98,
964    0x4c, 0x4a, 0xd0, 0xa9, 0x6e, 0x1a, 0xc8, 0x42,
965    0xe5, 0x31, 0x8c, 0xc2, 0x3c, 0x06, 0x2a, 0x8c,
966    0xa1, 0x71, 0xb8, 0xd5, 0x75, 0x98, 0x0d, 0xde,
967    0x7f, 0xc5, 0x6f, 0x15, 0x36, 0x52, 0x38, 0x20,
968    0xd4, 0x31, 0x92, 0xbf, 0xd5, 0x1e, 0x8e, 0x22,
969    0x89, 0x78, 0xac, 0xa5, 0xb9, 0x44, 0x72, 0xf3,
970    0x39, 0xca, 0xeb, 0x99, 0x31, 0xb4, 0x2b, 0xe3,
971    0x01, 0x26, 0x8b, 0xc9, 0x97, 0x89, 0xc9, 0xb2,
972    0x55, 0x71, 0xc3, 0xc0, 0xe4, 0xcb, 0x3f, 0x00,
973    0x7f, 0x1a, 0x51, 0x1c, 0xbb, 0x53, 0xc8, 0x51,
974    0x9c, 0xdd, 0x13, 0x02, 0xab, 0xca, 0x6c, 0x0f,
975    0x34, 0xf9, 0x67, 0x39, 0xf1, 0x7f, 0xf4, 0x8b
976};
977
978static const unsigned char dh_secret_expected[256] = {
979    0xa0, 0x38, 0x64, 0x37, 0xdf, 0x2d, 0x2c, 0x78,
980    0x49, 0xb9, 0xa7, 0x77, 0xfb, 0xc1, 0x69, 0x94,
981    0x85, 0xc5, 0x5a, 0xbc, 0x8d, 0x43, 0x32, 0x23,
982    0x94, 0xf5, 0xba, 0xb4, 0x5f, 0x22, 0x4b, 0x4e,
983    0xc4, 0xfd, 0x89, 0x41, 0x56, 0x41, 0xe8, 0x9f,
984    0x2d, 0x0d, 0x26, 0x33, 0x60, 0x13, 0x8a, 0x20,
985    0xf1, 0x7e, 0xb3, 0x76, 0x38, 0x03, 0x0e, 0x48,
986    0x4f, 0x27, 0x8c, 0x32, 0xdb, 0x66, 0x5c, 0xbf,
987    0x7f, 0xc7, 0xeb, 0xc6, 0x2d, 0xfd, 0x00, 0x08,
988    0xb0, 0x98, 0x4e, 0xad, 0x68, 0x65, 0xca, 0x9e,
989    0x78, 0xe1, 0xaa, 0xb7, 0x8e, 0x08, 0x4d, 0x67,
990    0xa6, 0x15, 0x16, 0xbb, 0x41, 0xac, 0x15, 0xb5,
991    0x08, 0x92, 0x5d, 0x25, 0x1d, 0x7f, 0xf3, 0x1b,
992    0x5c, 0xea, 0x21, 0x6b, 0xe5, 0x00, 0x4d, 0xb6,
993    0x8e, 0xae, 0x84, 0xb4, 0xee, 0xf7, 0xcc, 0xdd,
994    0x64, 0x19, 0x4e, 0x25, 0xce, 0x37, 0x4f, 0xde,
995    0xb6, 0x21, 0xba, 0xd9, 0xc0, 0x7a, 0x87, 0xc7,
996    0x90, 0x0a, 0x78, 0x8b, 0xdd, 0xbc, 0x68, 0x77,
997    0x2d, 0xa6, 0xdf, 0x4d, 0x2e, 0xca, 0xdc, 0x86,
998    0xb6, 0x1e, 0x54, 0x2b, 0x3a, 0xa9, 0x52, 0x67,
999    0xf3, 0x1a, 0x35, 0xb7, 0x5a, 0xcd, 0x99, 0x59,
1000    0xe9, 0x07, 0x6f, 0xd7, 0xd7, 0x96, 0x8a, 0x47,
1001    0xdf, 0x9f, 0x51, 0x1b, 0x04, 0xa9, 0x45, 0x30,
1002    0x89, 0x8a, 0x3f, 0x7e, 0xca, 0xfc, 0x05, 0x2d,
1003    0x18, 0x77, 0x8f, 0x45, 0x25, 0x39, 0xdb, 0xf2,
1004    0x13, 0x36, 0x31, 0xdb, 0x50, 0x65, 0x63, 0x4a,
1005    0xae, 0x3e, 0xd1, 0x3e, 0xde, 0xc1, 0x32, 0x4b,
1006    0x78, 0x19, 0x03, 0x70, 0x0a, 0xc2, 0xa2, 0x6f,
1007    0x9b, 0xd4, 0xa6, 0x1d, 0x47, 0xf2, 0xa6, 0x91,
1008    0x61, 0x4a, 0x74, 0xf8, 0x70, 0x39, 0x42, 0x72,
1009    0xd5, 0x58, 0x7f, 0xcd, 0x16, 0xeb, 0x82, 0x0c,
1010    0x2c, 0xf4, 0xd0, 0x95, 0x22, 0xf9, 0xbe, 0x99,
1011};
1012
1013static const char dh_ffdhe2048[] = "ffdhe2048";
1014static const ST_KAT_PARAM dh_group[] = {
1015    ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, dh_ffdhe2048),
1016    ST_KAT_PARAM_END()
1017};
1018
1019/* The host's private key */
1020static const ST_KAT_PARAM dh_host_key[] = {
1021    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PUB_KEY, dh_pub),
1022    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, dh_priv),
1023    ST_KAT_PARAM_END()
1024};
1025
1026/* The peer's public key */
1027static const ST_KAT_PARAM dh_peer_key[] = {
1028    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PUB_KEY, dh_peer_pub),
1029    ST_KAT_PARAM_END()
1030};
1031#endif /* OPENSSL_NO_DH */
1032
1033
1034#ifndef OPENSSL_NO_EC
1035static const char ecdh_curve_name[] = "prime256v1";
1036static const unsigned char ecdh_privd[] = {
1037    0x33, 0xd0, 0x43, 0x83, 0xa9, 0x89, 0x56, 0x03,
1038    0xd2, 0xd7, 0xfe, 0x6b, 0x01, 0x6f, 0xe4, 0x59,
1039    0xcc, 0x0d, 0x9a, 0x24, 0x6c, 0x86, 0x1b, 0x2e,
1040    0xdc, 0x4b, 0x4d, 0x35, 0x43, 0xe1, 0x1b, 0xad
1041};
1042static const unsigned char ecdh_pub[] = {
1043    0x04,
1044    0x1b, 0x93, 0x67, 0x55, 0x1c, 0x55, 0x9f, 0x63,
1045    0xd1, 0x22, 0xa4, 0xd8, 0xd1, 0x0a, 0x60, 0x6d,
1046    0x02, 0xa5, 0x77, 0x57, 0xc8, 0xa3, 0x47, 0x73,
1047    0x3a, 0x6a, 0x08, 0x28, 0x39, 0xbd, 0xc9, 0xd2,
1048    0x80, 0xec, 0xe9, 0xa7, 0x08, 0x29, 0x71, 0x2f,
1049    0xc9, 0x56, 0x82, 0xee, 0x9a, 0x85, 0x0f, 0x6d,
1050    0x7f, 0x59, 0x5f, 0x8c, 0xd1, 0x96, 0x0b, 0xdf,
1051    0x29, 0x3e, 0x49, 0x07, 0x88, 0x3f, 0x9a, 0x29
1052};
1053static const unsigned char ecdh_peer_pub[] = {
1054    0x04,
1055    0x1f, 0x72, 0xbd, 0x2a, 0x3e, 0xeb, 0x6c, 0x76,
1056    0xe5, 0x5d, 0x69, 0x75, 0x24, 0xbf, 0x2f, 0x5b,
1057    0x96, 0xb2, 0x91, 0x62, 0x06, 0x35, 0xcc, 0xb2,
1058    0x4b, 0x31, 0x1b, 0x0c, 0x6f, 0x06, 0x9f, 0x86,
1059    0xcf, 0xc8, 0xac, 0xd5, 0x4f, 0x4d, 0x77, 0xf3,
1060    0x70, 0x4a, 0x8f, 0x04, 0x9a, 0xb1, 0x03, 0xc7,
1061    0xeb, 0xd5, 0x94, 0x78, 0x61, 0xab, 0x78, 0x0c,
1062    0x4a, 0x2d, 0x6b, 0xf3, 0x2f, 0x2e, 0x4a, 0xbc
1063};
1064
1065static const ST_KAT_PARAM ecdh_group[] = {
1066    ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, ecdh_curve_name),
1067    ST_KAT_PARAM_END()
1068};
1069static const ST_KAT_PARAM ecdh_host_key[] = {
1070    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecdh_pub),
1071    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, ecdh_privd),
1072    ST_KAT_PARAM_END()
1073};
1074static const ST_KAT_PARAM ecdh_peer_key[] = {
1075    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecdh_peer_pub),
1076    ST_KAT_PARAM_END()
1077};
1078static const unsigned char ecdh_secret_expected[] = {
1079    0x45, 0x2a, 0x2f, 0x0d, 0x24, 0xe6, 0x8d, 0xd0,
1080    0xda, 0x59, 0x7b, 0x0c, 0xec, 0x9b, 0x4c, 0x38,
1081    0x41, 0xdd, 0xce, 0xb3, 0xcc, 0xf1, 0x90, 0x8e,
1082    0x30, 0xdb, 0x5b, 0x5f, 0x97, 0xea, 0xe0, 0xc2
1083};
1084#endif /* OPENSSL_NO_EC */
1085
1086#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
1087static const ST_KAT_KAS st_kat_kas_tests[] =
1088{
1089# ifndef OPENSSL_NO_DH
1090    {
1091        OSSL_SELF_TEST_DESC_KA_DH,
1092        "DH",
1093        dh_group,
1094        dh_host_key,
1095        dh_peer_key,
1096        ITM(dh_secret_expected)
1097    },
1098# endif /* OPENSSL_NO_DH */
1099# ifndef OPENSSL_NO_EC
1100    {
1101        OSSL_SELF_TEST_DESC_KA_ECDH,
1102        "EC",
1103        ecdh_group,
1104        ecdh_host_key,
1105        ecdh_peer_key,
1106        ITM(ecdh_secret_expected)
1107    },
1108# endif /* OPENSSL_NO_EC */
1109};
1110#endif /* !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC) */
1111
1112/* RSA key data */
1113static const unsigned char rsa_n[] = {
1114    0xDB, 0x10, 0x1A, 0xC2, 0xA3, 0xF1, 0xDC, 0xFF,
1115    0x13, 0x6B, 0xED, 0x44, 0xDF, 0xF0, 0x02, 0x6D,
1116    0x13, 0xC7, 0x88, 0xDA, 0x70, 0x6B, 0x54, 0xF1,
1117    0xE8, 0x27, 0xDC, 0xC3, 0x0F, 0x99, 0x6A, 0xFA,
1118    0xC6, 0x67, 0xFF, 0x1D, 0x1E, 0x3C, 0x1D, 0xC1,
1119    0xB5, 0x5F, 0x6C, 0xC0, 0xB2, 0x07, 0x3A, 0x6D,
1120    0x41, 0xE4, 0x25, 0x99, 0xAC, 0xFC, 0xD2, 0x0F,
1121    0x02, 0xD3, 0xD1, 0x54, 0x06, 0x1A, 0x51, 0x77,
1122    0xBD, 0xB6, 0xBF, 0xEA, 0xA7, 0x5C, 0x06, 0xA9,
1123    0x5D, 0x69, 0x84, 0x45, 0xD7, 0xF5, 0x05, 0xBA,
1124    0x47, 0xF0, 0x1B, 0xD7, 0x2B, 0x24, 0xEC, 0xCB,
1125    0x9B, 0x1B, 0x10, 0x8D, 0x81, 0xA0, 0xBE, 0xB1,
1126    0x8C, 0x33, 0xE4, 0x36, 0xB8, 0x43, 0xEB, 0x19,
1127    0x2A, 0x81, 0x8D, 0xDE, 0x81, 0x0A, 0x99, 0x48,
1128    0xB6, 0xF6, 0xBC, 0xCD, 0x49, 0x34, 0x3A, 0x8F,
1129    0x26, 0x94, 0xE3, 0x28, 0x82, 0x1A, 0x7C, 0x8F,
1130    0x59, 0x9F, 0x45, 0xE8, 0x5D, 0x1A, 0x45, 0x76,
1131    0x04, 0x56, 0x05, 0xA1, 0xD0, 0x1B, 0x8C, 0x77,
1132    0x6D, 0xAF, 0x53, 0xFA, 0x71, 0xE2, 0x67, 0xE0,
1133    0x9A, 0xFE, 0x03, 0xA9, 0x85, 0xD2, 0xC9, 0xAA,
1134    0xBA, 0x2A, 0xBC, 0xF4, 0xA0, 0x08, 0xF5, 0x13,
1135    0x98, 0x13, 0x5D, 0xF0, 0xD9, 0x33, 0x34, 0x2A,
1136    0x61, 0xC3, 0x89, 0x55, 0xF0, 0xAE, 0x1A, 0x9C,
1137    0x22, 0xEE, 0x19, 0x05, 0x8D, 0x32, 0xFE, 0xEC,
1138    0x9C, 0x84, 0xBA, 0xB7, 0xF9, 0x6C, 0x3A, 0x4F,
1139    0x07, 0xFC, 0x45, 0xEB, 0x12, 0xE5, 0x7B, 0xFD,
1140    0x55, 0xE6, 0x29, 0x69, 0xD1, 0xC2, 0xE8, 0xB9,
1141    0x78, 0x59, 0xF6, 0x79, 0x10, 0xC6, 0x4E, 0xEB,
1142    0x6A, 0x5E, 0xB9, 0x9A, 0xC7, 0xC4, 0x5B, 0x63,
1143    0xDA, 0xA3, 0x3F, 0x5E, 0x92, 0x7A, 0x81, 0x5E,
1144    0xD6, 0xB0, 0xE2, 0x62, 0x8F, 0x74, 0x26, 0xC2,
1145    0x0C, 0xD3, 0x9A, 0x17, 0x47, 0xE6, 0x8E, 0xAB
1146};
1147static const unsigned char rsa_e[] = { 0x01, 0x00, 0x01 };
1148static const unsigned char rsa_d[] = {
1149    0x52, 0x41, 0xF4, 0xDA, 0x7B, 0xB7, 0x59, 0x55,
1150    0xCA, 0xD4, 0x2F, 0x0F, 0x3A, 0xCB, 0xA4, 0x0D,
1151    0x93, 0x6C, 0xCC, 0x9D, 0xC1, 0xB2, 0xFB, 0xFD,
1152    0xAE, 0x40, 0x31, 0xAC, 0x69, 0x52, 0x21, 0x92,
1153    0xB3, 0x27, 0xDF, 0xEA, 0xEE, 0x2C, 0x82, 0xBB,
1154    0xF7, 0x40, 0x32, 0xD5, 0x14, 0xC4, 0x94, 0x12,
1155    0xEC, 0xB8, 0x1F, 0xCA, 0x59, 0xE3, 0xC1, 0x78,
1156    0xF3, 0x85, 0xD8, 0x47, 0xA5, 0xD7, 0x02, 0x1A,
1157    0x65, 0x79, 0x97, 0x0D, 0x24, 0xF4, 0xF0, 0x67,
1158    0x6E, 0x75, 0x2D, 0xBF, 0x10, 0x3D, 0xA8, 0x7D,
1159    0xEF, 0x7F, 0x60, 0xE4, 0xE6, 0x05, 0x82, 0x89,
1160    0x5D, 0xDF, 0xC6, 0xD2, 0x6C, 0x07, 0x91, 0x33,
1161    0x98, 0x42, 0xF0, 0x02, 0x00, 0x25, 0x38, 0xC5,
1162    0x85, 0x69, 0x8A, 0x7D, 0x2F, 0x95, 0x6C, 0x43,
1163    0x9A, 0xB8, 0x81, 0xE2, 0xD0, 0x07, 0x35, 0xAA,
1164    0x05, 0x41, 0xC9, 0x1E, 0xAF, 0xE4, 0x04, 0x3B,
1165    0x19, 0xB8, 0x73, 0xA2, 0xAC, 0x4B, 0x1E, 0x66,
1166    0x48, 0xD8, 0x72, 0x1F, 0xAC, 0xF6, 0xCB, 0xBC,
1167    0x90, 0x09, 0xCA, 0xEC, 0x0C, 0xDC, 0xF9, 0x2C,
1168    0xD7, 0xEB, 0xAE, 0xA3, 0xA4, 0x47, 0xD7, 0x33,
1169    0x2F, 0x8A, 0xCA, 0xBC, 0x5E, 0xF0, 0x77, 0xE4,
1170    0x97, 0x98, 0x97, 0xC7, 0x10, 0x91, 0x7D, 0x2A,
1171    0xA6, 0xFF, 0x46, 0x83, 0x97, 0xDE, 0xE9, 0xE2,
1172    0x17, 0x03, 0x06, 0x14, 0xE2, 0xD7, 0xB1, 0x1D,
1173    0x77, 0xAF, 0x51, 0x27, 0x5B, 0x5E, 0x69, 0xB8,
1174    0x81, 0xE6, 0x11, 0xC5, 0x43, 0x23, 0x81, 0x04,
1175    0x62, 0xFF, 0xE9, 0x46, 0xB8, 0xD8, 0x44, 0xDB,
1176    0xA5, 0xCC, 0x31, 0x54, 0x34, 0xCE, 0x3E, 0x82,
1177    0xD6, 0xBF, 0x7A, 0x0B, 0x64, 0x21, 0x6D, 0x88,
1178    0x7E, 0x5B, 0x45, 0x12, 0x1E, 0x63, 0x8D, 0x49,
1179    0xA7, 0x1D, 0xD9, 0x1E, 0x06, 0xCD, 0xE8, 0xBA,
1180    0x2C, 0x8C, 0x69, 0x32, 0xEA, 0xBE, 0x60, 0x71
1181};
1182static const unsigned char rsa_p[] = {
1183    0xFA, 0xAC, 0xE1, 0x37, 0x5E, 0x32, 0x11, 0x34,
1184    0xC6, 0x72, 0x58, 0x2D, 0x91, 0x06, 0x3E, 0x77,
1185    0xE7, 0x11, 0x21, 0xCD, 0x4A, 0xF8, 0xA4, 0x3F,
1186    0x0F, 0xEF, 0x31, 0xE3, 0xF3, 0x55, 0xA0, 0xB9,
1187    0xAC, 0xB6, 0xCB, 0xBB, 0x41, 0xD0, 0x32, 0x81,
1188    0x9A, 0x8F, 0x7A, 0x99, 0x30, 0x77, 0x6C, 0x68,
1189    0x27, 0xE2, 0x96, 0xB5, 0x72, 0xC9, 0xC3, 0xD4,
1190    0x42, 0xAA, 0xAA, 0xCA, 0x95, 0x8F, 0xFF, 0xC9,
1191    0x9B, 0x52, 0x34, 0x30, 0x1D, 0xCF, 0xFE, 0xCF,
1192    0x3C, 0x56, 0x68, 0x6E, 0xEF, 0xE7, 0x6C, 0xD7,
1193    0xFB, 0x99, 0xF5, 0x4A, 0xA5, 0x21, 0x1F, 0x2B,
1194    0xEA, 0x93, 0xE8, 0x98, 0x26, 0xC4, 0x6E, 0x42,
1195    0x21, 0x5E, 0xA0, 0xA1, 0x2A, 0x58, 0x35, 0xBB,
1196    0x10, 0xE7, 0xBA, 0x27, 0x0A, 0x3B, 0xB3, 0xAF,
1197    0xE2, 0x75, 0x36, 0x04, 0xAC, 0x56, 0xA0, 0xAB,
1198    0x52, 0xDE, 0xCE, 0xDD, 0x2C, 0x28, 0x77, 0x03
1199};
1200static const unsigned char rsa_q[] = {
1201    0xDF, 0xB7, 0x52, 0xB6, 0xD7, 0xC0, 0xE2, 0x96,
1202    0xE7, 0xC9, 0xFE, 0x5D, 0x71, 0x5A, 0xC4, 0x40,
1203    0x96, 0x2F, 0xE5, 0x87, 0xEA, 0xF3, 0xA5, 0x77,
1204    0x11, 0x67, 0x3C, 0x8D, 0x56, 0x08, 0xA7, 0xB5,
1205    0x67, 0xFA, 0x37, 0xA8, 0xB8, 0xCF, 0x61, 0xE8,
1206    0x63, 0xD8, 0x38, 0x06, 0x21, 0x2B, 0x92, 0x09,
1207    0xA6, 0x39, 0x3A, 0xEA, 0xA8, 0xB4, 0x45, 0x4B,
1208    0x36, 0x10, 0x4C, 0xE4, 0x00, 0x66, 0x71, 0x65,
1209    0xF8, 0x0B, 0x94, 0x59, 0x4F, 0x8C, 0xFD, 0xD5,
1210    0x34, 0xA2, 0xE7, 0x62, 0x84, 0x0A, 0xA7, 0xBB,
1211    0xDB, 0xD9, 0x8A, 0xCD, 0x05, 0xE1, 0xCC, 0x57,
1212    0x7B, 0xF1, 0xF1, 0x1F, 0x11, 0x9D, 0xBA, 0x3E,
1213    0x45, 0x18, 0x99, 0x1B, 0x41, 0x64, 0x43, 0xEE,
1214    0x97, 0x5D, 0x77, 0x13, 0x5B, 0x74, 0x69, 0x73,
1215    0x87, 0x95, 0x05, 0x07, 0xBE, 0x45, 0x07, 0x17,
1216    0x7E, 0x4A, 0x69, 0x22, 0xF3, 0xDB, 0x05, 0x39
1217};
1218static const unsigned char rsa_dp[] = {
1219    0x5E, 0xD8, 0xDC, 0xDA, 0x53, 0x44, 0xC4, 0x67,
1220    0xE0, 0x92, 0x51, 0x34, 0xE4, 0x83, 0xA5, 0x4D,
1221    0x3E, 0xDB, 0xA7, 0x9B, 0x82, 0xBB, 0x73, 0x81,
1222    0xFC, 0xE8, 0x77, 0x4B, 0x15, 0xBE, 0x17, 0x73,
1223    0x49, 0x9B, 0x5C, 0x98, 0xBC, 0xBD, 0x26, 0xEF,
1224    0x0C, 0xE9, 0x2E, 0xED, 0x19, 0x7E, 0x86, 0x41,
1225    0x1E, 0x9E, 0x48, 0x81, 0xDD, 0x2D, 0xE4, 0x6F,
1226    0xC2, 0xCD, 0xCA, 0x93, 0x9E, 0x65, 0x7E, 0xD5,
1227    0xEC, 0x73, 0xFD, 0x15, 0x1B, 0xA2, 0xA0, 0x7A,
1228    0x0F, 0x0D, 0x6E, 0xB4, 0x53, 0x07, 0x90, 0x92,
1229    0x64, 0x3B, 0x8B, 0xA9, 0x33, 0xB3, 0xC5, 0x94,
1230    0x9B, 0x4C, 0x5D, 0x9C, 0x7C, 0x46, 0xA4, 0xA5,
1231    0x56, 0xF4, 0xF3, 0xF8, 0x27, 0x0A, 0x7B, 0x42,
1232    0x0D, 0x92, 0x70, 0x47, 0xE7, 0x42, 0x51, 0xA9,
1233    0xC2, 0x18, 0xB1, 0x58, 0xB1, 0x50, 0x91, 0xB8,
1234    0x61, 0x41, 0xB6, 0xA9, 0xCE, 0xD4, 0x7C, 0xBB
1235};
1236static const unsigned char rsa_dq[] = {
1237    0x54, 0x09, 0x1F, 0x0F, 0x03, 0xD8, 0xB6, 0xC5,
1238    0x0C, 0xE8, 0xB9, 0x9E, 0x0C, 0x38, 0x96, 0x43,
1239    0xD4, 0xA6, 0xC5, 0x47, 0xDB, 0x20, 0x0E, 0xE5,
1240    0xBD, 0x29, 0xD4, 0x7B, 0x1A, 0xF8, 0x41, 0x57,
1241    0x49, 0x69, 0x9A, 0x82, 0xCC, 0x79, 0x4A, 0x43,
1242    0xEB, 0x4D, 0x8B, 0x2D, 0xF2, 0x43, 0xD5, 0xA5,
1243    0xBE, 0x44, 0xFD, 0x36, 0xAC, 0x8C, 0x9B, 0x02,
1244    0xF7, 0x9A, 0x03, 0xE8, 0x19, 0xA6, 0x61, 0xAE,
1245    0x76, 0x10, 0x93, 0x77, 0x41, 0x04, 0xAB, 0x4C,
1246    0xED, 0x6A, 0xCC, 0x14, 0x1B, 0x99, 0x8D, 0x0C,
1247    0x6A, 0x37, 0x3B, 0x86, 0x6C, 0x51, 0x37, 0x5B,
1248    0x1D, 0x79, 0xF2, 0xA3, 0x43, 0x10, 0xC6, 0xA7,
1249    0x21, 0x79, 0x6D, 0xF9, 0xE9, 0x04, 0x6A, 0xE8,
1250    0x32, 0xFF, 0xAE, 0xFD, 0x1C, 0x7B, 0x8C, 0x29,
1251    0x13, 0xA3, 0x0C, 0xB2, 0xAD, 0xEC, 0x6C, 0x0F,
1252    0x8D, 0x27, 0x12, 0x7B, 0x48, 0xB2, 0xDB, 0x31
1253};
1254static const unsigned char rsa_qInv[] = {
1255    0x8D, 0x1B, 0x05, 0xCA, 0x24, 0x1F, 0x0C, 0x53,
1256    0x19, 0x52, 0x74, 0x63, 0x21, 0xFA, 0x78, 0x46,
1257    0x79, 0xAF, 0x5C, 0xDE, 0x30, 0xA4, 0x6C, 0x20,
1258    0x38, 0xE6, 0x97, 0x39, 0xB8, 0x7A, 0x70, 0x0D,
1259    0x8B, 0x6C, 0x6D, 0x13, 0x74, 0xD5, 0x1C, 0xDE,
1260    0xA9, 0xF4, 0x60, 0x37, 0xFE, 0x68, 0x77, 0x5E,
1261    0x0B, 0x4E, 0x5E, 0x03, 0x31, 0x30, 0xDF, 0xD6,
1262    0xAE, 0x85, 0xD0, 0x81, 0xBB, 0x61, 0xC7, 0xB1,
1263    0x04, 0x5A, 0xC4, 0x6D, 0x56, 0x1C, 0xD9, 0x64,
1264    0xE7, 0x85, 0x7F, 0x88, 0x91, 0xC9, 0x60, 0x28,
1265    0x05, 0xE2, 0xC6, 0x24, 0x8F, 0xDD, 0x61, 0x64,
1266    0xD8, 0x09, 0xDE, 0x7E, 0xD3, 0x4A, 0x61, 0x1A,
1267    0xD3, 0x73, 0x58, 0x4B, 0xD8, 0xA0, 0x54, 0x25,
1268    0x48, 0x83, 0x6F, 0x82, 0x6C, 0xAF, 0x36, 0x51,
1269    0x2A, 0x5D, 0x14, 0x2F, 0x41, 0x25, 0x00, 0xDD,
1270    0xF8, 0xF3, 0x95, 0xFE, 0x31, 0x25, 0x50, 0x12
1271};
1272
1273static const ST_KAT_PARAM rsa_crt_key[] = {
1274    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_N, rsa_n),
1275    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_E, rsa_e),
1276    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_D, rsa_d),
1277    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_FACTOR1, rsa_p),
1278    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_FACTOR2, rsa_q),
1279    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_EXPONENT1, rsa_dp),
1280    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_EXPONENT2, rsa_dq),
1281    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_COEFFICIENT1, rsa_qInv),
1282    ST_KAT_PARAM_END()
1283};
1284
1285static const ST_KAT_PARAM rsa_pub_key[] = {
1286    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_N, rsa_n),
1287    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_E, rsa_e),
1288    ST_KAT_PARAM_END()
1289};
1290
1291static const ST_KAT_PARAM rsa_priv_key[] = {
1292    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_N, rsa_n),
1293    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_E, rsa_e),
1294    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_D, rsa_d),
1295    ST_KAT_PARAM_END()
1296};
1297
1298static const unsigned char rsa_sig_msg[] = "Hello World!";
1299
1300static const unsigned char rsa_expected_sig[256] = {
1301    0xad, 0xbe, 0x2a, 0xaf, 0x16, 0x85, 0xc5, 0x00,
1302    0x91, 0x3e, 0xd0, 0x49, 0xfb, 0x3a, 0x81, 0xb9,
1303    0x6c, 0x28, 0xbc, 0xbf, 0xea, 0x96, 0x5f, 0xe4,
1304    0x9f, 0x99, 0xf7, 0x18, 0x8c, 0xec, 0x60, 0x28,
1305    0xeb, 0x29, 0x02, 0x49, 0xfc, 0xda, 0xd7, 0x78,
1306    0x68, 0xf8, 0xe1, 0xe9, 0x4d, 0x20, 0x6d, 0x32,
1307    0xa6, 0xde, 0xfc, 0xe4, 0xda, 0xcc, 0x6c, 0x75,
1308    0x36, 0x6b, 0xff, 0x5a, 0xac, 0x01, 0xa8, 0xc2,
1309    0xa9, 0xe6, 0x8b, 0x18, 0x3e, 0xec, 0xea, 0x4c,
1310    0x4a, 0x9e, 0x00, 0x09, 0xd1, 0x8a, 0x69, 0x1b,
1311    0x8b, 0xd9, 0xad, 0x37, 0xe5, 0x7c, 0xff, 0x7d,
1312    0x59, 0x56, 0x3e, 0xa0, 0xc6, 0x32, 0xd8, 0x35,
1313    0x2f, 0xff, 0xfb, 0x05, 0x02, 0xcd, 0xd7, 0x19,
1314    0xb9, 0x00, 0x86, 0x2a, 0xcf, 0xaa, 0x78, 0x16,
1315    0x4b, 0xf1, 0xa7, 0x59, 0xef, 0x7d, 0xe8, 0x74,
1316    0x23, 0x5c, 0xb2, 0xd4, 0x8a, 0x99, 0xa5, 0xbc,
1317    0xfa, 0x63, 0xd8, 0xf7, 0xbd, 0xc6, 0x00, 0x13,
1318    0x06, 0x02, 0x9a, 0xd4, 0xa7, 0xb4, 0x3d, 0x61,
1319    0xab, 0xf1, 0xc2, 0x95, 0x59, 0x9b, 0x3d, 0x67,
1320    0x1f, 0xde, 0x57, 0xb6, 0xb6, 0x9f, 0xb0, 0x87,
1321    0xd6, 0x51, 0xd5, 0x3e, 0x00, 0xe2, 0xc9, 0xa0,
1322    0x03, 0x66, 0xbc, 0x01, 0xb3, 0x8e, 0xfa, 0xf1,
1323    0x15, 0xeb, 0x26, 0xf1, 0x5d, 0x81, 0x90, 0xb4,
1324    0x1c, 0x00, 0x7c, 0x83, 0x4a, 0xa5, 0xde, 0x64,
1325    0xae, 0xea, 0x6c, 0x43, 0xc3, 0x20, 0x77, 0x77,
1326    0x42, 0x12, 0x24, 0xf5, 0xe3, 0x70, 0xdd, 0x59,
1327    0x48, 0x9c, 0xef, 0xd4, 0x8a, 0x3c, 0x29, 0x6a,
1328    0x0c, 0x9c, 0xf2, 0x13, 0xa4, 0x1c, 0x2f, 0x49,
1329    0xcd, 0xb4, 0xaa, 0x28, 0x40, 0x34, 0xc6, 0x75,
1330    0xba, 0x30, 0xe6, 0xd8, 0x5b, 0x2f, 0x08, 0xd0,
1331    0x29, 0xa5, 0x39, 0xfb, 0x6e, 0x3b, 0x0f, 0x52,
1332    0x2c, 0x68, 0xf0, 0x37, 0xa9, 0xd2, 0x56, 0xd6
1333};
1334
1335static const unsigned char rsa_asym_plaintext_encrypt[256] = {
1336   0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1337   0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1338};
1339static const unsigned char rsa_asym_expected_encrypt[256] = {
1340    0x54, 0xac, 0x23, 0x96, 0x1d, 0x82, 0x5d, 0x8b,
1341    0x8f, 0x36, 0x33, 0xd0, 0xf4, 0x02, 0xa2, 0x61,
1342    0xb1, 0x13, 0xd4, 0x4a, 0x46, 0x06, 0x37, 0x3c,
1343    0xbf, 0x40, 0x05, 0x3c, 0xc6, 0x3b, 0x64, 0xdc,
1344    0x22, 0x22, 0xaf, 0x36, 0x79, 0x62, 0x45, 0xf0,
1345    0x97, 0x82, 0x22, 0x44, 0x86, 0x4a, 0x7c, 0xfa,
1346    0xac, 0x03, 0x21, 0x84, 0x3f, 0x31, 0xad, 0x2a,
1347    0xa4, 0x6e, 0x7a, 0xc5, 0x93, 0xf3, 0x0f, 0xfc,
1348    0xf1, 0x62, 0xce, 0x82, 0x12, 0x45, 0xc9, 0x35,
1349    0xb0, 0x7a, 0xcd, 0x99, 0x8c, 0x91, 0x6b, 0x5a,
1350    0xd3, 0x46, 0xdb, 0xf9, 0x9e, 0x52, 0x49, 0xbd,
1351    0x1e, 0xe8, 0xda, 0xac, 0x61, 0x47, 0xc2, 0xda,
1352    0xfc, 0x1e, 0xfb, 0x74, 0xd7, 0xd6, 0xc1, 0x18,
1353    0x86, 0x3e, 0x20, 0x9c, 0x7a, 0xe1, 0x04, 0xb7,
1354    0x38, 0x43, 0xb1, 0x4e, 0xa0, 0xd8, 0xc1, 0x39,
1355    0x4d, 0xe1, 0xd3, 0xb0, 0xb3, 0xf1, 0x82, 0x87,
1356    0x1f, 0x74, 0xb5, 0x69, 0xfd, 0x33, 0xd6, 0x21,
1357    0x7c, 0x61, 0x60, 0x28, 0xca, 0x70, 0xdb, 0xa0,
1358    0xbb, 0xc8, 0x73, 0xa9, 0x82, 0xf8, 0x6b, 0xd8,
1359    0xf0, 0xc9, 0x7b, 0x20, 0xdf, 0x9d, 0xfb, 0x8c,
1360    0xd4, 0xa2, 0x89, 0xe1, 0x9b, 0x04, 0xad, 0xaa,
1361    0x11, 0x6c, 0x8f, 0xce, 0x83, 0x29, 0x56, 0x69,
1362    0xbb, 0x00, 0x3b, 0xef, 0xca, 0x2d, 0xcd, 0x52,
1363    0xc8, 0xf1, 0xb3, 0x9b, 0xb4, 0x4f, 0x6d, 0x9c,
1364    0x3d, 0x69, 0xcc, 0x6d, 0x1f, 0x38, 0x4d, 0xe6,
1365    0xbb, 0x0c, 0x87, 0xdc, 0x5f, 0xa9, 0x24, 0x93,
1366    0x03, 0x46, 0xa2, 0x33, 0x6c, 0xf4, 0xd8, 0x5d,
1367    0x68, 0xf3, 0xd3, 0xe0, 0xf2, 0x30, 0xdb, 0xf5,
1368    0x4f, 0x0f, 0xad, 0xc7, 0xd0, 0xaa, 0x47, 0xd9,
1369    0x9f, 0x85, 0x1b, 0x2e, 0x6c, 0x3c, 0x57, 0x04,
1370    0x29, 0xf4, 0xf5, 0x66, 0x7d, 0x93, 0x4a, 0xaa,
1371    0x05, 0x52, 0x55, 0xc1, 0xc6, 0x06, 0x90, 0xab,
1372};
1373
1374#ifndef OPENSSL_NO_EC
1375/* ECDSA key data */
1376static const char ecd_prime_curve_name[] = "secp224r1";
1377static const unsigned char ecd_prime_priv[] = {
1378    0x98, 0x1f, 0xb5, 0xf1, 0xfc, 0x87, 0x1d, 0x7d,
1379    0xde, 0x1e, 0x01, 0x64, 0x09, 0x9b, 0xe7, 0x1b,
1380    0x9f, 0xad, 0x63, 0xdd, 0x33, 0x01, 0xd1, 0x50,
1381    0x80, 0x93, 0x50, 0x30
1382};
1383static const unsigned char ecd_prime_pub[] = {
1384    0x04, 0x95, 0x47, 0x99, 0x44, 0x29, 0x8f, 0x51,
1385    0x39, 0xe2, 0x53, 0xec, 0x79, 0xb0, 0x4d, 0xde,
1386    0x87, 0x1a, 0x76, 0x54, 0xd5, 0x96, 0xb8, 0x7a,
1387    0x6d, 0xf4, 0x1c, 0x2c, 0x87, 0x91, 0x5f, 0xd5,
1388    0x31, 0xdd, 0x24, 0xe5, 0x78, 0xd9, 0x08, 0x24,
1389    0x8a, 0x49, 0x99, 0xec, 0x55, 0xf2, 0x82, 0xb3,
1390    0xc4, 0xb7, 0x33, 0x68, 0xe4, 0x24, 0xa9, 0x12,
1391    0x82
1392};
1393static const unsigned char ecdsa_prime_expected_sig[] = {
1394    0x30, 0x3d, 0x02, 0x1c, 0x48, 0x4f, 0x3c, 0x97,
1395    0x5b, 0xfa, 0x40, 0x6c, 0xdb, 0xd6, 0x70, 0xb5,
1396    0xbd, 0x2d, 0xd0, 0xc6, 0x22, 0x93, 0x5a, 0x88,
1397    0x56, 0xd0, 0xaf, 0x0a, 0x94, 0x92, 0x20, 0x01,
1398    0x02, 0x1d, 0x00, 0xa4, 0x80, 0xe0, 0x47, 0x88,
1399    0x8a, 0xef, 0x2a, 0x47, 0x9d, 0x81, 0x9a, 0xbf,
1400    0x45, 0xc3, 0x6f, 0x9e, 0x2e, 0xc1, 0x44, 0x9f,
1401    0xfd, 0x79, 0xdb, 0x90, 0x3e, 0xb9, 0xb2
1402};
1403static const ST_KAT_PARAM ecdsa_prime_key[] = {
1404    ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, ecd_prime_curve_name),
1405    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecd_prime_pub),
1406    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, ecd_prime_priv),
1407    ST_KAT_PARAM_END()
1408};
1409
1410# ifndef OPENSSL_NO_EC2M
1411static const char ecd_bin_curve_name[] = "sect233r1";
1412static const unsigned char ecd_bin_priv[] = {
1413    0x00, 0x6d, 0xd6, 0x39, 0x9d, 0x2a, 0xa2, 0xc8,
1414    0x8c, 0xfc, 0x7b, 0x80, 0x66, 0xaa, 0xe1, 0xaa,
1415    0xba, 0xee, 0xcb, 0xfd, 0xc9, 0xe5, 0x36, 0x38,
1416    0x2e, 0xf7, 0x37, 0x6d, 0xd3, 0x20
1417};
1418static const unsigned char ecd_bin_pub[] = {
1419    0x04, 0x00, 0x06, 0xe2, 0x56, 0xf7, 0x37, 0xf9,
1420    0xea, 0xb6, 0xd1, 0x0f, 0x59, 0xfa, 0x23, 0xc3,
1421    0x93, 0xa8, 0xb2, 0x26, 0xe2, 0x5c, 0x08, 0xbe,
1422    0x63, 0x49, 0x26, 0xdc, 0xc7, 0x1e, 0x6f, 0x01,
1423    0x32, 0x3b, 0xe6, 0x54, 0x8d, 0xc1, 0x13, 0x3e,
1424    0x54, 0xb2, 0x66, 0x89, 0xb2, 0x82, 0x0a, 0x72,
1425    0x02, 0xa8, 0xe9, 0x6f, 0x54, 0xfd, 0x3a, 0x6b,
1426    0x99, 0xb6, 0x8f, 0x80, 0x46
1427};
1428static const unsigned char ecdsa_bin_expected_sig[] = {
1429    0x30, 0x3f, 0x02, 0x1d, 0x58, 0xe9, 0xd0, 0x84,
1430    0x5c, 0xad, 0x29, 0x03, 0xf6, 0xa6, 0xbc, 0xe0,
1431    0x24, 0x6d, 0x9e, 0x79, 0x5d, 0x1e, 0xe8, 0x5a,
1432    0xc3, 0x31, 0x0a, 0xa9, 0xfb, 0xe3, 0x99, 0x54,
1433    0x11, 0x02, 0x1e, 0x00, 0xa3, 0x44, 0x28, 0xa3,
1434    0x70, 0x97, 0x98, 0x17, 0xd7, 0xa6, 0xad, 0x91,
1435    0xaf, 0x41, 0x69, 0xb6, 0x06, 0x99, 0x39, 0xc7,
1436    0x63, 0xa4, 0x6a, 0x81, 0xe4, 0x9a, 0x9d, 0x15,
1437    0x8b
1438};
1439static const ST_KAT_PARAM ecdsa_bin_key[] = {
1440    ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, ecd_bin_curve_name),
1441    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecd_bin_pub),
1442    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, ecd_bin_priv),
1443    ST_KAT_PARAM_END()
1444};
1445# endif /* OPENSSL_NO_EC2M */
1446
1447# ifndef OPENSSL_NO_ECX
1448static const unsigned char ecx_sig_msg[] = {
1449    0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66,
1450    0x81, 0x1e, 0x29, 0x15
1451};
1452static const unsigned char ed25519_pub[] = {
1453    0xfc, 0x51, 0xcd, 0x8e, 0x62, 0x18, 0xa1, 0xa3,
1454    0x8d, 0xa4, 0x7e, 0xd0, 0x02, 0x30, 0xf0, 0x58,
1455    0x08, 0x16, 0xed, 0x13, 0xba, 0x33, 0x03, 0xac,
1456    0x5d, 0xeb, 0x91, 0x15, 0x48, 0x90, 0x80, 0x25
1457};
1458static const unsigned char ed25519_priv[] = {
1459    0xc5, 0xaa, 0x8d, 0xf4, 0x3f, 0x9f, 0x83, 0x7b,
1460    0xed, 0xb7, 0x44, 0x2f, 0x31, 0xdc, 0xb7, 0xb1,
1461    0x66, 0xd3, 0x85, 0x35, 0x07, 0x6f, 0x09, 0x4b,
1462    0x85, 0xce, 0x3a, 0x2e, 0x0b, 0x44, 0x58, 0xf7
1463};
1464static const ST_KAT_PARAM ed25519_key[] = {
1465    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ed25519_pub),
1466    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ed25519_priv),
1467    ST_KAT_PARAM_END()
1468};
1469static const unsigned char ed25519_expected_sig[] = {
1470    0x1e, 0xf4, 0xc5, 0x61, 0xdc, 0x97, 0x9f, 0xaf,
1471    0x55, 0x6b, 0x46, 0xa1, 0xae, 0xb0, 0x64, 0x13,
1472    0x1c, 0x98, 0x09, 0x96, 0x88, 0xe0, 0x9d, 0x0e,
1473    0x4e, 0x7d, 0xc4, 0xa5, 0xa1, 0x91, 0x09, 0xca,
1474    0xd9, 0x5b, 0x4f, 0x1c, 0x80, 0x82, 0x9f, 0x65,
1475    0xc1, 0x41, 0xa4, 0xe8, 0x02, 0x05, 0x0c, 0xa6,
1476    0x7e, 0xa0, 0xfa, 0x01, 0xee, 0xeb, 0xaa, 0x91,
1477    0x62, 0xfd, 0x0f, 0x25, 0xa0, 0x2d, 0x37, 0x09
1478};
1479
1480static const unsigned char ed448_pub[] = {
1481    0x3b, 0xa1, 0x6d, 0xa0, 0xc6, 0xf2, 0xcc, 0x1f,
1482    0x30, 0x18, 0x77, 0x40, 0x75, 0x6f, 0x5e, 0x79,
1483    0x8d, 0x6b, 0xc5, 0xfc, 0x01, 0x5d, 0x7c, 0x63,
1484    0xcc, 0x95, 0x10, 0xee, 0x3f, 0xd4, 0x4a, 0xdc,
1485    0x24, 0xd8, 0xe9, 0x68, 0xb6, 0xe4, 0x6e, 0x6f,
1486    0x94, 0xd1, 0x9b, 0x94, 0x53, 0x61, 0x72, 0x6b,
1487    0xd7, 0x5e, 0x14, 0x9e, 0xf0, 0x98, 0x17, 0xf5,
1488    0x80
1489};
1490static const unsigned char ed448_priv[] = {
1491   0x25, 0x8c, 0xdd, 0x4a, 0xda, 0x32, 0xed, 0x9c,
1492   0x9f, 0xf5, 0x4e, 0x63, 0x75, 0x6a, 0xe5, 0x82,
1493   0xfb, 0x8f, 0xab, 0x2a, 0xc7, 0x21, 0xf2, 0xc8,
1494   0xe6, 0x76, 0xa7, 0x27, 0x68, 0x51, 0x3d, 0x93,
1495   0x9f, 0x63, 0xdd, 0xdb, 0x55, 0x60, 0x91, 0x33,
1496   0xf2, 0x9a, 0xdf, 0x86, 0xec, 0x99, 0x29, 0xdc,
1497   0xcb, 0x52, 0xc1, 0xc5, 0xfd, 0x2f, 0xf7, 0xe2,
1498   0x1b
1499};
1500static const ST_KAT_PARAM ed448_key[] = {
1501    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ed448_pub),
1502    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ed448_priv),
1503    ST_KAT_PARAM_END()
1504};
1505static const unsigned char ed448_expected_sig[] = {
1506   0x7e, 0xee, 0xab, 0x7c, 0x4e, 0x50, 0xfb, 0x79,
1507   0x9b, 0x41, 0x8e, 0xe5, 0xe3, 0x19, 0x7f, 0xf6,
1508   0xbf, 0x15, 0xd4, 0x3a, 0x14, 0xc3, 0x43, 0x89,
1509   0xb5, 0x9d, 0xd1, 0xa7, 0xb1, 0xb8, 0x5b, 0x4a,
1510   0xe9, 0x04, 0x38, 0xac, 0xa6, 0x34, 0xbe, 0xa4,
1511   0x5e, 0x3a, 0x26, 0x95, 0xf1, 0x27, 0x0f, 0x07,
1512   0xfd, 0xcd, 0xf7, 0xc6, 0x2b, 0x8e, 0xfe, 0xaf,
1513   0x00, 0xb4, 0x5c, 0x2c, 0x96, 0xba, 0x45, 0x7e,
1514   0xb1, 0xa8, 0xbf, 0x07, 0x5a, 0x3d, 0xb2, 0x8e,
1515   0x5c, 0x24, 0xf6, 0xb9, 0x23, 0xed, 0x4a, 0xd7,
1516   0x47, 0xc3, 0xc9, 0xe0, 0x3c, 0x70, 0x79, 0xef,
1517   0xb8, 0x7c, 0xb1, 0x10, 0xd3, 0xa9, 0x98, 0x61,
1518   0xe7, 0x20, 0x03, 0xcb, 0xae, 0x6d, 0x6b, 0x8b,
1519   0x82, 0x7e, 0x4e, 0x6c, 0x14, 0x30, 0x64, 0xff,
1520   0x3c, 0x00
1521};
1522# endif /* OPENSSL_NO_ECX */
1523#endif /* OPENSSL_NO_EC */
1524
1525#ifndef OPENSSL_NO_DSA
1526/* dsa 2048 */
1527static const unsigned char dsa_p[] = {
1528    0xa2, 0x9b, 0x88, 0x72, 0xce, 0x8b, 0x84, 0x23,
1529    0xb7, 0xd5, 0xd2, 0x1d, 0x4b, 0x02, 0xf5, 0x7e,
1530    0x03, 0xe9, 0xe6, 0xb8, 0xa2, 0x58, 0xdc, 0x16,
1531    0x61, 0x1b, 0xa0, 0x98, 0xab, 0x54, 0x34, 0x15,
1532    0xe4, 0x15, 0xf1, 0x56, 0x99, 0x7a, 0x3e, 0xe2,
1533    0x36, 0x65, 0x8f, 0xa0, 0x93, 0x26, 0x0d, 0xe3,
1534    0xad, 0x42, 0x2e, 0x05, 0xe0, 0x46, 0xf9, 0xec,
1535    0x29, 0x16, 0x1a, 0x37, 0x5f, 0x0e, 0xb4, 0xef,
1536    0xfc, 0xef, 0x58, 0x28, 0x5c, 0x5d, 0x39, 0xed,
1537    0x42, 0x5d, 0x7a, 0x62, 0xca, 0x12, 0x89, 0x6c,
1538    0x4a, 0x92, 0xcb, 0x19, 0x46, 0xf2, 0x95, 0x2a,
1539    0x48, 0x13, 0x3f, 0x07, 0xda, 0x36, 0x4d, 0x1b,
1540    0xdf, 0x6b, 0x0f, 0x71, 0x39, 0x98, 0x3e, 0x69,
1541    0x3c, 0x80, 0x05, 0x9b, 0x0e, 0xac, 0xd1, 0x47,
1542    0x9b, 0xa9, 0xf2, 0x85, 0x77, 0x54, 0xed, 0xe7,
1543    0x5f, 0x11, 0x2b, 0x07, 0xeb, 0xbf, 0x35, 0x34,
1544    0x8b, 0xbf, 0x3e, 0x01, 0xe0, 0x2f, 0x2d, 0x47,
1545    0x3d, 0xe3, 0x94, 0x53, 0xf9, 0x9d, 0xd2, 0x36,
1546    0x75, 0x41, 0xca, 0xca, 0x3b, 0xa0, 0x11, 0x66,
1547    0x34, 0x3d, 0x7b, 0x5b, 0x58, 0xa3, 0x7b, 0xd1,
1548    0xb7, 0x52, 0x1d, 0xb2, 0xf1, 0x3b, 0x86, 0x70,
1549    0x71, 0x32, 0xfe, 0x09, 0xf4, 0xcd, 0x09, 0xdc,
1550    0x16, 0x18, 0xfa, 0x34, 0x01, 0xeb, 0xf9, 0xcc,
1551    0x7b, 0x19, 0xfa, 0x94, 0xaa, 0x47, 0x20, 0x88,
1552    0x13, 0x3d, 0x6c, 0xb2, 0xd3, 0x5c, 0x11, 0x79,
1553    0xc8, 0xc8, 0xff, 0x36, 0x87, 0x58, 0xd5, 0x07,
1554    0xd9, 0xf9, 0xa1, 0x7d, 0x46, 0xc1, 0x10, 0xfe,
1555    0x31, 0x44, 0xce, 0x9b, 0x02, 0x2b, 0x42, 0xe4,
1556    0x19, 0xeb, 0x4f, 0x53, 0x88, 0x61, 0x3b, 0xfc,
1557    0x3e, 0x26, 0x24, 0x1a, 0x43, 0x2e, 0x87, 0x06,
1558    0xbc, 0x58, 0xef, 0x76, 0x11, 0x72, 0x78, 0xde,
1559    0xab, 0x6c, 0xf6, 0x92, 0x61, 0x82, 0x91, 0xb7
1560};
1561static const unsigned char dsa_q[] = {
1562    0xa3, 0xbf, 0xd9, 0xab, 0x78, 0x84, 0x79, 0x4e,
1563    0x38, 0x34, 0x50, 0xd5, 0x89, 0x1d, 0xc1, 0x8b,
1564    0x65, 0x15, 0x7b, 0xdc, 0xfc, 0xda, 0xc5, 0x15,
1565    0x18, 0x90, 0x28, 0x67
1566};
1567static const unsigned char dsa_g[] = {
1568    0x68, 0x19, 0x27, 0x88, 0x69, 0xc7, 0xfd, 0x3d,
1569    0x2d, 0x7b, 0x77, 0xf7, 0x7e, 0x81, 0x50, 0xd9,
1570    0xad, 0x43, 0x3b, 0xea, 0x3b, 0xa8, 0x5e, 0xfc,
1571    0x80, 0x41, 0x5a, 0xa3, 0x54, 0x5f, 0x78, 0xf7,
1572    0x22, 0x96, 0xf0, 0x6c, 0xb1, 0x9c, 0xed, 0xa0,
1573    0x6c, 0x94, 0xb0, 0x55, 0x1c, 0xfe, 0x6e, 0x6f,
1574    0x86, 0x3e, 0x31, 0xd1, 0xde, 0x6e, 0xed, 0x7d,
1575    0xab, 0x8b, 0x0c, 0x9d, 0xf2, 0x31, 0xe0, 0x84,
1576    0x34, 0xd1, 0x18, 0x4f, 0x91, 0xd0, 0x33, 0x69,
1577    0x6b, 0xb3, 0x82, 0xf8, 0x45, 0x5e, 0x98, 0x88,
1578    0xf5, 0xd3, 0x1d, 0x47, 0x84, 0xec, 0x40, 0x12,
1579    0x02, 0x46, 0xf4, 0xbe, 0xa6, 0x17, 0x94, 0xbb,
1580    0xa5, 0x86, 0x6f, 0x09, 0x74, 0x64, 0x63, 0xbd,
1581    0xf8, 0xe9, 0xe1, 0x08, 0xcd, 0x95, 0x29, 0xc3,
1582    0xd0, 0xf6, 0xdf, 0x80, 0x31, 0x6e, 0x2e, 0x70,
1583    0xaa, 0xeb, 0x1b, 0x26, 0xcd, 0xb8, 0xad, 0x97,
1584    0xbc, 0x3d, 0x28, 0x7e, 0x0b, 0x8d, 0x61, 0x6c,
1585    0x42, 0xe6, 0x5b, 0x87, 0xdb, 0x20, 0xde, 0xb7,
1586    0x00, 0x5b, 0xc4, 0x16, 0x74, 0x7a, 0x64, 0x70,
1587    0x14, 0x7a, 0x68, 0xa7, 0x82, 0x03, 0x88, 0xeb,
1588    0xf4, 0x4d, 0x52, 0xe0, 0x62, 0x8a, 0xf9, 0xcf,
1589    0x1b, 0x71, 0x66, 0xd0, 0x34, 0x65, 0xf3, 0x5a,
1590    0xcc, 0x31, 0xb6, 0x11, 0x0c, 0x43, 0xda, 0xbc,
1591    0x7c, 0x5d, 0x59, 0x1e, 0x67, 0x1e, 0xaf, 0x7c,
1592    0x25, 0x2c, 0x1c, 0x14, 0x53, 0x36, 0xa1, 0xa4,
1593    0xdd, 0xf1, 0x32, 0x44, 0xd5, 0x5e, 0x83, 0x56,
1594    0x80, 0xca, 0xb2, 0x53, 0x3b, 0x82, 0xdf, 0x2e,
1595    0xfe, 0x55, 0xec, 0x18, 0xc1, 0xe6, 0xcd, 0x00,
1596    0x7b, 0xb0, 0x89, 0x75, 0x8b, 0xb1, 0x7c, 0x2c,
1597    0xbe, 0x14, 0x44, 0x1b, 0xd0, 0x93, 0xae, 0x66,
1598    0xe5, 0x97, 0x6d, 0x53, 0x73, 0x3f, 0x4f, 0xa3,
1599    0x26, 0x97, 0x01, 0xd3, 0x1d, 0x23, 0xd4, 0x67
1600};
1601static const unsigned char dsa_pub[] = {
1602    0xa0, 0x12, 0xb3, 0xb1, 0x70, 0xb3, 0x07, 0x22,
1603    0x79, 0x57, 0xb7, 0xca, 0x20, 0x61, 0xa8, 0x16,
1604    0xac, 0x7a, 0x2b, 0x3d, 0x9a, 0xe9, 0x95, 0xa5,
1605    0x11, 0x9c, 0x38, 0x5b, 0x60, 0x3b, 0xf6, 0xf6,
1606    0xc5, 0xde, 0x4d, 0xc5, 0xec, 0xb5, 0xdf, 0xa4,
1607    0xa4, 0x1c, 0x68, 0x66, 0x2e, 0xb2, 0x5b, 0x63,
1608    0x8b, 0x7e, 0x26, 0x20, 0xba, 0x89, 0x8d, 0x07,
1609    0xda, 0x6c, 0x49, 0x91, 0xe7, 0x6c, 0xc0, 0xec,
1610    0xd1, 0xad, 0x34, 0x21, 0x07, 0x70, 0x67, 0xe4,
1611    0x7c, 0x18, 0xf5, 0x8a, 0x92, 0xa7, 0x2a, 0xd4,
1612    0x31, 0x99, 0xec, 0xb7, 0xbd, 0x84, 0xe7, 0xd3,
1613    0xaf, 0xb9, 0x01, 0x9f, 0x0e, 0x9d, 0xd0, 0xfb,
1614    0xaa, 0x48, 0x73, 0x00, 0xb1, 0x30, 0x81, 0xe3,
1615    0x3c, 0x90, 0x28, 0x76, 0x43, 0x6f, 0x7b, 0x03,
1616    0xc3, 0x45, 0x52, 0x84, 0x81, 0xd3, 0x62, 0x81,
1617    0x5e, 0x24, 0xfe, 0x59, 0xda, 0xc5, 0xac, 0x34,
1618    0x66, 0x0d, 0x4c, 0x8a, 0x76, 0xcb, 0x99, 0xa7,
1619    0xc7, 0xde, 0x93, 0xeb, 0x95, 0x6c, 0xd6, 0xbc,
1620    0x88, 0xe5, 0x8d, 0x90, 0x10, 0x34, 0x94, 0x4a,
1621    0x09, 0x4b, 0x01, 0x80, 0x3a, 0x43, 0xc6, 0x72,
1622    0xb9, 0x68, 0x8c, 0x0e, 0x01, 0xd8, 0xf4, 0xfc,
1623    0x91, 0xc6, 0x2a, 0x3f, 0x88, 0x02, 0x1f, 0x7b,
1624    0xd6, 0xa6, 0x51, 0xb1, 0xa8, 0x8f, 0x43, 0xaa,
1625    0x4e, 0xf2, 0x76, 0x53, 0xd1, 0x2b, 0xf8, 0xb7,
1626    0x09, 0x9f, 0xdf, 0x6b, 0x46, 0x10, 0x82, 0xf8,
1627    0xe9, 0x39, 0x10, 0x7b, 0xfd, 0x2f, 0x72, 0x10,
1628    0x08, 0x7d, 0x32, 0x6c, 0x37, 0x52, 0x00, 0xf1,
1629    0xf5, 0x1e, 0x7e, 0x74, 0xa3, 0x41, 0x31, 0x90,
1630    0x1b, 0xcd, 0x08, 0x63, 0x52, 0x1f, 0xf8, 0xd6,
1631    0x76, 0xc4, 0x85, 0x81, 0x86, 0x87, 0x36, 0xc5,
1632    0xe5, 0x1b, 0x16, 0xa4, 0xe3, 0x92, 0x15, 0xea,
1633    0x0b, 0x17, 0xc4, 0x73, 0x59, 0x74, 0xc5, 0x16
1634};
1635static const unsigned char dsa_expected_sig[] = {
1636    0x30, 0x3c, 0x02, 0x1c, 0x69, 0xc6, 0xd6, 0x9e,
1637    0x2b, 0x91, 0xea, 0x72, 0xb3, 0x8b, 0x7c, 0x57,
1638    0x48, 0x75, 0xb7, 0x65, 0xc0, 0xb4, 0xf7, 0xbb,
1639    0x08, 0xa4, 0x95, 0x77, 0xfc, 0xa7, 0xed, 0x31,
1640    0x02, 0x1c, 0x4c, 0x2c, 0xff, 0xc6, 0x55, 0xeb,
1641    0x8f, 0xa7, 0x4f, 0x27, 0xd8, 0xec, 0xfd, 0x62,
1642    0x73, 0xf2, 0xd1, 0x55, 0xa5, 0xf0, 0x41, 0x68,
1643    0x34, 0x8d, 0x9e, 0x88, 0x08, 0x06
1644};
1645
1646static const ST_KAT_PARAM dsa_key[] = {
1647    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_P, dsa_p),
1648    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_Q, dsa_q),
1649    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_G, dsa_g),
1650    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PUB_KEY, dsa_pub),
1651    ST_KAT_PARAM_END()
1652};
1653#endif /* OPENSSL_NO_DSA */
1654
1655#ifndef OPENSSL_NO_ML_DSA
1656static const unsigned char ml_dsa_65_pub_key[] = {
1657    0x3b, 0x5c, 0xb0, 0x79, 0xd2, 0xce, 0x76, 0x2b,
1658    0x3b, 0x95, 0x7c, 0x26, 0x69, 0x8f, 0xe7, 0x01,
1659    0xb9, 0x6b, 0x50, 0xa3, 0x2c, 0x73, 0x67, 0xcf,
1660    0x9e, 0xf4, 0xb8, 0x7d, 0xe3, 0xaf, 0x27, 0x77,
1661    0xc6, 0x7c, 0x34, 0xb7, 0x30, 0x4d, 0x01, 0xa4,
1662    0xaa, 0xce, 0x16, 0x7c, 0x13, 0x2b, 0x30, 0x6c,
1663    0x88, 0x31, 0xe4, 0x90, 0xf5, 0xc2, 0x80, 0xf5,
1664    0xe8, 0xb9, 0x2d, 0x7a, 0x83, 0x17, 0xfc, 0xbb,
1665    0x13, 0x6f, 0x18, 0x75, 0x5b, 0x40, 0x39, 0x2d,
1666    0x47, 0x56, 0x15, 0xc7, 0x1c, 0x6e, 0x9a, 0x95,
1667    0x7b, 0x6b, 0x77, 0x9f, 0x86, 0x38, 0x0e, 0xee,
1668    0xc0, 0x82, 0x6c, 0x3c, 0xae, 0xc0, 0xcf, 0x5a,
1669    0x85, 0x49, 0xb1, 0x0c, 0x2d, 0x0e, 0x51, 0x73,
1670    0xf0, 0xe7, 0xad, 0x3b, 0xa7, 0x3f, 0xf5, 0x75,
1671    0xb9, 0xb4, 0x63, 0xb9, 0xf0, 0x0a, 0xf4, 0x29,
1672    0x90, 0x20, 0x72, 0x46, 0x8c, 0x7a, 0xaa, 0x86,
1673    0xb7, 0x4e, 0xa7, 0x65, 0x23, 0xef, 0xec, 0x46,
1674    0x67, 0x02, 0xf1, 0xbb, 0x88, 0xc7, 0xa4, 0xfc,
1675    0x66, 0x52, 0x07, 0x67, 0x68, 0xa2, 0x72, 0xe8,
1676    0x8a, 0x53, 0x97, 0xe6, 0x89, 0x96, 0x95, 0x9e,
1677    0x6a, 0xe9, 0xa4, 0x7d, 0x19, 0x19, 0x5f, 0xb4,
1678    0x77, 0x52, 0x17, 0xd6, 0xf2, 0xea, 0x7f, 0xfc,
1679    0x5c, 0xd5, 0x18, 0x16, 0x8c, 0xc2, 0x2e, 0x31,
1680    0xf8, 0x98, 0x4b, 0x72, 0xa1, 0x80, 0xb6, 0x5c,
1681    0x32, 0x19, 0x2f, 0xe0, 0xae, 0x74, 0xf4, 0xc4,
1682    0x0a, 0xe0, 0x54, 0x52, 0x46, 0x9e, 0xf3, 0xb9,
1683    0x6c, 0x56, 0xd1, 0xe8, 0x99, 0x29, 0x39, 0x95,
1684    0x30, 0xa2, 0x6a, 0xc6, 0x32, 0x8a, 0xa6, 0x02,
1685    0x6a, 0x39, 0x2e, 0x13, 0x20, 0xbc, 0xf8, 0x7a,
1686    0x09, 0xb6, 0xa7, 0xd1, 0x39, 0xa5, 0x12, 0x02,
1687    0x81, 0x47, 0x8c, 0xc0, 0x1e, 0xfd, 0xf3, 0x28,
1688    0xe5, 0x34, 0xec, 0xf0, 0xfc, 0x3f, 0x22, 0x16,
1689    0xd2, 0xfe, 0xf0, 0xca, 0xaa, 0x6f, 0x82, 0xdd,
1690    0xd6, 0x83, 0xaf, 0xf9, 0xeb, 0x1d, 0xa8, 0x45,
1691    0x39, 0x63, 0xa5, 0xde, 0xee, 0x7d, 0x91, 0xe3,
1692    0xaa, 0xcc, 0x07, 0x92, 0xce, 0x50, 0xfd, 0xe4,
1693    0xa8, 0x50, 0x91, 0xd5, 0xec, 0xc1, 0x1b, 0x57,
1694    0x92, 0x37, 0x68, 0xf8, 0xd6, 0x32, 0x55, 0xba,
1695    0x65, 0xae, 0xb6, 0xc3, 0x9f, 0x6c, 0x18, 0xc5,
1696    0x12, 0x17, 0x9a, 0x04, 0x29, 0xab, 0x14, 0x94,
1697    0xbb, 0x13, 0x79, 0x5e, 0xb9, 0xf0, 0x62, 0x03,
1698    0xe0, 0xa4, 0x91, 0xba, 0x81, 0x4b, 0xaa, 0xf1,
1699    0x82, 0x47, 0x83, 0x43, 0x5f, 0x1e, 0x2d, 0x48,
1700    0x40, 0x56, 0xe4, 0x29, 0x79, 0x01, 0xd5, 0x89,
1701    0xaf, 0xa4, 0x56, 0x9e, 0x38, 0x62, 0x03, 0xa0,
1702    0xe7, 0x9f, 0x08, 0x1f, 0xca, 0xd4, 0x31, 0x48,
1703    0xf6, 0x68, 0xe0, 0xcc, 0x28, 0xff, 0x06, 0x97,
1704    0x67, 0x4b, 0x70, 0x78, 0xa0, 0x2a, 0xf9, 0x46,
1705    0x80, 0x6d, 0x37, 0xfb, 0xb3, 0x17, 0x12, 0xf0,
1706    0x95, 0xc7, 0xee, 0x31, 0x54, 0x75, 0xdf, 0x2a,
1707    0xa8, 0x7d, 0xff, 0x97, 0xbb, 0x45, 0x49, 0x55,
1708    0xd5, 0xac, 0x9c, 0x6f, 0x0e, 0xc3, 0x94, 0x96,
1709    0xc4, 0x9e, 0x9c, 0x45, 0x31, 0xcb, 0x23, 0xed,
1710    0x21, 0xf1, 0xfe, 0xe9, 0xf9, 0x8c, 0xb6, 0x8e,
1711    0x72, 0x6e, 0xdd, 0x37, 0x1c, 0xc7, 0xd6, 0x6b,
1712    0x36, 0x35, 0xa0, 0x67, 0x54, 0x00, 0x65, 0x2c,
1713    0xc8, 0xa4, 0xa0, 0x9e, 0x72, 0xd7, 0xc9, 0x3c,
1714    0x8c, 0x78, 0x1a, 0xf8, 0x80, 0xad, 0xc4, 0x99,
1715    0xc7, 0x35, 0x4e, 0x89, 0x3b, 0x4f, 0xa6, 0x9d,
1716    0x5d, 0xce, 0x66, 0x4d, 0x82, 0xef, 0x47, 0x73,
1717    0xa8, 0xc5, 0x14, 0x20, 0xdd, 0x57, 0x92, 0x10,
1718    0x95, 0x8a, 0xe1, 0xac, 0x82, 0xec, 0x39, 0xe7,
1719    0x2c, 0xa6, 0xfd, 0x50, 0x68, 0x0c, 0x3e, 0xcf,
1720    0xbc, 0xc5, 0x12, 0xfe, 0x30, 0xc8, 0xb7, 0xb4,
1721    0x84, 0xd8, 0x1d, 0x67, 0x54, 0x9d, 0x20, 0x49,
1722    0xa5, 0xfd, 0xf9, 0x18, 0xef, 0xc2, 0xd2, 0xcd,
1723    0xb7, 0x54, 0x2b, 0x31, 0x12, 0xf9, 0xaa, 0x8e,
1724    0x0a, 0x29, 0x0c, 0x37, 0xd2, 0x7c, 0xcd, 0xc5,
1725    0x0b, 0x98, 0x25, 0x97, 0x0b, 0x5a, 0xf7, 0x07,
1726    0x91, 0x98, 0xd1, 0x42, 0xdf, 0xc4, 0xf9, 0x42,
1727    0x97, 0xda, 0x20, 0xf4, 0x88, 0xe1, 0x6b, 0xd4,
1728    0x85, 0xf5, 0x1d, 0xca, 0x2a, 0xba, 0x30, 0xc5,
1729    0xdf, 0x9d, 0x4d, 0xb8, 0xb0, 0x30, 0x54, 0x61,
1730    0xcf, 0x91, 0x6f, 0x90, 0xa5, 0x25, 0x05, 0x9b,
1731    0x2b, 0x3e, 0x13, 0xcd, 0xcd, 0x40, 0x59, 0x7c,
1732    0x92, 0x9b, 0x51, 0x81, 0x0d, 0x58, 0x32, 0x0a,
1733    0x43, 0xbd, 0x01, 0xb4, 0xb8, 0x0b, 0xd5, 0xee,
1734    0x0d, 0x67, 0x70, 0x59, 0xd7, 0x47, 0x4f, 0xe5,
1735    0x84, 0x07, 0x75, 0x3e, 0x54, 0xfb, 0x5d, 0xd1,
1736    0x3f, 0x72, 0x6e, 0xae, 0xf9, 0x4b, 0x7b, 0x57,
1737    0xe0, 0xde, 0x8b, 0x8b, 0x12, 0x1b, 0x10, 0x3b,
1738    0x5e, 0x17, 0xd1, 0x72, 0x18, 0x3d, 0xff, 0xc6,
1739    0x83, 0xa5, 0xaf, 0xf9, 0x30, 0xae, 0xb7, 0x47,
1740    0x46, 0x5d, 0xac, 0xba, 0x35, 0x04, 0x35, 0x0b,
1741    0x42, 0x48, 0x7c, 0xa1, 0x00, 0x1a, 0xea, 0xea,
1742    0x5f, 0x93, 0x2b, 0xb7, 0xe5, 0x8f, 0x91, 0x3c,
1743    0x00, 0x98, 0x51, 0x40, 0xee, 0x11, 0x50, 0x70,
1744    0x40, 0xe4, 0x28, 0xd4, 0x79, 0x2d, 0xcd, 0x82,
1745    0xaf, 0x3f, 0xb2, 0xfc, 0x96, 0x8d, 0xbe, 0x79,
1746    0xa3, 0xcd, 0xac, 0x35, 0x4b, 0x5e, 0xb4, 0x81,
1747    0x0e, 0x6a, 0xde, 0x1f, 0x7e, 0xb0, 0x37, 0x3e,
1748    0xdc, 0xe0, 0x21, 0xcc, 0x9f, 0x90, 0x26, 0xb6,
1749    0x8a, 0x1d, 0xb3, 0x1e, 0xec, 0x7a, 0x88, 0x28,
1750    0x95, 0xe2, 0xc2, 0x1d, 0x07, 0xb1, 0xfa, 0xc6,
1751    0x21, 0x1b, 0x5e, 0x54, 0x7b, 0x37, 0x0e, 0x63,
1752    0xff, 0xdd, 0x70, 0xf9, 0xea, 0x2f, 0x2d, 0x98,
1753    0xe1, 0xbe, 0x37, 0xd0, 0x1f, 0x45, 0x5a, 0x63,
1754    0xad, 0x44, 0xbc, 0x5f, 0xc6, 0x23, 0x8a, 0xac,
1755    0x12, 0x71, 0xd5, 0xa2, 0x8b, 0xfc, 0x97, 0xbb,
1756    0x00, 0x4b, 0xd7, 0x09, 0xa6, 0xaf, 0x40, 0x08,
1757    0x6c, 0x8d, 0x10, 0x4a, 0x01, 0x34, 0xc1, 0x2c,
1758    0x92, 0x30, 0x0a, 0x85, 0x8f, 0x3f, 0x08, 0xdd,
1759    0xff, 0x9c, 0x10, 0xd1, 0x03, 0x03, 0x84, 0x1f,
1760    0xf8, 0x4e, 0xf2, 0xe3, 0xd1, 0xd3, 0xb9, 0xdf,
1761    0xfc, 0x97, 0x1c, 0xcf, 0x8a, 0x29, 0xe6, 0x59,
1762    0x04, 0xe2, 0x87, 0x27, 0xbb, 0xb9, 0x96, 0xd0,
1763    0x20, 0x2e, 0x91, 0x48, 0xaa, 0xbf, 0x53, 0x4a,
1764    0x34, 0xb5, 0x0e, 0x11, 0xce, 0xf8, 0x65, 0xa6,
1765    0x0d, 0x45, 0xda, 0xbf, 0x6a, 0xfb, 0x81, 0xe4,
1766    0x7c, 0x8c, 0xa0, 0x4b, 0x00, 0x1b, 0xd7, 0x73,
1767    0x61, 0x80, 0xc0, 0x6b, 0x60, 0xde, 0xf3, 0x32,
1768    0xae, 0x62, 0x35, 0x66, 0xdd, 0xde, 0x53, 0x61,
1769    0x86, 0xe9, 0x44, 0xf3, 0x01, 0x7b, 0xaa, 0xe7,
1770    0x31, 0xd4, 0x5b, 0x06, 0x52, 0x0f, 0xf4, 0x90,
1771    0x5c, 0x82, 0x3e, 0x12, 0x28, 0x88, 0x7f, 0xfc,
1772    0xb8, 0xee, 0x17, 0x34, 0x4e, 0xc3, 0x2a, 0xfb,
1773    0x84, 0x1b, 0x0f, 0xba, 0x51, 0x64, 0x96, 0x22,
1774    0x0d, 0x88, 0x9b, 0xf2, 0x72, 0x04, 0x55, 0x44,
1775    0x6a, 0x14, 0x2b, 0xa0, 0xc2, 0xbe, 0x9e, 0x7b,
1776    0x48, 0x32, 0xa7, 0xf6, 0x11, 0xae, 0x60, 0xfb,
1777    0xf8, 0x38, 0x67, 0x16, 0xdf, 0xdf, 0x46, 0x96,
1778    0xd7, 0x6c, 0x39, 0xa2, 0xad, 0xf7, 0xb7, 0x78,
1779    0x32, 0x2c, 0xba, 0xae, 0x33, 0x5a, 0x88, 0x4b,
1780    0x40, 0x1f, 0x88, 0xcd, 0xe7, 0x8f, 0x50, 0x5e,
1781    0xd8, 0x80, 0x82, 0x7b, 0x46, 0xc7, 0x07, 0x71,
1782    0x4f, 0x3b, 0xca, 0x9d, 0x73, 0x7c, 0xdb, 0xeb,
1783    0x4c, 0x37, 0xdd, 0xb4, 0xb8, 0x61, 0xf3, 0xdf,
1784    0xb2, 0xb5, 0x34, 0x27, 0xec, 0xeb, 0xba, 0xcc,
1785    0xdc, 0xe9, 0xde, 0x47, 0x2e, 0xe9, 0x3b, 0xa1,
1786    0x36, 0xf1, 0x66, 0xdf, 0xc8, 0x70, 0x7f, 0x39,
1787    0x82, 0xb3, 0x8c, 0x47, 0x9a, 0x45, 0x59, 0x2e,
1788    0x30, 0x9b, 0xaf, 0x7c, 0xad, 0x43, 0x38, 0x6e,
1789    0x05, 0x7d, 0x8b, 0xac, 0x5f, 0x70, 0x63, 0xeb,
1790    0x85, 0xee, 0xab, 0xa4, 0x57, 0x1d, 0x63, 0xac,
1791    0x48, 0x45, 0x74, 0xca, 0x0c, 0xa8, 0x65, 0x05,
1792    0x1a, 0x47, 0xa1, 0x2f, 0x4b, 0x96, 0x26, 0x9e,
1793    0xee, 0xec, 0x37, 0x57, 0xbf, 0xa0, 0x2b, 0x75,
1794    0xf5, 0x9b, 0xb5, 0x1d, 0x12, 0x8a, 0x61, 0x9c,
1795    0x8d, 0x2a, 0x7e, 0xee, 0x05, 0x2b, 0x85, 0x7c,
1796    0x6f, 0x34, 0xc4, 0xcd, 0xd5, 0xd0, 0xac, 0xf9,
1797    0x79, 0x24, 0xe7, 0x0f, 0x41, 0x95, 0xe2, 0x9a,
1798    0x22, 0x32, 0xa5, 0x98, 0x2e, 0x82, 0xc0, 0x07,
1799    0xf4, 0x74, 0x68, 0x00, 0xf9, 0x35, 0x5e, 0x12,
1800    0xfe, 0xa2, 0x0e, 0x15, 0x96, 0x83, 0x84, 0x31,
1801    0xc4, 0x25, 0xda, 0x7a, 0xec, 0x07, 0x15, 0xe4,
1802    0x7d, 0xc5, 0xf5, 0xe1, 0xc5, 0xba, 0x9a, 0x59,
1803    0x76, 0xae, 0x4e, 0x54, 0x27, 0x5e, 0xa9, 0x0d,
1804    0xa0, 0xd3, 0xcd, 0x99, 0x39, 0x76, 0x6d, 0x58,
1805    0xdf, 0x8a, 0xa9, 0x9e, 0x21, 0x22, 0x48, 0x7c,
1806    0x0c, 0x13, 0xfa, 0x86, 0x63, 0x74, 0x92, 0xf4,
1807    0xe5, 0x5d, 0xbf, 0xe4, 0x2d, 0xd7, 0xa1, 0xe3,
1808    0x0f, 0xc6, 0x3e, 0x82, 0xa0, 0xcc, 0xfa, 0x38,
1809    0x55, 0x36, 0x9b, 0x22, 0xd0, 0xb8, 0x7f, 0x3f,
1810    0x0f, 0x35, 0x01, 0xf9, 0x6f, 0xa6, 0x51, 0x77,
1811    0x21, 0xb7, 0x7a, 0x81, 0xca, 0x83, 0x6b, 0xec,
1812    0xa7, 0x71, 0x12, 0x6d, 0x22, 0x78, 0xb1, 0xc8,
1813    0x37, 0xda, 0x1d, 0xd1, 0x9c, 0xa5, 0x6c, 0xfa,
1814    0xd3, 0x4b, 0x87, 0x39, 0x6f, 0x59, 0xe1, 0xec,
1815    0x4a, 0xe5, 0x0e, 0x72, 0x2b, 0x31, 0x18, 0xd9,
1816    0x54, 0x6a, 0x4c, 0xc3, 0xe0, 0x58, 0x3b, 0xd8,
1817    0xe8, 0x65, 0xc1, 0x98, 0xed, 0x64, 0x7b, 0xb1,
1818    0xee, 0xa9, 0x54, 0x95, 0x37, 0x98, 0x68, 0xca,
1819    0x83, 0xef, 0xc5, 0x1b, 0x23, 0x71, 0x5c, 0x1a,
1820    0xe6, 0xc0, 0xce, 0x2e, 0x16, 0x59, 0x79, 0xf4,
1821    0x94, 0x43, 0xd8, 0xb1, 0x2e, 0xe3, 0xb9, 0xa0,
1822    0x95, 0x80, 0x66, 0xdd, 0x1d, 0xdd, 0x0d, 0x78,
1823    0x9d, 0xc3, 0x91, 0x60, 0x16, 0x8b, 0xc5, 0x39,
1824    0xad, 0xdb, 0xa3, 0xc1, 0xd2, 0x8d, 0xa0, 0x78,
1825    0x75, 0x68, 0xa6, 0xb9, 0x15, 0x57, 0x0b, 0x06,
1826    0x64, 0x55, 0xd7, 0x07, 0x53, 0xf9, 0x8b, 0xd9,
1827    0x97, 0x46, 0xca, 0x04, 0x95, 0xd4, 0x3c, 0xd3,
1828    0x8f, 0x0a, 0x53, 0x27, 0xe6, 0xd4, 0xb4, 0x7b,
1829    0x70, 0x12, 0x12, 0xc5, 0x14, 0xa0, 0x53, 0xe5,
1830    0xd4, 0x30, 0xaa, 0xcc, 0xec, 0x03, 0x0a, 0x36,
1831    0x21, 0x9f, 0x81, 0x16, 0x6d, 0x1d, 0x53, 0x6e,
1832    0x08, 0xae, 0xf7, 0x05, 0xd9, 0x73, 0x5a, 0x45,
1833    0x3a, 0x52, 0x3e, 0xeb, 0x67, 0x49, 0xe1, 0x1a,
1834    0x8a, 0x4c, 0xd9, 0x83, 0x64, 0xd8, 0x16, 0x37,
1835    0x1c, 0x6b, 0x1c, 0x0d, 0x8f, 0x6a, 0xbf, 0x21,
1836    0xf1, 0x4f, 0x4c, 0x55, 0x6f, 0xe0, 0x5c, 0xa7,
1837    0xb1, 0x7b, 0x57, 0xa9, 0xa2, 0xb4, 0x9d, 0x53,
1838    0x7f, 0x0f, 0xb0, 0x21, 0x95, 0x70, 0x3a, 0x0d,
1839    0xa2, 0xc1, 0x52, 0x26, 0xad, 0xa7, 0x48, 0x66,
1840    0x2a, 0xfc, 0xaa, 0xaf, 0x25, 0x02, 0x58, 0x80,
1841    0xbe, 0xe7, 0xe4, 0x2a, 0x50, 0xe5, 0x46, 0x13,
1842    0xaa, 0x57, 0x0e, 0x6e, 0xee, 0xa9, 0x9e, 0x19,
1843    0xa3, 0x92, 0x8e, 0xc6, 0x3d, 0x76, 0xbb, 0x12,
1844    0xe2, 0x78, 0x77, 0x99, 0x6a, 0x06, 0xc4, 0x45,
1845    0x1f, 0x45, 0xe1, 0xf6, 0x65, 0x1f, 0xba, 0xe4,
1846    0xf6, 0xca, 0xa9, 0x62, 0xa9, 0x2c, 0x3a, 0x2d,
1847    0x8d, 0x34, 0xe2, 0x32, 0x6e, 0x4a, 0x52, 0x9f,
1848    0x3d, 0xcf, 0xab, 0xe8, 0x63, 0x66, 0x3f, 0x06,
1849    0xa3, 0xaa, 0xd5, 0xcb, 0x5d, 0x41, 0xb8, 0xe7,
1850    0x0a, 0x6b, 0x45, 0x90, 0x3a, 0xf0, 0xe5, 0x7f,
1851    0x7e, 0xde, 0x68, 0x20, 0x5e, 0x5a, 0x31, 0x3a,
1852    0x5c, 0x25, 0xb3, 0x82, 0xc7, 0x1e, 0x7d, 0x4d,
1853    0xd0, 0x23, 0x9f, 0x22, 0x1a, 0x54, 0x0b, 0xe4,
1854    0x3c, 0x1c, 0xc5, 0x24, 0x39, 0x4d, 0x96, 0x90,
1855    0xce, 0xc9, 0x3a, 0x07, 0x45, 0x01, 0x9e, 0xb6,
1856    0x55, 0x1b, 0xdc, 0xe0, 0x3b, 0xe8, 0x92, 0x57,
1857    0x43, 0x12, 0x9b, 0x11, 0x3f, 0x81, 0x5a, 0xca,
1858    0xc5, 0x85, 0x39, 0x25, 0x6d, 0xe4, 0x30, 0xef,
1859    0x83, 0x21, 0xed, 0x9c, 0xb3, 0xcf, 0x10, 0xe6,
1860    0xa1, 0x46, 0x10, 0x9a, 0x7b, 0xaf, 0x5f, 0x75,
1861    0x99, 0x62, 0xc1, 0xf4, 0x2c, 0x28, 0x0a, 0x8a,
1862    0xc7, 0xd2, 0xb4, 0x75, 0xb9, 0x66, 0x70, 0x9a,
1863    0xaf, 0xe3, 0xf1, 0x2f, 0xf2, 0xb0, 0x59, 0x9c,
1864    0x1e, 0x1a, 0xbd, 0xa9, 0x15, 0x55, 0x95, 0x4c,
1865    0x5b, 0x78, 0x0b, 0x2c, 0x00, 0xbb, 0xf9, 0x8b,
1866    0xeb, 0x72, 0x4f, 0xfb, 0xa4, 0x3a, 0xa0, 0x04,
1867    0x45, 0x32, 0x02, 0x6c, 0x16, 0x52, 0x3f, 0x4a,
1868    0x0a, 0x77, 0x64, 0xf4, 0x74, 0xed, 0x60, 0x6b,
1869    0x5e, 0x43, 0xa7, 0xe3, 0x84, 0x7e, 0xda, 0xf0,
1870    0xb1, 0x9e, 0x6d, 0x90, 0x9c, 0x32, 0xae, 0xba,
1871    0x7c, 0xfb, 0x72, 0x22, 0x27, 0x9c, 0xe1, 0x85,
1872    0xe1, 0xf6, 0x22, 0x4c, 0x3c, 0x4a, 0xd6, 0xed,
1873    0x4c, 0xa7, 0x79, 0x59, 0xb5, 0x5b, 0x91, 0x65,
1874    0x3f, 0x93, 0x97, 0x8d, 0xd7, 0xd0, 0xab, 0x17,
1875    0x2f, 0x13, 0x74, 0x53, 0x69, 0x74, 0xf8, 0x6b,
1876    0x39, 0x5c, 0x64, 0x5b, 0x3d, 0x75, 0xca, 0x85,
1877    0x0e, 0xda, 0x0f, 0x01, 0x34, 0xa3, 0x67, 0x8e,
1878    0x26, 0x6f, 0x26, 0x3c, 0xd0, 0xd9, 0xae, 0xe8,
1879    0x52, 0x13, 0x7f, 0xf8, 0x69, 0x62, 0xfc, 0x9a,
1880    0xc0, 0x0c, 0x66, 0x2e, 0x57, 0x21, 0x75, 0xb0,
1881    0xb3, 0x8c, 0xf6, 0x97, 0x44, 0x46, 0x65, 0x15,
1882    0x79, 0xd5, 0x6b, 0x68, 0x96, 0x47, 0xc1, 0xba,
1883    0x75, 0x46, 0x87, 0x76, 0x7d, 0x2d, 0xac, 0xf3,
1884    0x16, 0xae, 0xfb, 0x7e, 0x41, 0xe4, 0xae, 0x15,
1885    0xc2, 0x51, 0x69, 0x71, 0x0b, 0x63, 0x20, 0x6a,
1886    0xbd, 0xad, 0xce, 0x2a, 0x94, 0xac, 0xcf, 0x15,
1887    0x4e, 0xdc, 0x8e, 0x2a, 0x48, 0xed, 0xb3, 0x48,
1888    0x95, 0xf4, 0x41, 0xf3, 0x52, 0xef, 0x62, 0x90,
1889    0x10, 0x30, 0x42, 0xec, 0xf9, 0x30, 0x25, 0xc3,
1890    0xc5, 0x47, 0x76, 0xb5, 0x37, 0xeb, 0x9e, 0x87,
1891    0xbe, 0x5c, 0x24, 0xa5, 0x34, 0xdd, 0x92, 0xa1,
1892    0x20, 0x7d, 0xa7, 0x94, 0xa2, 0x67, 0x26, 0x70,
1893    0xfe, 0xc9, 0x3f, 0x21, 0xd1, 0xc2, 0x5a, 0xb1,
1894    0xaa, 0xac, 0x14, 0x1a, 0xe4, 0xdb, 0x71, 0x7e,
1895    0x9c, 0xc2, 0x52, 0x59, 0xc9, 0x58, 0xca, 0x88,
1896    0x71, 0x4f, 0x90, 0xb1, 0xbb, 0xac, 0x80, 0x53,
1897    0x21, 0xfb, 0xff, 0xfd, 0x1e, 0x9f, 0xc0, 0x59,
1898    0x8d, 0x80, 0x8e, 0x85, 0xa9, 0x3b, 0xd3, 0x20,
1899    0x3b, 0x91, 0x16, 0x49, 0xb2, 0x2a, 0xa4, 0xe2,
1900    0x30, 0xb2, 0x76, 0xf6, 0x92, 0x71, 0x37, 0x1b
1901};
1902
1903static const unsigned char ml_dsa_65_priv_key[] = {
1904    0x3b, 0x5c, 0xb0, 0x79, 0xd2, 0xce, 0x76, 0x2b,
1905    0x3b, 0x95, 0x7c, 0x26, 0x69, 0x8f, 0xe7, 0x01,
1906    0xb9, 0x6b, 0x50, 0xa3, 0x2c, 0x73, 0x67, 0xcf,
1907    0x9e, 0xf4, 0xb8, 0x7d, 0xe3, 0xaf, 0x27, 0x77,
1908    0x39, 0x3e, 0xac, 0x91, 0xa1, 0xfb, 0xed, 0xf7,
1909    0x52, 0x0a, 0x4f, 0x77, 0xb2, 0x57, 0x7c, 0x65,
1910    0x05, 0x6e, 0x76, 0x3d, 0x28, 0xf4, 0x3a, 0x88,
1911    0x49, 0x33, 0x7d, 0x30, 0x17, 0x21, 0x5a, 0xc0,
1912    0x4b, 0x03, 0x74, 0x65, 0x6d, 0xbb, 0xfe, 0x8e,
1913    0x0b, 0x8b, 0xb4, 0x42, 0xce, 0xc1, 0xdd, 0x11,
1914    0xb1, 0x8f, 0x31, 0x06, 0x0b, 0xeb, 0xdf, 0xb3,
1915    0x11, 0x12, 0x19, 0x22, 0x34, 0xd7, 0xaa, 0xf2,
1916    0x17, 0xf0, 0x2e, 0x22, 0xef, 0x68, 0x0c, 0x8f,
1917    0xc7, 0x42, 0x0b, 0xd6, 0x88, 0xd8, 0x3b, 0xa7,
1918    0x22, 0xc5, 0x4e, 0x1a, 0xf2, 0x60, 0x85, 0x24,
1919    0x75, 0x85, 0x49, 0x17, 0x1b, 0xd4, 0x69, 0xd8,
1920    0x50, 0x68, 0x36, 0x83, 0x51, 0x12, 0x40, 0x24,
1921    0x06, 0x04, 0x07, 0x47, 0x28, 0x62, 0x86, 0x26,
1922    0x12, 0x24, 0x40, 0x83, 0x65, 0x44, 0x10, 0x62,
1923    0x78, 0x58, 0x14, 0x67, 0x20, 0x20, 0x60, 0x53,
1924    0x28, 0x73, 0x53, 0x34, 0x82, 0x18, 0x42, 0x43,
1925    0x78, 0x67, 0x65, 0x28, 0x12, 0x65, 0x71, 0x17,
1926    0x33, 0x06, 0x10, 0x51, 0x38, 0x07, 0x61, 0x42,
1927    0x72, 0x60, 0x18, 0x52, 0x08, 0x74, 0x58, 0x72,
1928    0x73, 0x06, 0x65, 0x20, 0x73, 0x20, 0x72, 0x42,
1929    0x03, 0x86, 0x03, 0x03, 0x50, 0x85, 0x13, 0x43,
1930    0x24, 0x53, 0x33, 0x82, 0x03, 0x36, 0x82, 0x73,
1931    0x12, 0x15, 0x78, 0x54, 0x60, 0x64, 0x32, 0x60,
1932    0x42, 0x47, 0x84, 0x73, 0x51, 0x60, 0x26, 0x03,
1933    0x35, 0x58, 0x25, 0x28, 0x83, 0x55, 0x64, 0x06,
1934    0x70, 0x82, 0x75, 0x54, 0x15, 0x70, 0x37, 0x61,
1935    0x71, 0x38, 0x75, 0x36, 0x15, 0x70, 0x78, 0x17,
1936    0x62, 0x01, 0x02, 0x13, 0x12, 0x46, 0x12, 0x56,
1937    0x82, 0x51, 0x32, 0x16, 0x27, 0x00, 0x52, 0x41,
1938    0x43, 0x86, 0x46, 0x00, 0x61, 0x24, 0x78, 0x33,
1939    0x40, 0x13, 0x34, 0x47, 0x60, 0x18, 0x52, 0x18,
1940    0x80, 0x01, 0x46, 0x53, 0x32, 0x74, 0x51, 0x72,
1941    0x81, 0x21, 0x30, 0x50, 0x28, 0x28, 0x55, 0x53,
1942    0x71, 0x03, 0x84, 0x87, 0x61, 0x88, 0x45, 0x35,
1943    0x63, 0x72, 0x05, 0x37, 0x06, 0x37, 0x35, 0x36,
1944    0x56, 0x71, 0x74, 0x53, 0x07, 0x61, 0x72, 0x65,
1945    0x78, 0x57, 0x42, 0x41, 0x02, 0x06, 0x61, 0x06,
1946    0x07, 0x66, 0x64, 0x50, 0x31, 0x24, 0x82, 0x43,
1947    0x86, 0x31, 0x26, 0x76, 0x47, 0x45, 0x03, 0x66,
1948    0x44, 0x00, 0x46, 0x04, 0x83, 0x03, 0x83, 0x81,
1949    0x33, 0x08, 0x77, 0x57, 0x08, 0x40, 0x04, 0x22,
1950    0x35, 0x17, 0x43, 0x63, 0x78, 0x44, 0x86, 0x24,
1951    0x40, 0x17, 0x28, 0x67, 0x34, 0x18, 0x75, 0x72,
1952    0x26, 0x83, 0x68, 0x63, 0x57, 0x47, 0x48, 0x84,
1953    0x50, 0x16, 0x43, 0x17, 0x86, 0x16, 0x44, 0x17,
1954    0x18, 0x70, 0x08, 0x51, 0x78, 0x70, 0x15, 0x58,
1955    0x04, 0x10, 0x16, 0x03, 0x11, 0x04, 0x43, 0x70,
1956    0x32, 0x77, 0x03, 0x23, 0x12, 0x74, 0x38, 0x26,
1957    0x65, 0x66, 0x62, 0x04, 0x65, 0x75, 0x54, 0x00,
1958    0x04, 0x01, 0x43, 0x15, 0x07, 0x47, 0x71, 0x12,
1959    0x70, 0x41, 0x72, 0x34, 0x05, 0x26, 0x08, 0x11,
1960    0x55, 0x22, 0x72, 0x83, 0x04, 0x66, 0x88, 0x80,
1961    0x25, 0x17, 0x68, 0x60, 0x15, 0x37, 0x64, 0x14,
1962    0x26, 0x64, 0x01, 0x45, 0x54, 0x51, 0x71, 0x38,
1963    0x62, 0x65, 0x78, 0x43, 0x36, 0x21, 0x02, 0x27,
1964    0x43, 0x47, 0x83, 0x86, 0x07, 0x05, 0x48, 0x56,
1965    0x86, 0x31, 0x27, 0x66, 0x34, 0x35, 0x48, 0x81,
1966    0x08, 0x38, 0x05, 0x10, 0x63, 0x32, 0x61, 0x73,
1967    0x47, 0x30, 0x00, 0x82, 0x66, 0x54, 0x86, 0x81,
1968    0x36, 0x06, 0x45, 0x01, 0x45, 0x87, 0x23, 0x36,
1969    0x83, 0x00, 0x32, 0x81, 0x10, 0x06, 0x57, 0x76,
1970    0x62, 0x40, 0x61, 0x77, 0x04, 0x17, 0x28, 0x70,
1971    0x15, 0x07, 0x42, 0x18, 0x61, 0x70, 0x32, 0x42,
1972    0x68, 0x12, 0x00, 0x18, 0x12, 0x72, 0x60, 0x50,
1973    0x63, 0x28, 0x51, 0x87, 0x82, 0x03, 0x36, 0x63,
1974    0x63, 0x25, 0x68, 0x54, 0x56, 0x16, 0x07, 0x58,
1975    0x77, 0x83, 0x31, 0x85, 0x44, 0x43, 0x60, 0x22,
1976    0x16, 0x01, 0x41, 0x23, 0x27, 0x11, 0x46, 0x60,
1977    0x50, 0x84, 0x77, 0x18, 0x81, 0x31, 0x88, 0x47,
1978    0x36, 0x51, 0x71, 0x56, 0x04, 0x25, 0x17, 0x44,
1979    0x33, 0x78, 0x28, 0x72, 0x27, 0x87, 0x62, 0x78,
1980    0x13, 0x83, 0x58, 0x12, 0x36, 0x22, 0x10, 0x25,
1981    0x13, 0x50, 0x88, 0x10, 0x24, 0x78, 0x15, 0x12,
1982    0x26, 0x43, 0x58, 0x02, 0x24, 0x17, 0x34, 0x75,
1983    0x46, 0x15, 0x46, 0x42, 0x84, 0x52, 0x41, 0x75,
1984    0x48, 0x77, 0x88, 0x33, 0x18, 0x18, 0x84, 0x31,
1985    0x47, 0x22, 0x35, 0x64, 0x72, 0x35, 0x65, 0x73,
1986    0x66, 0x88, 0x73, 0x12, 0x25, 0x51, 0x66, 0x57,
1987    0x05, 0x23, 0x54, 0x74, 0x51, 0x76, 0x52, 0x24,
1988    0x40, 0x64, 0x68, 0x28, 0x25, 0x65, 0x77, 0x12,
1989    0x53, 0x35, 0x41, 0x85, 0x18, 0x25, 0x02, 0x25,
1990    0x47, 0x22, 0x40, 0x37, 0x54, 0x03, 0x53, 0x26,
1991    0x86, 0x50, 0x70, 0x25, 0x56, 0x27, 0x21, 0x11,
1992    0x11, 0x72, 0x71, 0x54, 0x47, 0x63, 0x67, 0x22,
1993    0x75, 0x61, 0x70, 0x05, 0x10, 0x03, 0x41, 0x48,
1994    0x01, 0x47, 0x14, 0x70, 0x06, 0x64, 0x84, 0x02,
1995    0x28, 0x06, 0x12, 0x45, 0x13, 0x56, 0x48, 0x65,
1996    0x00, 0x74, 0x02, 0x10, 0x78, 0x42, 0x80, 0x02,
1997    0x00, 0x16, 0x37, 0x43, 0x23, 0x56, 0x67, 0x20,
1998    0x31, 0x86, 0x22, 0x20, 0x35, 0x51, 0x34, 0x58,
1999    0x10, 0x87, 0x83, 0x43, 0x32, 0x85, 0x47, 0x72,
2000    0x32, 0x28, 0x38, 0x47, 0x08, 0x73, 0x38, 0x20,
2001    0x25, 0x14, 0x51, 0x66, 0x88, 0x85, 0x15, 0x88,
2002    0x86, 0x86, 0x73, 0x46, 0x52, 0x81, 0x32, 0x70,
2003    0x85, 0x31, 0x20, 0x80, 0x32, 0x42, 0x02, 0x33,
2004    0x37, 0x68, 0x66, 0x70, 0x11, 0x27, 0x53, 0x75,
2005    0x48, 0x65, 0x01, 0x25, 0x24, 0x53, 0x68, 0x15,
2006    0x47, 0x25, 0x42, 0x01, 0x04, 0x47, 0x01, 0x58,
2007    0x36, 0x17, 0x71, 0x44, 0x21, 0x63, 0x52, 0x61,
2008    0x56, 0x16, 0x73, 0x17, 0x28, 0x08, 0x07, 0x76,
2009    0x08, 0x42, 0x58, 0x11, 0x42, 0x18, 0x17, 0x18,
2010    0x65, 0x63, 0x82, 0x45, 0x74, 0x35, 0x21, 0x01,
2011    0x35, 0x26, 0x43, 0x56, 0x58, 0x56, 0x64, 0x81,
2012    0x05, 0x52, 0x77, 0x31, 0x47, 0x27, 0x21, 0x82,
2013    0x60, 0x05, 0x51, 0x04, 0x15, 0x34, 0x58, 0x00,
2014    0x40, 0x83, 0x48, 0x21, 0x52, 0x04, 0x62, 0x23,
2015    0x34, 0x64, 0x85, 0x77, 0x35, 0x81, 0x52, 0x35,
2016    0x80, 0x24, 0x00, 0x03, 0x84, 0x32, 0x67, 0x76,
2017    0x78, 0x32, 0x87, 0x50, 0x48, 0x00, 0x64, 0x45,
2018    0x17, 0x05, 0x56, 0x84, 0x13, 0x02, 0x68, 0x42,
2019    0x76, 0x81, 0x01, 0x41, 0x18, 0x56, 0x30, 0x58,
2020    0x43, 0x72, 0x28, 0x71, 0x21, 0x87, 0x14, 0x64,
2021    0x03, 0x31, 0x58, 0x04, 0x72, 0x11, 0x43, 0x50,
2022    0x82, 0x57, 0x14, 0x38, 0x53, 0x36, 0x53, 0x44,
2023    0x37, 0x36, 0x83, 0x47, 0x58, 0x58, 0x52, 0x08,
2024    0x13, 0x33, 0x43, 0x40, 0x54, 0x26, 0x35, 0x28,
2025    0x67, 0x02, 0x08, 0x18, 0x34, 0x67, 0x16, 0x17,
2026    0x73, 0x13, 0x18, 0x02, 0x88, 0x32, 0x61, 0x60,
2027    0x56, 0x38, 0x05, 0x87, 0x78, 0x52, 0x07, 0x53,
2028    0x81, 0x06, 0x52, 0x88, 0x07, 0x35, 0x72, 0x72,
2029    0x44, 0x28, 0x80, 0x86, 0x11, 0x70, 0x40, 0x41,
2030    0x63, 0x80, 0x46, 0x15, 0x27, 0x62, 0x03, 0x45,
2031    0x14, 0x33, 0x56, 0x07, 0x78, 0x43, 0x77, 0x62,
2032    0x06, 0x54, 0x74, 0x43, 0x28, 0x72, 0x16, 0x40,
2033    0x78, 0x62, 0x44, 0x34, 0x00, 0x25, 0x75, 0x74,
2034    0x77, 0x37, 0x02, 0x48, 0x67, 0x18, 0x51, 0x67,
2035    0x77, 0x68, 0x38, 0x72, 0x85, 0x34, 0x42, 0x54,
2036    0x71, 0x61, 0x47, 0x42, 0x68, 0x55, 0x27, 0x26,
2037    0x38, 0x85, 0x15, 0x15, 0x43, 0x14, 0x31, 0x24,
2038    0x81, 0x26, 0x21, 0x17, 0x04, 0x00, 0x27, 0x21,
2039    0x20, 0x72, 0x85, 0x77, 0x30, 0x17, 0x26, 0x48,
2040    0x05, 0x48, 0x71, 0x41, 0x48, 0x27, 0x12, 0x43,
2041    0x35, 0x26, 0x13, 0x00, 0x26, 0x67, 0x28, 0x25,
2042    0x10, 0x05, 0x74, 0x06, 0x65, 0x16, 0x87, 0x17,
2043    0x73, 0x37, 0x42, 0x20, 0x16, 0x44, 0x40, 0x68,
2044    0x27, 0x23, 0x38, 0x28, 0x60, 0x52, 0x64, 0x40,
2045    0x28, 0x46, 0x00, 0x00, 0x01, 0x43, 0x75, 0x15,
2046    0x38, 0x12, 0x37, 0x11, 0x11, 0x87, 0x34, 0x43,
2047    0x35, 0x76, 0x76, 0x50, 0x43, 0x05, 0x00, 0x27,
2048    0x18, 0x70, 0x68, 0x14, 0x60, 0x26, 0x12, 0x75,
2049    0x42, 0x06, 0x23, 0x56, 0x74, 0x74, 0x37, 0x17,
2050    0x46, 0x20, 0x34, 0x72, 0x21, 0x33, 0x82, 0x73,
2051    0x51, 0x64, 0x72, 0x02, 0x48, 0x82, 0x57, 0x53,
2052    0x64, 0x74, 0x75, 0x28, 0x64, 0x02, 0x30, 0x22,
2053    0x06, 0x73, 0x66, 0x72, 0x46, 0x56, 0x30, 0x11,
2054    0x78, 0x32, 0x47, 0x52, 0x31, 0x02, 0x74, 0x13,
2055    0x13, 0x41, 0x07, 0x27, 0x72, 0x07, 0x66, 0x63,
2056    0x34, 0x84, 0x30, 0x66, 0x28, 0x72, 0x50, 0x62,
2057    0x30, 0x52, 0x82, 0x37, 0x40, 0x78, 0x31, 0x35,
2058    0x76, 0x83, 0x05, 0x02, 0x37, 0x25, 0x28, 0x85,
2059    0x62, 0x10, 0x05, 0x38, 0x64, 0x87, 0x21, 0x76,
2060    0x04, 0x51, 0x12, 0x45, 0x08, 0x50, 0x50, 0x75,
2061    0x20, 0x86, 0x32, 0x43, 0x13, 0x47, 0x31, 0x24,
2062    0x26, 0x57, 0x68, 0x64, 0x88, 0x17, 0x02, 0x70,
2063    0x42, 0x72, 0x37, 0x32, 0x85, 0x87, 0x83, 0x86,
2064    0x47, 0x70, 0x56, 0x22, 0x24, 0x53, 0x48, 0x85,
2065    0x02, 0x48, 0x16, 0x01, 0x07, 0x57, 0x73, 0x76,
2066    0x27, 0x43, 0x00, 0x88, 0x27, 0x38, 0x30, 0x86,
2067    0x27, 0x18, 0x62, 0x05, 0x30, 0x37, 0x16, 0x80,
2068    0x31, 0x72, 0x28, 0x37, 0x47, 0x57, 0x62, 0x55,
2069    0x74, 0x07, 0x41, 0x72, 0x26, 0x58, 0x52, 0x68,
2070    0x04, 0x80, 0x72, 0x77, 0x35, 0x43, 0x36, 0x47,
2071    0x38, 0x76, 0x86, 0x60, 0x14, 0x22, 0x77, 0x61,
2072    0x52, 0x74, 0x17, 0x64, 0x67, 0x85, 0x23, 0x58,
2073    0x28, 0x23, 0x05, 0x33, 0x66, 0x64, 0x83, 0x71,
2074    0x14, 0x03, 0x21, 0x70, 0x55, 0x43, 0x35, 0x58,
2075    0x53, 0x78, 0x22, 0x00, 0x15, 0x00, 0x50, 0x16,
2076    0x26, 0x84, 0x18, 0x51, 0x24, 0x01, 0x20, 0x51,
2077    0x06, 0x74, 0x44, 0x83, 0x40, 0x55, 0x70, 0x28,
2078    0x66, 0x11, 0x31, 0x02, 0x57, 0x55, 0x52, 0x72,
2079    0x27, 0x84, 0x54, 0x71, 0x40, 0x78, 0x44, 0x75,
2080    0x24, 0x78, 0x61, 0x21, 0x65, 0x57, 0x43, 0x58,
2081    0x21, 0x15, 0x11, 0x87, 0x35, 0x82, 0x52, 0x00,
2082    0x46, 0x11, 0x34, 0x68, 0x60, 0x60, 0x50, 0x15,
2083    0x25, 0x62, 0x48, 0x08, 0x18, 0x31, 0x36, 0x86,
2084    0x41, 0x26, 0x80, 0x82, 0x54, 0x68, 0x02, 0x07,
2085    0x23, 0x22, 0x24, 0x33, 0x27, 0x02, 0x04, 0x40,
2086    0x22, 0x47, 0x87, 0x62, 0x70, 0x21, 0x81, 0x22,
2087    0x25, 0x78, 0x87, 0x67, 0x62, 0x38, 0x42, 0x10,
2088    0x21, 0x58, 0x56, 0x06, 0x20, 0x18, 0x46, 0x18,
2089    0x22, 0x61, 0x73, 0x45, 0x65, 0x73, 0x58, 0x57,
2090    0x04, 0x76, 0x72, 0x54, 0x48, 0x00, 0x62, 0x27,
2091    0x22, 0x25, 0x17, 0x43, 0x55, 0x58, 0x57, 0x64,
2092    0x04, 0x61, 0x21, 0x24, 0x02, 0x20, 0x17, 0x34,
2093    0x25, 0x13, 0x35, 0x14, 0x52, 0x76, 0x83, 0x11,
2094    0x05, 0x05, 0x03, 0x11, 0x28, 0x71, 0x16, 0x40,
2095    0x56, 0x21, 0x76, 0x18, 0x67, 0x38, 0x02, 0x15,
2096    0x36, 0x67, 0xf3, 0xc8, 0x13, 0x98, 0x97, 0xb3,
2097    0x28, 0x88, 0xb7, 0x32, 0x0d, 0xf8, 0xcf, 0x60,
2098    0x47, 0x25, 0x85, 0xf5, 0x2d, 0x0c, 0x02, 0x62,
2099    0xa7, 0xb3, 0x22, 0x3c, 0x55, 0xb6, 0x55, 0x9b,
2100    0x20, 0x35, 0x10, 0x77, 0x87, 0xeb, 0xcf, 0xa0,
2101    0x11, 0x37, 0xdc, 0x09, 0x0b, 0xdb, 0x94, 0x28,
2102    0xc5, 0x30, 0x74, 0x7f, 0x73, 0x3a, 0x05, 0x10,
2103    0xf2, 0x1a, 0x61, 0x88, 0xdb, 0x2e, 0xc9, 0xf1,
2104    0x14, 0x75, 0x3d, 0xef, 0x09, 0x2f, 0x53, 0x57,
2105    0x87, 0xb0, 0x78, 0xa2, 0xc1, 0xe3, 0x5b, 0xd4,
2106    0x4e, 0x77, 0x86, 0x0c, 0x69, 0x06, 0x33, 0x59,
2107    0x35, 0xdd, 0xbd, 0xa7, 0x9f, 0x3e, 0x2f, 0x0f,
2108    0x22, 0x4d, 0x17, 0xa6, 0x5c, 0x60, 0x3e, 0xa3,
2109    0xf1, 0xbf, 0x08, 0x38, 0x9f, 0x14, 0x0b, 0x07,
2110    0xa4, 0x0d, 0x1e, 0xf8, 0x34, 0x23, 0x01, 0x62,
2111    0xad, 0x3c, 0x65, 0x49, 0xca, 0x12, 0x01, 0x2b,
2112    0x2d, 0x17, 0x4c, 0xa1, 0xa7, 0x40, 0xde, 0xdd,
2113    0x2b, 0x4b, 0x14, 0xf1, 0x21, 0x6a, 0x68, 0xd5,
2114    0x65, 0xe6, 0x16, 0x42, 0xdc, 0xf3, 0xce, 0x0e,
2115    0x3a, 0xa4, 0x12, 0x16, 0x72, 0xa5, 0xa4, 0xbb,
2116    0xa3, 0xb4, 0x08, 0x6d, 0xce, 0x95, 0x73, 0xc6,
2117    0x4a, 0xe4, 0x5a, 0x14, 0x73, 0xb1, 0x14, 0xab,
2118    0x65, 0xb7, 0x8b, 0xe4, 0x7c, 0xa1, 0xd2, 0xbb,
2119    0x6a, 0xf2, 0xf2, 0x7d, 0x64, 0x26, 0x68, 0xec,
2120    0xc2, 0x51, 0x3c, 0xf0, 0xcc, 0x7a, 0x04, 0x6a,
2121    0x29, 0x8d, 0x76, 0x7f, 0xe5, 0x8f, 0x95, 0x20,
2122    0xd1, 0xf7, 0x98, 0x29, 0xf5, 0x35, 0x80, 0x25,
2123    0xda, 0x54, 0xde, 0xb9, 0x5f, 0x6d, 0x68, 0xcf,
2124    0x7e, 0x85, 0xcf, 0x38, 0x0d, 0x32, 0x63, 0x37,
2125    0x77, 0xe1, 0xa5, 0x9c, 0x0a, 0x6c, 0xc5, 0x3f,
2126    0xde, 0xdb, 0xe6, 0x57, 0x16, 0x4e, 0xbc, 0xb1,
2127    0x02, 0x7c, 0x58, 0x85, 0x60, 0x1f, 0x0d, 0x0f,
2128    0x4f, 0x5f, 0xbf, 0xa3, 0xbc, 0x2c, 0xfe, 0x66,
2129    0xbf, 0xb5, 0x93, 0xf0, 0x13, 0xfa, 0x52, 0x07,
2130    0x40, 0xdb, 0xbf, 0x6e, 0x6c, 0xca, 0x74, 0x61,
2131    0x0b, 0xa6, 0xaf, 0x02, 0x60, 0xf1, 0x57, 0x17,
2132    0x08, 0xf1, 0x09, 0xf7, 0xc4, 0x4e, 0x51, 0xaf,
2133    0x04, 0xf1, 0x4c, 0xbc, 0xe5, 0x77, 0x8f, 0x0f,
2134    0x9b, 0xa7, 0xb3, 0xf7, 0xb0, 0x32, 0x14, 0xbc,
2135    0x1d, 0x40, 0xe7, 0x06, 0x01, 0xd6, 0xf2, 0x7f,
2136    0x84, 0xab, 0x47, 0x34, 0x15, 0x2c, 0x62, 0xfe,
2137    0x95, 0x51, 0xaf, 0x51, 0x4a, 0x1d, 0xc4, 0xea,
2138    0xaf, 0xdc, 0xe4, 0xea, 0xa7, 0x7d, 0x25, 0x2a,
2139    0x79, 0x24, 0xf8, 0xaa, 0xf2, 0xe9, 0x82, 0x48,
2140    0x7b, 0x0e, 0x2c, 0x5c, 0x38, 0x89, 0x21, 0xfe,
2141    0x91, 0x72, 0xed, 0xd9, 0x41, 0xac, 0x0d, 0xdc,
2142    0x12, 0xf4, 0x3f, 0x49, 0x91, 0x65, 0x2d, 0x39,
2143    0xea, 0xdf, 0xc6, 0xcd, 0xa8, 0xbe, 0x53, 0x23,
2144    0x04, 0xbf, 0xd3, 0xf0, 0xb8, 0x76, 0xc8, 0x01,
2145    0x43, 0x2c, 0x6b, 0x79, 0xae, 0x23, 0x50, 0xe0,
2146    0x34, 0x09, 0x85, 0xd8, 0xdb, 0xc5, 0x37, 0xb8,
2147    0xd5, 0x49, 0x26, 0x9c, 0x0b, 0x85, 0x95, 0x5f,
2148    0x28, 0x17, 0x8d, 0xd3, 0x0d, 0xe0, 0x34, 0x34,
2149    0x23, 0x07, 0x74, 0x13, 0x55, 0xd7, 0xe5, 0xb4,
2150    0x83, 0x4c, 0xd8, 0xdc, 0xdb, 0x5a, 0xe9, 0x3c,
2151    0x36, 0x53, 0xa4, 0x3a, 0x80, 0xde, 0x77, 0xa0,
2152    0xaa, 0x9a, 0xe7, 0x6e, 0xdd, 0x98, 0xdd, 0x6a,
2153    0xf4, 0x34, 0xda, 0x83, 0x80, 0x9c, 0xe5, 0x83,
2154    0xb3, 0xb6, 0xf7, 0x81, 0x39, 0x46, 0xea, 0x93,
2155    0x85, 0xad, 0xf5, 0xa7, 0x1a, 0xb1, 0x31, 0x6f,
2156    0xb9, 0x79, 0x11, 0x57, 0x62, 0x47, 0xd9, 0xcc,
2157    0x67, 0x78, 0xec, 0x32, 0xd3, 0x0c, 0x34, 0xea,
2158    0x1b, 0xa8, 0x84, 0x54, 0xb1, 0xf3, 0x80, 0x4b,
2159    0x79, 0x32, 0x82, 0x18, 0x54, 0x2d, 0xdf, 0xbb,
2160    0x4d, 0xbe, 0x75, 0xa0, 0x8e, 0x53, 0x52, 0xed,
2161    0x6e, 0x0a, 0x9f, 0xa6, 0x9b, 0x14, 0x32, 0x10,
2162    0xf1, 0x7e, 0xdd, 0xfa, 0xc5, 0xf5, 0xbd, 0x67,
2163    0xfb, 0x64, 0xf6, 0xc3, 0xb1, 0xc9, 0x81, 0x17,
2164    0x60, 0x56, 0x11, 0xdc, 0x63, 0x13, 0x16, 0x4a,
2165    0xa8, 0xeb, 0x7f, 0x82, 0xd3, 0x90, 0xeb, 0x5e,
2166    0xe7, 0xb0, 0xd9, 0x3e, 0x13, 0xd3, 0x73, 0x90,
2167    0x0d, 0x67, 0xc1, 0x18, 0xcc, 0x3b, 0x88, 0xcd,
2168    0x4d, 0x40, 0xbe, 0xd4, 0x5e, 0xee, 0x73, 0xa4,
2169    0xee, 0xbd, 0xcb, 0xbc, 0x39, 0x8b, 0x6d, 0x15,
2170    0x34, 0x18, 0xd2, 0x55, 0x93, 0xc0, 0xf4, 0x95,
2171    0xd1, 0xe4, 0x7f, 0x37, 0xb1, 0x3a, 0x8c, 0x4b,
2172    0xbc, 0x7d, 0x76, 0xb4, 0x34, 0xf4, 0x11, 0x5c,
2173    0x10, 0xeb, 0x34, 0x88, 0x61, 0xd7, 0x89, 0xac,
2174    0x87, 0x91, 0x6a, 0x80, 0xee, 0x07, 0x0d, 0x26,
2175    0xfa, 0xd2, 0x75, 0x6b, 0xd6, 0x0b, 0xa5, 0xc6,
2176    0x71, 0x6d, 0x0a, 0x5b, 0x59, 0x62, 0x32, 0x60,
2177    0x42, 0x73, 0x75, 0xda, 0x63, 0x36, 0x96, 0xca,
2178    0xde, 0xe9, 0x60, 0xfe, 0xa2, 0x64, 0xcc, 0x85,
2179    0x22, 0x4c, 0xc5, 0x2f, 0x0e, 0xe8, 0xf5, 0x93,
2180    0xdb, 0x16, 0xa7, 0x1f, 0xd9, 0x30, 0xbc, 0xa2,
2181    0xba, 0x23, 0xca, 0xea, 0xc1, 0x4d, 0x2f, 0xd4,
2182    0x81, 0x98, 0xff, 0x58, 0xfc, 0x40, 0x39, 0x75,
2183    0x52, 0x3e, 0x3e, 0xf4, 0x8d, 0x95, 0x55, 0x0a,
2184    0x95, 0x5f, 0x4f, 0x5d, 0xdd, 0x0d, 0xb8, 0xd4,
2185    0x63, 0x98, 0x48, 0x6b, 0xec, 0xe8, 0xd9, 0xae,
2186    0xeb, 0x9d, 0x48, 0xa4, 0x9a, 0x63, 0x03, 0xc4,
2187    0x57, 0xcd, 0x7d, 0x97, 0xc8, 0x11, 0x7e, 0xcb,
2188    0x78, 0xe8, 0x5d, 0x6e, 0xe6, 0xdd, 0x13, 0x33,
2189    0xf2, 0x05, 0xcd, 0x5a, 0x44, 0x18, 0xf9, 0x32,
2190    0x41, 0x4e, 0x5c, 0xfc, 0x7a, 0xe9, 0xc2, 0x28,
2191    0xd3, 0x42, 0x56, 0xc8, 0x39, 0x26, 0x78, 0xdd,
2192    0x92, 0x1c, 0xa6, 0xf4, 0x94, 0xa9, 0xc4, 0x69,
2193    0xf9, 0x7e, 0xea, 0x9c, 0xd6, 0x92, 0xd6, 0xab,
2194    0xd5, 0x1d, 0xde, 0x4e, 0x8d, 0x6c, 0xb2, 0xc3,
2195    0x8a, 0xcb, 0xdb, 0xfc, 0x2d, 0xb6, 0xc6, 0x16,
2196    0x49, 0xd1, 0x31, 0x51, 0x90, 0x0c, 0x75, 0x6e,
2197    0x27, 0x3b, 0xda, 0x42, 0x0b, 0xdc, 0xd1, 0xea,
2198    0xde, 0xd9, 0xbe, 0x02, 0xb8, 0xb0, 0x55, 0xba,
2199    0xde, 0x0c, 0xcf, 0x68, 0xd2, 0x02, 0x7f, 0x16,
2200    0x5a, 0x63, 0xcc, 0xd1, 0x42, 0xb3, 0x2f, 0x08,
2201    0x4a, 0x8c, 0x06, 0xa9, 0x13, 0xa2, 0xca, 0xf0,
2202    0x72, 0xff, 0xd1, 0x77, 0x58, 0xcd, 0x8d, 0x49,
2203    0xca, 0x67, 0x9a, 0x21, 0x58, 0x94, 0xa6, 0x80,
2204    0x57, 0xb4, 0xfb, 0x7a, 0x76, 0x30, 0xe8, 0xa1,
2205    0xef, 0x45, 0x6f, 0xa9, 0x62, 0xf5, 0x51, 0xfa,
2206    0x87, 0x56, 0x07, 0x9b, 0xc3, 0xab, 0xd6, 0x3c,
2207    0xa4, 0x3a, 0x02, 0x1f, 0xcd, 0xaa, 0xce, 0x2c,
2208    0xc9, 0x49, 0x30, 0x27, 0x3e, 0x27, 0x92, 0x59,
2209    0xff, 0xb7, 0x35, 0x6e, 0xe7, 0x7e, 0x94, 0x06,
2210    0xf0, 0x2b, 0x00, 0x58, 0x3f, 0x5e, 0x28, 0x12,
2211    0x70, 0x1c, 0x6b, 0xef, 0x78, 0x22, 0x12, 0x03,
2212    0xd7, 0x12, 0xd5, 0x46, 0xd6, 0xf2, 0xea, 0x16,
2213    0x94, 0x2c, 0x1a, 0xfa, 0x52, 0x05, 0xed, 0xf1,
2214    0x25, 0xf4, 0x06, 0x8b, 0x85, 0x7c, 0x38, 0x70,
2215    0x53, 0x54, 0x41, 0x6c, 0x8a, 0x0a, 0x60, 0x83,
2216    0x59, 0x7d, 0x73, 0xe0, 0xd8, 0xa5, 0x1b, 0x3a,
2217    0xec, 0xcd, 0x5f, 0x44, 0x0b, 0xeb, 0xcc, 0xe9,
2218    0x65, 0xd4, 0x68, 0xb0, 0x3d, 0x13, 0xf1, 0xb9,
2219    0x2a, 0x67, 0xb7, 0xae, 0x4f, 0xf3, 0xa7, 0x2e,
2220    0x33, 0xf3, 0x80, 0xc1, 0x4f, 0xd1, 0xcd, 0xdd,
2221    0xd2, 0xab, 0xde, 0xcb, 0x04, 0xc8, 0x1b, 0x26,
2222    0xd4, 0x86, 0xd8, 0x6f, 0xe1, 0x2b, 0x85, 0xb9,
2223    0x2c, 0xe3, 0xaf, 0xf5, 0x9f, 0x4b, 0xfb, 0x41,
2224    0xa9, 0xc9, 0x2e, 0xd0, 0x2d, 0xda, 0xba, 0xa0,
2225    0xba, 0xfb, 0x14, 0x5d, 0x2e, 0xbf, 0x65, 0xbd,
2226    0xe3, 0x51, 0x8d, 0xdd, 0xbb, 0x51, 0x35, 0x3a,
2227    0xf0, 0xbe, 0x74, 0xae, 0x42, 0x8b, 0x5d, 0xd9,
2228    0xef, 0x67, 0x1c, 0x01, 0xb5, 0x1c, 0xc9, 0x3d,
2229    0x0c, 0x42, 0x3a, 0xce, 0x53, 0xbb, 0x23, 0xd0,
2230    0x92, 0x2c, 0x60, 0x0f, 0xf1, 0x73, 0x37, 0xa9,
2231    0x99, 0x86, 0xd9, 0x7e, 0xfc, 0x8a, 0x56, 0xa2,
2232    0xf7, 0x17, 0x69, 0x75, 0x49, 0x1a, 0x8e, 0x4c,
2233    0x4b, 0x87, 0xe0, 0xfb, 0xcc, 0x93, 0x14, 0x7d,
2234    0x96, 0xdc, 0xcc, 0xc6, 0x3c, 0x8d, 0x71, 0x50,
2235    0xf2, 0x0f, 0x67, 0xdd, 0xd9, 0x95, 0xb7, 0xc9,
2236    0xd8, 0xf4, 0x1a, 0xca, 0x0c, 0x90, 0xe4, 0xf5,
2237    0x0e, 0xf7, 0xfb, 0x8c, 0x4c, 0x92, 0x66, 0x3c,
2238    0x3d, 0xf2, 0x47, 0x6f, 0x8c, 0x51, 0x71, 0xff,
2239    0xe1, 0xba, 0x1f, 0x02, 0x64, 0x12, 0x79, 0xa5,
2240    0xad, 0x6e, 0x7c, 0xab, 0xf1, 0x06, 0x01, 0xc1,
2241    0x25, 0x4e, 0xd6, 0xb6, 0xc3, 0xe9, 0xbe, 0x64,
2242    0x52, 0x18, 0x22, 0x01, 0x23, 0xc6, 0xd6, 0xbb,
2243    0x13, 0xbe, 0x15, 0x40, 0xc4, 0x97, 0x4b, 0x24,
2244    0xe7, 0xaa, 0xef, 0x3b, 0x24, 0x04, 0x47, 0xcc,
2245    0x4d, 0xd8, 0xd2, 0x9f, 0xf6, 0x60, 0xb9, 0x04,
2246    0x27, 0xc0, 0x1c, 0xbc, 0x28, 0xe6, 0x16, 0xa4,
2247    0x06, 0xa8, 0xab, 0x52, 0x56, 0x58, 0x53, 0x4a,
2248    0xda, 0x0d, 0xf0, 0xb2, 0x8a, 0x8e, 0x7d, 0xd7,
2249    0x29, 0x45, 0xe9, 0xc6, 0xc3, 0xf4, 0xaa, 0x16,
2250    0x01, 0x48, 0x1d, 0x6c, 0x90, 0xbe, 0x49, 0x5c,
2251    0x28, 0x49, 0x18, 0xd5, 0x52, 0xd5, 0x12, 0x54,
2252    0x9c, 0x1f, 0xc0, 0xb5, 0x8f, 0x22, 0xa7, 0x2a,
2253    0xd7, 0x36, 0x41, 0xc2, 0xc1, 0x7d, 0x11, 0x9b,
2254    0xbf, 0x84, 0x2a, 0x05, 0x9f, 0x41, 0xea, 0x54,
2255    0xf2, 0xe1, 0x69, 0x4d, 0xd5, 0x63, 0x00, 0x28,
2256    0x81, 0x75, 0xd3, 0x8c, 0x19, 0x81, 0xd6, 0x0a,
2257    0x25, 0x62, 0x9e, 0x35, 0xd0, 0x4d, 0xc7, 0x73,
2258    0x3e, 0xae, 0x39, 0x89, 0xf9, 0xb6, 0x67, 0xf0,
2259    0x08, 0x98, 0xd7, 0x87, 0xf1, 0xf4, 0x58, 0x12,
2260    0xf5, 0x22, 0x51, 0xad, 0x9a, 0x4d, 0xed, 0x09,
2261    0x81, 0x82, 0x99, 0x9b, 0x5f, 0x05, 0xb6, 0x3e,
2262    0x8e, 0xad, 0x34, 0xa1, 0x2d, 0xb6, 0xae, 0xc7,
2263    0x7b, 0x7f, 0x39, 0xf9, 0x53, 0xaf, 0xcd, 0x0e,
2264    0xcc, 0x98, 0x5b, 0x5b, 0x92, 0x8c, 0x75, 0x36,
2265    0x0a, 0xa9, 0xfc, 0xf5, 0x22, 0x14, 0xf3, 0x44,
2266    0x5e, 0xc7, 0xf6, 0x7f, 0x3a, 0x92, 0x0b, 0xc1,
2267    0x68, 0xa3, 0xc2, 0xd8, 0xf3, 0xd1, 0x12, 0x5b,
2268    0x12, 0xd1, 0x96, 0x18, 0x50, 0x0c, 0xb5, 0x13,
2269    0x40, 0xcb, 0x38, 0xdd, 0xf7, 0xc2, 0x4f, 0xb9,
2270    0xda, 0xd2, 0x94, 0x3f, 0xbf, 0x63, 0x4f, 0x0a,
2271    0xb8, 0x03, 0x67, 0x65, 0xc6, 0x40, 0xff, 0xc8,
2272    0xd7, 0x8e, 0x06, 0x92, 0x7a, 0xdb, 0xad, 0x7d,
2273    0x1b, 0x82, 0xd5, 0x19, 0xf1, 0x4a, 0x11, 0x3a,
2274    0xe4, 0x23, 0x39, 0x8d, 0x5d, 0x0a, 0x63, 0xb2,
2275    0x67, 0x1f, 0x98, 0xde, 0x5a, 0x44, 0x6a, 0x70,
2276    0xff, 0x83, 0x34, 0x78, 0xa5, 0x02, 0x0b, 0x51,
2277    0x4b, 0x0a, 0xab, 0x16, 0x04, 0x2e, 0xce, 0x6a,
2278    0xf2, 0x72, 0x4c, 0x6f, 0x2f, 0xfa, 0xca, 0xd8,
2279    0x19, 0x4f, 0x48, 0x9f, 0x1c, 0x7d, 0x60, 0x34,
2280    0x9c, 0x79, 0x44, 0xd3, 0xaa, 0xea, 0x5c, 0xfe,
2281    0xa0, 0xa1, 0x6e, 0xff, 0xa8, 0xb6, 0xe3, 0xd9,
2282    0x60, 0xf2, 0x93, 0x32, 0x77, 0x07, 0xd6, 0xbb,
2283    0xdf, 0x3a, 0x49, 0x38, 0xad, 0xc4, 0x63, 0xaf,
2284    0xd0, 0x00, 0x41, 0xdb, 0x96, 0x75, 0xbb, 0xb3,
2285    0xa8, 0x10, 0x67, 0x7e, 0x47, 0x89, 0x8c, 0xce,
2286    0xdd, 0xe8, 0x8b, 0xf3, 0xdb, 0xd7, 0xf5, 0x4f,
2287    0x22, 0xbf, 0x19, 0x61, 0x64, 0xf7, 0xe3, 0xcd,
2288    0x4e, 0x3d, 0x19, 0x8e, 0x45, 0x8c, 0xce, 0xd3,
2289    0x65, 0x3e, 0xb0, 0xdc, 0x94, 0x2e, 0xa2, 0xc2,
2290    0x53, 0xba, 0x46, 0x3a, 0xd1, 0x39, 0xd4, 0x7a,
2291    0xd8, 0xd6, 0x95, 0xb7, 0xdb, 0xdd, 0x7a, 0x81,
2292    0x78, 0xac, 0xfe, 0x0a, 0x1c, 0x74, 0x3f, 0x52,
2293    0xa3, 0x4d, 0xee, 0x4d, 0x37, 0x15, 0xd7, 0x39,
2294    0x06, 0x59, 0xec, 0xa7, 0x92, 0xb2, 0x65, 0xee,
2295    0x49, 0x63, 0xf4, 0x01, 0x54, 0xc2, 0xa0, 0xab,
2296    0xfc, 0x10, 0x03, 0x30, 0x22, 0x63, 0xdb, 0x6e,
2297    0xed, 0xd9, 0x1c, 0x28, 0xb1, 0x48, 0x09, 0xa8,
2298    0x1c, 0x97, 0x09, 0xda, 0xaa, 0x3e, 0xd7, 0xc3,
2299    0x65, 0x2f, 0x81, 0x22, 0x8e, 0x4e, 0x0e, 0x71,
2300    0xaa, 0x96, 0xe4, 0x23, 0xd7, 0xa1, 0x1f, 0xcb,
2301    0x8c, 0x9e, 0xa0, 0x39, 0xc4, 0xb1, 0x01, 0x68,
2302    0x90, 0x61, 0x58, 0xcd, 0x62, 0xa0, 0xa9, 0xeb,
2303    0xb3, 0x07, 0xb4, 0xf5, 0xf9, 0xb6, 0xdf, 0x05,
2304    0xc6, 0x03, 0x7a, 0xa5, 0x1e, 0x8c, 0x12, 0x79,
2305    0x9a, 0xe3, 0x2b, 0x22, 0x25, 0x9a, 0x52, 0x68,
2306    0x4b, 0x47, 0x71, 0xac, 0x71, 0x3e, 0x1a, 0x14,
2307    0x7f, 0x34, 0x4d, 0xdc, 0x4e, 0x49, 0xf6, 0x5a,
2308    0x91, 0x5b, 0x44, 0xc8, 0xef, 0x67, 0x9c, 0xfe,
2309    0xb3, 0x04, 0xa9, 0x4f, 0xa8, 0xf3, 0x89, 0xdf,
2310    0x89, 0x83, 0xff, 0xd2, 0x45, 0x95, 0x66, 0x56,
2311    0x23, 0x84, 0x01, 0x13, 0x90, 0x5a, 0x7a, 0x04,
2312    0xc3, 0x97, 0x60, 0xf2, 0x86, 0x35, 0x5c, 0x45,
2313    0x6f, 0xcf, 0x27, 0xbc, 0xbb, 0xc3, 0x52, 0xf6,
2314    0xb2, 0xd6, 0x5a, 0xe0, 0xbc, 0x14, 0xc8, 0xfd,
2315    0x57, 0x38, 0x61, 0x8e, 0xc2, 0x58, 0x5e, 0xcc,
2316    0x0d, 0x86, 0xb6, 0xf3, 0x27, 0x92, 0x4a, 0x44,
2317    0xde, 0x27, 0x4b, 0xf9, 0xc3, 0x62, 0x5d, 0xe2,
2318    0x72, 0xfe, 0xae, 0x22, 0x8f, 0x31, 0x52, 0x99,
2319    0xda, 0x94, 0xd3, 0xaa, 0x73, 0x49, 0xdb, 0x48,
2320    0x1a, 0x1f, 0x0b, 0x7b, 0x11, 0x3f, 0xcd, 0x57,
2321    0xc4, 0x4e, 0x7b, 0x3e, 0xc6, 0x82, 0x8a, 0x17,
2322    0x41, 0xe3, 0x00, 0x55, 0xec, 0x82, 0x9f, 0x65,
2323    0x30, 0x4d, 0xfa, 0xc1, 0x91, 0x16, 0x89, 0x4d,
2324    0xec, 0x5a, 0xee, 0x17, 0xa0, 0xaf, 0x03, 0xb4,
2325    0x04, 0x01, 0x54, 0xa6, 0x13, 0xad, 0x7c, 0x49,
2326    0x17, 0x75, 0x0c, 0x4a, 0xe6, 0xf8, 0x7c, 0xa2,
2327    0xf3, 0x53, 0x84, 0xb1, 0xd3, 0x23, 0x53, 0xc7,
2328    0x35, 0xdf, 0x66, 0xee, 0x0f, 0xbc, 0x8e, 0x2c,
2329    0x21, 0x43, 0x46, 0x97, 0x89, 0x90, 0x35, 0x18,
2330    0xcc, 0xd9, 0x3a, 0xc8, 0x58, 0x1c, 0x52, 0x94,
2331    0x57, 0x4d, 0x5a, 0x37, 0xc3, 0xfb, 0x65, 0xdd,
2332    0xbe, 0x96, 0x97, 0xdf, 0xda, 0x73, 0x60, 0x9a,
2333    0x45, 0x1e, 0x18, 0xf4, 0xea, 0x5e, 0xfc, 0x0e,
2334    0x39, 0xf3, 0x81, 0x88, 0x2a, 0xe5, 0xe1, 0x91,
2335    0xed, 0x37, 0x32, 0x63, 0x4d, 0xd3, 0x90, 0xcb,
2336    0x86, 0xc0, 0x5c, 0xbd, 0x04, 0x7e, 0x13, 0x69,
2337    0xa0, 0xe1, 0x1f, 0xbd, 0x86, 0x33, 0xf4, 0x99,
2338    0xd1, 0x4e, 0xde, 0x60, 0xbb, 0xd2, 0xd5, 0x9d,
2339    0x3f, 0x15, 0x01, 0x79, 0x4a, 0x03, 0x5e, 0x39,
2340    0x23, 0x99, 0xbb, 0x27, 0x8d, 0x93, 0x5c, 0x13,
2341    0x6e, 0xbf, 0xc0, 0x3a, 0x32, 0xf9, 0xc0, 0xf4,
2342    0xb4, 0x73, 0x16, 0x63, 0xba, 0x9d, 0x2c, 0xb1,
2343    0x08, 0x63, 0x69, 0xa4, 0x71, 0x0d, 0x67, 0x06,
2344    0xd3, 0x48, 0x0e, 0x7a, 0x53, 0xe0, 0xdd, 0x19,
2345    0xc2, 0xfc, 0x96, 0x07, 0xbc, 0xe6, 0x3d, 0x76,
2346    0x73, 0xcb, 0x7f, 0x0f, 0xe1, 0x9a, 0x70, 0xd0,
2347    0x0c, 0xf7, 0xc9, 0x96, 0x04, 0x70, 0x4a, 0xf8,
2348    0x9a, 0x68, 0x12, 0x1c, 0xfa, 0x2b, 0x96, 0x9c,
2349    0x3f, 0x45, 0xf9, 0x02, 0x80, 0xf4, 0xcd, 0x60,
2350    0xb3, 0xb2, 0x03, 0x69, 0x3f, 0x3f, 0x81, 0x2f,
2351    0xfc, 0x9e, 0x6a, 0x0a, 0x72, 0xdb, 0x65, 0xe0,
2352    0x20, 0xb9, 0x3e, 0x0f, 0xaa, 0xc7, 0x68, 0x29,
2353    0xd1, 0xfe, 0xbf, 0x73, 0x32, 0xcb, 0x97, 0xa8,
2354    0x67, 0x77, 0x08, 0x39, 0x0d, 0x1d, 0x01, 0xec,
2355    0x5a, 0x7f, 0x60, 0x69, 0x13, 0x47, 0xa1, 0x7f,
2356    0xfc, 0x0c, 0xee, 0x51, 0x6f, 0x53, 0x16, 0x2f,
2357    0xd5, 0x50, 0x9d, 0x99, 0xe7, 0xa8, 0xf7, 0xda,
2358    0xb2, 0x71, 0xcd, 0x3d, 0xaa, 0x40, 0x6d, 0x7a,
2359    0x51, 0x76, 0xb2, 0xca, 0xc2, 0xc8, 0x88, 0x30,
2360    0xf6, 0xa9, 0x9c, 0xb4, 0x7e, 0x24, 0xce, 0x20,
2361    0x0f, 0x10, 0xf2, 0xdb, 0xad, 0x43, 0x5e, 0x0c,
2362    0x3d, 0x27, 0x6a, 0xed, 0x38, 0x2b, 0xe2, 0xd0,
2363    0x91, 0xff, 0x5b, 0x7c, 0x0c, 0xed, 0x87, 0xa7,
2364    0xd5, 0x09, 0x79, 0xfd, 0xe5, 0xeb, 0x26, 0xe0,
2365    0xa9, 0x71, 0xae, 0xd5, 0xba, 0xc4, 0x8a, 0xdf,
2366    0x0e, 0xbf, 0x0e, 0x8a, 0x6a, 0x40, 0x3d, 0x48,
2367    0x06, 0x53, 0x57, 0x43, 0xc6, 0x91, 0x4a, 0x3a,
2368    0x19, 0xc4, 0x06, 0x85, 0xbb, 0x80, 0x6e, 0x0f,
2369    0xf4, 0x54, 0xa9, 0xab, 0x2e, 0x85, 0xe8, 0x89,
2370    0x48, 0x55, 0xe3, 0xca, 0x74, 0xf0, 0x59, 0x47,
2371    0x01, 0x1d, 0x6b, 0xcd, 0x6c, 0xd3, 0x00, 0x9a,
2372    0x82, 0xaf, 0x1e, 0x29, 0x82, 0xdb, 0xd3, 0x48,
2373    0x24, 0x3e, 0x61, 0xf9, 0x40, 0xc7, 0x28, 0xc6,
2374    0xe3, 0x27, 0x71, 0xf0, 0x37, 0xeb, 0xf4, 0x30,
2375    0xdd, 0x1e, 0xf1, 0x1f, 0xa6, 0xc0, 0x7d, 0x8c,
2376    0x83, 0xac, 0xd5, 0x91, 0x3a, 0x9f, 0x8b, 0x03,
2377    0xe6, 0x7b, 0xef, 0x25, 0x57, 0xe9, 0x37, 0x52,
2378    0x01, 0xa1, 0xf6, 0xa9, 0xaf, 0xbf, 0x43, 0xf2,
2379    0x43, 0x79, 0x32, 0xf5, 0x03, 0x70, 0xde, 0x3c,
2380    0x41, 0x4e, 0x7f, 0xeb, 0x9d, 0x0e, 0x91, 0x45,
2381    0x0c, 0x98, 0xdd, 0x65, 0xcb, 0x41, 0xde, 0x75,
2382    0xa8, 0xb6, 0xe0, 0xd6, 0xe9, 0xbe, 0xe7, 0xd9,
2383    0xb0, 0x01, 0x27, 0x0c, 0xf1, 0xc0, 0x20, 0xed,
2384    0x7b, 0x17, 0xb2, 0xfa, 0x56, 0x9b, 0x5a, 0xf5,
2385    0xb1, 0x2e, 0x36, 0xd0, 0x88, 0x2b, 0x00, 0xc5,
2386    0x02, 0x4a, 0xa0, 0xda, 0x65, 0xb6, 0x7b, 0xa1,
2387    0x7b, 0x1e, 0x28, 0x72, 0xcf, 0x4f, 0xa3, 0xe6,
2388    0x21, 0x14, 0x25, 0x40, 0xc4, 0x41, 0xda, 0xde,
2389    0xd4, 0x10, 0xca, 0x02, 0x95, 0x31, 0xcd, 0xfc,
2390    0xe9, 0x7b, 0xb8, 0x0f, 0xe3, 0xf1, 0xcb, 0x2e,
2391    0x8f, 0xd4, 0x3e, 0xfa, 0xdc, 0x5f, 0x4c, 0xc3,
2392    0xc1, 0x38, 0x8e, 0xbe, 0xf8, 0x21, 0x56, 0xaf,
2393    0xba, 0x42, 0xb7, 0x76, 0xd8, 0xfc, 0xa3, 0x6c,
2394    0x07, 0x62, 0xa2, 0xb5, 0x27, 0xe0, 0x18, 0x7c,
2395    0x57, 0xe3, 0x6d, 0xfe, 0x47, 0x56, 0x61, 0xd5,
2396    0xda, 0x17, 0x44, 0x7b, 0x47, 0xea, 0x43, 0x62,
2397    0xcf, 0x11, 0xe4, 0x6b, 0x26, 0x82, 0x24, 0x13,
2398    0x63, 0xc6, 0x14, 0xbb, 0x00, 0xad, 0xe6, 0xe7,
2399    0x32, 0x4e, 0x79, 0xae, 0xc0, 0x1a, 0x51, 0x78,
2400    0xc0, 0xd4, 0x13, 0x02, 0xb1, 0x55, 0xcf, 0xf0,
2401    0x92, 0xaa, 0xad, 0x8f, 0x89, 0x4d, 0xfc, 0x2e,
2402    0x3b, 0x1a, 0x22, 0xb2, 0x4e, 0xef, 0xdb, 0x98,
2403    0x56, 0x0f, 0x7a, 0x0a, 0x5e, 0xf6, 0xde, 0x8e,
2404    0xd5, 0xdc, 0x84, 0x72, 0xe6, 0xa9, 0xd2, 0x5f,
2405    0xd5, 0x66, 0xab, 0x1e, 0x8b, 0xf2, 0x28, 0x9b,
2406    0x77, 0xc5, 0x24, 0x04, 0x93, 0x85, 0x54, 0x5b,
2407    0xcc, 0x0a, 0x18, 0xdc, 0xa9, 0x27, 0x34, 0x1d
2408};
2409
2410static const unsigned char ml_dsa_65_sig[] = {
2411    0x5e, 0xc1, 0xb0, 0x64, 0x5c, 0x45, 0x6e, 0x22,
2412    0x9f, 0x7c, 0x49, 0xbf, 0x8e, 0x93, 0xe5, 0x83,
2413    0xfc, 0xa0, 0xf3, 0xb0, 0x93, 0x6f, 0x47, 0xa9,
2414    0x11, 0x9e, 0x1b, 0x13, 0xae, 0x05, 0xdd, 0xc6,
2415    0x55, 0x46, 0x81, 0x4f, 0x5e, 0x0c, 0xa7, 0x75,
2416    0x6b, 0x5c, 0x13, 0xf2, 0xc7, 0x1f, 0x4d, 0x74,
2417    0xa5, 0x50, 0xf4, 0xec, 0x3e, 0x75, 0x75, 0xbf,
2418    0x4c, 0xef, 0x50, 0x02, 0x87, 0x7d, 0x88, 0x05,
2419    0x40, 0xba, 0xc1, 0x8e, 0xd6, 0x5d, 0xe3, 0x3c,
2420    0xd9, 0x98, 0x05, 0x76, 0x09, 0xdf, 0xcb, 0xd2,
2421    0x0e, 0x56, 0x53, 0x88, 0x1e, 0xe1, 0x91, 0xcd,
2422    0x7d, 0x67, 0x11, 0x89, 0xf8, 0x58, 0xb9, 0x76,
2423    0xd6, 0x8f, 0x83, 0xca, 0xcc, 0x94, 0xf4, 0x97,
2424    0x58, 0xf5, 0x3d, 0xc7, 0xaa, 0xa4, 0x3f, 0xe3,
2425    0xcb, 0xcc, 0x67, 0xac, 0x50, 0x8f, 0xfe, 0xf7,
2426    0x90, 0x33, 0x04, 0x8b, 0x82, 0x14, 0x26, 0xa7,
2427    0x21, 0x4e, 0xf2, 0x37, 0x5a, 0x91, 0xe8, 0x7a,
2428    0x30, 0xb6, 0xce, 0x8f, 0x31, 0xfc, 0xef, 0xbe,
2429    0x7d, 0x16, 0x81, 0x18, 0xb3, 0x77, 0x0f, 0x4a,
2430    0xe9, 0x31, 0xf8, 0x51, 0x0e, 0xaa, 0x44, 0x5c,
2431    0x8b, 0x43, 0x0a, 0x61, 0x02, 0x6c, 0xdf, 0xee,
2432    0x09, 0x9b, 0x8f, 0x91, 0x5c, 0x75, 0x10, 0xa8,
2433    0xc6, 0xe3, 0x5d, 0x93, 0x74, 0x63, 0x73, 0x27,
2434    0xb9, 0x29, 0xc0, 0x9b, 0x62, 0x6a, 0xc6, 0x75,
2435    0x84, 0x78, 0x41, 0xf3, 0x5c, 0x5d, 0x60, 0xcf,
2436    0xc5, 0xe4, 0x78, 0x87, 0x53, 0x6c, 0xab, 0xff,
2437    0xbb, 0x53, 0xe9, 0x54, 0xf7, 0x1e, 0x06, 0xcf,
2438    0x9e, 0x52, 0xd0, 0x3c, 0x8c, 0x5e, 0x64, 0xba,
2439    0x28, 0x33, 0xb0, 0x14, 0x84, 0x56, 0x5a, 0xac,
2440    0xd6, 0xee, 0x1e, 0x5e, 0x39, 0x08, 0xcb, 0x16,
2441    0x54, 0x21, 0xe4, 0x6c, 0xa7, 0x29, 0xd2, 0x7b,
2442    0xbe, 0x09, 0xd5, 0x1c, 0xf2, 0xf8, 0x11, 0x1e,
2443    0x64, 0x6b, 0xca, 0x1a, 0xe4, 0xca, 0xab, 0xf1,
2444    0x13, 0xdc, 0xa2, 0x1e, 0x78, 0x09, 0x2a, 0x08,
2445    0xc5, 0xa1, 0x42, 0x62, 0xac, 0x94, 0x46, 0x61,
2446    0x37, 0x98, 0x0d, 0x93, 0xa6, 0xc2, 0x4d, 0xb8,
2447    0x00, 0x43, 0x4d, 0x6c, 0x5d, 0x06, 0x30, 0xaf,
2448    0xd5, 0xb6, 0x32, 0x9e, 0xfe, 0xf2, 0x03, 0x8b,
2449    0xa6, 0x7c, 0x6d, 0x36, 0x7e, 0xef, 0x99, 0x09,
2450    0xaf, 0x2c, 0x79, 0x70, 0x26, 0xff, 0xc8, 0x99,
2451    0x01, 0x93, 0x3b, 0x9c, 0xde, 0x0b, 0x5e, 0xf5,
2452    0x44, 0x5f, 0x15, 0xb6, 0x49, 0xde, 0x89, 0xdd,
2453    0x1e, 0x2b, 0x69, 0x7d, 0xb2, 0x88, 0xf2, 0x94,
2454    0x24, 0x49, 0xeb, 0x23, 0xfc, 0x60, 0x95, 0x09,
2455    0x89, 0xe5, 0xfd, 0xe3, 0x63, 0xfa, 0x3a, 0xb7,
2456    0x18, 0x99, 0xe0, 0x5a, 0x25, 0x94, 0xd6, 0x3a,
2457    0x6a, 0x48, 0x6e, 0xea, 0xe3, 0x61, 0xf8, 0x81,
2458    0xe8, 0x4a, 0x43, 0xcb, 0x19, 0xfe, 0x2e, 0x16,
2459    0x8d, 0xca, 0x7e, 0xeb, 0x81, 0x55, 0xc0, 0x8a,
2460    0xf5, 0x14, 0x5b, 0xb6, 0x06, 0x45, 0x72, 0xa6,
2461    0x8a, 0xc2, 0x16, 0x8d, 0xe4, 0x31, 0x54, 0x9c,
2462    0xd2, 0x75, 0x5f, 0x7d, 0xf2, 0x19, 0x19, 0xf4,
2463    0x4a, 0xfe, 0xaf, 0x18, 0x2d, 0x51, 0x43, 0x2e,
2464    0x40, 0x02, 0xc0, 0x25, 0x53, 0x10, 0x37, 0x3d,
2465    0xeb, 0xd6, 0x08, 0x75, 0x6c, 0xb2, 0x38, 0x72,
2466    0xef, 0x67, 0x80, 0x50, 0xc7, 0x54, 0x4c, 0x91,
2467    0xcb, 0x68, 0x64, 0x23, 0xa9, 0x4b, 0x0d, 0xcb,
2468    0x71, 0x9c, 0x27, 0x67, 0x22, 0x98, 0xad, 0x3a,
2469    0xa0, 0xd8, 0x9f, 0x21, 0x95, 0xdc, 0xb0, 0xa5,
2470    0xb4, 0x44, 0x3b, 0xc8, 0xcb, 0x5c, 0x50, 0xd1,
2471    0x38, 0x03, 0x91, 0x79, 0x73, 0x2f, 0x4a, 0xd7,
2472    0x1f, 0xe5, 0xdc, 0x16, 0xaf, 0xb1, 0x2a, 0x86,
2473    0x02, 0x0b, 0x31, 0x42, 0x64, 0x2f, 0x8a, 0x83,
2474    0x7b, 0x13, 0x78, 0xdd, 0x6c, 0x72, 0x46, 0xa2,
2475    0x84, 0x2f, 0xa8, 0x24, 0x43, 0xb0, 0x69, 0xaf,
2476    0x52, 0x58, 0x13, 0x7c, 0xb3, 0xf8, 0x2d, 0x74,
2477    0x87, 0x68, 0x17, 0xd6, 0x0c, 0x50, 0x19, 0xf8,
2478    0x11, 0x68, 0xd5, 0x1c, 0x56, 0x30, 0x5d, 0x31,
2479    0x56, 0xe4, 0x9d, 0x80, 0x39, 0x0c, 0xcd, 0x34,
2480    0xfe, 0x67, 0x2f, 0xfa, 0x0c, 0x10, 0xb2, 0xcd,
2481    0x66, 0x9e, 0x65, 0xac, 0xc5, 0x45, 0x33, 0x20,
2482    0x16, 0x79, 0x82, 0x48, 0x26, 0xaa, 0x54, 0xd9,
2483    0x32, 0x03, 0x99, 0x46, 0x65, 0xf8, 0xa8, 0xe7,
2484    0x3c, 0xb1, 0xf9, 0xed, 0x76, 0x21, 0x36, 0xab,
2485    0x98, 0x2d, 0xf2, 0xd1, 0x75, 0x33, 0x58, 0xb5,
2486    0x7c, 0x4e, 0x3b, 0x78, 0xb6, 0x24, 0x15, 0xd2,
2487    0xac, 0x41, 0x44, 0x46, 0x4d, 0x7a, 0x5b, 0x86,
2488    0xce, 0xc2, 0x93, 0x11, 0x8f, 0x68, 0xb5, 0xc7,
2489    0x83, 0x8f, 0xe1, 0x13, 0x91, 0xef, 0xca, 0x18,
2490    0xa3, 0xf1, 0x04, 0x28, 0x58, 0xd8, 0x54, 0x12,
2491    0x03, 0xbe, 0xe1, 0x29, 0xcf, 0x28, 0xa3, 0x43,
2492    0x78, 0x00, 0xb7, 0x52, 0x00, 0xe3, 0x44, 0x07,
2493    0x5f, 0x67, 0xb1, 0x78, 0x75, 0x9c, 0xe0, 0xc7,
2494    0x33, 0x5f, 0x69, 0x27, 0x05, 0x15, 0xc3, 0xd4,
2495    0x81, 0x09, 0x33, 0x7b, 0x3e, 0xc4, 0x71, 0xc3,
2496    0xc0, 0x9a, 0x2c, 0xb5, 0xfc, 0x00, 0x79, 0x1d,
2497    0x12, 0xb4, 0x90, 0xf1, 0xa3, 0xb1, 0xaa, 0xa8,
2498    0xf9, 0x40, 0x48, 0xb1, 0x8b, 0x3c, 0xa9, 0xa9,
2499    0x36, 0xe0, 0xe8, 0xd3, 0x43, 0x4f, 0x63, 0xcc,
2500    0xe1, 0xbf, 0x93, 0xa5, 0xb0, 0x7a, 0xac, 0xd6,
2501    0x69, 0x42, 0xce, 0x52, 0x8c, 0xd8, 0x30, 0x18,
2502    0x9f, 0x77, 0xa2, 0xd6, 0xde, 0x5a, 0x3d, 0x59,
2503    0x28, 0x3a, 0x2a, 0x58, 0x25, 0xcb, 0x95, 0x01,
2504    0x9d, 0x04, 0x81, 0x1d, 0x63, 0xfb, 0xb1, 0xf3,
2505    0x0b, 0x3d, 0x68, 0xc1, 0x42, 0x83, 0xc5, 0xc2,
2506    0x27, 0x1e, 0x58, 0x4f, 0x42, 0x89, 0x45, 0x08,
2507    0xb2, 0xf2, 0x8d, 0x26, 0xd1, 0xb3, 0x4d, 0xbd,
2508    0xaf, 0x74, 0xc9, 0x7f, 0xbe, 0x81, 0x46, 0x73,
2509    0xdb, 0x68, 0x45, 0x41, 0xb1, 0xbe, 0xe7, 0x76,
2510    0x31, 0x01, 0xc8, 0x8c, 0xb5, 0x26, 0x9e, 0x2e,
2511    0xde, 0x07, 0x9f, 0x5b, 0x7e, 0x73, 0x36, 0xbf,
2512    0x51, 0x60, 0x98, 0xe0, 0x6e, 0x83, 0x85, 0x21,
2513    0x2c, 0xdb, 0x28, 0x2c, 0x8f, 0x4b, 0xf9, 0x15,
2514    0x08, 0x8f, 0x06, 0xa8, 0xfe, 0x26, 0x2b, 0xea,
2515    0xaf, 0xb0, 0x97, 0x3c, 0xb9, 0xf8, 0x25, 0xef,
2516    0xf5, 0x58, 0xd2, 0xf4, 0xbd, 0x1c, 0x1b, 0x84,
2517    0x29, 0xde, 0xbe, 0xb6, 0xfd, 0x30, 0x47, 0x0c,
2518    0x63, 0x3a, 0x3e, 0x6d, 0x8b, 0x0b, 0x1e, 0x64,
2519    0x5d, 0x8f, 0x64, 0xc9, 0x35, 0x7a, 0xb4, 0xb9,
2520    0xfb, 0x47, 0xe4, 0x50, 0xcd, 0xf6, 0x1a, 0xb1,
2521    0xf6, 0x22, 0x0a, 0xd5, 0x63, 0xb5, 0x20, 0xed,
2522    0x13, 0xfb, 0x43, 0x11, 0x67, 0x89, 0x6d, 0x9f,
2523    0xb1, 0x6f, 0xe8, 0x48, 0x2f, 0x7e, 0xda, 0xbc,
2524    0x08, 0xc2, 0xde, 0x1c, 0x29, 0xa4, 0x50, 0x7d,
2525    0x9c, 0x8e, 0xbc, 0x0d, 0x2b, 0xe2, 0xda, 0xb6,
2526    0x9c, 0x6c, 0x08, 0xd3, 0x3c, 0xf6, 0x71, 0x23,
2527    0x90, 0x07, 0x8f, 0x99, 0x86, 0x85, 0xf8, 0xaa,
2528    0xed, 0x65, 0x99, 0xf3, 0xf5, 0x69, 0xe2, 0x6b,
2529    0x67, 0x47, 0x5c, 0x8d, 0x5d, 0xee, 0x9c, 0xda,
2530    0xa1, 0x56, 0x73, 0x35, 0xf1, 0xe7, 0x2e, 0xb9,
2531    0xf9, 0x70, 0xc5, 0xb4, 0xdd, 0x21, 0x9f, 0x25,
2532    0x23, 0xf4, 0x74, 0x57, 0xc1, 0xfd, 0x09, 0x2e,
2533    0x80, 0xea, 0x4d, 0x90, 0x93, 0x84, 0x06, 0x43,
2534    0xc0, 0xbc, 0x26, 0xd2, 0xfd, 0x3b, 0x03, 0x2e,
2535    0x93, 0x90, 0xb3, 0x4b, 0xd4, 0x58, 0x31, 0x18,
2536    0xc5, 0xa5, 0xc4, 0x3c, 0xe5, 0xb5, 0x23, 0xfb,
2537    0xec, 0xb0, 0xb8, 0xe7, 0x7e, 0x1a, 0xb3, 0xf9,
2538    0xce, 0x5a, 0x25, 0x02, 0x2e, 0xcf, 0xb3, 0x4a,
2539    0xe3, 0x5e, 0xd5, 0xc8, 0x78, 0x0a, 0x89, 0x7c,
2540    0x3e, 0x30, 0x8a, 0xd5, 0xb0, 0x60, 0xc1, 0x52,
2541    0x7c, 0xbc, 0x9e, 0x47, 0x0a, 0xa7, 0xc3, 0xee,
2542    0x11, 0x06, 0x72, 0x89, 0x23, 0x8b, 0x51, 0xb8,
2543    0xbb, 0x5d, 0xc1, 0xf0, 0x38, 0x66, 0x8e, 0xa7,
2544    0x43, 0xad, 0xc1, 0x40, 0x80, 0x58, 0xe4, 0xdf,
2545    0x0d, 0xb1, 0x2b, 0xa2, 0xd4, 0x58, 0x20, 0x95,
2546    0xee, 0x51, 0x13, 0x94, 0x1e, 0x8d, 0x1e, 0xd4,
2547    0x2d, 0x82, 0x73, 0xa6, 0x92, 0x0c, 0xec, 0x74,
2548    0x12, 0xbe, 0x2a, 0x8c, 0x72, 0xb3, 0x99, 0x7d,
2549    0x33, 0x50, 0xe4, 0xeb, 0xad, 0x24, 0x7c, 0xef,
2550    0x1a, 0x41, 0x4b, 0x04, 0xe6, 0x21, 0xa3, 0x1a,
2551    0xa4, 0x13, 0xf4, 0xdc, 0x70, 0xa2, 0xdc, 0x0d,
2552    0xc1, 0x02, 0x43, 0xeb, 0xf7, 0x69, 0x82, 0x7a,
2553    0x99, 0x61, 0x1b, 0x14, 0xaa, 0xce, 0x2b, 0x1b,
2554    0xd1, 0xaa, 0x3a, 0x99, 0xae, 0x51, 0xae, 0x35,
2555    0xb9, 0x8c, 0xe0, 0x43, 0x6e, 0x1e, 0x17, 0x36,
2556    0xf0, 0x9e, 0xf2, 0x83, 0x22, 0x6c, 0x82, 0xee,
2557    0xfb, 0x72, 0x35, 0x22, 0x45, 0x4a, 0xbc, 0xfa,
2558    0x65, 0x44, 0xa1, 0xce, 0x6a, 0x6a, 0xe1, 0x3f,
2559    0x6f, 0xd0, 0x45, 0x72, 0x29, 0xf4, 0xf4, 0xb0,
2560    0x97, 0x0e, 0x1e, 0xe6, 0xa8, 0xb6, 0xc8, 0x44,
2561    0x11, 0x99, 0x6e, 0xd9, 0xfd, 0x0b, 0x04, 0xaf,
2562    0x10, 0x0a, 0xd0, 0xae, 0x5d, 0xff, 0x78, 0x32,
2563    0x09, 0x39, 0x73, 0x2e, 0xaf, 0x65, 0x70, 0x3b,
2564    0xd5, 0xfe, 0x90, 0xc0, 0x9c, 0xf5, 0xba, 0xbd,
2565    0x9d, 0x78, 0xe9, 0x67, 0x87, 0x79, 0xad, 0x1f,
2566    0x77, 0x12, 0x8e, 0x8d, 0x6e, 0xc3, 0x69, 0xc6,
2567    0x22, 0x60, 0x2d, 0x4f, 0x49, 0x1b, 0xa7, 0xa3,
2568    0x8a, 0x14, 0x9d, 0x48, 0xfe, 0x0c, 0x38, 0x9a,
2569    0x0e, 0xbc, 0x7e, 0x5c, 0x6c, 0x01, 0xc5, 0x68,
2570    0x39, 0xd1, 0x33, 0xca, 0x23, 0xf6, 0x12, 0x02,
2571    0x59, 0x3f, 0xe2, 0x11, 0x9d, 0xa0, 0x41, 0x3d,
2572    0xa5, 0x3b, 0x5a, 0xe1, 0xdc, 0x66, 0x00, 0xcb,
2573    0x91, 0x39, 0x60, 0xd4, 0xa8, 0xdb, 0x91, 0xf3,
2574    0x2a, 0x7b, 0xfc, 0xc7, 0x41, 0x66, 0x88, 0x68,
2575    0x54, 0xff, 0x9f, 0x38, 0x03, 0x8c, 0x93, 0x72,
2576    0x4c, 0xab, 0xbe, 0xeb, 0x3d, 0x74, 0x74, 0x38,
2577    0xcf, 0x46, 0x08, 0xfa, 0x72, 0xcf, 0xbf, 0xed,
2578    0xb6, 0xc1, 0x0c, 0xc5, 0x13, 0xa9, 0x76, 0x67,
2579    0x6b, 0xe2, 0xad, 0xc4, 0x06, 0xfa, 0x0c, 0x81,
2580    0xd8, 0xdd, 0x7b, 0x28, 0x3f, 0x15, 0xb7, 0x0d,
2581    0xb3, 0x56, 0x5a, 0x3c, 0xa6, 0x8f, 0x96, 0x20,
2582    0xa4, 0x02, 0x6e, 0x0a, 0x7f, 0x8d, 0x97, 0x5a,
2583    0xb2, 0xf5, 0xa9, 0xd8, 0xb9, 0x0b, 0x72, 0x0c,
2584    0x6c, 0x6c, 0xcc, 0x31, 0x76, 0x55, 0x1a, 0xde,
2585    0xf5, 0x17, 0xd9, 0xb0, 0x57, 0xea, 0x39, 0xab,
2586    0xcd, 0xb7, 0x5f, 0x16, 0x07, 0xdb, 0x36, 0x63,
2587    0x16, 0x8c, 0x6f, 0x09, 0xe3, 0xc0, 0x43, 0xda,
2588    0xd0, 0x77, 0x17, 0xb4, 0x72, 0x50, 0xfc, 0x8e,
2589    0x1d, 0xdd, 0xec, 0x00, 0x2b, 0x21, 0xe4, 0x71,
2590    0xa4, 0xdd, 0x51, 0xd9, 0xe0, 0xdb, 0x14, 0x21,
2591    0x42, 0xf2, 0x90, 0x49, 0x25, 0x55, 0x48, 0x47,
2592    0x58, 0x7b, 0x96, 0x97, 0x42, 0xb2, 0xd5, 0x50,
2593    0xa9, 0x28, 0xba, 0xec, 0xba, 0x52, 0x6d, 0xd0,
2594    0xb1, 0x75, 0xd8, 0xd4, 0xda, 0x81, 0x10, 0x0c,
2595    0xb0, 0x75, 0x57, 0x57, 0x81, 0x7f, 0x8d, 0xf9,
2596    0x29, 0xaf, 0x27, 0x85, 0x45, 0x4a, 0x84, 0x53,
2597    0x78, 0xde, 0x09, 0xe9, 0xf5, 0x2c, 0xd4, 0x91,
2598    0xc3, 0x3a, 0x9c, 0x50, 0xe1, 0xc6, 0x20, 0x66,
2599    0x26, 0x4a, 0x7b, 0x4f, 0x05, 0x89, 0x97, 0x3b,
2600    0xe1, 0xb8, 0xbc, 0x28, 0xa4, 0x31, 0xa8, 0x13,
2601    0xb3, 0xc2, 0xf5, 0xee, 0x10, 0xec, 0x4c, 0xf4,
2602    0xd6, 0x21, 0xab, 0x9b, 0x58, 0xe8, 0x95, 0x7c,
2603    0x85, 0x64, 0x57, 0x81, 0x79, 0x1b, 0x8b, 0xb1,
2604    0x84, 0xd5, 0xe9, 0x86, 0xe1, 0x6f, 0xce, 0x56,
2605    0xe1, 0x8d, 0x1d, 0xa2, 0x4d, 0x54, 0x97, 0xc3,
2606    0x2e, 0xc5, 0x5d, 0x6e, 0x9b, 0x4f, 0x43, 0x0c,
2607    0xf0, 0x36, 0x68, 0x53, 0x9e, 0x2f, 0xbd, 0x5a,
2608    0x8f, 0x3c, 0x30, 0x9f, 0x38, 0x40, 0x58, 0x34,
2609    0x27, 0x18, 0xfc, 0x70, 0x54, 0x7e, 0x70, 0x15,
2610    0xeb, 0x93, 0x29, 0x15, 0x7d, 0xa7, 0x6b, 0xa0,
2611    0x5b, 0x7d, 0x2b, 0x7a, 0x79, 0x10, 0xb4, 0x8b,
2612    0xd9, 0xfa, 0x94, 0x5d, 0xc2, 0x1b, 0x0d, 0xf7,
2613    0x47, 0x18, 0xa9, 0x8f, 0xa2, 0x64, 0x32, 0x17,
2614    0x15, 0x1d, 0x3b, 0xed, 0x3c, 0x32, 0x8a, 0x69,
2615    0x2d, 0x14, 0xae, 0x5a, 0x4a, 0xa4, 0x79, 0xdb,
2616    0x6e, 0x9e, 0x81, 0xa5, 0x32, 0x92, 0xa3, 0x55,
2617    0x3e, 0xfa, 0x05, 0x21, 0x1e, 0x1d, 0xb8, 0x08,
2618    0x5e, 0xee, 0x21, 0x14, 0xc4, 0x38, 0x17, 0x6c,
2619    0x24, 0x1a, 0xdb, 0xbd, 0xf0, 0x37, 0x33, 0xc2,
2620    0xc5, 0xec, 0xe9, 0x92, 0x6d, 0x1c, 0xc0, 0x3e,
2621    0x58, 0x26, 0x26, 0xde, 0x87, 0xc2, 0xef, 0x2c,
2622    0x9d, 0x18, 0x7b, 0x71, 0x05, 0xf7, 0x9f, 0x42,
2623    0x29, 0x8c, 0x18, 0x9b, 0xf6, 0xe9, 0x34, 0x75,
2624    0x59, 0x6f, 0x18, 0x8c, 0x43, 0xcc, 0x5c, 0xd7,
2625    0x45, 0x14, 0xda, 0xa0, 0xcf, 0x11, 0x10, 0xb2,
2626    0x00, 0xab, 0x94, 0x59, 0x36, 0xd6, 0x77, 0x7b,
2627    0x8a, 0x84, 0xff, 0x22, 0xd3, 0x60, 0x66, 0x06,
2628    0x42, 0xa2, 0xe6, 0xdd, 0xc0, 0xe6, 0xb7, 0x4c,
2629    0xe7, 0xc6, 0x88, 0x71, 0xb9, 0xf2, 0x75, 0x96,
2630    0x30, 0x85, 0xaf, 0x5f, 0xa7, 0xdb, 0x2b, 0xe7,
2631    0x17, 0xbc, 0xa6, 0x6c, 0x2b, 0xec, 0xef, 0x53,
2632    0x26, 0xe5, 0xad, 0xf2, 0x03, 0x02, 0xac, 0x51,
2633    0xf7, 0xa5, 0x06, 0x8f, 0x80, 0x9f, 0xc6, 0xd0,
2634    0xed, 0x0f, 0xed, 0xea, 0xf6, 0x5b, 0x61, 0xfc,
2635    0x2b, 0xb3, 0x44, 0xfd, 0x26, 0x1c, 0xde, 0x45,
2636    0x9f, 0xdb, 0x58, 0x2a, 0x12, 0x41, 0xdf, 0x9d,
2637    0xf6, 0xf9, 0xfc, 0x89, 0xa0, 0x86, 0x33, 0xd2,
2638    0xcf, 0x8b, 0x17, 0x10, 0x84, 0xbe, 0x94, 0x72,
2639    0x77, 0x28, 0x58, 0x52, 0x9a, 0x24, 0x9c, 0x3a,
2640    0x55, 0xd5, 0x57, 0x57, 0xb1, 0x3d, 0x03, 0xa6,
2641    0x0d, 0xb7, 0x89, 0x61, 0xa6, 0x1d, 0xc6, 0x61,
2642    0xa4, 0x75, 0xc2, 0xa7, 0x0e, 0xc9, 0x4c, 0x95,
2643    0x2a, 0xa1, 0x65, 0x63, 0x1f, 0x82, 0x2c, 0xf0,
2644    0xad, 0xcf, 0x24, 0xca, 0x89, 0x64, 0x72, 0x1e,
2645    0x26, 0x66, 0x37, 0x36, 0x4c, 0x35, 0x1e, 0xe9,
2646    0xb5, 0x64, 0xd9, 0xe1, 0x8f, 0x42, 0x5e, 0x9d,
2647    0x1a, 0xd6, 0xfe, 0x20, 0xa9, 0x74, 0xa9, 0x85,
2648    0x62, 0xc6, 0x17, 0x20, 0x63, 0x1b, 0x8e, 0xb5,
2649    0x1a, 0x2a, 0x81, 0xc6, 0x21, 0xf9, 0x54, 0x04,
2650    0x56, 0x26, 0x89, 0x90, 0xa0, 0xab, 0xcb, 0x5f,
2651    0x86, 0x8f, 0x9e, 0xf1, 0x17, 0x65, 0xa7, 0xb7,
2652    0x28, 0x63, 0x39, 0x5c, 0x3c, 0xeb, 0x1f, 0x9d,
2653    0xf9, 0x19, 0xdb, 0xaa, 0x6c, 0x18, 0x8b, 0x57,
2654    0xac, 0xec, 0x55, 0xf6, 0xb8, 0x2a, 0xc9, 0x24,
2655    0x04, 0xa7, 0xcc, 0xec, 0x53, 0x28, 0x3d, 0xae,
2656    0x75, 0x39, 0xaa, 0x66, 0x84, 0xc6, 0x94, 0xd7,
2657    0xc2, 0xdc, 0x21, 0x12, 0x73, 0x0c, 0x06, 0x2b,
2658    0x17, 0x40, 0x69, 0x49, 0xfd, 0x78, 0x7b, 0x9a,
2659    0x13, 0x0f, 0xc4, 0x8a, 0xd2, 0x60, 0x9d, 0xa4,
2660    0x0b, 0x3a, 0xf4, 0x3a, 0x9b, 0x0a, 0x79, 0x3e,
2661    0x31, 0xaa, 0x27, 0x63, 0x41, 0x38, 0x4e, 0x46,
2662    0x14, 0x8c, 0x55, 0x80, 0x7b, 0x75, 0xc8, 0xe9,
2663    0x15, 0x64, 0xc8, 0xc7, 0xdd, 0xf4, 0x1d, 0xe9,
2664    0x25, 0x4a, 0x0e, 0x06, 0x4a, 0x1a, 0xc8, 0x88,
2665    0xec, 0x46, 0xd6, 0xfb, 0x6b, 0xb8, 0x94, 0x28,
2666    0xaf, 0xbc, 0x2f, 0xe6, 0x28, 0x76, 0xc0, 0x0a,
2667    0xfc, 0x60, 0x42, 0xef, 0x45, 0xff, 0x76, 0xf8,
2668    0xe1, 0x50, 0x6f, 0x94, 0xaf, 0xa5, 0xd9, 0x4d,
2669    0xe9, 0xa9, 0x7c, 0x2d, 0x1d, 0xb3, 0x78, 0x66,
2670    0xc3, 0x6e, 0x4d, 0x22, 0xd9, 0x0f, 0xcf, 0xf0,
2671    0x87, 0xa7, 0xdc, 0xec, 0x5a, 0x12, 0x65, 0x55,
2672    0x3d, 0x9b, 0xc8, 0x33, 0xfd, 0x83, 0xfc, 0x02,
2673    0xfb, 0x22, 0x0c, 0x1d, 0x7f, 0xff, 0x38, 0xe1,
2674    0x6b, 0x78, 0x47, 0xa8, 0x54, 0x31, 0x36, 0x69,
2675    0x44, 0x64, 0xae, 0x1a, 0xfc, 0x8b, 0x3c, 0x3a,
2676    0x9f, 0x3e, 0xca, 0x85, 0xa1, 0x0d, 0x56, 0x72,
2677    0x63, 0xb5, 0x7b, 0xfa, 0x4f, 0x18, 0x76, 0x57,
2678    0x3a, 0xa7, 0xb0, 0x20, 0x24, 0x9b, 0xb1, 0x8d,
2679    0x01, 0xec, 0x32, 0x9c, 0x84, 0xc1, 0x8d, 0x88,
2680    0x0d, 0xe4, 0x71, 0xe5, 0x1f, 0xe2, 0x0b, 0xae,
2681    0x87, 0xcf, 0x5f, 0xbf, 0xde, 0x57, 0x2f, 0x22,
2682    0x5a, 0x63, 0x5a, 0x9c, 0x85, 0x46, 0xf1, 0x3a,
2683    0x7e, 0x04, 0xec, 0xce, 0xb4, 0xa0, 0x00, 0x90,
2684    0x9a, 0x09, 0x11, 0xb4, 0x6b, 0x53, 0x37, 0xd2,
2685    0x03, 0xd1, 0x59, 0x2f, 0xdb, 0xda, 0xe9, 0xf8,
2686    0x0a, 0x67, 0x6a, 0x83, 0x30, 0x09, 0x66, 0x82,
2687    0x11, 0x10, 0xda, 0x52, 0x61, 0x40, 0xca, 0x86,
2688    0x85, 0xdf, 0x01, 0xc3, 0x0e, 0x68, 0xd0, 0xb7,
2689    0x0a, 0x37, 0x95, 0x30, 0xc3, 0x0f, 0x37, 0x49,
2690    0x27, 0x4a, 0x93, 0xd3, 0x6a, 0x1a, 0xaf, 0xa2,
2691    0x0a, 0xbf, 0xb7, 0xb7, 0x68, 0xe7, 0x8d, 0x4c,
2692    0x50, 0xf0, 0x9c, 0x10, 0x93, 0x1c, 0xdf, 0x83,
2693    0x7b, 0xe7, 0xfa, 0xc3, 0x41, 0xbd, 0x6c, 0x06,
2694    0x10, 0x8d, 0x4c, 0x38, 0x0f, 0x74, 0x04, 0x48,
2695    0x07, 0xdd, 0xba, 0xbe, 0x6f, 0x92, 0x7b, 0xc6,
2696    0x87, 0xae, 0x0c, 0xe9, 0x46, 0x52, 0x97, 0xa7,
2697    0xe6, 0x9a, 0x91, 0xbb, 0x7e, 0xb0, 0x65, 0xac,
2698    0x22, 0xe0, 0xa3, 0xc7, 0xe8, 0xc5, 0x53, 0x99,
2699    0x82, 0x1c, 0x2c, 0x54, 0x9b, 0xa0, 0xcf, 0x6b,
2700    0xd5, 0x9e, 0x18, 0xf9, 0x3c, 0x17, 0x88, 0xb4,
2701    0xfa, 0x01, 0x46, 0x6e, 0xd6, 0x41, 0xf2, 0xdd,
2702    0xf1, 0xea, 0xbc, 0x1d, 0x6c, 0xbb, 0xe2, 0xcb,
2703    0xe6, 0xfc, 0x22, 0xb5, 0x82, 0x9a, 0x89, 0x60,
2704    0x30, 0xdc, 0x1f, 0x42, 0x20, 0x34, 0x05, 0x02,
2705    0x70, 0x60, 0xbd, 0x95, 0x22, 0x0e, 0xeb, 0x29,
2706    0x23, 0x0c, 0x51, 0x95, 0x74, 0x7e, 0xae, 0xed,
2707    0x3a, 0x5d, 0x83, 0x20, 0xd9, 0x55, 0x80, 0x9b,
2708    0xe0, 0x50, 0x25, 0xe5, 0xbd, 0xfb, 0x45, 0x43,
2709    0xce, 0x34, 0x5a, 0x8a, 0xcf, 0x68, 0x2f, 0xde,
2710    0xdc, 0x95, 0x1d, 0x72, 0x6b, 0x69, 0x7d, 0xe6,
2711    0xd5, 0x82, 0x2f, 0x65, 0x31, 0x8e, 0xab, 0xbd,
2712    0x66, 0xb9, 0x39, 0x15, 0x02, 0x0f, 0xa7, 0x62,
2713    0xfc, 0xdb, 0xc1, 0x50, 0xfa, 0xf1, 0x6a, 0xe6,
2714    0x88, 0x56, 0x16, 0x3d, 0x1a, 0x6c, 0x1c, 0x95,
2715    0x6e, 0x93, 0xdc, 0x72, 0xc3, 0x35, 0x4d, 0x22,
2716    0xe1, 0xd5, 0xa2, 0xa6, 0xcf, 0xe7, 0xaf, 0x2a,
2717    0x02, 0x02, 0x2b, 0xb4, 0xaa, 0x42, 0x5c, 0x12,
2718    0xbb, 0x1d, 0x0b, 0xe6, 0x16, 0x9e, 0x2a, 0xc8,
2719    0xf5, 0xd4, 0x41, 0xf4, 0x72, 0x9b, 0x68, 0xd5,
2720    0x3a, 0x53, 0xb1, 0x61, 0x7a, 0x5e, 0x74, 0x33,
2721    0x52, 0xe7, 0x51, 0x62, 0xcb, 0x02, 0xfa, 0x0f,
2722    0x9d, 0x7d, 0x51, 0xf4, 0x66, 0xeb, 0x80, 0xff,
2723    0x83, 0xac, 0x1c, 0xde, 0x5d, 0xc6, 0x3a, 0x47,
2724    0x3e, 0x03, 0x9d, 0xaf, 0x4d, 0x9d, 0x2e, 0x27,
2725    0xb4, 0xd0, 0x69, 0x4a, 0xdc, 0x66, 0x96, 0xe9,
2726    0x77, 0x81, 0xfe, 0x13, 0x25, 0xd6, 0x4d, 0xa2,
2727    0x3e, 0xa5, 0xe3, 0xe0, 0xbb, 0x97, 0x27, 0x49,
2728    0x92, 0x10, 0x36, 0xdc, 0x31, 0x25, 0x5e, 0xba,
2729    0xa3, 0x5f, 0xca, 0x74, 0xbe, 0xe6, 0x57, 0xd0,
2730    0xfa, 0x46, 0x81, 0x2a, 0xe4, 0xf6, 0x9d, 0xd8,
2731    0xcf, 0xb4, 0x8f, 0x89, 0x75, 0x5e, 0x8b, 0x0e,
2732    0x10, 0x9e, 0x1a, 0xa5, 0x17, 0xc4, 0x56, 0x97,
2733    0x9e, 0x38, 0x38, 0xd8, 0xef, 0x4b, 0x82, 0x79,
2734    0xc4, 0x54, 0x2c, 0x2b, 0xed, 0xe2, 0x6a, 0x83,
2735    0x4b, 0x12, 0x6a, 0xa7, 0xff, 0x31, 0xe7, 0x8d,
2736    0x0a, 0x9f, 0xab, 0x49, 0xae, 0xee, 0xc1, 0xa8,
2737    0x87, 0xdf, 0x2d, 0x11, 0xda, 0xd9, 0xf6, 0xa1,
2738    0x12, 0x82, 0x96, 0x64, 0x68, 0xa8, 0xe2, 0x13,
2739    0xf8, 0x25, 0xf3, 0x3d, 0xa0, 0xcd, 0x0e, 0xfb,
2740    0x1f, 0xbc, 0x27, 0xe3, 0xed, 0x72, 0xa9, 0x31,
2741    0xee, 0x61, 0xcc, 0xb9, 0xb3, 0x4d, 0x72, 0x41,
2742    0x5c, 0xb8, 0x2d, 0x6f, 0xae, 0xdf, 0xf7, 0xf4,
2743    0x07, 0x04, 0xf3, 0xcf, 0x86, 0x30, 0x6f, 0xed,
2744    0x0c, 0x61, 0x4e, 0x78, 0x56, 0x2e, 0x85, 0xf1,
2745    0xaf, 0x6a, 0x76, 0x28, 0x0f, 0x4b, 0x14, 0xfa,
2746    0xf2, 0xda, 0x0c, 0x7f, 0xe1, 0xe3, 0x76, 0x66,
2747    0xb2, 0xd6, 0xb5, 0xe4, 0x61, 0xec, 0x21, 0xcd,
2748    0xfa, 0x58, 0x61, 0x96, 0x3b, 0x91, 0x82, 0xd4,
2749    0xf2, 0xd8, 0xac, 0x91, 0x7e, 0x2f, 0xaa, 0x92,
2750    0x2e, 0x89, 0x02, 0x19, 0x02, 0xb8, 0xb4, 0x28,
2751    0xde, 0x58, 0x69, 0xca, 0x8b, 0x31, 0x2d, 0x05,
2752    0xab, 0x28, 0xdd, 0x82, 0x60, 0x72, 0x98, 0xa1,
2753    0x50, 0x17, 0x22, 0x64, 0x4a, 0x4f, 0xb9, 0xad,
2754    0xb7, 0x03, 0x0b, 0x84, 0x32, 0x06, 0xa6, 0xb9,
2755    0xd2, 0x32, 0x2a, 0xda, 0xb6, 0xdd, 0xad, 0x57,
2756    0xde, 0xfb, 0x81, 0x1e, 0x91, 0xa1, 0x75, 0xcc,
2757    0x09, 0x2e, 0x1a, 0x0e, 0x90, 0x74, 0x26, 0xd1,
2758    0x8f, 0x9e, 0x0a, 0xe6, 0x62, 0x75, 0xca, 0x2c,
2759    0xc7, 0x85, 0xfa, 0x2b, 0xe2, 0x52, 0xe7, 0xb6,
2760    0x01, 0xb8, 0x9a, 0x53, 0x71, 0x92, 0x7b, 0x4e,
2761    0x48, 0x37, 0x2d, 0x18, 0x19, 0xb3, 0x91, 0xf5,
2762    0x26, 0x66, 0x56, 0x17, 0xb8, 0xb9, 0x4d, 0x38,
2763    0x7c, 0x03, 0x6e, 0x07, 0x1c, 0x25, 0xe0, 0x9c,
2764    0x7d, 0xcf, 0xc5, 0xe8, 0x0c, 0x90, 0xa4, 0xad,
2765    0xa3, 0xad, 0x7c, 0x40, 0x87, 0x4e, 0xe3, 0x9d,
2766    0x23, 0x4b, 0x72, 0x72, 0x6e, 0xe6, 0xca, 0x6a,
2767    0x6b, 0x5f, 0x49, 0x8d, 0xe5, 0x09, 0x42, 0x72,
2768    0x0c, 0x84, 0xdc, 0x59, 0x7e, 0xad, 0x1c, 0x58,
2769    0xdf, 0x7e, 0x0e, 0x5e, 0x36, 0xb8, 0x31, 0x64,
2770    0x1c, 0x2e, 0x89, 0xd3, 0x6a, 0x81, 0x7d, 0xce,
2771    0x04, 0xc9, 0x99, 0x5e, 0x52, 0x11, 0x20, 0x64,
2772    0xc6, 0xf0, 0x9a, 0x5f, 0x3f, 0xad, 0x8a, 0xec,
2773    0x26, 0xa2, 0x7b, 0x52, 0x32, 0x5f, 0x36, 0x4b,
2774    0x28, 0xdc, 0xd3, 0xfb, 0x72, 0x7a, 0x1d, 0xeb,
2775    0xf9, 0x74, 0xef, 0x66, 0xad, 0x86, 0x84, 0xda,
2776    0x13, 0x35, 0x7e, 0xe3, 0x1d, 0xb0, 0xb3, 0xc2,
2777    0x2a, 0xc9, 0x78, 0xed, 0x5f, 0x56, 0xd9, 0x08,
2778    0x13, 0x84, 0x92, 0x72, 0xd5, 0x1c, 0xfd, 0x90,
2779    0x5e, 0x11, 0xb5, 0x49, 0x52, 0x07, 0x9d, 0x5e,
2780    0x4c, 0x43, 0x4f, 0x25, 0x0a, 0x7b, 0xc5, 0xaf,
2781    0xbd, 0x68, 0x70, 0x1d, 0xe6, 0xe5, 0x79, 0x18,
2782    0x2c, 0xa3, 0x92, 0x76, 0x59, 0x84, 0x72, 0x10,
2783    0xf3, 0x6b, 0x8b, 0x15, 0xc1, 0x17, 0x35, 0x1a,
2784    0x88, 0x35, 0x25, 0x07, 0xaa, 0xd6, 0x02, 0xaf,
2785    0x03, 0xee, 0x64, 0x42, 0x23, 0x1c, 0x81, 0x01,
2786    0x45, 0xb8, 0xb5, 0x90, 0xa4, 0x69, 0x58, 0xe4,
2787    0xaa, 0xd9, 0x45, 0x91, 0x11, 0xed, 0x17, 0x01,
2788    0x64, 0x1a, 0x87, 0x13, 0x5d, 0x52, 0xa3, 0xca,
2789    0xa7, 0x50, 0xb7, 0xfa, 0x79, 0x1f, 0xce, 0x20,
2790    0x58, 0x9c, 0x64, 0x1a, 0x2d, 0x15, 0xc9, 0xfa,
2791    0x1e, 0x19, 0xcd, 0xcc, 0x11, 0x95, 0xfd, 0x1e,
2792    0x9b, 0xce, 0xea, 0xbe, 0x33, 0x1c, 0xa5, 0x58,
2793    0x02, 0x80, 0x8e, 0x95, 0xc5, 0x34, 0xa5, 0x66,
2794    0x85, 0xf0, 0x45, 0x76, 0xf0, 0x49, 0x6b, 0xea,
2795    0x0d, 0xaf, 0xb0, 0xa0, 0x7f, 0x8e, 0xe7, 0xfe,
2796    0x8f, 0x42, 0x0f, 0xc9, 0xaf, 0x56, 0xea, 0xa4,
2797    0x3e, 0x28, 0xbd, 0x66, 0x9d, 0x9f, 0x68, 0x41,
2798    0x45, 0xcc, 0xa4, 0x21, 0xa3, 0x40, 0xa7, 0x96,
2799    0xe1, 0xa3, 0x5d, 0x96, 0x40, 0xde, 0xe1, 0xd7,
2800    0xb2, 0xbc, 0xc6, 0x01, 0xc5, 0xa0, 0x9f, 0xee,
2801    0x08, 0x40, 0x29, 0xde, 0x90, 0x7e, 0x8a, 0x3a,
2802    0x8f, 0xa2, 0x43, 0xd3, 0xd6, 0x19, 0xd2, 0xe6,
2803    0xc0, 0xc6, 0x02, 0x8f, 0xb2, 0x81, 0x79, 0x2f,
2804    0x58, 0x0c, 0x75, 0x55, 0xb3, 0x92, 0x23, 0x68,
2805    0xd0, 0x30, 0x85, 0xcf, 0x95, 0xc5, 0x61, 0x06,
2806    0x4b, 0x94, 0xa5, 0x36, 0x68, 0x4f, 0x3c, 0xa1,
2807    0x1d, 0xcd, 0x10, 0xba, 0x1a, 0x5f, 0xa4, 0x52,
2808    0x77, 0x99, 0xfa, 0x20, 0xb1, 0xf9, 0x66, 0xa4,
2809    0x86, 0x3f, 0x7a, 0x87, 0x19, 0xdd, 0x4e, 0xb8,
2810    0x99, 0x6f, 0x12, 0x41, 0x43, 0x0c, 0x08, 0x22,
2811    0xc0, 0x47, 0x49, 0x71, 0x33, 0x6f, 0xc7, 0xd1,
2812    0x22, 0x98, 0x15, 0x56, 0x6a, 0xa6, 0x27, 0x73,
2813    0x03, 0x95, 0x5d, 0xb8, 0xe3, 0x6f, 0x49, 0x7a,
2814    0xe1, 0x62, 0x20, 0xae, 0x3d, 0x8b, 0x33, 0x6b,
2815    0x55, 0x2b, 0x3c, 0xcc, 0x0c, 0x13, 0x40, 0x86,
2816    0xda, 0x79, 0x7c, 0x2a, 0x91, 0xd9, 0xf1, 0xad,
2817    0x5d, 0x01, 0x7e, 0x84, 0xcc, 0xd9, 0xe0, 0xed,
2818    0x02, 0x1c, 0x23, 0x6e, 0xa3, 0xa9, 0xbb, 0x02,
2819    0x20, 0x6c, 0x77, 0x7e, 0x8d, 0xbe, 0xc7, 0xd3,
2820    0xe4, 0x02, 0x2f, 0x48, 0x4d, 0x78, 0xcb, 0xe0,
2821    0x23, 0x29, 0x4a, 0x4c, 0x66, 0x8a, 0xb3, 0xdb,
2822    0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2823    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2824    0x08, 0x0f, 0x19, 0x20, 0x29
2825};
2826
2827/*
2828 * The message has been specially selected so that:
2829 *      it fails the z_max rejection test on iteration one
2830 *      it fails the r0_max rejection test on iteration two
2831 *      it fails the h_ones rejection test on iteration three
2832 *      it successfully generates the signature on iteration four
2833 * Thus, it is an optimal self test in terms of iterations and coverage.
2834 *
2835 * Refer to FIPS 140-3 IG 10.3.A.15 for details of the testing requirements.
2836 */
2837static const unsigned char ml_dsa_65_msg[] = {
2838    0x23, 0x37, 0x34, 0x37, 0x36, 0x38, 0x23
2839};
2840
2841static const ST_KAT_PARAM ml_dsa_key[] = {
2842    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ml_dsa_65_priv_key),
2843    ST_KAT_PARAM_END()
2844};
2845
2846static int ml_dsa_deterministic = 1;
2847static int ml_dsa_encoding = 0;
2848
2849static const ST_KAT_PARAM ml_dsa_sig_init[] = {
2850    ST_KAT_PARAM_INT(OSSL_SIGNATURE_PARAM_DETERMINISTIC, ml_dsa_deterministic),
2851    ST_KAT_PARAM_INT(OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING, ml_dsa_encoding),
2852    ST_KAT_PARAM_END()
2853};
2854#endif /* OPENSSL_NO_ML_DSA */
2855
2856#ifndef OPENSSL_NO_SLH_DSA
2857/*
2858 * Deterministic SLH_DSA key generation supplies the private key elements and
2859 * Half of the public key.
2860 */
2861static const uint8_t slh_dsa_sha2_128f_keygen_entropy[] = {
2862    0xae, 0xd6, 0xf6, 0xf5, 0xc5, 0x40, 0x8b, 0xbf, 0xfa, 0x11, 0x36, 0xbc, 0x90, 0x49, 0xa7, 0x01,
2863    0x4d, 0x4c, 0xe0, 0x71, 0x1e, 0x17, 0x6a, 0x0c, 0x8a, 0x02, 0x35, 0x08, 0xa6, 0x92, 0xc2, 0x07,
2864    0x74, 0xd9, 0x8d, 0x50, 0x00, 0xaf, 0x53, 0xb9, 0x8f, 0x36, 0x38, 0x9a, 0x12, 0x92, 0xbe, 0xd3
2865};
2866
2867/* The expected outputs for the public and private key elements */
2868static const uint8_t slh_dsa_sha2_128f_keygen_priv_pub[] = {
2869    0xAE, 0xD6, 0xF6, 0xF5, 0xC5, 0x40, 0x8B, 0xBF, 0xFA, 0x11, 0x36, 0xBC, 0x90, 0x49, 0xA7, 0x01,
2870    0x4D, 0x4C, 0xE0, 0x71, 0x1E, 0x17, 0x6A, 0x0C, 0x8A, 0x02, 0x35, 0x08, 0xA6, 0x92, 0xC2, 0x07,
2871    0x74, 0xD9, 0x8D, 0x50, 0x00, 0xAF, 0x53, 0xB9, 0x8F, 0x36, 0x38, 0x9A, 0x12, 0x92, 0xBE, 0xD3,
2872    0xF4, 0xA6, 0x50, 0xC5, 0x6C, 0x42, 0x6F, 0xCF, 0xDB, 0x88, 0xE3, 0x35, 0x54, 0x59, 0x44, 0x0C
2873};
2874
2875static const uint8_t slh_dsa_sha2_128f_keygen_pub[] = {
2876    0x74, 0xD9, 0x8D, 0x50, 0x00, 0xAF, 0x53, 0xB9, 0x8F, 0x36, 0x38, 0x9A, 0x12, 0x92, 0xBE, 0xD3,
2877    0xF4, 0xA6, 0x50, 0xC5, 0x6C, 0x42, 0x6F, 0xCF, 0xDB, 0x88, 0xE3, 0x35, 0x54, 0x59, 0x44, 0x0C
2878};
2879
2880static const ST_KAT_PARAM slh_dsa_sha2_128f_keygen_init_params[] = {
2881    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_SLH_DSA_SEED,
2882                       slh_dsa_sha2_128f_keygen_entropy),
2883    ST_KAT_PARAM_END()
2884};
2885
2886static const ST_KAT_PARAM slh_dsa_128f_keygen_expected_params[] = {
2887    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY,
2888                       slh_dsa_sha2_128f_keygen_priv_pub),
2889    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY,
2890                       slh_dsa_sha2_128f_keygen_pub),
2891    ST_KAT_PARAM_END()
2892};
2893
2894static const unsigned char slh_dsa_sha2_sig_msg[] = {
2895    0x3f
2896};
2897
2898static const unsigned char slh_dsa_shake_sig_msg[] = {
2899    0x01, 0x02, 0x03, 0x04
2900};
2901
2902static int deterministic = 1;
2903static const ST_KAT_PARAM slh_dsa_sig_params[] = {
2904    ST_KAT_PARAM_INT(OSSL_SIGNATURE_PARAM_DETERMINISTIC, deterministic),
2905    ST_KAT_PARAM_END()
2906};
2907
2908static const unsigned char slh_dsa_sha2_128f_priv_pub[] = {
2909    0xd5, 0x21, 0x3b, 0xa4, 0xbb, 0x64, 0x70, 0xf1, 0xb9, 0xed, 0xa8, 0x8c, 0xbc, 0x94, 0xe6, 0x27,
2910    0x7a, 0x58, 0xa9, 0x51, 0xef, 0x7f, 0x2b, 0x81, 0x46, 0x1d, 0xba, 0xc4, 0x1b, 0x5a, 0x6b, 0x83,
2911    0xfa, 0x49, 0x5f, 0xb8, 0x34, 0xde, 0xfe, 0xa7, 0xcc, 0x96, 0xa8, 0x13, 0x09, 0x47, 0x91, 0x35,
2912    0xa6, 0x70, 0x29, 0xe9, 0x06, 0x68, 0xc5, 0xa5, 0x8b, 0x96, 0xe6, 0x01, 0x11, 0x49, 0x1f, 0x3d
2913};
2914
2915static const ST_KAT_PARAM slh_dsa_sha2_128f_key_params[] = {
2916    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, slh_dsa_sha2_128f_priv_pub),
2917    ST_KAT_PARAM_END()
2918};
2919
2920static const unsigned char slh_dsa_shake_128f_priv_pub[] = {
2921    0xbb, 0xc7, 0x43, 0x06, 0xf7, 0x5d, 0xc2, 0xda, 0xf7, 0x37, 0x2b, 0x3c, 0x98, 0x41, 0xa4, 0xd6,
2922    0x85, 0x2c, 0x17, 0xb4, 0x59, 0xf1, 0x69, 0x2b, 0x8e, 0x9a, 0x1a, 0x0d, 0xac, 0xe5, 0xba, 0x26,
2923    0x38, 0x0c, 0x99, 0x30, 0x4a, 0x0d, 0xdd, 0x32, 0xf3, 0x44, 0xb9, 0x51, 0x44, 0xe1, 0xfd, 0xef,
2924    0x60, 0xbb, 0xc2, 0x34, 0x0e, 0x08, 0x77, 0x0f, 0xb4, 0x1a, 0x80, 0xa7, 0x6c, 0xb0, 0x8e, 0x34,
2925};
2926
2927static const ST_KAT_PARAM slh_dsa_shake_128f_key_params[] = {
2928    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, slh_dsa_shake_128f_priv_pub),
2929    ST_KAT_PARAM_END()
2930};
2931
2932/* This is the SHA256 digest of the signature */
2933static const unsigned char slh_dsa_sha2_128f_sig_digest[] = {
2934    0xd3, 0x53, 0x7e, 0x05, 0xae, 0x63, 0x87, 0x6b, 0xf7, 0x80, 0x15, 0xff,
2935    0x86, 0xcc, 0x9e, 0x28, 0x4f, 0x91, 0xca, 0xbf, 0xac, 0x19, 0x12, 0x98,
2936    0xfb, 0xaa, 0x37, 0x55, 0x96, 0x35, 0x1d, 0x55
2937};
2938
2939static const unsigned char slh_dsa_shake_128f_sig_digest[] = {
2940    0xb7, 0xeb, 0x1f, 0x00, 0x33, 0x41, 0xff, 0x11,
2941    0x3f, 0xc7, 0x4d, 0xce, 0x90, 0x6c, 0x55, 0xf7,
2942    0x4a, 0x54, 0x8b, 0x86, 0xc1, 0xb1, 0x08, 0x48,
2943    0x89, 0x77, 0x00, 0x72, 0x03, 0x92, 0xd1, 0xa6,
2944};
2945#endif /* OPENSSL_NO_SLH_DSA */
2946
2947/* Hash DRBG inputs for signature KATs */
2948static const unsigned char sig_kat_entropyin[] = {
2949    0x06, 0x6d, 0xc8, 0xce, 0x75, 0xb2, 0x89, 0x66, 0xa6, 0x85, 0x16, 0x3f,
2950    0xe2, 0xa4, 0xd4, 0x27, 0xfb, 0xdb, 0x61, 0x66, 0x50, 0x61, 0x6b, 0xa2,
2951    0x82, 0xfc, 0x33, 0x2b, 0x4e, 0x6f, 0x12, 0x20
2952};
2953static const unsigned char sig_kat_nonce[] = {
2954    0x55, 0x9f, 0x7c, 0x64, 0x89, 0x70, 0x83, 0xec, 0x2d, 0x73, 0x70, 0xd9,
2955    0xf0, 0xe5, 0x07, 0x1f
2956};
2957static const unsigned char sig_kat_persstr[] = {
2958    0x88, 0x6f, 0x54, 0x9a, 0xad, 0x1a, 0xc6, 0x3d, 0x18, 0xcb, 0xcc, 0x66,
2959    0x85, 0xda, 0xa2, 0xc2, 0xf7, 0x9e, 0xb0, 0x89, 0x4c, 0xb4, 0xae, 0xf1,
2960    0xac, 0x54, 0x4f, 0xce, 0x57, 0xf1, 0x5e, 0x11
2961};
2962
2963static const ST_KAT_SIGN st_kat_sign_tests[] = {
2964    {
2965        OSSL_SELF_TEST_DESC_SIGN_RSA,
2966        "RSA", "RSA-SHA256", 0,
2967        rsa_crt_key,
2968        ITM_STR(rsa_sig_msg),
2969        ITM(sig_kat_entropyin),
2970        ITM(sig_kat_nonce),
2971        ITM(sig_kat_persstr),
2972        ITM(rsa_expected_sig)
2973    },
2974#ifndef OPENSSL_NO_EC
2975    {
2976        OSSL_SELF_TEST_DESC_SIGN_ECDSA,
2977        "EC", "ECDSA-SHA256", 0,
2978        ecdsa_prime_key,
2979        ITM_STR(rsa_sig_msg),
2980        ITM(sig_kat_entropyin),
2981        ITM(sig_kat_nonce),
2982        ITM(sig_kat_persstr),
2983        ITM(ecdsa_prime_expected_sig)
2984    },
2985# ifndef OPENSSL_NO_EC2M
2986    {
2987        OSSL_SELF_TEST_DESC_SIGN_ECDSA,
2988        "EC", "ECDSA-SHA256", 0,
2989        ecdsa_bin_key,
2990        ITM_STR(rsa_sig_msg),
2991        ITM(sig_kat_entropyin),
2992        ITM(sig_kat_nonce),
2993        ITM(sig_kat_persstr),
2994        ITM(ecdsa_bin_expected_sig)
2995    },
2996# endif
2997# ifndef OPENSSL_NO_ECX
2998    {
2999        OSSL_SELF_TEST_DESC_SIGN_EDDSA,
3000        "ED448", "ED448", 0,
3001        ed448_key,
3002        ITM(ecx_sig_msg),
3003        NULL, 0, NULL, 0, NULL, 0,
3004        ITM(ed448_expected_sig),
3005    },
3006    {
3007        OSSL_SELF_TEST_DESC_SIGN_EDDSA,
3008        "ED25519", "ED25519", 0,
3009        ed25519_key,
3010        ITM(ecx_sig_msg),
3011        NULL, 0, NULL, 0, NULL, 0,
3012        ITM(ed25519_expected_sig),
3013    },
3014# endif /* OPENSSL_NO_ECX */
3015#endif /* OPENSSL_NO_EC */
3016#ifndef OPENSSL_NO_DSA
3017    {
3018        OSSL_SELF_TEST_DESC_SIGN_DSA,
3019        "DSA", "DSA-SHA256", SIGNATURE_MODE_VERIFY_ONLY,
3020        dsa_key,
3021        ITM_STR(rsa_sig_msg),
3022        ITM(sig_kat_entropyin),
3023        ITM(sig_kat_nonce),
3024        ITM(sig_kat_persstr),
3025        ITM(dsa_expected_sig)
3026    },
3027#endif /* OPENSSL_NO_DSA */
3028
3029#ifndef OPENSSL_NO_ML_DSA
3030    {
3031        OSSL_SELF_TEST_DESC_SIGN_ML_DSA,
3032        "ML-DSA-65", "ML-DSA-65", 0,
3033        ml_dsa_key,
3034        ITM(ml_dsa_65_msg),
3035        NULL, 0,
3036        NULL, 0,
3037        NULL, 0,
3038        ITM(ml_dsa_65_sig),
3039        ml_dsa_sig_init,
3040        ml_dsa_sig_init
3041    },
3042#endif /* OPENSSL_NO_ML_DSA */
3043#ifndef OPENSSL_NO_SLH_DSA
3044    /*
3045     * FIPS 140-3 IG 10.3.A.16 Note 29 says:
3046     *
3047     *  It is recommended (but not required) that if the module implements
3048     *   both "s" and "f" algorithms, the module self-test at least one of
3049     *   each "s" and "f" algorithm.
3050     *
3051     * Because the "s" version is so slow, we only test the "f" versions
3052     * here.
3053     */
3054    {
3055        OSSL_SELF_TEST_DESC_SIGN_SLH_DSA,
3056        "SLH-DSA-SHA2-128f", "SLH-DSA-SHA2-128f", SIGNATURE_MODE_SIG_DIGESTED,
3057        slh_dsa_sha2_128f_key_params,
3058        ITM(slh_dsa_sha2_sig_msg),
3059        NULL, 0, NULL, 0, NULL, 0,
3060        ITM(slh_dsa_sha2_128f_sig_digest),
3061        slh_dsa_sig_params, slh_dsa_sig_params
3062    },
3063    {
3064        OSSL_SELF_TEST_DESC_SIGN_SLH_DSA,
3065        "SLH-DSA-SHAKE-128f", "SLH-DSA-SHAKE-128f", SIGNATURE_MODE_SIG_DIGESTED,
3066        slh_dsa_shake_128f_key_params,
3067        ITM(slh_dsa_shake_sig_msg),
3068        NULL, 0, NULL, 0, NULL, 0,
3069        ITM(slh_dsa_shake_128f_sig_digest),
3070        slh_dsa_sig_params, slh_dsa_sig_params
3071    },
3072#endif /* OPENSSL_NO_SLH_DSA */
3073};
3074
3075#if !defined(OPENSSL_NO_ML_DSA)
3076static const ST_KAT_PARAM ml_dsa_keygen_params[] = {
3077    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_ML_DSA_SEED, sig_kat_entropyin),
3078    ST_KAT_PARAM_END()
3079};
3080#endif
3081
3082/*- KEM SELF TEST DATA */
3083/*
3084 * Test case generated via the OpenSSL commands:
3085 *
3086 *  openssl genpkey -algorithm ML-KEM-512 -out priv-ml-kem-512.pem
3087 *  openssl pkey -in priv-ml-kem-512.pem -pubout -out pub-ml-kem-512.pem
3088 *  openssl pkeyutl -encap -inkey pub-ml-kem-512.pem \
3089 *          -pkeyopt ikme:00000000000000000000000000000000 -secret good.dat \
3090 *          -out ctext.dat
3091 *  openssl pkeyutl -decap -inkey priv-ml-kem-512.pem \
3092 *          -secret goodcmp.dat -in ctext.dat
3093 *  apps/openssl pkeyutl -decap -inkey priv-ml-kem-512.pem \
3094 *          -secret implicit-reject.dat -in <(head -c 768 /dev/zero)
3095 *  openssl pkey -in priv-ml-kem-512.pem -text |
3096 *      sed '1,/^priv:/d; /^pub:/,$d' |
3097 *      tr -d ' :\n' |
3098 *      xxd -r -p |
3099 *      tail -c 32 > z.dat
3100 *  (cat z.dat; head -c 768 /dev/zero) |
3101 *      openssl dgst -shake256 -xoflen 32 -binary > expected.dat
3102 */
3103#ifndef OPENSSL_NO_ML_KEM
3104static const unsigned char ml_kem_512_cipher_text[] = {
3105    0x6b, 0xc5, 0x04, 0x00, 0x27, 0x7a, 0xbb, 0x7e,
3106    0x6b, 0xf9, 0xfb, 0x56, 0x82, 0x01, 0x75, 0xeb,
3107    0xb7, 0xb9, 0xf4, 0xf2, 0x82, 0x2c, 0x6d, 0x0a,
3108    0xe0, 0x80, 0xa3, 0x49, 0x92, 0x0f, 0x6d, 0x00,
3109    0x8e, 0xba, 0x35, 0xb5, 0x42, 0xb9, 0xd7, 0xed,
3110    0x89, 0xcb, 0xfd, 0x38, 0xd7, 0x9f, 0x55, 0x3b,
3111    0xf0, 0x8e, 0x63, 0x80, 0x95, 0xcf, 0x0d, 0x4f,
3112    0x50, 0x40, 0xac, 0x1d, 0x1b, 0xdc, 0x24, 0x84,
3113    0x3b, 0x18, 0xc2, 0x77, 0x9f, 0x24, 0x11, 0x81,
3114    0xa6, 0xcc, 0xd8, 0xf4, 0xe8, 0x00, 0xdc, 0x26,
3115    0x61, 0x36, 0xd1, 0xb6, 0x5d, 0x9c, 0x12, 0x6d,
3116    0xf5, 0xe7, 0x93, 0xc8, 0x6d, 0xac, 0xaf, 0x3c,
3117    0x78, 0x3f, 0xa9, 0xc1, 0x00, 0x6f, 0x08, 0x29,
3118    0x4f, 0x1a, 0x4d, 0x3b, 0xb4, 0x4b, 0x6f, 0xc2,
3119    0x09, 0x00, 0x4b, 0xc1, 0xf0, 0xe6, 0x7f, 0x48,
3120    0x48, 0x09, 0x40, 0xf2, 0x0a, 0x86, 0x18, 0xbf,
3121    0xc6, 0x4e, 0xb2, 0xb0, 0xab, 0xfe, 0x1b, 0xea,
3122    0x91, 0x58, 0x8c, 0x18, 0x6e, 0x30, 0xe8, 0x33,
3123    0x87, 0x29, 0x26, 0xef, 0xe9, 0x0c, 0x3b, 0x8b,
3124    0x0c, 0x99, 0x40, 0x53, 0xb9, 0x30, 0xba, 0x17,
3125    0xb3, 0x8a, 0x74, 0x59, 0x5d, 0x4c, 0x76, 0x1a,
3126    0xd3, 0x3f, 0xe4, 0xf7, 0xa3, 0x0f, 0x3a, 0x2c,
3127    0x85, 0xc1, 0x46, 0xf0, 0xa4, 0x91, 0xa3, 0x12,
3128    0xb2, 0xa4, 0x4b, 0x88, 0x8d, 0x1c, 0x85, 0xb1,
3129    0xe4, 0x41, 0x1f, 0x9d, 0xb7, 0x91, 0x2f, 0x60,
3130    0x98, 0xfd, 0xfc, 0x29, 0x89, 0x11, 0x7d, 0x16,
3131    0x09, 0x9e, 0x76, 0xf1, 0x9c, 0xb3, 0x50, 0xb9,
3132    0xd0, 0x02, 0xd2, 0xa2, 0x0d, 0xdd, 0xee, 0x90,
3133    0x47, 0x0d, 0xb9, 0x4a, 0x53, 0x11, 0xa2, 0x4f,
3134    0x13, 0x5a, 0x40, 0xdc, 0xc6, 0xfe, 0xd7, 0x28,
3135    0x36, 0xec, 0xa0, 0x5e, 0xab, 0xc1, 0x7d, 0x19,
3136    0x33, 0x59, 0xe2, 0xe4, 0xea, 0x26, 0x67, 0x2f,
3137    0xe5, 0x05, 0xd8, 0x34, 0x6e, 0x3c, 0xab, 0x63,
3138    0x8b, 0x24, 0x16, 0xc7, 0x1b, 0x2a, 0x9b, 0xe5,
3139    0x04, 0x78, 0x98, 0x6c, 0x6c, 0x1e, 0x94, 0xe3,
3140    0x7f, 0x86, 0x52, 0xc0, 0x17, 0x56, 0x8d, 0x01,
3141    0x7a, 0x28, 0x81, 0x07, 0x3d, 0x61, 0x2a, 0xcd,
3142    0xc8, 0xb6, 0x7e, 0x5b, 0xad, 0xa8, 0x90, 0xbd,
3143    0x0c, 0x95, 0xb5, 0x09, 0x9d, 0x7c, 0x34, 0x8c,
3144    0x74, 0x8f, 0x8e, 0x7c, 0x28, 0x6c, 0xe2, 0x2f,
3145    0xa2, 0x87, 0x7f, 0x80, 0x43, 0x46, 0x1c, 0xb2,
3146    0x1c, 0x5a, 0xd2, 0xec, 0xad, 0xf9, 0x55, 0xe3,
3147    0x6b, 0x19, 0x54, 0x08, 0x84, 0x1a, 0x34, 0x82,
3148    0xf4, 0x9c, 0xec, 0x3d, 0x65, 0xf9, 0x78, 0x7f,
3149    0x37, 0x47, 0xcf, 0xf1, 0xcb, 0x15, 0xf2, 0xac,
3150    0xff, 0x3b, 0x8f, 0xa0, 0x8c, 0x25, 0x88, 0x5c,
3151    0x38, 0x23, 0x9a, 0x27, 0x16, 0x6a, 0xdf, 0xa3,
3152    0x98, 0x1d, 0x16, 0x33, 0x4b, 0x4f, 0xfb, 0x83,
3153    0x85, 0x66, 0x76, 0x03, 0xb9, 0xb5, 0x46, 0x21,
3154    0xb9, 0xf3, 0xf4, 0xf1, 0x3a, 0x85, 0xec, 0x9e,
3155    0x56, 0x6a, 0xb6, 0x1d, 0xcc, 0xca, 0xfb, 0x11,
3156    0xae, 0x47, 0x7d, 0x93, 0xa5, 0xbc, 0x90, 0x32,
3157    0xde, 0xa1, 0xa5, 0x1e, 0x5d, 0x52, 0x17, 0x98,
3158    0x0a, 0x8b, 0xc4, 0x1a, 0x28, 0x7c, 0x9c, 0x22,
3159    0x3e, 0x33, 0x06, 0x40, 0x77, 0xe5, 0x22, 0x49,
3160    0x86, 0xf9, 0x3c, 0xc5, 0xc1, 0xb9, 0x77, 0x25,
3161    0x53, 0x66, 0x5a, 0x18, 0x83, 0x5a, 0x2b, 0xbf,
3162    0xac, 0x04, 0x70, 0x26, 0xe8, 0x2b, 0xb6, 0x0c,
3163    0xe8, 0x00, 0x95, 0xbb, 0x08, 0x75, 0xf3, 0x37,
3164    0x31, 0x2e, 0xef, 0x28, 0x8d, 0x58, 0x92, 0xd4,
3165    0xfd, 0xd7, 0x02, 0xce, 0x8f, 0x11, 0x83, 0x17,
3166    0x53, 0x19, 0x44, 0xd7, 0xd5, 0x6d, 0x44, 0x04,
3167    0x3a, 0x0a, 0x01, 0x46, 0xf2, 0xd2, 0xa5, 0x05,
3168    0x88, 0xa0, 0xd9, 0x0d, 0xe1, 0xa0, 0x7a, 0xf2,
3169    0x20, 0x2e, 0x5b, 0x05, 0xe4, 0x2b, 0x11, 0x3d,
3170    0xb3, 0x82, 0x64, 0x3b, 0xef, 0xc1, 0x53, 0xba,
3171    0x9f, 0x7f, 0x29, 0x59, 0x87, 0x39, 0x52, 0xda,
3172    0x7b, 0xff, 0xd7, 0xdd, 0xa1, 0xa9, 0x9f, 0xa1,
3173    0xe2, 0x38, 0x74, 0xb0, 0x94, 0xdc, 0xc5, 0xb5,
3174    0xf3, 0x61, 0xdf, 0x92, 0x62, 0xe1, 0x96, 0x87,
3175    0x6d, 0xb4, 0x2c, 0xc7, 0xf0, 0x38, 0xe9, 0x5e,
3176    0xfc, 0xff, 0x4c, 0x01, 0xc7, 0x59, 0x39, 0xe5,
3177    0x9b, 0xfb, 0xf5, 0x2b, 0x1b, 0xe5, 0xf8, 0x25,
3178    0x06, 0x07, 0xc7, 0x82, 0x46, 0x2a, 0x99, 0xd0,
3179    0xa9, 0x67, 0x81, 0xd7, 0xa2, 0x29, 0x96, 0x1a,
3180    0x94, 0x8e, 0x7d, 0x51, 0x76, 0x99, 0xad, 0x61,
3181    0xec, 0xb6, 0xc0, 0x58, 0x8e, 0xd0, 0x9d, 0xff,
3182    0x58, 0x57, 0x1b, 0x2e, 0xad, 0x65, 0xd8, 0xde,
3183    0xa5, 0xfa, 0x81, 0x4b, 0x2c, 0x06, 0x1b, 0xfe,
3184    0x49, 0x20, 0x4d, 0x5e, 0x1b, 0xb7, 0x40, 0x96,
3185    0xaa, 0x81, 0x25, 0xeb, 0x84, 0xdb, 0xea, 0x5d,
3186    0x0b, 0xaf, 0xf9, 0x8e, 0x41, 0xa6, 0xdd, 0x91,
3187    0x3a, 0x68, 0x54, 0xb7, 0x2e, 0xb1, 0x74, 0xff,
3188    0xf5, 0x0d, 0xa7, 0x3c, 0xc7, 0x30, 0x5b, 0x55,
3189    0xc6, 0x2d, 0xc8, 0x4c, 0xb4, 0xad, 0xcc, 0xd0,
3190    0xa1, 0x1b, 0x41, 0xc7, 0x23, 0xe8, 0xda, 0xff,
3191    0xb7, 0x3a, 0x12, 0xc2, 0xdc, 0x39, 0x7c, 0xf4,
3192    0xb9, 0x50, 0x00, 0x53, 0x88, 0xc8, 0x77, 0x49,
3193    0xfd, 0x70, 0x3d, 0xe0, 0xaa, 0x0c, 0x28, 0xd4,
3194    0xa2, 0xec, 0x82, 0x5d, 0xda, 0xe8, 0x05, 0x2f,
3195    0xe8, 0x9c, 0x21, 0x39, 0x3a, 0x22, 0x2f, 0x0a,
3196    0x5c, 0x6d, 0x01, 0xdf, 0xc8, 0x9f, 0x46, 0xf7,
3197    0x15, 0x02, 0xad, 0x19, 0x35, 0x63, 0x55, 0x58,
3198    0xf5, 0x7a, 0x46, 0xc9, 0x7a, 0xe6, 0x33, 0x84,
3199    0x48, 0x2b, 0xf0, 0xe7, 0xc5, 0x72, 0x98, 0x43,
3200    0x6a, 0x99, 0xba, 0x00, 0x57, 0x4f, 0xaa, 0x0a
3201};
3202
3203static const unsigned char ml_kem_512_private_key[] = {
3204    0x87, 0xca, 0x19, 0x93, 0xb6, 0x4d, 0x89, 0x32,
3205    0xae, 0x3b, 0x22, 0x52, 0x82, 0xa1, 0xb3, 0xc1,
3206    0x37, 0x65, 0xdc, 0xc1, 0x22, 0x4c, 0x43, 0x77,
3207    0x33, 0x0a, 0x04, 0xec, 0xec, 0x0b, 0x25, 0x05,
3208    0x40, 0x07, 0x53, 0x82, 0xbe, 0x37, 0x52, 0x53,
3209    0x12, 0x87, 0x7d, 0x77, 0x69, 0xfd, 0x59, 0x4f,
3210    0xbd, 0x16, 0x42, 0x82, 0x58, 0x9d, 0xee, 0x5c,
3211    0x0f, 0x2c, 0x14, 0x7f, 0xc6, 0x2a, 0x95, 0x42,
3212    0x10, 0x3c, 0x08, 0xbc, 0xcc, 0xa0, 0x05, 0x82,
3213    0xe9, 0xc5, 0x26, 0x81, 0xfa, 0xb8, 0x79, 0x78,
3214    0x5b, 0x3e, 0x79, 0x49, 0x68, 0x44, 0xb3, 0x7b,
3215    0xf5, 0x26, 0x62, 0x7a, 0x8a, 0x3c, 0xd8, 0x82,
3216    0x1f, 0x16, 0x1d, 0x92, 0x99, 0xac, 0xc4, 0xa9,
3217    0xb9, 0x30, 0x32, 0x6b, 0x6b, 0x67, 0x3d, 0x16,
3218    0x13, 0x1d, 0xf0, 0x98, 0x94, 0x42, 0x90, 0x68,
3219    0xfc, 0x65, 0xa3, 0xe5, 0x16, 0x22, 0x09, 0x64,
3220    0xc0, 0x7d, 0x54, 0x03, 0x47, 0x89, 0xbe, 0xae,
3221    0x61, 0x4b, 0x13, 0xa1, 0xcd, 0xad, 0xbc, 0x20,
3222    0x5e, 0x36, 0x36, 0x34, 0x41, 0x1d, 0x5b, 0x3a,
3223    0x26, 0x91, 0x80, 0x75, 0xe0, 0x63, 0x9d, 0xd6,
3224    0x35, 0xc9, 0x28, 0x81, 0xa4, 0x6e, 0xfb, 0x95,
3225    0x01, 0x11, 0x8f, 0xcc, 0x18, 0xb3, 0x9a, 0x91,
3226    0x66, 0xa6, 0x37, 0x6c, 0xeb, 0x71, 0x42, 0x29,
3227    0xec, 0x71, 0xa4, 0x99, 0x6d, 0x92, 0x97, 0x9d,
3228    0x94, 0x64, 0x6e, 0xc3, 0xf0, 0x5d, 0xa5, 0x49,
3229    0x8f, 0x66, 0xa5, 0x0a, 0x9a, 0xb9, 0xcf, 0x85,
3230    0x20, 0xa7, 0x28, 0xe1, 0xc2, 0x10, 0x08, 0x72,
3231    0x58, 0x71, 0x56, 0x3e, 0x7b, 0x47, 0x46, 0x81,
3232    0x7d, 0x74, 0xfa, 0xb2, 0xb6, 0xf2, 0xa0, 0xe3,
3233    0x4a, 0x0a, 0x5e, 0x95, 0x2b, 0x32, 0xf1, 0x07,
3234    0x2c, 0x30, 0x5e, 0x81, 0x84, 0x58, 0xf3, 0x42,
3235    0x34, 0xdb, 0xaa, 0xc4, 0x06, 0xcb, 0x63, 0x72,
3236    0xfa, 0x01, 0x86, 0xe8, 0xca, 0xd7, 0x73, 0x1d,
3237    0xac, 0xd8, 0x64, 0x60, 0x66, 0xb1, 0x19, 0xb1,
3238    0x59, 0xac, 0x78, 0x21, 0xab, 0x9a, 0x62, 0xbf,
3239    0xe8, 0x1b, 0xd1, 0xdc, 0x75, 0x08, 0xa4, 0x9e,
3240    0x22, 0x54, 0xa8, 0x36, 0x68, 0x4b, 0xb7, 0x22,
3241    0xa3, 0xbc, 0x04, 0x09, 0xe2, 0xe9, 0x4d, 0xce,
3242    0xf5, 0x46, 0x69, 0x1a, 0x47, 0x80, 0xb2, 0xa5,
3243    0xa0, 0x24, 0xcf, 0x0d, 0x60, 0x95, 0x99, 0x33,
3244    0xad, 0x6a, 0x58, 0x7a, 0x56, 0x53, 0x86, 0x44,
3245    0xa8, 0x3c, 0x1f, 0x92, 0x55, 0x3f, 0x3a, 0x3b,
3246    0x5f, 0x81, 0xaa, 0x0c, 0xc4, 0x4b, 0x1a, 0xe3,
3247    0x61, 0x8a, 0xd0, 0x5d, 0x29, 0x87, 0xb6, 0x7d,
3248    0x1c, 0x85, 0xa5, 0x14, 0xb0, 0xde, 0x1c, 0x8d,
3249    0x5c, 0xc1, 0x5c, 0x04, 0xfc, 0x77, 0xad, 0x03,
3250    0x55, 0x96, 0xe0, 0xa7, 0x43, 0xb5, 0x95, 0x9a,
3251    0xd5, 0x22, 0xef, 0x13, 0x5f, 0x14, 0x9c, 0x0e,
3252    0x7e, 0x56, 0x89, 0x37, 0x33, 0xc9, 0x00, 0x54,
3253    0x7e, 0xea, 0x32, 0x4f, 0x02, 0x85, 0xcd, 0xe5,
3254    0x9c, 0x25, 0x00, 0x3b, 0xad, 0xc2, 0x72, 0x3a,
3255    0x38, 0x66, 0x95, 0xf9, 0xf4, 0x22, 0x1f, 0x50,
3256    0x19, 0x20, 0x6a, 0x31, 0x03, 0xf8, 0x97, 0x91,
3257    0xf0, 0x42, 0xbb, 0xc0, 0x86, 0xde, 0x56, 0x93,
3258    0xf2, 0x78, 0x9b, 0xc9, 0x98, 0x16, 0x47, 0x83,
3259    0x67, 0x55, 0x92, 0x4e, 0x5a, 0xfa, 0x5d, 0x88,
3260    0xf9, 0xc8, 0xef, 0xa8, 0x21, 0x34, 0x58, 0x5f,
3261    0xca, 0xbb, 0x52, 0x98, 0xbc, 0x5c, 0xf5, 0xa7,
3262    0xae, 0xc5, 0xfc, 0x78, 0xf9, 0xa5, 0x30, 0x16,
3263    0x68, 0x9d, 0x62, 0x17, 0x41, 0x7a, 0x95, 0xcf,
3264    0x27, 0xb6, 0x6d, 0xae, 0x58, 0xa7, 0x28, 0x8c,
3265    0x8f, 0xc3, 0x28, 0xac, 0x06, 0x79, 0x9d, 0x94,
3266    0xc4, 0x9d, 0xed, 0xb2, 0x61, 0xf4, 0x44, 0x86,
3267    0xec, 0x12, 0xc3, 0x13, 0x97, 0xa7, 0x8b, 0x9a,
3268    0x63, 0x2e, 0xf1, 0x66, 0x08, 0x84, 0x32, 0xf6,
3269    0x15, 0x3b, 0x91, 0xca, 0xce, 0xf7, 0x40, 0x53,
3270    0xa9, 0x28, 0x11, 0x63, 0xa0, 0x23, 0x2e, 0xc4,
3271    0x44, 0x28, 0x05, 0x01, 0x02, 0x74, 0xcf, 0x9c,
3272    0x3a, 0x1a, 0xbc, 0x93, 0x8a, 0x2c, 0xe8, 0x9a,
3273    0xca, 0xe1, 0x74, 0x62, 0x03, 0x88, 0xc7, 0x12,
3274    0x20, 0x96, 0x3c, 0x4d, 0x10, 0x79, 0x28, 0x6f,
3275    0x7b, 0xa8, 0x1b, 0xfb, 0x5e, 0x57, 0x17, 0xcc,
3276    0x6d, 0xd0, 0x72, 0x8a, 0xb2, 0x70, 0xa3, 0x0a,
3277    0x88, 0x03, 0x5b, 0x88, 0x5d, 0x35, 0x12, 0x8e,
3278    0xac, 0xc1, 0x81, 0xca, 0xb7, 0x2b, 0xb1, 0x96,
3279    0xf6, 0x35, 0xce, 0xbb, 0x75, 0xad, 0x0d, 0xd0,
3280    0xba, 0x4e, 0x43, 0x5b, 0x31, 0x08, 0x93, 0x32,
3281    0x72, 0x63, 0x58, 0xc5, 0xa2, 0x70, 0x95, 0x12,
3282    0x8f, 0xf2, 0xc1, 0x61, 0xeb, 0x22, 0xe9, 0x4a,
3283    0x65, 0xa5, 0x48, 0x5d, 0x4c, 0x11, 0x78, 0x69,
3284    0x0b, 0x1f, 0x39, 0x2b, 0x7f, 0x63, 0x77, 0xad,
3285    0x96, 0x6b, 0x67, 0x80, 0x90, 0x70, 0x57, 0x2b,
3286    0xbc, 0x68, 0x9c, 0xaa, 0xb2, 0xd8, 0x3c, 0xbf,
3287    0xd6, 0x4f, 0xc4, 0x28, 0x65, 0x74, 0x54, 0x84,
3288    0x43, 0x9a, 0x1c, 0x96, 0x50, 0x02, 0x97, 0xc6,
3289    0xcf, 0xb0, 0xb1, 0x1d, 0x98, 0x9a, 0x32, 0x94,
3290    0x73, 0x88, 0x94, 0x78, 0x2d, 0x5f, 0x25, 0x05,
3291    0x5f, 0xa6, 0x96, 0x7a, 0xc8, 0x3a, 0xdf, 0xa8,
3292    0x19, 0xb2, 0x53, 0x53, 0x05, 0xf9, 0x31, 0xdc,
3293    0x58, 0x6c, 0xd1, 0x3a, 0x9b, 0x47, 0x3b, 0x7d,
3294    0x87, 0xe5, 0xb4, 0xb2, 0xd9, 0x96, 0x2a, 0x59,
3295    0x90, 0x3c, 0xcc, 0xad, 0xdc, 0xa2, 0x57, 0x87,
3296    0x71, 0xc6, 0x7e, 0x5a, 0x49, 0x98, 0xc8, 0x94,
3297    0x29, 0x30, 0x7b, 0x0e, 0x01, 0x97, 0x53, 0x18,
3298    0x32, 0x50, 0x73, 0x9e, 0x14, 0x47, 0x97, 0xbd,
3299    0xcc, 0x22, 0xab, 0x02, 0x95, 0xd7, 0xc5, 0x32,
3300    0xdf, 0x17, 0x84, 0x86, 0x77, 0x41, 0x6e, 0x95,
3301    0x4d, 0x66, 0xf9, 0xb0, 0x9e, 0x12, 0x81, 0x53,
3302    0x2a, 0x2e, 0x8f, 0x0c, 0x6a, 0xbe, 0x00, 0x37,
3303    0xe7, 0xe8, 0x11, 0x90, 0x97, 0xc9, 0xec, 0x84,
3304    0x5a, 0xa0, 0x69, 0x85, 0xc0, 0x88, 0x55, 0x2c,
3305    0x41, 0xb6, 0x15, 0x17, 0x36, 0x42, 0xc1, 0x02,
3306    0x51, 0xc0, 0x6e, 0x91, 0xa2, 0x5c, 0x24, 0x3c,
3307    0x02, 0x63, 0xb6, 0x75, 0xc7, 0x20, 0x7d, 0x58,
3308    0x70, 0x1d, 0x13, 0xa5, 0x2e, 0xab, 0x92, 0x56,
3309    0x5e, 0xf1, 0xa1, 0xde, 0xfb, 0xae, 0xfe, 0x4c,
3310    0x0b, 0x03, 0xf5, 0x04, 0x44, 0xa3, 0xbe, 0x20,
3311    0xb1, 0x71, 0x31, 0x0b, 0xa3, 0xf2, 0x08, 0x52,
3312    0xf3, 0xa2, 0xa1, 0x8e, 0x72, 0x29, 0x40, 0x70,
3313    0x15, 0x64, 0x60, 0x52, 0xd2, 0xe7, 0x3a, 0xbe,
3314    0xe3, 0x18, 0xd7, 0x55, 0x89, 0x9c, 0x78, 0x4a,
3315    0x6f, 0xb5, 0xaa, 0xb1, 0x7c, 0x90, 0x2c, 0xb6,
3316    0x8a, 0xfa, 0x36, 0x57, 0xb9, 0x01, 0x2e, 0x1b,
3317    0xb8, 0xb6, 0xaa, 0xc2, 0x68, 0x9a, 0xa4, 0x8c,
3318    0x2d, 0x42, 0x62, 0xbb, 0x29, 0x63, 0xb0, 0x6a,
3319    0x24, 0x22, 0x82, 0x54, 0x1c, 0xf6, 0x14, 0x19,
3320    0xd9, 0x0e, 0x2b, 0xd3, 0x66, 0xbe, 0xe7, 0xa4,
3321    0x36, 0x9b, 0x72, 0x41, 0xa6, 0x6b, 0xf2, 0x64,
3322    0x5d, 0x8e, 0x90, 0x4c, 0x3f, 0x7b, 0x30, 0x0c,
3323    0x04, 0x1d, 0x56, 0x87, 0x39, 0x3d, 0x2c, 0xa9,
3324    0x29, 0x75, 0xcb, 0xfd, 0xc0, 0x18, 0xdd, 0xc6,
3325    0x0a, 0xf5, 0x62, 0x00, 0x9e, 0xb0, 0x88, 0x8e,
3326    0x5a, 0x05, 0x76, 0x24, 0x6a, 0xce, 0x74, 0x5b,
3327    0xb1, 0x63, 0x40, 0x8b, 0x5a, 0x9a, 0xe3, 0xc1,
3328    0x94, 0xa8, 0x5c, 0x21, 0x90, 0x7b, 0x37, 0xb1,
3329    0x62, 0x8e, 0xcd, 0x9a, 0x15, 0xec, 0x20, 0x24,
3330    0x87, 0x30, 0x27, 0x34, 0x44, 0xb0, 0xa2, 0xf4,
3331    0x54, 0xf9, 0xb4, 0x73, 0x0f, 0x33, 0x91, 0x50,
3332    0x47, 0x6e, 0xe0, 0x70, 0x98, 0xf6, 0xbc, 0x1b,
3333    0x97, 0xcc, 0x1b, 0xd3, 0xb8, 0xc1, 0xa2, 0xeb,
3334    0x0e, 0x50, 0xa7, 0x82, 0xf2, 0x11, 0x5d, 0xf6,
3335    0x17, 0x49, 0x6f, 0x6c, 0x6f, 0x8c, 0x09, 0xb0,
3336    0x5f, 0x88, 0x8d, 0x9e, 0x93, 0x3d, 0x28, 0x77,
3337    0x46, 0xc6, 0x31, 0xb3, 0x10, 0x87, 0x26, 0xb0,
3338    0xc4, 0xa7, 0xc8, 0x8b, 0x09, 0xc8, 0x60, 0xac,
3339    0xd7, 0x52, 0x35, 0x70, 0xc8, 0x02, 0xbd, 0x38,
3340    0x72, 0x43, 0x16, 0x2d, 0x12, 0x8c, 0xa2, 0x29,
3341    0x4c, 0x83, 0x43, 0x18, 0xcc, 0x21, 0xfb, 0x14,
3342    0xd2, 0xab, 0x37, 0x3f, 0x22, 0x4e, 0x3f, 0xd4,
3343    0x98, 0x43, 0x85, 0x95, 0x09, 0xf4, 0xca, 0x1a,
3344    0x1a, 0x56, 0x6c, 0x05, 0x67, 0x88, 0xa3, 0xaa,
3345    0x48, 0x4a, 0xaa, 0xbd, 0xf1, 0xa0, 0x8f, 0x1b,
3346    0x44, 0xc7, 0x56, 0xab, 0x2a, 0x0c, 0x8b, 0xc5,
3347    0x85, 0x1e, 0xe2, 0xeb, 0x23, 0x03, 0x4c, 0x2e,
3348    0xaa, 0x5a, 0xc1, 0x5f, 0x89, 0x75, 0x1b, 0xd5,
3349    0xca, 0xe1, 0xd5, 0x90, 0x89, 0xd5, 0x00, 0x2b,
3350    0xb1, 0xb3, 0xbf, 0xca, 0x4a, 0xde, 0x09, 0x82,
3351    0xad, 0x67, 0x83, 0xe9, 0xd3, 0x7f, 0xb3, 0xe3,
3352    0x20, 0xac, 0x98, 0x55, 0xdf, 0x66, 0x6b, 0xfd,
3353    0x7c, 0x6b, 0x87, 0xa9, 0xa4, 0x6e, 0x25, 0x97,
3354    0x12, 0x56, 0x11, 0x61, 0x50, 0x7e, 0x17, 0x35,
3355    0x98, 0xf9, 0x88, 0xac, 0xb6, 0xf9, 0xab, 0x3a,
3356    0x10, 0x92, 0x63, 0x24, 0x46, 0x88, 0xc7, 0x08,
3357    0x78, 0x75, 0x8f, 0xf4, 0xd4, 0x31, 0x3b, 0x76,
3358    0x64, 0xf0, 0xf5, 0x10, 0xe9, 0x13, 0xca, 0x01,
3359    0xc5, 0x2b, 0x3a, 0x1b, 0x46, 0x53, 0x51, 0x44,
3360    0xe2, 0xdb, 0x0c, 0xac, 0xe8, 0xa6, 0x46, 0x66,
3361    0x00, 0xcf, 0x2a, 0x87, 0x83, 0x50, 0x07, 0xe1,
3362    0x6a, 0xa5, 0x07, 0x80, 0x1d, 0x86, 0xb7, 0x38,
3363    0x5e, 0x66, 0x9b, 0xfa, 0xf6, 0xba, 0x1d, 0xf5,
3364    0x68, 0x31, 0x63, 0xc2, 0xd5, 0x70, 0x53, 0x2f,
3365    0xd7, 0x43, 0x90, 0x54, 0x64, 0x0f, 0x24, 0x4c,
3366    0x52, 0x87, 0x13, 0x59, 0xd2, 0x84, 0x2f, 0xc3,
3367    0x37, 0xa0, 0x60, 0x03, 0x3a, 0xf0, 0x5e, 0xaa,
3368    0x00, 0x1c, 0x34, 0xfc, 0x7b, 0xd8, 0xf9, 0x10,
3369    0x29, 0xe4, 0x6c, 0x29, 0x43, 0x36, 0x27, 0x64,
3370    0x5d, 0x67, 0x86, 0x64, 0x21, 0xd6, 0x61, 0xaf,
3371    0x25, 0x74, 0x80, 0x53, 0x2b, 0x88, 0x78, 0x50,
3372    0xdc, 0x49, 0x9f, 0xfe, 0xd5, 0xb1, 0x40, 0x98,
3373    0xa0, 0x33, 0x72, 0x5e, 0x82, 0x0a, 0x5b, 0xe1,
3374    0x40, 0x0a, 0x0c, 0xb7, 0x03, 0x74, 0x1c, 0xa7,
3375    0x4b, 0x47, 0x86, 0x73, 0xaa, 0xcf, 0x85, 0x16,
3376    0x6e, 0xe8, 0xa1, 0x84, 0xdb, 0x2c, 0x58, 0x54,
3377    0x9c, 0x22, 0x40, 0xb8, 0x30, 0x8c, 0x27, 0xbe,
3378    0xba, 0x40, 0xc3, 0xb9, 0xd7, 0x29, 0xed, 0xb1,
3379    0x8c, 0xc2, 0x06, 0x8e, 0xcd, 0xb2, 0x7d, 0xa2,
3380    0x2b, 0x2c, 0xd3, 0xe7, 0xa0, 0xba, 0xa5, 0x30,
3381    0xc5, 0x19, 0x3c, 0xd3, 0xc8, 0x6b, 0xf8, 0x6a,
3382    0x44, 0xf0, 0x79, 0x9e, 0x51, 0x55, 0xb0, 0x9b,
3383    0xe2, 0x50, 0x98, 0x85, 0x23, 0xb3, 0xa7, 0x31,
3384    0xdd, 0x89, 0x1b, 0xc2, 0x00, 0x60, 0x11, 0xa0,
3385    0x65, 0xc0, 0xab, 0x57, 0xf1, 0xa6, 0xc1, 0x78,
3386    0x89, 0x55, 0xe0, 0x13, 0x5f, 0xa5, 0xca, 0x8f,
3387    0x3e, 0x52, 0xc7, 0x5d, 0x37, 0x16, 0x97, 0x3a,
3388    0x2f, 0xb2, 0x2c, 0x0e, 0xb1, 0x7c, 0x1b, 0x32,
3389    0x85, 0x29, 0xd9, 0xfa, 0x76, 0x56, 0xd7, 0x4d,
3390    0xea, 0x74, 0x0d, 0x9f, 0x07, 0x97, 0x77, 0xc3,
3391    0x6c, 0x17, 0xa1, 0x9c, 0x19, 0x58, 0x9e, 0x84,
3392    0xd2, 0xb8, 0xe4, 0xd1, 0xbc, 0x31, 0x07, 0xcb,
3393    0xd2, 0x78, 0x14, 0x22, 0x48, 0x35, 0x48, 0x44,
3394    0x6c, 0x89, 0x93, 0x14, 0x77, 0x44, 0xaa, 0x9e,
3395    0xc1, 0xc5, 0x93, 0xec, 0x2d, 0x5b, 0xaa, 0xc8,
3396    0x6a, 0x0a, 0xf6, 0x4a, 0x85, 0xe9, 0x09, 0xdf,
3397    0x8e, 0x28, 0x16, 0x60, 0x5d, 0x20, 0xb4, 0xe3,
3398    0x82, 0xb3, 0x0b, 0xbb, 0x61, 0xbf, 0x3a, 0x5f,
3399    0x82, 0x1a, 0x0b, 0x5d, 0xba, 0x9a, 0xd3, 0xe7,
3400    0xe5, 0xbd, 0x1b, 0x37, 0xa7, 0x5e, 0x0f, 0x09,
3401    0x29, 0x74, 0xe8, 0x46, 0xe8, 0xc3, 0x7c, 0x45,
3402    0x48, 0x7d, 0x60, 0x73, 0x9f, 0x99, 0x35, 0x17,
3403    0x19, 0xa5, 0x39, 0x47, 0x23, 0x26, 0x2b, 0x3b,
3404    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3405    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3406    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3407    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
3408};
3409
3410static const unsigned char ml_kem_512_secret[] = {
3411    0x4a, 0xd5, 0x3a, 0x06, 0xb2, 0x9f, 0x12, 0x56,
3412    0x84, 0x21, 0xa5, 0x52, 0xc0, 0x81, 0x95, 0xb5,
3413    0x86, 0x73, 0xc8, 0x2f, 0x87, 0x0c, 0xc1, 0xcc,
3414    0xd6, 0x5a, 0x08, 0xe4, 0x32, 0x5f, 0xeb, 0x27
3415};
3416
3417static const unsigned char ml_kem_512_reject_secret[] = {
3418    0x87, 0xf1, 0xe8, 0x13, 0xb7, 0x2e, 0x04, 0x87,
3419    0x47, 0x22, 0x56, 0x6e, 0x12, 0x80, 0xd8, 0x9d,
3420    0x8b, 0x44, 0xb7, 0xfd, 0xff, 0x7d, 0x69, 0x23,
3421    0x36, 0xd7, 0xb8, 0x7f, 0x38, 0xe7, 0x85, 0xce
3422};
3423
3424static const unsigned char ml_kem_512_entropy[ML_KEM_RANDOM_BYTES] = {
3425    0
3426};
3427
3428static const unsigned char ml_kem_512_seed[ML_KEM_SEED_BYTES] = {
3429    0
3430};
3431
3432static const ST_KAT_PARAM ml_kem_keygen_params[] = {
3433    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_ML_KEM_SEED, ml_kem_512_seed),
3434    ST_KAT_PARAM_END()
3435};
3436
3437static const ST_KAT_PARAM ml_kem_key[] = {
3438    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ml_kem_512_private_key),
3439    ST_KAT_PARAM_END()
3440};
3441
3442static const ST_KAT_KEM st_kat_kem_tests[] = {
3443    {
3444        OSSL_SELF_TEST_DESC_KEM,
3445        "ML-KEM-512",
3446        ml_kem_key,
3447        ITM(ml_kem_512_cipher_text),
3448        ITM(ml_kem_512_entropy),
3449        ITM(ml_kem_512_secret),
3450        ml_kem_512_reject_secret    /* No length because same as _secret's */
3451    },
3452};
3453#endif /* OPENSSL_NO_ML_KEM */
3454
3455#if !defined(OPENSSL_NO_ML_KEM) || !defined(OPENSSL_NO_ML_DSA) || !defined(OPENSSL_NO_SLH_DSA)
3456static const ST_KAT_ASYM_KEYGEN st_kat_asym_keygen_tests[] = {
3457# if !defined(OPENSSL_NO_ML_KEM)
3458    /*
3459     * FIPS 140-3 IG 10.3.A resolution 14 mandates a CAST for ML-KEM
3460     * key generation.
3461     */
3462    {
3463        OSSL_SELF_TEST_DESC_KEYGEN_ML_KEM,
3464        "ML-KEM-512",
3465        ml_kem_keygen_params,
3466        ml_kem_key
3467    },
3468# endif
3469# if !defined(OPENSSL_NO_ML_DSA)
3470    {
3471        OSSL_SELF_TEST_DESC_KEYGEN_ML_DSA,
3472        "ML-DSA-65",
3473        ml_dsa_keygen_params,
3474        ml_dsa_key
3475    },
3476# endif
3477# if !defined(OPENSSL_NO_SLH_DSA)
3478    {
3479        OSSL_SELF_TEST_DESC_KEYGEN_SLH_DSA,
3480        "SLH-DSA-SHA2-128f",
3481        slh_dsa_sha2_128f_keygen_init_params,
3482        slh_dsa_128f_keygen_expected_params
3483    },
3484# endif
3485};
3486#endif /* !OPENSSL_NO_ML_DSA || !OPENSSL_NO_SLH_DSA */
3487