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