xref: /freebsd/crypto/openssl/providers/fips/self_test_data.inc (revision 046c625e9382e17da953767b881aaa782fa73af8)
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
1311/*-
1312 * Using OSSL_PKEY_RSA_PAD_MODE_NONE directly in the expansion of the
1313 * ST_KAT_PARAM_UTF8STRING macro below causes a failure on ancient
1314 * HP/UX PA-RISC compilers.
1315 */
1316static const char pad_mode_none[] = OSSL_PKEY_RSA_PAD_MODE_NONE;
1317
1318static const ST_KAT_PARAM rsa_enc_params[] = {
1319    ST_KAT_PARAM_UTF8STRING(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, pad_mode_none),
1320    ST_KAT_PARAM_END()
1321};
1322
1323static const unsigned char rsa_sig_msg[] = "Hello World!";
1324
1325static const unsigned char rsa_expected_sig[256] = {
1326    0xad, 0xbe, 0x2a, 0xaf, 0x16, 0x85, 0xc5, 0x00,
1327    0x91, 0x3e, 0xd0, 0x49, 0xfb, 0x3a, 0x81, 0xb9,
1328    0x6c, 0x28, 0xbc, 0xbf, 0xea, 0x96, 0x5f, 0xe4,
1329    0x9f, 0x99, 0xf7, 0x18, 0x8c, 0xec, 0x60, 0x28,
1330    0xeb, 0x29, 0x02, 0x49, 0xfc, 0xda, 0xd7, 0x78,
1331    0x68, 0xf8, 0xe1, 0xe9, 0x4d, 0x20, 0x6d, 0x32,
1332    0xa6, 0xde, 0xfc, 0xe4, 0xda, 0xcc, 0x6c, 0x75,
1333    0x36, 0x6b, 0xff, 0x5a, 0xac, 0x01, 0xa8, 0xc2,
1334    0xa9, 0xe6, 0x8b, 0x18, 0x3e, 0xec, 0xea, 0x4c,
1335    0x4a, 0x9e, 0x00, 0x09, 0xd1, 0x8a, 0x69, 0x1b,
1336    0x8b, 0xd9, 0xad, 0x37, 0xe5, 0x7c, 0xff, 0x7d,
1337    0x59, 0x56, 0x3e, 0xa0, 0xc6, 0x32, 0xd8, 0x35,
1338    0x2f, 0xff, 0xfb, 0x05, 0x02, 0xcd, 0xd7, 0x19,
1339    0xb9, 0x00, 0x86, 0x2a, 0xcf, 0xaa, 0x78, 0x16,
1340    0x4b, 0xf1, 0xa7, 0x59, 0xef, 0x7d, 0xe8, 0x74,
1341    0x23, 0x5c, 0xb2, 0xd4, 0x8a, 0x99, 0xa5, 0xbc,
1342    0xfa, 0x63, 0xd8, 0xf7, 0xbd, 0xc6, 0x00, 0x13,
1343    0x06, 0x02, 0x9a, 0xd4, 0xa7, 0xb4, 0x3d, 0x61,
1344    0xab, 0xf1, 0xc2, 0x95, 0x59, 0x9b, 0x3d, 0x67,
1345    0x1f, 0xde, 0x57, 0xb6, 0xb6, 0x9f, 0xb0, 0x87,
1346    0xd6, 0x51, 0xd5, 0x3e, 0x00, 0xe2, 0xc9, 0xa0,
1347    0x03, 0x66, 0xbc, 0x01, 0xb3, 0x8e, 0xfa, 0xf1,
1348    0x15, 0xeb, 0x26, 0xf1, 0x5d, 0x81, 0x90, 0xb4,
1349    0x1c, 0x00, 0x7c, 0x83, 0x4a, 0xa5, 0xde, 0x64,
1350    0xae, 0xea, 0x6c, 0x43, 0xc3, 0x20, 0x77, 0x77,
1351    0x42, 0x12, 0x24, 0xf5, 0xe3, 0x70, 0xdd, 0x59,
1352    0x48, 0x9c, 0xef, 0xd4, 0x8a, 0x3c, 0x29, 0x6a,
1353    0x0c, 0x9c, 0xf2, 0x13, 0xa4, 0x1c, 0x2f, 0x49,
1354    0xcd, 0xb4, 0xaa, 0x28, 0x40, 0x34, 0xc6, 0x75,
1355    0xba, 0x30, 0xe6, 0xd8, 0x5b, 0x2f, 0x08, 0xd0,
1356    0x29, 0xa5, 0x39, 0xfb, 0x6e, 0x3b, 0x0f, 0x52,
1357    0x2c, 0x68, 0xf0, 0x37, 0xa9, 0xd2, 0x56, 0xd6
1358};
1359
1360static const unsigned char rsa_asym_plaintext_encrypt[256] = {
1361   0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1362   0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1363};
1364static const unsigned char rsa_asym_expected_encrypt[256] = {
1365    0x54, 0xac, 0x23, 0x96, 0x1d, 0x82, 0x5d, 0x8b,
1366    0x8f, 0x36, 0x33, 0xd0, 0xf4, 0x02, 0xa2, 0x61,
1367    0xb1, 0x13, 0xd4, 0x4a, 0x46, 0x06, 0x37, 0x3c,
1368    0xbf, 0x40, 0x05, 0x3c, 0xc6, 0x3b, 0x64, 0xdc,
1369    0x22, 0x22, 0xaf, 0x36, 0x79, 0x62, 0x45, 0xf0,
1370    0x97, 0x82, 0x22, 0x44, 0x86, 0x4a, 0x7c, 0xfa,
1371    0xac, 0x03, 0x21, 0x84, 0x3f, 0x31, 0xad, 0x2a,
1372    0xa4, 0x6e, 0x7a, 0xc5, 0x93, 0xf3, 0x0f, 0xfc,
1373    0xf1, 0x62, 0xce, 0x82, 0x12, 0x45, 0xc9, 0x35,
1374    0xb0, 0x7a, 0xcd, 0x99, 0x8c, 0x91, 0x6b, 0x5a,
1375    0xd3, 0x46, 0xdb, 0xf9, 0x9e, 0x52, 0x49, 0xbd,
1376    0x1e, 0xe8, 0xda, 0xac, 0x61, 0x47, 0xc2, 0xda,
1377    0xfc, 0x1e, 0xfb, 0x74, 0xd7, 0xd6, 0xc1, 0x18,
1378    0x86, 0x3e, 0x20, 0x9c, 0x7a, 0xe1, 0x04, 0xb7,
1379    0x38, 0x43, 0xb1, 0x4e, 0xa0, 0xd8, 0xc1, 0x39,
1380    0x4d, 0xe1, 0xd3, 0xb0, 0xb3, 0xf1, 0x82, 0x87,
1381    0x1f, 0x74, 0xb5, 0x69, 0xfd, 0x33, 0xd6, 0x21,
1382    0x7c, 0x61, 0x60, 0x28, 0xca, 0x70, 0xdb, 0xa0,
1383    0xbb, 0xc8, 0x73, 0xa9, 0x82, 0xf8, 0x6b, 0xd8,
1384    0xf0, 0xc9, 0x7b, 0x20, 0xdf, 0x9d, 0xfb, 0x8c,
1385    0xd4, 0xa2, 0x89, 0xe1, 0x9b, 0x04, 0xad, 0xaa,
1386    0x11, 0x6c, 0x8f, 0xce, 0x83, 0x29, 0x56, 0x69,
1387    0xbb, 0x00, 0x3b, 0xef, 0xca, 0x2d, 0xcd, 0x52,
1388    0xc8, 0xf1, 0xb3, 0x9b, 0xb4, 0x4f, 0x6d, 0x9c,
1389    0x3d, 0x69, 0xcc, 0x6d, 0x1f, 0x38, 0x4d, 0xe6,
1390    0xbb, 0x0c, 0x87, 0xdc, 0x5f, 0xa9, 0x24, 0x93,
1391    0x03, 0x46, 0xa2, 0x33, 0x6c, 0xf4, 0xd8, 0x5d,
1392    0x68, 0xf3, 0xd3, 0xe0, 0xf2, 0x30, 0xdb, 0xf5,
1393    0x4f, 0x0f, 0xad, 0xc7, 0xd0, 0xaa, 0x47, 0xd9,
1394    0x9f, 0x85, 0x1b, 0x2e, 0x6c, 0x3c, 0x57, 0x04,
1395    0x29, 0xf4, 0xf5, 0x66, 0x7d, 0x93, 0x4a, 0xaa,
1396    0x05, 0x52, 0x55, 0xc1, 0xc6, 0x06, 0x90, 0xab,
1397};
1398
1399#ifndef OPENSSL_NO_EC
1400/* ECDSA key data */
1401static const char ecd_prime_curve_name[] = "secp224r1";
1402static const unsigned char ecd_prime_priv[] = {
1403    0x98, 0x1f, 0xb5, 0xf1, 0xfc, 0x87, 0x1d, 0x7d,
1404    0xde, 0x1e, 0x01, 0x64, 0x09, 0x9b, 0xe7, 0x1b,
1405    0x9f, 0xad, 0x63, 0xdd, 0x33, 0x01, 0xd1, 0x50,
1406    0x80, 0x93, 0x50, 0x30
1407};
1408static const unsigned char ecd_prime_pub[] = {
1409    0x04, 0x95, 0x47, 0x99, 0x44, 0x29, 0x8f, 0x51,
1410    0x39, 0xe2, 0x53, 0xec, 0x79, 0xb0, 0x4d, 0xde,
1411    0x87, 0x1a, 0x76, 0x54, 0xd5, 0x96, 0xb8, 0x7a,
1412    0x6d, 0xf4, 0x1c, 0x2c, 0x87, 0x91, 0x5f, 0xd5,
1413    0x31, 0xdd, 0x24, 0xe5, 0x78, 0xd9, 0x08, 0x24,
1414    0x8a, 0x49, 0x99, 0xec, 0x55, 0xf2, 0x82, 0xb3,
1415    0xc4, 0xb7, 0x33, 0x68, 0xe4, 0x24, 0xa9, 0x12,
1416    0x82
1417};
1418static const unsigned char ecdsa_prime_expected_sig[] = {
1419    0x30, 0x3d, 0x02, 0x1c, 0x48, 0x4f, 0x3c, 0x97,
1420    0x5b, 0xfa, 0x40, 0x6c, 0xdb, 0xd6, 0x70, 0xb5,
1421    0xbd, 0x2d, 0xd0, 0xc6, 0x22, 0x93, 0x5a, 0x88,
1422    0x56, 0xd0, 0xaf, 0x0a, 0x94, 0x92, 0x20, 0x01,
1423    0x02, 0x1d, 0x00, 0xa4, 0x80, 0xe0, 0x47, 0x88,
1424    0x8a, 0xef, 0x2a, 0x47, 0x9d, 0x81, 0x9a, 0xbf,
1425    0x45, 0xc3, 0x6f, 0x9e, 0x2e, 0xc1, 0x44, 0x9f,
1426    0xfd, 0x79, 0xdb, 0x90, 0x3e, 0xb9, 0xb2
1427};
1428static const ST_KAT_PARAM ecdsa_prime_key[] = {
1429    ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, ecd_prime_curve_name),
1430    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecd_prime_pub),
1431    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, ecd_prime_priv),
1432    ST_KAT_PARAM_END()
1433};
1434
1435# ifndef OPENSSL_NO_EC2M
1436static const char ecd_bin_curve_name[] = "sect233r1";
1437static const unsigned char ecd_bin_priv[] = {
1438    0x00, 0x6d, 0xd6, 0x39, 0x9d, 0x2a, 0xa2, 0xc8,
1439    0x8c, 0xfc, 0x7b, 0x80, 0x66, 0xaa, 0xe1, 0xaa,
1440    0xba, 0xee, 0xcb, 0xfd, 0xc9, 0xe5, 0x36, 0x38,
1441    0x2e, 0xf7, 0x37, 0x6d, 0xd3, 0x20
1442};
1443static const unsigned char ecd_bin_pub[] = {
1444    0x04, 0x00, 0x06, 0xe2, 0x56, 0xf7, 0x37, 0xf9,
1445    0xea, 0xb6, 0xd1, 0x0f, 0x59, 0xfa, 0x23, 0xc3,
1446    0x93, 0xa8, 0xb2, 0x26, 0xe2, 0x5c, 0x08, 0xbe,
1447    0x63, 0x49, 0x26, 0xdc, 0xc7, 0x1e, 0x6f, 0x01,
1448    0x32, 0x3b, 0xe6, 0x54, 0x8d, 0xc1, 0x13, 0x3e,
1449    0x54, 0xb2, 0x66, 0x89, 0xb2, 0x82, 0x0a, 0x72,
1450    0x02, 0xa8, 0xe9, 0x6f, 0x54, 0xfd, 0x3a, 0x6b,
1451    0x99, 0xb6, 0x8f, 0x80, 0x46
1452};
1453static const unsigned char ecdsa_bin_expected_sig[] = {
1454    0x30, 0x3f, 0x02, 0x1d, 0x58, 0xe9, 0xd0, 0x84,
1455    0x5c, 0xad, 0x29, 0x03, 0xf6, 0xa6, 0xbc, 0xe0,
1456    0x24, 0x6d, 0x9e, 0x79, 0x5d, 0x1e, 0xe8, 0x5a,
1457    0xc3, 0x31, 0x0a, 0xa9, 0xfb, 0xe3, 0x99, 0x54,
1458    0x11, 0x02, 0x1e, 0x00, 0xa3, 0x44, 0x28, 0xa3,
1459    0x70, 0x97, 0x98, 0x17, 0xd7, 0xa6, 0xad, 0x91,
1460    0xaf, 0x41, 0x69, 0xb6, 0x06, 0x99, 0x39, 0xc7,
1461    0x63, 0xa4, 0x6a, 0x81, 0xe4, 0x9a, 0x9d, 0x15,
1462    0x8b
1463};
1464static const ST_KAT_PARAM ecdsa_bin_key[] = {
1465    ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, ecd_bin_curve_name),
1466    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecd_bin_pub),
1467    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, ecd_bin_priv),
1468    ST_KAT_PARAM_END()
1469};
1470# endif /* OPENSSL_NO_EC2M */
1471
1472# ifndef OPENSSL_NO_ECX
1473static const unsigned char ecx_sig_msg[] = {
1474    0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66,
1475    0x81, 0x1e, 0x29, 0x15
1476};
1477static const unsigned char ed25519_pub[] = {
1478    0xfc, 0x51, 0xcd, 0x8e, 0x62, 0x18, 0xa1, 0xa3,
1479    0x8d, 0xa4, 0x7e, 0xd0, 0x02, 0x30, 0xf0, 0x58,
1480    0x08, 0x16, 0xed, 0x13, 0xba, 0x33, 0x03, 0xac,
1481    0x5d, 0xeb, 0x91, 0x15, 0x48, 0x90, 0x80, 0x25
1482};
1483static const unsigned char ed25519_priv[] = {
1484    0xc5, 0xaa, 0x8d, 0xf4, 0x3f, 0x9f, 0x83, 0x7b,
1485    0xed, 0xb7, 0x44, 0x2f, 0x31, 0xdc, 0xb7, 0xb1,
1486    0x66, 0xd3, 0x85, 0x35, 0x07, 0x6f, 0x09, 0x4b,
1487    0x85, 0xce, 0x3a, 0x2e, 0x0b, 0x44, 0x58, 0xf7
1488};
1489static const ST_KAT_PARAM ed25519_key[] = {
1490    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ed25519_pub),
1491    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ed25519_priv),
1492    ST_KAT_PARAM_END()
1493};
1494static const unsigned char ed25519_expected_sig[] = {
1495    0x1e, 0xf4, 0xc5, 0x61, 0xdc, 0x97, 0x9f, 0xaf,
1496    0x55, 0x6b, 0x46, 0xa1, 0xae, 0xb0, 0x64, 0x13,
1497    0x1c, 0x98, 0x09, 0x96, 0x88, 0xe0, 0x9d, 0x0e,
1498    0x4e, 0x7d, 0xc4, 0xa5, 0xa1, 0x91, 0x09, 0xca,
1499    0xd9, 0x5b, 0x4f, 0x1c, 0x80, 0x82, 0x9f, 0x65,
1500    0xc1, 0x41, 0xa4, 0xe8, 0x02, 0x05, 0x0c, 0xa6,
1501    0x7e, 0xa0, 0xfa, 0x01, 0xee, 0xeb, 0xaa, 0x91,
1502    0x62, 0xfd, 0x0f, 0x25, 0xa0, 0x2d, 0x37, 0x09
1503};
1504
1505static const unsigned char ed448_pub[] = {
1506    0x3b, 0xa1, 0x6d, 0xa0, 0xc6, 0xf2, 0xcc, 0x1f,
1507    0x30, 0x18, 0x77, 0x40, 0x75, 0x6f, 0x5e, 0x79,
1508    0x8d, 0x6b, 0xc5, 0xfc, 0x01, 0x5d, 0x7c, 0x63,
1509    0xcc, 0x95, 0x10, 0xee, 0x3f, 0xd4, 0x4a, 0xdc,
1510    0x24, 0xd8, 0xe9, 0x68, 0xb6, 0xe4, 0x6e, 0x6f,
1511    0x94, 0xd1, 0x9b, 0x94, 0x53, 0x61, 0x72, 0x6b,
1512    0xd7, 0x5e, 0x14, 0x9e, 0xf0, 0x98, 0x17, 0xf5,
1513    0x80
1514};
1515static const unsigned char ed448_priv[] = {
1516   0x25, 0x8c, 0xdd, 0x4a, 0xda, 0x32, 0xed, 0x9c,
1517   0x9f, 0xf5, 0x4e, 0x63, 0x75, 0x6a, 0xe5, 0x82,
1518   0xfb, 0x8f, 0xab, 0x2a, 0xc7, 0x21, 0xf2, 0xc8,
1519   0xe6, 0x76, 0xa7, 0x27, 0x68, 0x51, 0x3d, 0x93,
1520   0x9f, 0x63, 0xdd, 0xdb, 0x55, 0x60, 0x91, 0x33,
1521   0xf2, 0x9a, 0xdf, 0x86, 0xec, 0x99, 0x29, 0xdc,
1522   0xcb, 0x52, 0xc1, 0xc5, 0xfd, 0x2f, 0xf7, 0xe2,
1523   0x1b
1524};
1525static const ST_KAT_PARAM ed448_key[] = {
1526    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ed448_pub),
1527    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ed448_priv),
1528    ST_KAT_PARAM_END()
1529};
1530static const unsigned char ed448_expected_sig[] = {
1531   0x7e, 0xee, 0xab, 0x7c, 0x4e, 0x50, 0xfb, 0x79,
1532   0x9b, 0x41, 0x8e, 0xe5, 0xe3, 0x19, 0x7f, 0xf6,
1533   0xbf, 0x15, 0xd4, 0x3a, 0x14, 0xc3, 0x43, 0x89,
1534   0xb5, 0x9d, 0xd1, 0xa7, 0xb1, 0xb8, 0x5b, 0x4a,
1535   0xe9, 0x04, 0x38, 0xac, 0xa6, 0x34, 0xbe, 0xa4,
1536   0x5e, 0x3a, 0x26, 0x95, 0xf1, 0x27, 0x0f, 0x07,
1537   0xfd, 0xcd, 0xf7, 0xc6, 0x2b, 0x8e, 0xfe, 0xaf,
1538   0x00, 0xb4, 0x5c, 0x2c, 0x96, 0xba, 0x45, 0x7e,
1539   0xb1, 0xa8, 0xbf, 0x07, 0x5a, 0x3d, 0xb2, 0x8e,
1540   0x5c, 0x24, 0xf6, 0xb9, 0x23, 0xed, 0x4a, 0xd7,
1541   0x47, 0xc3, 0xc9, 0xe0, 0x3c, 0x70, 0x79, 0xef,
1542   0xb8, 0x7c, 0xb1, 0x10, 0xd3, 0xa9, 0x98, 0x61,
1543   0xe7, 0x20, 0x03, 0xcb, 0xae, 0x6d, 0x6b, 0x8b,
1544   0x82, 0x7e, 0x4e, 0x6c, 0x14, 0x30, 0x64, 0xff,
1545   0x3c, 0x00
1546};
1547# endif /* OPENSSL_NO_ECX */
1548#endif /* OPENSSL_NO_EC */
1549
1550#ifndef OPENSSL_NO_DSA
1551/* dsa 2048 */
1552static const unsigned char dsa_p[] = {
1553    0xa2, 0x9b, 0x88, 0x72, 0xce, 0x8b, 0x84, 0x23,
1554    0xb7, 0xd5, 0xd2, 0x1d, 0x4b, 0x02, 0xf5, 0x7e,
1555    0x03, 0xe9, 0xe6, 0xb8, 0xa2, 0x58, 0xdc, 0x16,
1556    0x61, 0x1b, 0xa0, 0x98, 0xab, 0x54, 0x34, 0x15,
1557    0xe4, 0x15, 0xf1, 0x56, 0x99, 0x7a, 0x3e, 0xe2,
1558    0x36, 0x65, 0x8f, 0xa0, 0x93, 0x26, 0x0d, 0xe3,
1559    0xad, 0x42, 0x2e, 0x05, 0xe0, 0x46, 0xf9, 0xec,
1560    0x29, 0x16, 0x1a, 0x37, 0x5f, 0x0e, 0xb4, 0xef,
1561    0xfc, 0xef, 0x58, 0x28, 0x5c, 0x5d, 0x39, 0xed,
1562    0x42, 0x5d, 0x7a, 0x62, 0xca, 0x12, 0x89, 0x6c,
1563    0x4a, 0x92, 0xcb, 0x19, 0x46, 0xf2, 0x95, 0x2a,
1564    0x48, 0x13, 0x3f, 0x07, 0xda, 0x36, 0x4d, 0x1b,
1565    0xdf, 0x6b, 0x0f, 0x71, 0x39, 0x98, 0x3e, 0x69,
1566    0x3c, 0x80, 0x05, 0x9b, 0x0e, 0xac, 0xd1, 0x47,
1567    0x9b, 0xa9, 0xf2, 0x85, 0x77, 0x54, 0xed, 0xe7,
1568    0x5f, 0x11, 0x2b, 0x07, 0xeb, 0xbf, 0x35, 0x34,
1569    0x8b, 0xbf, 0x3e, 0x01, 0xe0, 0x2f, 0x2d, 0x47,
1570    0x3d, 0xe3, 0x94, 0x53, 0xf9, 0x9d, 0xd2, 0x36,
1571    0x75, 0x41, 0xca, 0xca, 0x3b, 0xa0, 0x11, 0x66,
1572    0x34, 0x3d, 0x7b, 0x5b, 0x58, 0xa3, 0x7b, 0xd1,
1573    0xb7, 0x52, 0x1d, 0xb2, 0xf1, 0x3b, 0x86, 0x70,
1574    0x71, 0x32, 0xfe, 0x09, 0xf4, 0xcd, 0x09, 0xdc,
1575    0x16, 0x18, 0xfa, 0x34, 0x01, 0xeb, 0xf9, 0xcc,
1576    0x7b, 0x19, 0xfa, 0x94, 0xaa, 0x47, 0x20, 0x88,
1577    0x13, 0x3d, 0x6c, 0xb2, 0xd3, 0x5c, 0x11, 0x79,
1578    0xc8, 0xc8, 0xff, 0x36, 0x87, 0x58, 0xd5, 0x07,
1579    0xd9, 0xf9, 0xa1, 0x7d, 0x46, 0xc1, 0x10, 0xfe,
1580    0x31, 0x44, 0xce, 0x9b, 0x02, 0x2b, 0x42, 0xe4,
1581    0x19, 0xeb, 0x4f, 0x53, 0x88, 0x61, 0x3b, 0xfc,
1582    0x3e, 0x26, 0x24, 0x1a, 0x43, 0x2e, 0x87, 0x06,
1583    0xbc, 0x58, 0xef, 0x76, 0x11, 0x72, 0x78, 0xde,
1584    0xab, 0x6c, 0xf6, 0x92, 0x61, 0x82, 0x91, 0xb7
1585};
1586static const unsigned char dsa_q[] = {
1587    0xa3, 0xbf, 0xd9, 0xab, 0x78, 0x84, 0x79, 0x4e,
1588    0x38, 0x34, 0x50, 0xd5, 0x89, 0x1d, 0xc1, 0x8b,
1589    0x65, 0x15, 0x7b, 0xdc, 0xfc, 0xda, 0xc5, 0x15,
1590    0x18, 0x90, 0x28, 0x67
1591};
1592static const unsigned char dsa_g[] = {
1593    0x68, 0x19, 0x27, 0x88, 0x69, 0xc7, 0xfd, 0x3d,
1594    0x2d, 0x7b, 0x77, 0xf7, 0x7e, 0x81, 0x50, 0xd9,
1595    0xad, 0x43, 0x3b, 0xea, 0x3b, 0xa8, 0x5e, 0xfc,
1596    0x80, 0x41, 0x5a, 0xa3, 0x54, 0x5f, 0x78, 0xf7,
1597    0x22, 0x96, 0xf0, 0x6c, 0xb1, 0x9c, 0xed, 0xa0,
1598    0x6c, 0x94, 0xb0, 0x55, 0x1c, 0xfe, 0x6e, 0x6f,
1599    0x86, 0x3e, 0x31, 0xd1, 0xde, 0x6e, 0xed, 0x7d,
1600    0xab, 0x8b, 0x0c, 0x9d, 0xf2, 0x31, 0xe0, 0x84,
1601    0x34, 0xd1, 0x18, 0x4f, 0x91, 0xd0, 0x33, 0x69,
1602    0x6b, 0xb3, 0x82, 0xf8, 0x45, 0x5e, 0x98, 0x88,
1603    0xf5, 0xd3, 0x1d, 0x47, 0x84, 0xec, 0x40, 0x12,
1604    0x02, 0x46, 0xf4, 0xbe, 0xa6, 0x17, 0x94, 0xbb,
1605    0xa5, 0x86, 0x6f, 0x09, 0x74, 0x64, 0x63, 0xbd,
1606    0xf8, 0xe9, 0xe1, 0x08, 0xcd, 0x95, 0x29, 0xc3,
1607    0xd0, 0xf6, 0xdf, 0x80, 0x31, 0x6e, 0x2e, 0x70,
1608    0xaa, 0xeb, 0x1b, 0x26, 0xcd, 0xb8, 0xad, 0x97,
1609    0xbc, 0x3d, 0x28, 0x7e, 0x0b, 0x8d, 0x61, 0x6c,
1610    0x42, 0xe6, 0x5b, 0x87, 0xdb, 0x20, 0xde, 0xb7,
1611    0x00, 0x5b, 0xc4, 0x16, 0x74, 0x7a, 0x64, 0x70,
1612    0x14, 0x7a, 0x68, 0xa7, 0x82, 0x03, 0x88, 0xeb,
1613    0xf4, 0x4d, 0x52, 0xe0, 0x62, 0x8a, 0xf9, 0xcf,
1614    0x1b, 0x71, 0x66, 0xd0, 0x34, 0x65, 0xf3, 0x5a,
1615    0xcc, 0x31, 0xb6, 0x11, 0x0c, 0x43, 0xda, 0xbc,
1616    0x7c, 0x5d, 0x59, 0x1e, 0x67, 0x1e, 0xaf, 0x7c,
1617    0x25, 0x2c, 0x1c, 0x14, 0x53, 0x36, 0xa1, 0xa4,
1618    0xdd, 0xf1, 0x32, 0x44, 0xd5, 0x5e, 0x83, 0x56,
1619    0x80, 0xca, 0xb2, 0x53, 0x3b, 0x82, 0xdf, 0x2e,
1620    0xfe, 0x55, 0xec, 0x18, 0xc1, 0xe6, 0xcd, 0x00,
1621    0x7b, 0xb0, 0x89, 0x75, 0x8b, 0xb1, 0x7c, 0x2c,
1622    0xbe, 0x14, 0x44, 0x1b, 0xd0, 0x93, 0xae, 0x66,
1623    0xe5, 0x97, 0x6d, 0x53, 0x73, 0x3f, 0x4f, 0xa3,
1624    0x26, 0x97, 0x01, 0xd3, 0x1d, 0x23, 0xd4, 0x67
1625};
1626static const unsigned char dsa_pub[] = {
1627    0xa0, 0x12, 0xb3, 0xb1, 0x70, 0xb3, 0x07, 0x22,
1628    0x79, 0x57, 0xb7, 0xca, 0x20, 0x61, 0xa8, 0x16,
1629    0xac, 0x7a, 0x2b, 0x3d, 0x9a, 0xe9, 0x95, 0xa5,
1630    0x11, 0x9c, 0x38, 0x5b, 0x60, 0x3b, 0xf6, 0xf6,
1631    0xc5, 0xde, 0x4d, 0xc5, 0xec, 0xb5, 0xdf, 0xa4,
1632    0xa4, 0x1c, 0x68, 0x66, 0x2e, 0xb2, 0x5b, 0x63,
1633    0x8b, 0x7e, 0x26, 0x20, 0xba, 0x89, 0x8d, 0x07,
1634    0xda, 0x6c, 0x49, 0x91, 0xe7, 0x6c, 0xc0, 0xec,
1635    0xd1, 0xad, 0x34, 0x21, 0x07, 0x70, 0x67, 0xe4,
1636    0x7c, 0x18, 0xf5, 0x8a, 0x92, 0xa7, 0x2a, 0xd4,
1637    0x31, 0x99, 0xec, 0xb7, 0xbd, 0x84, 0xe7, 0xd3,
1638    0xaf, 0xb9, 0x01, 0x9f, 0x0e, 0x9d, 0xd0, 0xfb,
1639    0xaa, 0x48, 0x73, 0x00, 0xb1, 0x30, 0x81, 0xe3,
1640    0x3c, 0x90, 0x28, 0x76, 0x43, 0x6f, 0x7b, 0x03,
1641    0xc3, 0x45, 0x52, 0x84, 0x81, 0xd3, 0x62, 0x81,
1642    0x5e, 0x24, 0xfe, 0x59, 0xda, 0xc5, 0xac, 0x34,
1643    0x66, 0x0d, 0x4c, 0x8a, 0x76, 0xcb, 0x99, 0xa7,
1644    0xc7, 0xde, 0x93, 0xeb, 0x95, 0x6c, 0xd6, 0xbc,
1645    0x88, 0xe5, 0x8d, 0x90, 0x10, 0x34, 0x94, 0x4a,
1646    0x09, 0x4b, 0x01, 0x80, 0x3a, 0x43, 0xc6, 0x72,
1647    0xb9, 0x68, 0x8c, 0x0e, 0x01, 0xd8, 0xf4, 0xfc,
1648    0x91, 0xc6, 0x2a, 0x3f, 0x88, 0x02, 0x1f, 0x7b,
1649    0xd6, 0xa6, 0x51, 0xb1, 0xa8, 0x8f, 0x43, 0xaa,
1650    0x4e, 0xf2, 0x76, 0x53, 0xd1, 0x2b, 0xf8, 0xb7,
1651    0x09, 0x9f, 0xdf, 0x6b, 0x46, 0x10, 0x82, 0xf8,
1652    0xe9, 0x39, 0x10, 0x7b, 0xfd, 0x2f, 0x72, 0x10,
1653    0x08, 0x7d, 0x32, 0x6c, 0x37, 0x52, 0x00, 0xf1,
1654    0xf5, 0x1e, 0x7e, 0x74, 0xa3, 0x41, 0x31, 0x90,
1655    0x1b, 0xcd, 0x08, 0x63, 0x52, 0x1f, 0xf8, 0xd6,
1656    0x76, 0xc4, 0x85, 0x81, 0x86, 0x87, 0x36, 0xc5,
1657    0xe5, 0x1b, 0x16, 0xa4, 0xe3, 0x92, 0x15, 0xea,
1658    0x0b, 0x17, 0xc4, 0x73, 0x59, 0x74, 0xc5, 0x16
1659};
1660static const unsigned char dsa_expected_sig[] = {
1661    0x30, 0x3c, 0x02, 0x1c, 0x69, 0xc6, 0xd6, 0x9e,
1662    0x2b, 0x91, 0xea, 0x72, 0xb3, 0x8b, 0x7c, 0x57,
1663    0x48, 0x75, 0xb7, 0x65, 0xc0, 0xb4, 0xf7, 0xbb,
1664    0x08, 0xa4, 0x95, 0x77, 0xfc, 0xa7, 0xed, 0x31,
1665    0x02, 0x1c, 0x4c, 0x2c, 0xff, 0xc6, 0x55, 0xeb,
1666    0x8f, 0xa7, 0x4f, 0x27, 0xd8, 0xec, 0xfd, 0x62,
1667    0x73, 0xf2, 0xd1, 0x55, 0xa5, 0xf0, 0x41, 0x68,
1668    0x34, 0x8d, 0x9e, 0x88, 0x08, 0x06
1669};
1670
1671static const ST_KAT_PARAM dsa_key[] = {
1672    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_P, dsa_p),
1673    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_Q, dsa_q),
1674    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_G, dsa_g),
1675    ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PUB_KEY, dsa_pub),
1676    ST_KAT_PARAM_END()
1677};
1678#endif /* OPENSSL_NO_DSA */
1679
1680#ifndef OPENSSL_NO_ML_DSA
1681static const unsigned char ml_dsa_65_pub_key[] = {
1682    0x3b, 0x5c, 0xb0, 0x79, 0xd2, 0xce, 0x76, 0x2b,
1683    0x3b, 0x95, 0x7c, 0x26, 0x69, 0x8f, 0xe7, 0x01,
1684    0xb9, 0x6b, 0x50, 0xa3, 0x2c, 0x73, 0x67, 0xcf,
1685    0x9e, 0xf4, 0xb8, 0x7d, 0xe3, 0xaf, 0x27, 0x77,
1686    0xc6, 0x7c, 0x34, 0xb7, 0x30, 0x4d, 0x01, 0xa4,
1687    0xaa, 0xce, 0x16, 0x7c, 0x13, 0x2b, 0x30, 0x6c,
1688    0x88, 0x31, 0xe4, 0x90, 0xf5, 0xc2, 0x80, 0xf5,
1689    0xe8, 0xb9, 0x2d, 0x7a, 0x83, 0x17, 0xfc, 0xbb,
1690    0x13, 0x6f, 0x18, 0x75, 0x5b, 0x40, 0x39, 0x2d,
1691    0x47, 0x56, 0x15, 0xc7, 0x1c, 0x6e, 0x9a, 0x95,
1692    0x7b, 0x6b, 0x77, 0x9f, 0x86, 0x38, 0x0e, 0xee,
1693    0xc0, 0x82, 0x6c, 0x3c, 0xae, 0xc0, 0xcf, 0x5a,
1694    0x85, 0x49, 0xb1, 0x0c, 0x2d, 0x0e, 0x51, 0x73,
1695    0xf0, 0xe7, 0xad, 0x3b, 0xa7, 0x3f, 0xf5, 0x75,
1696    0xb9, 0xb4, 0x63, 0xb9, 0xf0, 0x0a, 0xf4, 0x29,
1697    0x90, 0x20, 0x72, 0x46, 0x8c, 0x7a, 0xaa, 0x86,
1698    0xb7, 0x4e, 0xa7, 0x65, 0x23, 0xef, 0xec, 0x46,
1699    0x67, 0x02, 0xf1, 0xbb, 0x88, 0xc7, 0xa4, 0xfc,
1700    0x66, 0x52, 0x07, 0x67, 0x68, 0xa2, 0x72, 0xe8,
1701    0x8a, 0x53, 0x97, 0xe6, 0x89, 0x96, 0x95, 0x9e,
1702    0x6a, 0xe9, 0xa4, 0x7d, 0x19, 0x19, 0x5f, 0xb4,
1703    0x77, 0x52, 0x17, 0xd6, 0xf2, 0xea, 0x7f, 0xfc,
1704    0x5c, 0xd5, 0x18, 0x16, 0x8c, 0xc2, 0x2e, 0x31,
1705    0xf8, 0x98, 0x4b, 0x72, 0xa1, 0x80, 0xb6, 0x5c,
1706    0x32, 0x19, 0x2f, 0xe0, 0xae, 0x74, 0xf4, 0xc4,
1707    0x0a, 0xe0, 0x54, 0x52, 0x46, 0x9e, 0xf3, 0xb9,
1708    0x6c, 0x56, 0xd1, 0xe8, 0x99, 0x29, 0x39, 0x95,
1709    0x30, 0xa2, 0x6a, 0xc6, 0x32, 0x8a, 0xa6, 0x02,
1710    0x6a, 0x39, 0x2e, 0x13, 0x20, 0xbc, 0xf8, 0x7a,
1711    0x09, 0xb6, 0xa7, 0xd1, 0x39, 0xa5, 0x12, 0x02,
1712    0x81, 0x47, 0x8c, 0xc0, 0x1e, 0xfd, 0xf3, 0x28,
1713    0xe5, 0x34, 0xec, 0xf0, 0xfc, 0x3f, 0x22, 0x16,
1714    0xd2, 0xfe, 0xf0, 0xca, 0xaa, 0x6f, 0x82, 0xdd,
1715    0xd6, 0x83, 0xaf, 0xf9, 0xeb, 0x1d, 0xa8, 0x45,
1716    0x39, 0x63, 0xa5, 0xde, 0xee, 0x7d, 0x91, 0xe3,
1717    0xaa, 0xcc, 0x07, 0x92, 0xce, 0x50, 0xfd, 0xe4,
1718    0xa8, 0x50, 0x91, 0xd5, 0xec, 0xc1, 0x1b, 0x57,
1719    0x92, 0x37, 0x68, 0xf8, 0xd6, 0x32, 0x55, 0xba,
1720    0x65, 0xae, 0xb6, 0xc3, 0x9f, 0x6c, 0x18, 0xc5,
1721    0x12, 0x17, 0x9a, 0x04, 0x29, 0xab, 0x14, 0x94,
1722    0xbb, 0x13, 0x79, 0x5e, 0xb9, 0xf0, 0x62, 0x03,
1723    0xe0, 0xa4, 0x91, 0xba, 0x81, 0x4b, 0xaa, 0xf1,
1724    0x82, 0x47, 0x83, 0x43, 0x5f, 0x1e, 0x2d, 0x48,
1725    0x40, 0x56, 0xe4, 0x29, 0x79, 0x01, 0xd5, 0x89,
1726    0xaf, 0xa4, 0x56, 0x9e, 0x38, 0x62, 0x03, 0xa0,
1727    0xe7, 0x9f, 0x08, 0x1f, 0xca, 0xd4, 0x31, 0x48,
1728    0xf6, 0x68, 0xe0, 0xcc, 0x28, 0xff, 0x06, 0x97,
1729    0x67, 0x4b, 0x70, 0x78, 0xa0, 0x2a, 0xf9, 0x46,
1730    0x80, 0x6d, 0x37, 0xfb, 0xb3, 0x17, 0x12, 0xf0,
1731    0x95, 0xc7, 0xee, 0x31, 0x54, 0x75, 0xdf, 0x2a,
1732    0xa8, 0x7d, 0xff, 0x97, 0xbb, 0x45, 0x49, 0x55,
1733    0xd5, 0xac, 0x9c, 0x6f, 0x0e, 0xc3, 0x94, 0x96,
1734    0xc4, 0x9e, 0x9c, 0x45, 0x31, 0xcb, 0x23, 0xed,
1735    0x21, 0xf1, 0xfe, 0xe9, 0xf9, 0x8c, 0xb6, 0x8e,
1736    0x72, 0x6e, 0xdd, 0x37, 0x1c, 0xc7, 0xd6, 0x6b,
1737    0x36, 0x35, 0xa0, 0x67, 0x54, 0x00, 0x65, 0x2c,
1738    0xc8, 0xa4, 0xa0, 0x9e, 0x72, 0xd7, 0xc9, 0x3c,
1739    0x8c, 0x78, 0x1a, 0xf8, 0x80, 0xad, 0xc4, 0x99,
1740    0xc7, 0x35, 0x4e, 0x89, 0x3b, 0x4f, 0xa6, 0x9d,
1741    0x5d, 0xce, 0x66, 0x4d, 0x82, 0xef, 0x47, 0x73,
1742    0xa8, 0xc5, 0x14, 0x20, 0xdd, 0x57, 0x92, 0x10,
1743    0x95, 0x8a, 0xe1, 0xac, 0x82, 0xec, 0x39, 0xe7,
1744    0x2c, 0xa6, 0xfd, 0x50, 0x68, 0x0c, 0x3e, 0xcf,
1745    0xbc, 0xc5, 0x12, 0xfe, 0x30, 0xc8, 0xb7, 0xb4,
1746    0x84, 0xd8, 0x1d, 0x67, 0x54, 0x9d, 0x20, 0x49,
1747    0xa5, 0xfd, 0xf9, 0x18, 0xef, 0xc2, 0xd2, 0xcd,
1748    0xb7, 0x54, 0x2b, 0x31, 0x12, 0xf9, 0xaa, 0x8e,
1749    0x0a, 0x29, 0x0c, 0x37, 0xd2, 0x7c, 0xcd, 0xc5,
1750    0x0b, 0x98, 0x25, 0x97, 0x0b, 0x5a, 0xf7, 0x07,
1751    0x91, 0x98, 0xd1, 0x42, 0xdf, 0xc4, 0xf9, 0x42,
1752    0x97, 0xda, 0x20, 0xf4, 0x88, 0xe1, 0x6b, 0xd4,
1753    0x85, 0xf5, 0x1d, 0xca, 0x2a, 0xba, 0x30, 0xc5,
1754    0xdf, 0x9d, 0x4d, 0xb8, 0xb0, 0x30, 0x54, 0x61,
1755    0xcf, 0x91, 0x6f, 0x90, 0xa5, 0x25, 0x05, 0x9b,
1756    0x2b, 0x3e, 0x13, 0xcd, 0xcd, 0x40, 0x59, 0x7c,
1757    0x92, 0x9b, 0x51, 0x81, 0x0d, 0x58, 0x32, 0x0a,
1758    0x43, 0xbd, 0x01, 0xb4, 0xb8, 0x0b, 0xd5, 0xee,
1759    0x0d, 0x67, 0x70, 0x59, 0xd7, 0x47, 0x4f, 0xe5,
1760    0x84, 0x07, 0x75, 0x3e, 0x54, 0xfb, 0x5d, 0xd1,
1761    0x3f, 0x72, 0x6e, 0xae, 0xf9, 0x4b, 0x7b, 0x57,
1762    0xe0, 0xde, 0x8b, 0x8b, 0x12, 0x1b, 0x10, 0x3b,
1763    0x5e, 0x17, 0xd1, 0x72, 0x18, 0x3d, 0xff, 0xc6,
1764    0x83, 0xa5, 0xaf, 0xf9, 0x30, 0xae, 0xb7, 0x47,
1765    0x46, 0x5d, 0xac, 0xba, 0x35, 0x04, 0x35, 0x0b,
1766    0x42, 0x48, 0x7c, 0xa1, 0x00, 0x1a, 0xea, 0xea,
1767    0x5f, 0x93, 0x2b, 0xb7, 0xe5, 0x8f, 0x91, 0x3c,
1768    0x00, 0x98, 0x51, 0x40, 0xee, 0x11, 0x50, 0x70,
1769    0x40, 0xe4, 0x28, 0xd4, 0x79, 0x2d, 0xcd, 0x82,
1770    0xaf, 0x3f, 0xb2, 0xfc, 0x96, 0x8d, 0xbe, 0x79,
1771    0xa3, 0xcd, 0xac, 0x35, 0x4b, 0x5e, 0xb4, 0x81,
1772    0x0e, 0x6a, 0xde, 0x1f, 0x7e, 0xb0, 0x37, 0x3e,
1773    0xdc, 0xe0, 0x21, 0xcc, 0x9f, 0x90, 0x26, 0xb6,
1774    0x8a, 0x1d, 0xb3, 0x1e, 0xec, 0x7a, 0x88, 0x28,
1775    0x95, 0xe2, 0xc2, 0x1d, 0x07, 0xb1, 0xfa, 0xc6,
1776    0x21, 0x1b, 0x5e, 0x54, 0x7b, 0x37, 0x0e, 0x63,
1777    0xff, 0xdd, 0x70, 0xf9, 0xea, 0x2f, 0x2d, 0x98,
1778    0xe1, 0xbe, 0x37, 0xd0, 0x1f, 0x45, 0x5a, 0x63,
1779    0xad, 0x44, 0xbc, 0x5f, 0xc6, 0x23, 0x8a, 0xac,
1780    0x12, 0x71, 0xd5, 0xa2, 0x8b, 0xfc, 0x97, 0xbb,
1781    0x00, 0x4b, 0xd7, 0x09, 0xa6, 0xaf, 0x40, 0x08,
1782    0x6c, 0x8d, 0x10, 0x4a, 0x01, 0x34, 0xc1, 0x2c,
1783    0x92, 0x30, 0x0a, 0x85, 0x8f, 0x3f, 0x08, 0xdd,
1784    0xff, 0x9c, 0x10, 0xd1, 0x03, 0x03, 0x84, 0x1f,
1785    0xf8, 0x4e, 0xf2, 0xe3, 0xd1, 0xd3, 0xb9, 0xdf,
1786    0xfc, 0x97, 0x1c, 0xcf, 0x8a, 0x29, 0xe6, 0x59,
1787    0x04, 0xe2, 0x87, 0x27, 0xbb, 0xb9, 0x96, 0xd0,
1788    0x20, 0x2e, 0x91, 0x48, 0xaa, 0xbf, 0x53, 0x4a,
1789    0x34, 0xb5, 0x0e, 0x11, 0xce, 0xf8, 0x65, 0xa6,
1790    0x0d, 0x45, 0xda, 0xbf, 0x6a, 0xfb, 0x81, 0xe4,
1791    0x7c, 0x8c, 0xa0, 0x4b, 0x00, 0x1b, 0xd7, 0x73,
1792    0x61, 0x80, 0xc0, 0x6b, 0x60, 0xde, 0xf3, 0x32,
1793    0xae, 0x62, 0x35, 0x66, 0xdd, 0xde, 0x53, 0x61,
1794    0x86, 0xe9, 0x44, 0xf3, 0x01, 0x7b, 0xaa, 0xe7,
1795    0x31, 0xd4, 0x5b, 0x06, 0x52, 0x0f, 0xf4, 0x90,
1796    0x5c, 0x82, 0x3e, 0x12, 0x28, 0x88, 0x7f, 0xfc,
1797    0xb8, 0xee, 0x17, 0x34, 0x4e, 0xc3, 0x2a, 0xfb,
1798    0x84, 0x1b, 0x0f, 0xba, 0x51, 0x64, 0x96, 0x22,
1799    0x0d, 0x88, 0x9b, 0xf2, 0x72, 0x04, 0x55, 0x44,
1800    0x6a, 0x14, 0x2b, 0xa0, 0xc2, 0xbe, 0x9e, 0x7b,
1801    0x48, 0x32, 0xa7, 0xf6, 0x11, 0xae, 0x60, 0xfb,
1802    0xf8, 0x38, 0x67, 0x16, 0xdf, 0xdf, 0x46, 0x96,
1803    0xd7, 0x6c, 0x39, 0xa2, 0xad, 0xf7, 0xb7, 0x78,
1804    0x32, 0x2c, 0xba, 0xae, 0x33, 0x5a, 0x88, 0x4b,
1805    0x40, 0x1f, 0x88, 0xcd, 0xe7, 0x8f, 0x50, 0x5e,
1806    0xd8, 0x80, 0x82, 0x7b, 0x46, 0xc7, 0x07, 0x71,
1807    0x4f, 0x3b, 0xca, 0x9d, 0x73, 0x7c, 0xdb, 0xeb,
1808    0x4c, 0x37, 0xdd, 0xb4, 0xb8, 0x61, 0xf3, 0xdf,
1809    0xb2, 0xb5, 0x34, 0x27, 0xec, 0xeb, 0xba, 0xcc,
1810    0xdc, 0xe9, 0xde, 0x47, 0x2e, 0xe9, 0x3b, 0xa1,
1811    0x36, 0xf1, 0x66, 0xdf, 0xc8, 0x70, 0x7f, 0x39,
1812    0x82, 0xb3, 0x8c, 0x47, 0x9a, 0x45, 0x59, 0x2e,
1813    0x30, 0x9b, 0xaf, 0x7c, 0xad, 0x43, 0x38, 0x6e,
1814    0x05, 0x7d, 0x8b, 0xac, 0x5f, 0x70, 0x63, 0xeb,
1815    0x85, 0xee, 0xab, 0xa4, 0x57, 0x1d, 0x63, 0xac,
1816    0x48, 0x45, 0x74, 0xca, 0x0c, 0xa8, 0x65, 0x05,
1817    0x1a, 0x47, 0xa1, 0x2f, 0x4b, 0x96, 0x26, 0x9e,
1818    0xee, 0xec, 0x37, 0x57, 0xbf, 0xa0, 0x2b, 0x75,
1819    0xf5, 0x9b, 0xb5, 0x1d, 0x12, 0x8a, 0x61, 0x9c,
1820    0x8d, 0x2a, 0x7e, 0xee, 0x05, 0x2b, 0x85, 0x7c,
1821    0x6f, 0x34, 0xc4, 0xcd, 0xd5, 0xd0, 0xac, 0xf9,
1822    0x79, 0x24, 0xe7, 0x0f, 0x41, 0x95, 0xe2, 0x9a,
1823    0x22, 0x32, 0xa5, 0x98, 0x2e, 0x82, 0xc0, 0x07,
1824    0xf4, 0x74, 0x68, 0x00, 0xf9, 0x35, 0x5e, 0x12,
1825    0xfe, 0xa2, 0x0e, 0x15, 0x96, 0x83, 0x84, 0x31,
1826    0xc4, 0x25, 0xda, 0x7a, 0xec, 0x07, 0x15, 0xe4,
1827    0x7d, 0xc5, 0xf5, 0xe1, 0xc5, 0xba, 0x9a, 0x59,
1828    0x76, 0xae, 0x4e, 0x54, 0x27, 0x5e, 0xa9, 0x0d,
1829    0xa0, 0xd3, 0xcd, 0x99, 0x39, 0x76, 0x6d, 0x58,
1830    0xdf, 0x8a, 0xa9, 0x9e, 0x21, 0x22, 0x48, 0x7c,
1831    0x0c, 0x13, 0xfa, 0x86, 0x63, 0x74, 0x92, 0xf4,
1832    0xe5, 0x5d, 0xbf, 0xe4, 0x2d, 0xd7, 0xa1, 0xe3,
1833    0x0f, 0xc6, 0x3e, 0x82, 0xa0, 0xcc, 0xfa, 0x38,
1834    0x55, 0x36, 0x9b, 0x22, 0xd0, 0xb8, 0x7f, 0x3f,
1835    0x0f, 0x35, 0x01, 0xf9, 0x6f, 0xa6, 0x51, 0x77,
1836    0x21, 0xb7, 0x7a, 0x81, 0xca, 0x83, 0x6b, 0xec,
1837    0xa7, 0x71, 0x12, 0x6d, 0x22, 0x78, 0xb1, 0xc8,
1838    0x37, 0xda, 0x1d, 0xd1, 0x9c, 0xa5, 0x6c, 0xfa,
1839    0xd3, 0x4b, 0x87, 0x39, 0x6f, 0x59, 0xe1, 0xec,
1840    0x4a, 0xe5, 0x0e, 0x72, 0x2b, 0x31, 0x18, 0xd9,
1841    0x54, 0x6a, 0x4c, 0xc3, 0xe0, 0x58, 0x3b, 0xd8,
1842    0xe8, 0x65, 0xc1, 0x98, 0xed, 0x64, 0x7b, 0xb1,
1843    0xee, 0xa9, 0x54, 0x95, 0x37, 0x98, 0x68, 0xca,
1844    0x83, 0xef, 0xc5, 0x1b, 0x23, 0x71, 0x5c, 0x1a,
1845    0xe6, 0xc0, 0xce, 0x2e, 0x16, 0x59, 0x79, 0xf4,
1846    0x94, 0x43, 0xd8, 0xb1, 0x2e, 0xe3, 0xb9, 0xa0,
1847    0x95, 0x80, 0x66, 0xdd, 0x1d, 0xdd, 0x0d, 0x78,
1848    0x9d, 0xc3, 0x91, 0x60, 0x16, 0x8b, 0xc5, 0x39,
1849    0xad, 0xdb, 0xa3, 0xc1, 0xd2, 0x8d, 0xa0, 0x78,
1850    0x75, 0x68, 0xa6, 0xb9, 0x15, 0x57, 0x0b, 0x06,
1851    0x64, 0x55, 0xd7, 0x07, 0x53, 0xf9, 0x8b, 0xd9,
1852    0x97, 0x46, 0xca, 0x04, 0x95, 0xd4, 0x3c, 0xd3,
1853    0x8f, 0x0a, 0x53, 0x27, 0xe6, 0xd4, 0xb4, 0x7b,
1854    0x70, 0x12, 0x12, 0xc5, 0x14, 0xa0, 0x53, 0xe5,
1855    0xd4, 0x30, 0xaa, 0xcc, 0xec, 0x03, 0x0a, 0x36,
1856    0x21, 0x9f, 0x81, 0x16, 0x6d, 0x1d, 0x53, 0x6e,
1857    0x08, 0xae, 0xf7, 0x05, 0xd9, 0x73, 0x5a, 0x45,
1858    0x3a, 0x52, 0x3e, 0xeb, 0x67, 0x49, 0xe1, 0x1a,
1859    0x8a, 0x4c, 0xd9, 0x83, 0x64, 0xd8, 0x16, 0x37,
1860    0x1c, 0x6b, 0x1c, 0x0d, 0x8f, 0x6a, 0xbf, 0x21,
1861    0xf1, 0x4f, 0x4c, 0x55, 0x6f, 0xe0, 0x5c, 0xa7,
1862    0xb1, 0x7b, 0x57, 0xa9, 0xa2, 0xb4, 0x9d, 0x53,
1863    0x7f, 0x0f, 0xb0, 0x21, 0x95, 0x70, 0x3a, 0x0d,
1864    0xa2, 0xc1, 0x52, 0x26, 0xad, 0xa7, 0x48, 0x66,
1865    0x2a, 0xfc, 0xaa, 0xaf, 0x25, 0x02, 0x58, 0x80,
1866    0xbe, 0xe7, 0xe4, 0x2a, 0x50, 0xe5, 0x46, 0x13,
1867    0xaa, 0x57, 0x0e, 0x6e, 0xee, 0xa9, 0x9e, 0x19,
1868    0xa3, 0x92, 0x8e, 0xc6, 0x3d, 0x76, 0xbb, 0x12,
1869    0xe2, 0x78, 0x77, 0x99, 0x6a, 0x06, 0xc4, 0x45,
1870    0x1f, 0x45, 0xe1, 0xf6, 0x65, 0x1f, 0xba, 0xe4,
1871    0xf6, 0xca, 0xa9, 0x62, 0xa9, 0x2c, 0x3a, 0x2d,
1872    0x8d, 0x34, 0xe2, 0x32, 0x6e, 0x4a, 0x52, 0x9f,
1873    0x3d, 0xcf, 0xab, 0xe8, 0x63, 0x66, 0x3f, 0x06,
1874    0xa3, 0xaa, 0xd5, 0xcb, 0x5d, 0x41, 0xb8, 0xe7,
1875    0x0a, 0x6b, 0x45, 0x90, 0x3a, 0xf0, 0xe5, 0x7f,
1876    0x7e, 0xde, 0x68, 0x20, 0x5e, 0x5a, 0x31, 0x3a,
1877    0x5c, 0x25, 0xb3, 0x82, 0xc7, 0x1e, 0x7d, 0x4d,
1878    0xd0, 0x23, 0x9f, 0x22, 0x1a, 0x54, 0x0b, 0xe4,
1879    0x3c, 0x1c, 0xc5, 0x24, 0x39, 0x4d, 0x96, 0x90,
1880    0xce, 0xc9, 0x3a, 0x07, 0x45, 0x01, 0x9e, 0xb6,
1881    0x55, 0x1b, 0xdc, 0xe0, 0x3b, 0xe8, 0x92, 0x57,
1882    0x43, 0x12, 0x9b, 0x11, 0x3f, 0x81, 0x5a, 0xca,
1883    0xc5, 0x85, 0x39, 0x25, 0x6d, 0xe4, 0x30, 0xef,
1884    0x83, 0x21, 0xed, 0x9c, 0xb3, 0xcf, 0x10, 0xe6,
1885    0xa1, 0x46, 0x10, 0x9a, 0x7b, 0xaf, 0x5f, 0x75,
1886    0x99, 0x62, 0xc1, 0xf4, 0x2c, 0x28, 0x0a, 0x8a,
1887    0xc7, 0xd2, 0xb4, 0x75, 0xb9, 0x66, 0x70, 0x9a,
1888    0xaf, 0xe3, 0xf1, 0x2f, 0xf2, 0xb0, 0x59, 0x9c,
1889    0x1e, 0x1a, 0xbd, 0xa9, 0x15, 0x55, 0x95, 0x4c,
1890    0x5b, 0x78, 0x0b, 0x2c, 0x00, 0xbb, 0xf9, 0x8b,
1891    0xeb, 0x72, 0x4f, 0xfb, 0xa4, 0x3a, 0xa0, 0x04,
1892    0x45, 0x32, 0x02, 0x6c, 0x16, 0x52, 0x3f, 0x4a,
1893    0x0a, 0x77, 0x64, 0xf4, 0x74, 0xed, 0x60, 0x6b,
1894    0x5e, 0x43, 0xa7, 0xe3, 0x84, 0x7e, 0xda, 0xf0,
1895    0xb1, 0x9e, 0x6d, 0x90, 0x9c, 0x32, 0xae, 0xba,
1896    0x7c, 0xfb, 0x72, 0x22, 0x27, 0x9c, 0xe1, 0x85,
1897    0xe1, 0xf6, 0x22, 0x4c, 0x3c, 0x4a, 0xd6, 0xed,
1898    0x4c, 0xa7, 0x79, 0x59, 0xb5, 0x5b, 0x91, 0x65,
1899    0x3f, 0x93, 0x97, 0x8d, 0xd7, 0xd0, 0xab, 0x17,
1900    0x2f, 0x13, 0x74, 0x53, 0x69, 0x74, 0xf8, 0x6b,
1901    0x39, 0x5c, 0x64, 0x5b, 0x3d, 0x75, 0xca, 0x85,
1902    0x0e, 0xda, 0x0f, 0x01, 0x34, 0xa3, 0x67, 0x8e,
1903    0x26, 0x6f, 0x26, 0x3c, 0xd0, 0xd9, 0xae, 0xe8,
1904    0x52, 0x13, 0x7f, 0xf8, 0x69, 0x62, 0xfc, 0x9a,
1905    0xc0, 0x0c, 0x66, 0x2e, 0x57, 0x21, 0x75, 0xb0,
1906    0xb3, 0x8c, 0xf6, 0x97, 0x44, 0x46, 0x65, 0x15,
1907    0x79, 0xd5, 0x6b, 0x68, 0x96, 0x47, 0xc1, 0xba,
1908    0x75, 0x46, 0x87, 0x76, 0x7d, 0x2d, 0xac, 0xf3,
1909    0x16, 0xae, 0xfb, 0x7e, 0x41, 0xe4, 0xae, 0x15,
1910    0xc2, 0x51, 0x69, 0x71, 0x0b, 0x63, 0x20, 0x6a,
1911    0xbd, 0xad, 0xce, 0x2a, 0x94, 0xac, 0xcf, 0x15,
1912    0x4e, 0xdc, 0x8e, 0x2a, 0x48, 0xed, 0xb3, 0x48,
1913    0x95, 0xf4, 0x41, 0xf3, 0x52, 0xef, 0x62, 0x90,
1914    0x10, 0x30, 0x42, 0xec, 0xf9, 0x30, 0x25, 0xc3,
1915    0xc5, 0x47, 0x76, 0xb5, 0x37, 0xeb, 0x9e, 0x87,
1916    0xbe, 0x5c, 0x24, 0xa5, 0x34, 0xdd, 0x92, 0xa1,
1917    0x20, 0x7d, 0xa7, 0x94, 0xa2, 0x67, 0x26, 0x70,
1918    0xfe, 0xc9, 0x3f, 0x21, 0xd1, 0xc2, 0x5a, 0xb1,
1919    0xaa, 0xac, 0x14, 0x1a, 0xe4, 0xdb, 0x71, 0x7e,
1920    0x9c, 0xc2, 0x52, 0x59, 0xc9, 0x58, 0xca, 0x88,
1921    0x71, 0x4f, 0x90, 0xb1, 0xbb, 0xac, 0x80, 0x53,
1922    0x21, 0xfb, 0xff, 0xfd, 0x1e, 0x9f, 0xc0, 0x59,
1923    0x8d, 0x80, 0x8e, 0x85, 0xa9, 0x3b, 0xd3, 0x20,
1924    0x3b, 0x91, 0x16, 0x49, 0xb2, 0x2a, 0xa4, 0xe2,
1925    0x30, 0xb2, 0x76, 0xf6, 0x92, 0x71, 0x37, 0x1b
1926};
1927
1928static const unsigned char ml_dsa_65_priv_key[] = {
1929    0x3b, 0x5c, 0xb0, 0x79, 0xd2, 0xce, 0x76, 0x2b,
1930    0x3b, 0x95, 0x7c, 0x26, 0x69, 0x8f, 0xe7, 0x01,
1931    0xb9, 0x6b, 0x50, 0xa3, 0x2c, 0x73, 0x67, 0xcf,
1932    0x9e, 0xf4, 0xb8, 0x7d, 0xe3, 0xaf, 0x27, 0x77,
1933    0x39, 0x3e, 0xac, 0x91, 0xa1, 0xfb, 0xed, 0xf7,
1934    0x52, 0x0a, 0x4f, 0x77, 0xb2, 0x57, 0x7c, 0x65,
1935    0x05, 0x6e, 0x76, 0x3d, 0x28, 0xf4, 0x3a, 0x88,
1936    0x49, 0x33, 0x7d, 0x30, 0x17, 0x21, 0x5a, 0xc0,
1937    0x4b, 0x03, 0x74, 0x65, 0x6d, 0xbb, 0xfe, 0x8e,
1938    0x0b, 0x8b, 0xb4, 0x42, 0xce, 0xc1, 0xdd, 0x11,
1939    0xb1, 0x8f, 0x31, 0x06, 0x0b, 0xeb, 0xdf, 0xb3,
1940    0x11, 0x12, 0x19, 0x22, 0x34, 0xd7, 0xaa, 0xf2,
1941    0x17, 0xf0, 0x2e, 0x22, 0xef, 0x68, 0x0c, 0x8f,
1942    0xc7, 0x42, 0x0b, 0xd6, 0x88, 0xd8, 0x3b, 0xa7,
1943    0x22, 0xc5, 0x4e, 0x1a, 0xf2, 0x60, 0x85, 0x24,
1944    0x75, 0x85, 0x49, 0x17, 0x1b, 0xd4, 0x69, 0xd8,
1945    0x50, 0x68, 0x36, 0x83, 0x51, 0x12, 0x40, 0x24,
1946    0x06, 0x04, 0x07, 0x47, 0x28, 0x62, 0x86, 0x26,
1947    0x12, 0x24, 0x40, 0x83, 0x65, 0x44, 0x10, 0x62,
1948    0x78, 0x58, 0x14, 0x67, 0x20, 0x20, 0x60, 0x53,
1949    0x28, 0x73, 0x53, 0x34, 0x82, 0x18, 0x42, 0x43,
1950    0x78, 0x67, 0x65, 0x28, 0x12, 0x65, 0x71, 0x17,
1951    0x33, 0x06, 0x10, 0x51, 0x38, 0x07, 0x61, 0x42,
1952    0x72, 0x60, 0x18, 0x52, 0x08, 0x74, 0x58, 0x72,
1953    0x73, 0x06, 0x65, 0x20, 0x73, 0x20, 0x72, 0x42,
1954    0x03, 0x86, 0x03, 0x03, 0x50, 0x85, 0x13, 0x43,
1955    0x24, 0x53, 0x33, 0x82, 0x03, 0x36, 0x82, 0x73,
1956    0x12, 0x15, 0x78, 0x54, 0x60, 0x64, 0x32, 0x60,
1957    0x42, 0x47, 0x84, 0x73, 0x51, 0x60, 0x26, 0x03,
1958    0x35, 0x58, 0x25, 0x28, 0x83, 0x55, 0x64, 0x06,
1959    0x70, 0x82, 0x75, 0x54, 0x15, 0x70, 0x37, 0x61,
1960    0x71, 0x38, 0x75, 0x36, 0x15, 0x70, 0x78, 0x17,
1961    0x62, 0x01, 0x02, 0x13, 0x12, 0x46, 0x12, 0x56,
1962    0x82, 0x51, 0x32, 0x16, 0x27, 0x00, 0x52, 0x41,
1963    0x43, 0x86, 0x46, 0x00, 0x61, 0x24, 0x78, 0x33,
1964    0x40, 0x13, 0x34, 0x47, 0x60, 0x18, 0x52, 0x18,
1965    0x80, 0x01, 0x46, 0x53, 0x32, 0x74, 0x51, 0x72,
1966    0x81, 0x21, 0x30, 0x50, 0x28, 0x28, 0x55, 0x53,
1967    0x71, 0x03, 0x84, 0x87, 0x61, 0x88, 0x45, 0x35,
1968    0x63, 0x72, 0x05, 0x37, 0x06, 0x37, 0x35, 0x36,
1969    0x56, 0x71, 0x74, 0x53, 0x07, 0x61, 0x72, 0x65,
1970    0x78, 0x57, 0x42, 0x41, 0x02, 0x06, 0x61, 0x06,
1971    0x07, 0x66, 0x64, 0x50, 0x31, 0x24, 0x82, 0x43,
1972    0x86, 0x31, 0x26, 0x76, 0x47, 0x45, 0x03, 0x66,
1973    0x44, 0x00, 0x46, 0x04, 0x83, 0x03, 0x83, 0x81,
1974    0x33, 0x08, 0x77, 0x57, 0x08, 0x40, 0x04, 0x22,
1975    0x35, 0x17, 0x43, 0x63, 0x78, 0x44, 0x86, 0x24,
1976    0x40, 0x17, 0x28, 0x67, 0x34, 0x18, 0x75, 0x72,
1977    0x26, 0x83, 0x68, 0x63, 0x57, 0x47, 0x48, 0x84,
1978    0x50, 0x16, 0x43, 0x17, 0x86, 0x16, 0x44, 0x17,
1979    0x18, 0x70, 0x08, 0x51, 0x78, 0x70, 0x15, 0x58,
1980    0x04, 0x10, 0x16, 0x03, 0x11, 0x04, 0x43, 0x70,
1981    0x32, 0x77, 0x03, 0x23, 0x12, 0x74, 0x38, 0x26,
1982    0x65, 0x66, 0x62, 0x04, 0x65, 0x75, 0x54, 0x00,
1983    0x04, 0x01, 0x43, 0x15, 0x07, 0x47, 0x71, 0x12,
1984    0x70, 0x41, 0x72, 0x34, 0x05, 0x26, 0x08, 0x11,
1985    0x55, 0x22, 0x72, 0x83, 0x04, 0x66, 0x88, 0x80,
1986    0x25, 0x17, 0x68, 0x60, 0x15, 0x37, 0x64, 0x14,
1987    0x26, 0x64, 0x01, 0x45, 0x54, 0x51, 0x71, 0x38,
1988    0x62, 0x65, 0x78, 0x43, 0x36, 0x21, 0x02, 0x27,
1989    0x43, 0x47, 0x83, 0x86, 0x07, 0x05, 0x48, 0x56,
1990    0x86, 0x31, 0x27, 0x66, 0x34, 0x35, 0x48, 0x81,
1991    0x08, 0x38, 0x05, 0x10, 0x63, 0x32, 0x61, 0x73,
1992    0x47, 0x30, 0x00, 0x82, 0x66, 0x54, 0x86, 0x81,
1993    0x36, 0x06, 0x45, 0x01, 0x45, 0x87, 0x23, 0x36,
1994    0x83, 0x00, 0x32, 0x81, 0x10, 0x06, 0x57, 0x76,
1995    0x62, 0x40, 0x61, 0x77, 0x04, 0x17, 0x28, 0x70,
1996    0x15, 0x07, 0x42, 0x18, 0x61, 0x70, 0x32, 0x42,
1997    0x68, 0x12, 0x00, 0x18, 0x12, 0x72, 0x60, 0x50,
1998    0x63, 0x28, 0x51, 0x87, 0x82, 0x03, 0x36, 0x63,
1999    0x63, 0x25, 0x68, 0x54, 0x56, 0x16, 0x07, 0x58,
2000    0x77, 0x83, 0x31, 0x85, 0x44, 0x43, 0x60, 0x22,
2001    0x16, 0x01, 0x41, 0x23, 0x27, 0x11, 0x46, 0x60,
2002    0x50, 0x84, 0x77, 0x18, 0x81, 0x31, 0x88, 0x47,
2003    0x36, 0x51, 0x71, 0x56, 0x04, 0x25, 0x17, 0x44,
2004    0x33, 0x78, 0x28, 0x72, 0x27, 0x87, 0x62, 0x78,
2005    0x13, 0x83, 0x58, 0x12, 0x36, 0x22, 0x10, 0x25,
2006    0x13, 0x50, 0x88, 0x10, 0x24, 0x78, 0x15, 0x12,
2007    0x26, 0x43, 0x58, 0x02, 0x24, 0x17, 0x34, 0x75,
2008    0x46, 0x15, 0x46, 0x42, 0x84, 0x52, 0x41, 0x75,
2009    0x48, 0x77, 0x88, 0x33, 0x18, 0x18, 0x84, 0x31,
2010    0x47, 0x22, 0x35, 0x64, 0x72, 0x35, 0x65, 0x73,
2011    0x66, 0x88, 0x73, 0x12, 0x25, 0x51, 0x66, 0x57,
2012    0x05, 0x23, 0x54, 0x74, 0x51, 0x76, 0x52, 0x24,
2013    0x40, 0x64, 0x68, 0x28, 0x25, 0x65, 0x77, 0x12,
2014    0x53, 0x35, 0x41, 0x85, 0x18, 0x25, 0x02, 0x25,
2015    0x47, 0x22, 0x40, 0x37, 0x54, 0x03, 0x53, 0x26,
2016    0x86, 0x50, 0x70, 0x25, 0x56, 0x27, 0x21, 0x11,
2017    0x11, 0x72, 0x71, 0x54, 0x47, 0x63, 0x67, 0x22,
2018    0x75, 0x61, 0x70, 0x05, 0x10, 0x03, 0x41, 0x48,
2019    0x01, 0x47, 0x14, 0x70, 0x06, 0x64, 0x84, 0x02,
2020    0x28, 0x06, 0x12, 0x45, 0x13, 0x56, 0x48, 0x65,
2021    0x00, 0x74, 0x02, 0x10, 0x78, 0x42, 0x80, 0x02,
2022    0x00, 0x16, 0x37, 0x43, 0x23, 0x56, 0x67, 0x20,
2023    0x31, 0x86, 0x22, 0x20, 0x35, 0x51, 0x34, 0x58,
2024    0x10, 0x87, 0x83, 0x43, 0x32, 0x85, 0x47, 0x72,
2025    0x32, 0x28, 0x38, 0x47, 0x08, 0x73, 0x38, 0x20,
2026    0x25, 0x14, 0x51, 0x66, 0x88, 0x85, 0x15, 0x88,
2027    0x86, 0x86, 0x73, 0x46, 0x52, 0x81, 0x32, 0x70,
2028    0x85, 0x31, 0x20, 0x80, 0x32, 0x42, 0x02, 0x33,
2029    0x37, 0x68, 0x66, 0x70, 0x11, 0x27, 0x53, 0x75,
2030    0x48, 0x65, 0x01, 0x25, 0x24, 0x53, 0x68, 0x15,
2031    0x47, 0x25, 0x42, 0x01, 0x04, 0x47, 0x01, 0x58,
2032    0x36, 0x17, 0x71, 0x44, 0x21, 0x63, 0x52, 0x61,
2033    0x56, 0x16, 0x73, 0x17, 0x28, 0x08, 0x07, 0x76,
2034    0x08, 0x42, 0x58, 0x11, 0x42, 0x18, 0x17, 0x18,
2035    0x65, 0x63, 0x82, 0x45, 0x74, 0x35, 0x21, 0x01,
2036    0x35, 0x26, 0x43, 0x56, 0x58, 0x56, 0x64, 0x81,
2037    0x05, 0x52, 0x77, 0x31, 0x47, 0x27, 0x21, 0x82,
2038    0x60, 0x05, 0x51, 0x04, 0x15, 0x34, 0x58, 0x00,
2039    0x40, 0x83, 0x48, 0x21, 0x52, 0x04, 0x62, 0x23,
2040    0x34, 0x64, 0x85, 0x77, 0x35, 0x81, 0x52, 0x35,
2041    0x80, 0x24, 0x00, 0x03, 0x84, 0x32, 0x67, 0x76,
2042    0x78, 0x32, 0x87, 0x50, 0x48, 0x00, 0x64, 0x45,
2043    0x17, 0x05, 0x56, 0x84, 0x13, 0x02, 0x68, 0x42,
2044    0x76, 0x81, 0x01, 0x41, 0x18, 0x56, 0x30, 0x58,
2045    0x43, 0x72, 0x28, 0x71, 0x21, 0x87, 0x14, 0x64,
2046    0x03, 0x31, 0x58, 0x04, 0x72, 0x11, 0x43, 0x50,
2047    0x82, 0x57, 0x14, 0x38, 0x53, 0x36, 0x53, 0x44,
2048    0x37, 0x36, 0x83, 0x47, 0x58, 0x58, 0x52, 0x08,
2049    0x13, 0x33, 0x43, 0x40, 0x54, 0x26, 0x35, 0x28,
2050    0x67, 0x02, 0x08, 0x18, 0x34, 0x67, 0x16, 0x17,
2051    0x73, 0x13, 0x18, 0x02, 0x88, 0x32, 0x61, 0x60,
2052    0x56, 0x38, 0x05, 0x87, 0x78, 0x52, 0x07, 0x53,
2053    0x81, 0x06, 0x52, 0x88, 0x07, 0x35, 0x72, 0x72,
2054    0x44, 0x28, 0x80, 0x86, 0x11, 0x70, 0x40, 0x41,
2055    0x63, 0x80, 0x46, 0x15, 0x27, 0x62, 0x03, 0x45,
2056    0x14, 0x33, 0x56, 0x07, 0x78, 0x43, 0x77, 0x62,
2057    0x06, 0x54, 0x74, 0x43, 0x28, 0x72, 0x16, 0x40,
2058    0x78, 0x62, 0x44, 0x34, 0x00, 0x25, 0x75, 0x74,
2059    0x77, 0x37, 0x02, 0x48, 0x67, 0x18, 0x51, 0x67,
2060    0x77, 0x68, 0x38, 0x72, 0x85, 0x34, 0x42, 0x54,
2061    0x71, 0x61, 0x47, 0x42, 0x68, 0x55, 0x27, 0x26,
2062    0x38, 0x85, 0x15, 0x15, 0x43, 0x14, 0x31, 0x24,
2063    0x81, 0x26, 0x21, 0x17, 0x04, 0x00, 0x27, 0x21,
2064    0x20, 0x72, 0x85, 0x77, 0x30, 0x17, 0x26, 0x48,
2065    0x05, 0x48, 0x71, 0x41, 0x48, 0x27, 0x12, 0x43,
2066    0x35, 0x26, 0x13, 0x00, 0x26, 0x67, 0x28, 0x25,
2067    0x10, 0x05, 0x74, 0x06, 0x65, 0x16, 0x87, 0x17,
2068    0x73, 0x37, 0x42, 0x20, 0x16, 0x44, 0x40, 0x68,
2069    0x27, 0x23, 0x38, 0x28, 0x60, 0x52, 0x64, 0x40,
2070    0x28, 0x46, 0x00, 0x00, 0x01, 0x43, 0x75, 0x15,
2071    0x38, 0x12, 0x37, 0x11, 0x11, 0x87, 0x34, 0x43,
2072    0x35, 0x76, 0x76, 0x50, 0x43, 0x05, 0x00, 0x27,
2073    0x18, 0x70, 0x68, 0x14, 0x60, 0x26, 0x12, 0x75,
2074    0x42, 0x06, 0x23, 0x56, 0x74, 0x74, 0x37, 0x17,
2075    0x46, 0x20, 0x34, 0x72, 0x21, 0x33, 0x82, 0x73,
2076    0x51, 0x64, 0x72, 0x02, 0x48, 0x82, 0x57, 0x53,
2077    0x64, 0x74, 0x75, 0x28, 0x64, 0x02, 0x30, 0x22,
2078    0x06, 0x73, 0x66, 0x72, 0x46, 0x56, 0x30, 0x11,
2079    0x78, 0x32, 0x47, 0x52, 0x31, 0x02, 0x74, 0x13,
2080    0x13, 0x41, 0x07, 0x27, 0x72, 0x07, 0x66, 0x63,
2081    0x34, 0x84, 0x30, 0x66, 0x28, 0x72, 0x50, 0x62,
2082    0x30, 0x52, 0x82, 0x37, 0x40, 0x78, 0x31, 0x35,
2083    0x76, 0x83, 0x05, 0x02, 0x37, 0x25, 0x28, 0x85,
2084    0x62, 0x10, 0x05, 0x38, 0x64, 0x87, 0x21, 0x76,
2085    0x04, 0x51, 0x12, 0x45, 0x08, 0x50, 0x50, 0x75,
2086    0x20, 0x86, 0x32, 0x43, 0x13, 0x47, 0x31, 0x24,
2087    0x26, 0x57, 0x68, 0x64, 0x88, 0x17, 0x02, 0x70,
2088    0x42, 0x72, 0x37, 0x32, 0x85, 0x87, 0x83, 0x86,
2089    0x47, 0x70, 0x56, 0x22, 0x24, 0x53, 0x48, 0x85,
2090    0x02, 0x48, 0x16, 0x01, 0x07, 0x57, 0x73, 0x76,
2091    0x27, 0x43, 0x00, 0x88, 0x27, 0x38, 0x30, 0x86,
2092    0x27, 0x18, 0x62, 0x05, 0x30, 0x37, 0x16, 0x80,
2093    0x31, 0x72, 0x28, 0x37, 0x47, 0x57, 0x62, 0x55,
2094    0x74, 0x07, 0x41, 0x72, 0x26, 0x58, 0x52, 0x68,
2095    0x04, 0x80, 0x72, 0x77, 0x35, 0x43, 0x36, 0x47,
2096    0x38, 0x76, 0x86, 0x60, 0x14, 0x22, 0x77, 0x61,
2097    0x52, 0x74, 0x17, 0x64, 0x67, 0x85, 0x23, 0x58,
2098    0x28, 0x23, 0x05, 0x33, 0x66, 0x64, 0x83, 0x71,
2099    0x14, 0x03, 0x21, 0x70, 0x55, 0x43, 0x35, 0x58,
2100    0x53, 0x78, 0x22, 0x00, 0x15, 0x00, 0x50, 0x16,
2101    0x26, 0x84, 0x18, 0x51, 0x24, 0x01, 0x20, 0x51,
2102    0x06, 0x74, 0x44, 0x83, 0x40, 0x55, 0x70, 0x28,
2103    0x66, 0x11, 0x31, 0x02, 0x57, 0x55, 0x52, 0x72,
2104    0x27, 0x84, 0x54, 0x71, 0x40, 0x78, 0x44, 0x75,
2105    0x24, 0x78, 0x61, 0x21, 0x65, 0x57, 0x43, 0x58,
2106    0x21, 0x15, 0x11, 0x87, 0x35, 0x82, 0x52, 0x00,
2107    0x46, 0x11, 0x34, 0x68, 0x60, 0x60, 0x50, 0x15,
2108    0x25, 0x62, 0x48, 0x08, 0x18, 0x31, 0x36, 0x86,
2109    0x41, 0x26, 0x80, 0x82, 0x54, 0x68, 0x02, 0x07,
2110    0x23, 0x22, 0x24, 0x33, 0x27, 0x02, 0x04, 0x40,
2111    0x22, 0x47, 0x87, 0x62, 0x70, 0x21, 0x81, 0x22,
2112    0x25, 0x78, 0x87, 0x67, 0x62, 0x38, 0x42, 0x10,
2113    0x21, 0x58, 0x56, 0x06, 0x20, 0x18, 0x46, 0x18,
2114    0x22, 0x61, 0x73, 0x45, 0x65, 0x73, 0x58, 0x57,
2115    0x04, 0x76, 0x72, 0x54, 0x48, 0x00, 0x62, 0x27,
2116    0x22, 0x25, 0x17, 0x43, 0x55, 0x58, 0x57, 0x64,
2117    0x04, 0x61, 0x21, 0x24, 0x02, 0x20, 0x17, 0x34,
2118    0x25, 0x13, 0x35, 0x14, 0x52, 0x76, 0x83, 0x11,
2119    0x05, 0x05, 0x03, 0x11, 0x28, 0x71, 0x16, 0x40,
2120    0x56, 0x21, 0x76, 0x18, 0x67, 0x38, 0x02, 0x15,
2121    0x36, 0x67, 0xf3, 0xc8, 0x13, 0x98, 0x97, 0xb3,
2122    0x28, 0x88, 0xb7, 0x32, 0x0d, 0xf8, 0xcf, 0x60,
2123    0x47, 0x25, 0x85, 0xf5, 0x2d, 0x0c, 0x02, 0x62,
2124    0xa7, 0xb3, 0x22, 0x3c, 0x55, 0xb6, 0x55, 0x9b,
2125    0x20, 0x35, 0x10, 0x77, 0x87, 0xeb, 0xcf, 0xa0,
2126    0x11, 0x37, 0xdc, 0x09, 0x0b, 0xdb, 0x94, 0x28,
2127    0xc5, 0x30, 0x74, 0x7f, 0x73, 0x3a, 0x05, 0x10,
2128    0xf2, 0x1a, 0x61, 0x88, 0xdb, 0x2e, 0xc9, 0xf1,
2129    0x14, 0x75, 0x3d, 0xef, 0x09, 0x2f, 0x53, 0x57,
2130    0x87, 0xb0, 0x78, 0xa2, 0xc1, 0xe3, 0x5b, 0xd4,
2131    0x4e, 0x77, 0x86, 0x0c, 0x69, 0x06, 0x33, 0x59,
2132    0x35, 0xdd, 0xbd, 0xa7, 0x9f, 0x3e, 0x2f, 0x0f,
2133    0x22, 0x4d, 0x17, 0xa6, 0x5c, 0x60, 0x3e, 0xa3,
2134    0xf1, 0xbf, 0x08, 0x38, 0x9f, 0x14, 0x0b, 0x07,
2135    0xa4, 0x0d, 0x1e, 0xf8, 0x34, 0x23, 0x01, 0x62,
2136    0xad, 0x3c, 0x65, 0x49, 0xca, 0x12, 0x01, 0x2b,
2137    0x2d, 0x17, 0x4c, 0xa1, 0xa7, 0x40, 0xde, 0xdd,
2138    0x2b, 0x4b, 0x14, 0xf1, 0x21, 0x6a, 0x68, 0xd5,
2139    0x65, 0xe6, 0x16, 0x42, 0xdc, 0xf3, 0xce, 0x0e,
2140    0x3a, 0xa4, 0x12, 0x16, 0x72, 0xa5, 0xa4, 0xbb,
2141    0xa3, 0xb4, 0x08, 0x6d, 0xce, 0x95, 0x73, 0xc6,
2142    0x4a, 0xe4, 0x5a, 0x14, 0x73, 0xb1, 0x14, 0xab,
2143    0x65, 0xb7, 0x8b, 0xe4, 0x7c, 0xa1, 0xd2, 0xbb,
2144    0x6a, 0xf2, 0xf2, 0x7d, 0x64, 0x26, 0x68, 0xec,
2145    0xc2, 0x51, 0x3c, 0xf0, 0xcc, 0x7a, 0x04, 0x6a,
2146    0x29, 0x8d, 0x76, 0x7f, 0xe5, 0x8f, 0x95, 0x20,
2147    0xd1, 0xf7, 0x98, 0x29, 0xf5, 0x35, 0x80, 0x25,
2148    0xda, 0x54, 0xde, 0xb9, 0x5f, 0x6d, 0x68, 0xcf,
2149    0x7e, 0x85, 0xcf, 0x38, 0x0d, 0x32, 0x63, 0x37,
2150    0x77, 0xe1, 0xa5, 0x9c, 0x0a, 0x6c, 0xc5, 0x3f,
2151    0xde, 0xdb, 0xe6, 0x57, 0x16, 0x4e, 0xbc, 0xb1,
2152    0x02, 0x7c, 0x58, 0x85, 0x60, 0x1f, 0x0d, 0x0f,
2153    0x4f, 0x5f, 0xbf, 0xa3, 0xbc, 0x2c, 0xfe, 0x66,
2154    0xbf, 0xb5, 0x93, 0xf0, 0x13, 0xfa, 0x52, 0x07,
2155    0x40, 0xdb, 0xbf, 0x6e, 0x6c, 0xca, 0x74, 0x61,
2156    0x0b, 0xa6, 0xaf, 0x02, 0x60, 0xf1, 0x57, 0x17,
2157    0x08, 0xf1, 0x09, 0xf7, 0xc4, 0x4e, 0x51, 0xaf,
2158    0x04, 0xf1, 0x4c, 0xbc, 0xe5, 0x77, 0x8f, 0x0f,
2159    0x9b, 0xa7, 0xb3, 0xf7, 0xb0, 0x32, 0x14, 0xbc,
2160    0x1d, 0x40, 0xe7, 0x06, 0x01, 0xd6, 0xf2, 0x7f,
2161    0x84, 0xab, 0x47, 0x34, 0x15, 0x2c, 0x62, 0xfe,
2162    0x95, 0x51, 0xaf, 0x51, 0x4a, 0x1d, 0xc4, 0xea,
2163    0xaf, 0xdc, 0xe4, 0xea, 0xa7, 0x7d, 0x25, 0x2a,
2164    0x79, 0x24, 0xf8, 0xaa, 0xf2, 0xe9, 0x82, 0x48,
2165    0x7b, 0x0e, 0x2c, 0x5c, 0x38, 0x89, 0x21, 0xfe,
2166    0x91, 0x72, 0xed, 0xd9, 0x41, 0xac, 0x0d, 0xdc,
2167    0x12, 0xf4, 0x3f, 0x49, 0x91, 0x65, 0x2d, 0x39,
2168    0xea, 0xdf, 0xc6, 0xcd, 0xa8, 0xbe, 0x53, 0x23,
2169    0x04, 0xbf, 0xd3, 0xf0, 0xb8, 0x76, 0xc8, 0x01,
2170    0x43, 0x2c, 0x6b, 0x79, 0xae, 0x23, 0x50, 0xe0,
2171    0x34, 0x09, 0x85, 0xd8, 0xdb, 0xc5, 0x37, 0xb8,
2172    0xd5, 0x49, 0x26, 0x9c, 0x0b, 0x85, 0x95, 0x5f,
2173    0x28, 0x17, 0x8d, 0xd3, 0x0d, 0xe0, 0x34, 0x34,
2174    0x23, 0x07, 0x74, 0x13, 0x55, 0xd7, 0xe5, 0xb4,
2175    0x83, 0x4c, 0xd8, 0xdc, 0xdb, 0x5a, 0xe9, 0x3c,
2176    0x36, 0x53, 0xa4, 0x3a, 0x80, 0xde, 0x77, 0xa0,
2177    0xaa, 0x9a, 0xe7, 0x6e, 0xdd, 0x98, 0xdd, 0x6a,
2178    0xf4, 0x34, 0xda, 0x83, 0x80, 0x9c, 0xe5, 0x83,
2179    0xb3, 0xb6, 0xf7, 0x81, 0x39, 0x46, 0xea, 0x93,
2180    0x85, 0xad, 0xf5, 0xa7, 0x1a, 0xb1, 0x31, 0x6f,
2181    0xb9, 0x79, 0x11, 0x57, 0x62, 0x47, 0xd9, 0xcc,
2182    0x67, 0x78, 0xec, 0x32, 0xd3, 0x0c, 0x34, 0xea,
2183    0x1b, 0xa8, 0x84, 0x54, 0xb1, 0xf3, 0x80, 0x4b,
2184    0x79, 0x32, 0x82, 0x18, 0x54, 0x2d, 0xdf, 0xbb,
2185    0x4d, 0xbe, 0x75, 0xa0, 0x8e, 0x53, 0x52, 0xed,
2186    0x6e, 0x0a, 0x9f, 0xa6, 0x9b, 0x14, 0x32, 0x10,
2187    0xf1, 0x7e, 0xdd, 0xfa, 0xc5, 0xf5, 0xbd, 0x67,
2188    0xfb, 0x64, 0xf6, 0xc3, 0xb1, 0xc9, 0x81, 0x17,
2189    0x60, 0x56, 0x11, 0xdc, 0x63, 0x13, 0x16, 0x4a,
2190    0xa8, 0xeb, 0x7f, 0x82, 0xd3, 0x90, 0xeb, 0x5e,
2191    0xe7, 0xb0, 0xd9, 0x3e, 0x13, 0xd3, 0x73, 0x90,
2192    0x0d, 0x67, 0xc1, 0x18, 0xcc, 0x3b, 0x88, 0xcd,
2193    0x4d, 0x40, 0xbe, 0xd4, 0x5e, 0xee, 0x73, 0xa4,
2194    0xee, 0xbd, 0xcb, 0xbc, 0x39, 0x8b, 0x6d, 0x15,
2195    0x34, 0x18, 0xd2, 0x55, 0x93, 0xc0, 0xf4, 0x95,
2196    0xd1, 0xe4, 0x7f, 0x37, 0xb1, 0x3a, 0x8c, 0x4b,
2197    0xbc, 0x7d, 0x76, 0xb4, 0x34, 0xf4, 0x11, 0x5c,
2198    0x10, 0xeb, 0x34, 0x88, 0x61, 0xd7, 0x89, 0xac,
2199    0x87, 0x91, 0x6a, 0x80, 0xee, 0x07, 0x0d, 0x26,
2200    0xfa, 0xd2, 0x75, 0x6b, 0xd6, 0x0b, 0xa5, 0xc6,
2201    0x71, 0x6d, 0x0a, 0x5b, 0x59, 0x62, 0x32, 0x60,
2202    0x42, 0x73, 0x75, 0xda, 0x63, 0x36, 0x96, 0xca,
2203    0xde, 0xe9, 0x60, 0xfe, 0xa2, 0x64, 0xcc, 0x85,
2204    0x22, 0x4c, 0xc5, 0x2f, 0x0e, 0xe8, 0xf5, 0x93,
2205    0xdb, 0x16, 0xa7, 0x1f, 0xd9, 0x30, 0xbc, 0xa2,
2206    0xba, 0x23, 0xca, 0xea, 0xc1, 0x4d, 0x2f, 0xd4,
2207    0x81, 0x98, 0xff, 0x58, 0xfc, 0x40, 0x39, 0x75,
2208    0x52, 0x3e, 0x3e, 0xf4, 0x8d, 0x95, 0x55, 0x0a,
2209    0x95, 0x5f, 0x4f, 0x5d, 0xdd, 0x0d, 0xb8, 0xd4,
2210    0x63, 0x98, 0x48, 0x6b, 0xec, 0xe8, 0xd9, 0xae,
2211    0xeb, 0x9d, 0x48, 0xa4, 0x9a, 0x63, 0x03, 0xc4,
2212    0x57, 0xcd, 0x7d, 0x97, 0xc8, 0x11, 0x7e, 0xcb,
2213    0x78, 0xe8, 0x5d, 0x6e, 0xe6, 0xdd, 0x13, 0x33,
2214    0xf2, 0x05, 0xcd, 0x5a, 0x44, 0x18, 0xf9, 0x32,
2215    0x41, 0x4e, 0x5c, 0xfc, 0x7a, 0xe9, 0xc2, 0x28,
2216    0xd3, 0x42, 0x56, 0xc8, 0x39, 0x26, 0x78, 0xdd,
2217    0x92, 0x1c, 0xa6, 0xf4, 0x94, 0xa9, 0xc4, 0x69,
2218    0xf9, 0x7e, 0xea, 0x9c, 0xd6, 0x92, 0xd6, 0xab,
2219    0xd5, 0x1d, 0xde, 0x4e, 0x8d, 0x6c, 0xb2, 0xc3,
2220    0x8a, 0xcb, 0xdb, 0xfc, 0x2d, 0xb6, 0xc6, 0x16,
2221    0x49, 0xd1, 0x31, 0x51, 0x90, 0x0c, 0x75, 0x6e,
2222    0x27, 0x3b, 0xda, 0x42, 0x0b, 0xdc, 0xd1, 0xea,
2223    0xde, 0xd9, 0xbe, 0x02, 0xb8, 0xb0, 0x55, 0xba,
2224    0xde, 0x0c, 0xcf, 0x68, 0xd2, 0x02, 0x7f, 0x16,
2225    0x5a, 0x63, 0xcc, 0xd1, 0x42, 0xb3, 0x2f, 0x08,
2226    0x4a, 0x8c, 0x06, 0xa9, 0x13, 0xa2, 0xca, 0xf0,
2227    0x72, 0xff, 0xd1, 0x77, 0x58, 0xcd, 0x8d, 0x49,
2228    0xca, 0x67, 0x9a, 0x21, 0x58, 0x94, 0xa6, 0x80,
2229    0x57, 0xb4, 0xfb, 0x7a, 0x76, 0x30, 0xe8, 0xa1,
2230    0xef, 0x45, 0x6f, 0xa9, 0x62, 0xf5, 0x51, 0xfa,
2231    0x87, 0x56, 0x07, 0x9b, 0xc3, 0xab, 0xd6, 0x3c,
2232    0xa4, 0x3a, 0x02, 0x1f, 0xcd, 0xaa, 0xce, 0x2c,
2233    0xc9, 0x49, 0x30, 0x27, 0x3e, 0x27, 0x92, 0x59,
2234    0xff, 0xb7, 0x35, 0x6e, 0xe7, 0x7e, 0x94, 0x06,
2235    0xf0, 0x2b, 0x00, 0x58, 0x3f, 0x5e, 0x28, 0x12,
2236    0x70, 0x1c, 0x6b, 0xef, 0x78, 0x22, 0x12, 0x03,
2237    0xd7, 0x12, 0xd5, 0x46, 0xd6, 0xf2, 0xea, 0x16,
2238    0x94, 0x2c, 0x1a, 0xfa, 0x52, 0x05, 0xed, 0xf1,
2239    0x25, 0xf4, 0x06, 0x8b, 0x85, 0x7c, 0x38, 0x70,
2240    0x53, 0x54, 0x41, 0x6c, 0x8a, 0x0a, 0x60, 0x83,
2241    0x59, 0x7d, 0x73, 0xe0, 0xd8, 0xa5, 0x1b, 0x3a,
2242    0xec, 0xcd, 0x5f, 0x44, 0x0b, 0xeb, 0xcc, 0xe9,
2243    0x65, 0xd4, 0x68, 0xb0, 0x3d, 0x13, 0xf1, 0xb9,
2244    0x2a, 0x67, 0xb7, 0xae, 0x4f, 0xf3, 0xa7, 0x2e,
2245    0x33, 0xf3, 0x80, 0xc1, 0x4f, 0xd1, 0xcd, 0xdd,
2246    0xd2, 0xab, 0xde, 0xcb, 0x04, 0xc8, 0x1b, 0x26,
2247    0xd4, 0x86, 0xd8, 0x6f, 0xe1, 0x2b, 0x85, 0xb9,
2248    0x2c, 0xe3, 0xaf, 0xf5, 0x9f, 0x4b, 0xfb, 0x41,
2249    0xa9, 0xc9, 0x2e, 0xd0, 0x2d, 0xda, 0xba, 0xa0,
2250    0xba, 0xfb, 0x14, 0x5d, 0x2e, 0xbf, 0x65, 0xbd,
2251    0xe3, 0x51, 0x8d, 0xdd, 0xbb, 0x51, 0x35, 0x3a,
2252    0xf0, 0xbe, 0x74, 0xae, 0x42, 0x8b, 0x5d, 0xd9,
2253    0xef, 0x67, 0x1c, 0x01, 0xb5, 0x1c, 0xc9, 0x3d,
2254    0x0c, 0x42, 0x3a, 0xce, 0x53, 0xbb, 0x23, 0xd0,
2255    0x92, 0x2c, 0x60, 0x0f, 0xf1, 0x73, 0x37, 0xa9,
2256    0x99, 0x86, 0xd9, 0x7e, 0xfc, 0x8a, 0x56, 0xa2,
2257    0xf7, 0x17, 0x69, 0x75, 0x49, 0x1a, 0x8e, 0x4c,
2258    0x4b, 0x87, 0xe0, 0xfb, 0xcc, 0x93, 0x14, 0x7d,
2259    0x96, 0xdc, 0xcc, 0xc6, 0x3c, 0x8d, 0x71, 0x50,
2260    0xf2, 0x0f, 0x67, 0xdd, 0xd9, 0x95, 0xb7, 0xc9,
2261    0xd8, 0xf4, 0x1a, 0xca, 0x0c, 0x90, 0xe4, 0xf5,
2262    0x0e, 0xf7, 0xfb, 0x8c, 0x4c, 0x92, 0x66, 0x3c,
2263    0x3d, 0xf2, 0x47, 0x6f, 0x8c, 0x51, 0x71, 0xff,
2264    0xe1, 0xba, 0x1f, 0x02, 0x64, 0x12, 0x79, 0xa5,
2265    0xad, 0x6e, 0x7c, 0xab, 0xf1, 0x06, 0x01, 0xc1,
2266    0x25, 0x4e, 0xd6, 0xb6, 0xc3, 0xe9, 0xbe, 0x64,
2267    0x52, 0x18, 0x22, 0x01, 0x23, 0xc6, 0xd6, 0xbb,
2268    0x13, 0xbe, 0x15, 0x40, 0xc4, 0x97, 0x4b, 0x24,
2269    0xe7, 0xaa, 0xef, 0x3b, 0x24, 0x04, 0x47, 0xcc,
2270    0x4d, 0xd8, 0xd2, 0x9f, 0xf6, 0x60, 0xb9, 0x04,
2271    0x27, 0xc0, 0x1c, 0xbc, 0x28, 0xe6, 0x16, 0xa4,
2272    0x06, 0xa8, 0xab, 0x52, 0x56, 0x58, 0x53, 0x4a,
2273    0xda, 0x0d, 0xf0, 0xb2, 0x8a, 0x8e, 0x7d, 0xd7,
2274    0x29, 0x45, 0xe9, 0xc6, 0xc3, 0xf4, 0xaa, 0x16,
2275    0x01, 0x48, 0x1d, 0x6c, 0x90, 0xbe, 0x49, 0x5c,
2276    0x28, 0x49, 0x18, 0xd5, 0x52, 0xd5, 0x12, 0x54,
2277    0x9c, 0x1f, 0xc0, 0xb5, 0x8f, 0x22, 0xa7, 0x2a,
2278    0xd7, 0x36, 0x41, 0xc2, 0xc1, 0x7d, 0x11, 0x9b,
2279    0xbf, 0x84, 0x2a, 0x05, 0x9f, 0x41, 0xea, 0x54,
2280    0xf2, 0xe1, 0x69, 0x4d, 0xd5, 0x63, 0x00, 0x28,
2281    0x81, 0x75, 0xd3, 0x8c, 0x19, 0x81, 0xd6, 0x0a,
2282    0x25, 0x62, 0x9e, 0x35, 0xd0, 0x4d, 0xc7, 0x73,
2283    0x3e, 0xae, 0x39, 0x89, 0xf9, 0xb6, 0x67, 0xf0,
2284    0x08, 0x98, 0xd7, 0x87, 0xf1, 0xf4, 0x58, 0x12,
2285    0xf5, 0x22, 0x51, 0xad, 0x9a, 0x4d, 0xed, 0x09,
2286    0x81, 0x82, 0x99, 0x9b, 0x5f, 0x05, 0xb6, 0x3e,
2287    0x8e, 0xad, 0x34, 0xa1, 0x2d, 0xb6, 0xae, 0xc7,
2288    0x7b, 0x7f, 0x39, 0xf9, 0x53, 0xaf, 0xcd, 0x0e,
2289    0xcc, 0x98, 0x5b, 0x5b, 0x92, 0x8c, 0x75, 0x36,
2290    0x0a, 0xa9, 0xfc, 0xf5, 0x22, 0x14, 0xf3, 0x44,
2291    0x5e, 0xc7, 0xf6, 0x7f, 0x3a, 0x92, 0x0b, 0xc1,
2292    0x68, 0xa3, 0xc2, 0xd8, 0xf3, 0xd1, 0x12, 0x5b,
2293    0x12, 0xd1, 0x96, 0x18, 0x50, 0x0c, 0xb5, 0x13,
2294    0x40, 0xcb, 0x38, 0xdd, 0xf7, 0xc2, 0x4f, 0xb9,
2295    0xda, 0xd2, 0x94, 0x3f, 0xbf, 0x63, 0x4f, 0x0a,
2296    0xb8, 0x03, 0x67, 0x65, 0xc6, 0x40, 0xff, 0xc8,
2297    0xd7, 0x8e, 0x06, 0x92, 0x7a, 0xdb, 0xad, 0x7d,
2298    0x1b, 0x82, 0xd5, 0x19, 0xf1, 0x4a, 0x11, 0x3a,
2299    0xe4, 0x23, 0x39, 0x8d, 0x5d, 0x0a, 0x63, 0xb2,
2300    0x67, 0x1f, 0x98, 0xde, 0x5a, 0x44, 0x6a, 0x70,
2301    0xff, 0x83, 0x34, 0x78, 0xa5, 0x02, 0x0b, 0x51,
2302    0x4b, 0x0a, 0xab, 0x16, 0x04, 0x2e, 0xce, 0x6a,
2303    0xf2, 0x72, 0x4c, 0x6f, 0x2f, 0xfa, 0xca, 0xd8,
2304    0x19, 0x4f, 0x48, 0x9f, 0x1c, 0x7d, 0x60, 0x34,
2305    0x9c, 0x79, 0x44, 0xd3, 0xaa, 0xea, 0x5c, 0xfe,
2306    0xa0, 0xa1, 0x6e, 0xff, 0xa8, 0xb6, 0xe3, 0xd9,
2307    0x60, 0xf2, 0x93, 0x32, 0x77, 0x07, 0xd6, 0xbb,
2308    0xdf, 0x3a, 0x49, 0x38, 0xad, 0xc4, 0x63, 0xaf,
2309    0xd0, 0x00, 0x41, 0xdb, 0x96, 0x75, 0xbb, 0xb3,
2310    0xa8, 0x10, 0x67, 0x7e, 0x47, 0x89, 0x8c, 0xce,
2311    0xdd, 0xe8, 0x8b, 0xf3, 0xdb, 0xd7, 0xf5, 0x4f,
2312    0x22, 0xbf, 0x19, 0x61, 0x64, 0xf7, 0xe3, 0xcd,
2313    0x4e, 0x3d, 0x19, 0x8e, 0x45, 0x8c, 0xce, 0xd3,
2314    0x65, 0x3e, 0xb0, 0xdc, 0x94, 0x2e, 0xa2, 0xc2,
2315    0x53, 0xba, 0x46, 0x3a, 0xd1, 0x39, 0xd4, 0x7a,
2316    0xd8, 0xd6, 0x95, 0xb7, 0xdb, 0xdd, 0x7a, 0x81,
2317    0x78, 0xac, 0xfe, 0x0a, 0x1c, 0x74, 0x3f, 0x52,
2318    0xa3, 0x4d, 0xee, 0x4d, 0x37, 0x15, 0xd7, 0x39,
2319    0x06, 0x59, 0xec, 0xa7, 0x92, 0xb2, 0x65, 0xee,
2320    0x49, 0x63, 0xf4, 0x01, 0x54, 0xc2, 0xa0, 0xab,
2321    0xfc, 0x10, 0x03, 0x30, 0x22, 0x63, 0xdb, 0x6e,
2322    0xed, 0xd9, 0x1c, 0x28, 0xb1, 0x48, 0x09, 0xa8,
2323    0x1c, 0x97, 0x09, 0xda, 0xaa, 0x3e, 0xd7, 0xc3,
2324    0x65, 0x2f, 0x81, 0x22, 0x8e, 0x4e, 0x0e, 0x71,
2325    0xaa, 0x96, 0xe4, 0x23, 0xd7, 0xa1, 0x1f, 0xcb,
2326    0x8c, 0x9e, 0xa0, 0x39, 0xc4, 0xb1, 0x01, 0x68,
2327    0x90, 0x61, 0x58, 0xcd, 0x62, 0xa0, 0xa9, 0xeb,
2328    0xb3, 0x07, 0xb4, 0xf5, 0xf9, 0xb6, 0xdf, 0x05,
2329    0xc6, 0x03, 0x7a, 0xa5, 0x1e, 0x8c, 0x12, 0x79,
2330    0x9a, 0xe3, 0x2b, 0x22, 0x25, 0x9a, 0x52, 0x68,
2331    0x4b, 0x47, 0x71, 0xac, 0x71, 0x3e, 0x1a, 0x14,
2332    0x7f, 0x34, 0x4d, 0xdc, 0x4e, 0x49, 0xf6, 0x5a,
2333    0x91, 0x5b, 0x44, 0xc8, 0xef, 0x67, 0x9c, 0xfe,
2334    0xb3, 0x04, 0xa9, 0x4f, 0xa8, 0xf3, 0x89, 0xdf,
2335    0x89, 0x83, 0xff, 0xd2, 0x45, 0x95, 0x66, 0x56,
2336    0x23, 0x84, 0x01, 0x13, 0x90, 0x5a, 0x7a, 0x04,
2337    0xc3, 0x97, 0x60, 0xf2, 0x86, 0x35, 0x5c, 0x45,
2338    0x6f, 0xcf, 0x27, 0xbc, 0xbb, 0xc3, 0x52, 0xf6,
2339    0xb2, 0xd6, 0x5a, 0xe0, 0xbc, 0x14, 0xc8, 0xfd,
2340    0x57, 0x38, 0x61, 0x8e, 0xc2, 0x58, 0x5e, 0xcc,
2341    0x0d, 0x86, 0xb6, 0xf3, 0x27, 0x92, 0x4a, 0x44,
2342    0xde, 0x27, 0x4b, 0xf9, 0xc3, 0x62, 0x5d, 0xe2,
2343    0x72, 0xfe, 0xae, 0x22, 0x8f, 0x31, 0x52, 0x99,
2344    0xda, 0x94, 0xd3, 0xaa, 0x73, 0x49, 0xdb, 0x48,
2345    0x1a, 0x1f, 0x0b, 0x7b, 0x11, 0x3f, 0xcd, 0x57,
2346    0xc4, 0x4e, 0x7b, 0x3e, 0xc6, 0x82, 0x8a, 0x17,
2347    0x41, 0xe3, 0x00, 0x55, 0xec, 0x82, 0x9f, 0x65,
2348    0x30, 0x4d, 0xfa, 0xc1, 0x91, 0x16, 0x89, 0x4d,
2349    0xec, 0x5a, 0xee, 0x17, 0xa0, 0xaf, 0x03, 0xb4,
2350    0x04, 0x01, 0x54, 0xa6, 0x13, 0xad, 0x7c, 0x49,
2351    0x17, 0x75, 0x0c, 0x4a, 0xe6, 0xf8, 0x7c, 0xa2,
2352    0xf3, 0x53, 0x84, 0xb1, 0xd3, 0x23, 0x53, 0xc7,
2353    0x35, 0xdf, 0x66, 0xee, 0x0f, 0xbc, 0x8e, 0x2c,
2354    0x21, 0x43, 0x46, 0x97, 0x89, 0x90, 0x35, 0x18,
2355    0xcc, 0xd9, 0x3a, 0xc8, 0x58, 0x1c, 0x52, 0x94,
2356    0x57, 0x4d, 0x5a, 0x37, 0xc3, 0xfb, 0x65, 0xdd,
2357    0xbe, 0x96, 0x97, 0xdf, 0xda, 0x73, 0x60, 0x9a,
2358    0x45, 0x1e, 0x18, 0xf4, 0xea, 0x5e, 0xfc, 0x0e,
2359    0x39, 0xf3, 0x81, 0x88, 0x2a, 0xe5, 0xe1, 0x91,
2360    0xed, 0x37, 0x32, 0x63, 0x4d, 0xd3, 0x90, 0xcb,
2361    0x86, 0xc0, 0x5c, 0xbd, 0x04, 0x7e, 0x13, 0x69,
2362    0xa0, 0xe1, 0x1f, 0xbd, 0x86, 0x33, 0xf4, 0x99,
2363    0xd1, 0x4e, 0xde, 0x60, 0xbb, 0xd2, 0xd5, 0x9d,
2364    0x3f, 0x15, 0x01, 0x79, 0x4a, 0x03, 0x5e, 0x39,
2365    0x23, 0x99, 0xbb, 0x27, 0x8d, 0x93, 0x5c, 0x13,
2366    0x6e, 0xbf, 0xc0, 0x3a, 0x32, 0xf9, 0xc0, 0xf4,
2367    0xb4, 0x73, 0x16, 0x63, 0xba, 0x9d, 0x2c, 0xb1,
2368    0x08, 0x63, 0x69, 0xa4, 0x71, 0x0d, 0x67, 0x06,
2369    0xd3, 0x48, 0x0e, 0x7a, 0x53, 0xe0, 0xdd, 0x19,
2370    0xc2, 0xfc, 0x96, 0x07, 0xbc, 0xe6, 0x3d, 0x76,
2371    0x73, 0xcb, 0x7f, 0x0f, 0xe1, 0x9a, 0x70, 0xd0,
2372    0x0c, 0xf7, 0xc9, 0x96, 0x04, 0x70, 0x4a, 0xf8,
2373    0x9a, 0x68, 0x12, 0x1c, 0xfa, 0x2b, 0x96, 0x9c,
2374    0x3f, 0x45, 0xf9, 0x02, 0x80, 0xf4, 0xcd, 0x60,
2375    0xb3, 0xb2, 0x03, 0x69, 0x3f, 0x3f, 0x81, 0x2f,
2376    0xfc, 0x9e, 0x6a, 0x0a, 0x72, 0xdb, 0x65, 0xe0,
2377    0x20, 0xb9, 0x3e, 0x0f, 0xaa, 0xc7, 0x68, 0x29,
2378    0xd1, 0xfe, 0xbf, 0x73, 0x32, 0xcb, 0x97, 0xa8,
2379    0x67, 0x77, 0x08, 0x39, 0x0d, 0x1d, 0x01, 0xec,
2380    0x5a, 0x7f, 0x60, 0x69, 0x13, 0x47, 0xa1, 0x7f,
2381    0xfc, 0x0c, 0xee, 0x51, 0x6f, 0x53, 0x16, 0x2f,
2382    0xd5, 0x50, 0x9d, 0x99, 0xe7, 0xa8, 0xf7, 0xda,
2383    0xb2, 0x71, 0xcd, 0x3d, 0xaa, 0x40, 0x6d, 0x7a,
2384    0x51, 0x76, 0xb2, 0xca, 0xc2, 0xc8, 0x88, 0x30,
2385    0xf6, 0xa9, 0x9c, 0xb4, 0x7e, 0x24, 0xce, 0x20,
2386    0x0f, 0x10, 0xf2, 0xdb, 0xad, 0x43, 0x5e, 0x0c,
2387    0x3d, 0x27, 0x6a, 0xed, 0x38, 0x2b, 0xe2, 0xd0,
2388    0x91, 0xff, 0x5b, 0x7c, 0x0c, 0xed, 0x87, 0xa7,
2389    0xd5, 0x09, 0x79, 0xfd, 0xe5, 0xeb, 0x26, 0xe0,
2390    0xa9, 0x71, 0xae, 0xd5, 0xba, 0xc4, 0x8a, 0xdf,
2391    0x0e, 0xbf, 0x0e, 0x8a, 0x6a, 0x40, 0x3d, 0x48,
2392    0x06, 0x53, 0x57, 0x43, 0xc6, 0x91, 0x4a, 0x3a,
2393    0x19, 0xc4, 0x06, 0x85, 0xbb, 0x80, 0x6e, 0x0f,
2394    0xf4, 0x54, 0xa9, 0xab, 0x2e, 0x85, 0xe8, 0x89,
2395    0x48, 0x55, 0xe3, 0xca, 0x74, 0xf0, 0x59, 0x47,
2396    0x01, 0x1d, 0x6b, 0xcd, 0x6c, 0xd3, 0x00, 0x9a,
2397    0x82, 0xaf, 0x1e, 0x29, 0x82, 0xdb, 0xd3, 0x48,
2398    0x24, 0x3e, 0x61, 0xf9, 0x40, 0xc7, 0x28, 0xc6,
2399    0xe3, 0x27, 0x71, 0xf0, 0x37, 0xeb, 0xf4, 0x30,
2400    0xdd, 0x1e, 0xf1, 0x1f, 0xa6, 0xc0, 0x7d, 0x8c,
2401    0x83, 0xac, 0xd5, 0x91, 0x3a, 0x9f, 0x8b, 0x03,
2402    0xe6, 0x7b, 0xef, 0x25, 0x57, 0xe9, 0x37, 0x52,
2403    0x01, 0xa1, 0xf6, 0xa9, 0xaf, 0xbf, 0x43, 0xf2,
2404    0x43, 0x79, 0x32, 0xf5, 0x03, 0x70, 0xde, 0x3c,
2405    0x41, 0x4e, 0x7f, 0xeb, 0x9d, 0x0e, 0x91, 0x45,
2406    0x0c, 0x98, 0xdd, 0x65, 0xcb, 0x41, 0xde, 0x75,
2407    0xa8, 0xb6, 0xe0, 0xd6, 0xe9, 0xbe, 0xe7, 0xd9,
2408    0xb0, 0x01, 0x27, 0x0c, 0xf1, 0xc0, 0x20, 0xed,
2409    0x7b, 0x17, 0xb2, 0xfa, 0x56, 0x9b, 0x5a, 0xf5,
2410    0xb1, 0x2e, 0x36, 0xd0, 0x88, 0x2b, 0x00, 0xc5,
2411    0x02, 0x4a, 0xa0, 0xda, 0x65, 0xb6, 0x7b, 0xa1,
2412    0x7b, 0x1e, 0x28, 0x72, 0xcf, 0x4f, 0xa3, 0xe6,
2413    0x21, 0x14, 0x25, 0x40, 0xc4, 0x41, 0xda, 0xde,
2414    0xd4, 0x10, 0xca, 0x02, 0x95, 0x31, 0xcd, 0xfc,
2415    0xe9, 0x7b, 0xb8, 0x0f, 0xe3, 0xf1, 0xcb, 0x2e,
2416    0x8f, 0xd4, 0x3e, 0xfa, 0xdc, 0x5f, 0x4c, 0xc3,
2417    0xc1, 0x38, 0x8e, 0xbe, 0xf8, 0x21, 0x56, 0xaf,
2418    0xba, 0x42, 0xb7, 0x76, 0xd8, 0xfc, 0xa3, 0x6c,
2419    0x07, 0x62, 0xa2, 0xb5, 0x27, 0xe0, 0x18, 0x7c,
2420    0x57, 0xe3, 0x6d, 0xfe, 0x47, 0x56, 0x61, 0xd5,
2421    0xda, 0x17, 0x44, 0x7b, 0x47, 0xea, 0x43, 0x62,
2422    0xcf, 0x11, 0xe4, 0x6b, 0x26, 0x82, 0x24, 0x13,
2423    0x63, 0xc6, 0x14, 0xbb, 0x00, 0xad, 0xe6, 0xe7,
2424    0x32, 0x4e, 0x79, 0xae, 0xc0, 0x1a, 0x51, 0x78,
2425    0xc0, 0xd4, 0x13, 0x02, 0xb1, 0x55, 0xcf, 0xf0,
2426    0x92, 0xaa, 0xad, 0x8f, 0x89, 0x4d, 0xfc, 0x2e,
2427    0x3b, 0x1a, 0x22, 0xb2, 0x4e, 0xef, 0xdb, 0x98,
2428    0x56, 0x0f, 0x7a, 0x0a, 0x5e, 0xf6, 0xde, 0x8e,
2429    0xd5, 0xdc, 0x84, 0x72, 0xe6, 0xa9, 0xd2, 0x5f,
2430    0xd5, 0x66, 0xab, 0x1e, 0x8b, 0xf2, 0x28, 0x9b,
2431    0x77, 0xc5, 0x24, 0x04, 0x93, 0x85, 0x54, 0x5b,
2432    0xcc, 0x0a, 0x18, 0xdc, 0xa9, 0x27, 0x34, 0x1d
2433};
2434
2435static const unsigned char ml_dsa_65_sig[] = {
2436    0x5e, 0xc1, 0xb0, 0x64, 0x5c, 0x45, 0x6e, 0x22,
2437    0x9f, 0x7c, 0x49, 0xbf, 0x8e, 0x93, 0xe5, 0x83,
2438    0xfc, 0xa0, 0xf3, 0xb0, 0x93, 0x6f, 0x47, 0xa9,
2439    0x11, 0x9e, 0x1b, 0x13, 0xae, 0x05, 0xdd, 0xc6,
2440    0x55, 0x46, 0x81, 0x4f, 0x5e, 0x0c, 0xa7, 0x75,
2441    0x6b, 0x5c, 0x13, 0xf2, 0xc7, 0x1f, 0x4d, 0x74,
2442    0xa5, 0x50, 0xf4, 0xec, 0x3e, 0x75, 0x75, 0xbf,
2443    0x4c, 0xef, 0x50, 0x02, 0x87, 0x7d, 0x88, 0x05,
2444    0x40, 0xba, 0xc1, 0x8e, 0xd6, 0x5d, 0xe3, 0x3c,
2445    0xd9, 0x98, 0x05, 0x76, 0x09, 0xdf, 0xcb, 0xd2,
2446    0x0e, 0x56, 0x53, 0x88, 0x1e, 0xe1, 0x91, 0xcd,
2447    0x7d, 0x67, 0x11, 0x89, 0xf8, 0x58, 0xb9, 0x76,
2448    0xd6, 0x8f, 0x83, 0xca, 0xcc, 0x94, 0xf4, 0x97,
2449    0x58, 0xf5, 0x3d, 0xc7, 0xaa, 0xa4, 0x3f, 0xe3,
2450    0xcb, 0xcc, 0x67, 0xac, 0x50, 0x8f, 0xfe, 0xf7,
2451    0x90, 0x33, 0x04, 0x8b, 0x82, 0x14, 0x26, 0xa7,
2452    0x21, 0x4e, 0xf2, 0x37, 0x5a, 0x91, 0xe8, 0x7a,
2453    0x30, 0xb6, 0xce, 0x8f, 0x31, 0xfc, 0xef, 0xbe,
2454    0x7d, 0x16, 0x81, 0x18, 0xb3, 0x77, 0x0f, 0x4a,
2455    0xe9, 0x31, 0xf8, 0x51, 0x0e, 0xaa, 0x44, 0x5c,
2456    0x8b, 0x43, 0x0a, 0x61, 0x02, 0x6c, 0xdf, 0xee,
2457    0x09, 0x9b, 0x8f, 0x91, 0x5c, 0x75, 0x10, 0xa8,
2458    0xc6, 0xe3, 0x5d, 0x93, 0x74, 0x63, 0x73, 0x27,
2459    0xb9, 0x29, 0xc0, 0x9b, 0x62, 0x6a, 0xc6, 0x75,
2460    0x84, 0x78, 0x41, 0xf3, 0x5c, 0x5d, 0x60, 0xcf,
2461    0xc5, 0xe4, 0x78, 0x87, 0x53, 0x6c, 0xab, 0xff,
2462    0xbb, 0x53, 0xe9, 0x54, 0xf7, 0x1e, 0x06, 0xcf,
2463    0x9e, 0x52, 0xd0, 0x3c, 0x8c, 0x5e, 0x64, 0xba,
2464    0x28, 0x33, 0xb0, 0x14, 0x84, 0x56, 0x5a, 0xac,
2465    0xd6, 0xee, 0x1e, 0x5e, 0x39, 0x08, 0xcb, 0x16,
2466    0x54, 0x21, 0xe4, 0x6c, 0xa7, 0x29, 0xd2, 0x7b,
2467    0xbe, 0x09, 0xd5, 0x1c, 0xf2, 0xf8, 0x11, 0x1e,
2468    0x64, 0x6b, 0xca, 0x1a, 0xe4, 0xca, 0xab, 0xf1,
2469    0x13, 0xdc, 0xa2, 0x1e, 0x78, 0x09, 0x2a, 0x08,
2470    0xc5, 0xa1, 0x42, 0x62, 0xac, 0x94, 0x46, 0x61,
2471    0x37, 0x98, 0x0d, 0x93, 0xa6, 0xc2, 0x4d, 0xb8,
2472    0x00, 0x43, 0x4d, 0x6c, 0x5d, 0x06, 0x30, 0xaf,
2473    0xd5, 0xb6, 0x32, 0x9e, 0xfe, 0xf2, 0x03, 0x8b,
2474    0xa6, 0x7c, 0x6d, 0x36, 0x7e, 0xef, 0x99, 0x09,
2475    0xaf, 0x2c, 0x79, 0x70, 0x26, 0xff, 0xc8, 0x99,
2476    0x01, 0x93, 0x3b, 0x9c, 0xde, 0x0b, 0x5e, 0xf5,
2477    0x44, 0x5f, 0x15, 0xb6, 0x49, 0xde, 0x89, 0xdd,
2478    0x1e, 0x2b, 0x69, 0x7d, 0xb2, 0x88, 0xf2, 0x94,
2479    0x24, 0x49, 0xeb, 0x23, 0xfc, 0x60, 0x95, 0x09,
2480    0x89, 0xe5, 0xfd, 0xe3, 0x63, 0xfa, 0x3a, 0xb7,
2481    0x18, 0x99, 0xe0, 0x5a, 0x25, 0x94, 0xd6, 0x3a,
2482    0x6a, 0x48, 0x6e, 0xea, 0xe3, 0x61, 0xf8, 0x81,
2483    0xe8, 0x4a, 0x43, 0xcb, 0x19, 0xfe, 0x2e, 0x16,
2484    0x8d, 0xca, 0x7e, 0xeb, 0x81, 0x55, 0xc0, 0x8a,
2485    0xf5, 0x14, 0x5b, 0xb6, 0x06, 0x45, 0x72, 0xa6,
2486    0x8a, 0xc2, 0x16, 0x8d, 0xe4, 0x31, 0x54, 0x9c,
2487    0xd2, 0x75, 0x5f, 0x7d, 0xf2, 0x19, 0x19, 0xf4,
2488    0x4a, 0xfe, 0xaf, 0x18, 0x2d, 0x51, 0x43, 0x2e,
2489    0x40, 0x02, 0xc0, 0x25, 0x53, 0x10, 0x37, 0x3d,
2490    0xeb, 0xd6, 0x08, 0x75, 0x6c, 0xb2, 0x38, 0x72,
2491    0xef, 0x67, 0x80, 0x50, 0xc7, 0x54, 0x4c, 0x91,
2492    0xcb, 0x68, 0x64, 0x23, 0xa9, 0x4b, 0x0d, 0xcb,
2493    0x71, 0x9c, 0x27, 0x67, 0x22, 0x98, 0xad, 0x3a,
2494    0xa0, 0xd8, 0x9f, 0x21, 0x95, 0xdc, 0xb0, 0xa5,
2495    0xb4, 0x44, 0x3b, 0xc8, 0xcb, 0x5c, 0x50, 0xd1,
2496    0x38, 0x03, 0x91, 0x79, 0x73, 0x2f, 0x4a, 0xd7,
2497    0x1f, 0xe5, 0xdc, 0x16, 0xaf, 0xb1, 0x2a, 0x86,
2498    0x02, 0x0b, 0x31, 0x42, 0x64, 0x2f, 0x8a, 0x83,
2499    0x7b, 0x13, 0x78, 0xdd, 0x6c, 0x72, 0x46, 0xa2,
2500    0x84, 0x2f, 0xa8, 0x24, 0x43, 0xb0, 0x69, 0xaf,
2501    0x52, 0x58, 0x13, 0x7c, 0xb3, 0xf8, 0x2d, 0x74,
2502    0x87, 0x68, 0x17, 0xd6, 0x0c, 0x50, 0x19, 0xf8,
2503    0x11, 0x68, 0xd5, 0x1c, 0x56, 0x30, 0x5d, 0x31,
2504    0x56, 0xe4, 0x9d, 0x80, 0x39, 0x0c, 0xcd, 0x34,
2505    0xfe, 0x67, 0x2f, 0xfa, 0x0c, 0x10, 0xb2, 0xcd,
2506    0x66, 0x9e, 0x65, 0xac, 0xc5, 0x45, 0x33, 0x20,
2507    0x16, 0x79, 0x82, 0x48, 0x26, 0xaa, 0x54, 0xd9,
2508    0x32, 0x03, 0x99, 0x46, 0x65, 0xf8, 0xa8, 0xe7,
2509    0x3c, 0xb1, 0xf9, 0xed, 0x76, 0x21, 0x36, 0xab,
2510    0x98, 0x2d, 0xf2, 0xd1, 0x75, 0x33, 0x58, 0xb5,
2511    0x7c, 0x4e, 0x3b, 0x78, 0xb6, 0x24, 0x15, 0xd2,
2512    0xac, 0x41, 0x44, 0x46, 0x4d, 0x7a, 0x5b, 0x86,
2513    0xce, 0xc2, 0x93, 0x11, 0x8f, 0x68, 0xb5, 0xc7,
2514    0x83, 0x8f, 0xe1, 0x13, 0x91, 0xef, 0xca, 0x18,
2515    0xa3, 0xf1, 0x04, 0x28, 0x58, 0xd8, 0x54, 0x12,
2516    0x03, 0xbe, 0xe1, 0x29, 0xcf, 0x28, 0xa3, 0x43,
2517    0x78, 0x00, 0xb7, 0x52, 0x00, 0xe3, 0x44, 0x07,
2518    0x5f, 0x67, 0xb1, 0x78, 0x75, 0x9c, 0xe0, 0xc7,
2519    0x33, 0x5f, 0x69, 0x27, 0x05, 0x15, 0xc3, 0xd4,
2520    0x81, 0x09, 0x33, 0x7b, 0x3e, 0xc4, 0x71, 0xc3,
2521    0xc0, 0x9a, 0x2c, 0xb5, 0xfc, 0x00, 0x79, 0x1d,
2522    0x12, 0xb4, 0x90, 0xf1, 0xa3, 0xb1, 0xaa, 0xa8,
2523    0xf9, 0x40, 0x48, 0xb1, 0x8b, 0x3c, 0xa9, 0xa9,
2524    0x36, 0xe0, 0xe8, 0xd3, 0x43, 0x4f, 0x63, 0xcc,
2525    0xe1, 0xbf, 0x93, 0xa5, 0xb0, 0x7a, 0xac, 0xd6,
2526    0x69, 0x42, 0xce, 0x52, 0x8c, 0xd8, 0x30, 0x18,
2527    0x9f, 0x77, 0xa2, 0xd6, 0xde, 0x5a, 0x3d, 0x59,
2528    0x28, 0x3a, 0x2a, 0x58, 0x25, 0xcb, 0x95, 0x01,
2529    0x9d, 0x04, 0x81, 0x1d, 0x63, 0xfb, 0xb1, 0xf3,
2530    0x0b, 0x3d, 0x68, 0xc1, 0x42, 0x83, 0xc5, 0xc2,
2531    0x27, 0x1e, 0x58, 0x4f, 0x42, 0x89, 0x45, 0x08,
2532    0xb2, 0xf2, 0x8d, 0x26, 0xd1, 0xb3, 0x4d, 0xbd,
2533    0xaf, 0x74, 0xc9, 0x7f, 0xbe, 0x81, 0x46, 0x73,
2534    0xdb, 0x68, 0x45, 0x41, 0xb1, 0xbe, 0xe7, 0x76,
2535    0x31, 0x01, 0xc8, 0x8c, 0xb5, 0x26, 0x9e, 0x2e,
2536    0xde, 0x07, 0x9f, 0x5b, 0x7e, 0x73, 0x36, 0xbf,
2537    0x51, 0x60, 0x98, 0xe0, 0x6e, 0x83, 0x85, 0x21,
2538    0x2c, 0xdb, 0x28, 0x2c, 0x8f, 0x4b, 0xf9, 0x15,
2539    0x08, 0x8f, 0x06, 0xa8, 0xfe, 0x26, 0x2b, 0xea,
2540    0xaf, 0xb0, 0x97, 0x3c, 0xb9, 0xf8, 0x25, 0xef,
2541    0xf5, 0x58, 0xd2, 0xf4, 0xbd, 0x1c, 0x1b, 0x84,
2542    0x29, 0xde, 0xbe, 0xb6, 0xfd, 0x30, 0x47, 0x0c,
2543    0x63, 0x3a, 0x3e, 0x6d, 0x8b, 0x0b, 0x1e, 0x64,
2544    0x5d, 0x8f, 0x64, 0xc9, 0x35, 0x7a, 0xb4, 0xb9,
2545    0xfb, 0x47, 0xe4, 0x50, 0xcd, 0xf6, 0x1a, 0xb1,
2546    0xf6, 0x22, 0x0a, 0xd5, 0x63, 0xb5, 0x20, 0xed,
2547    0x13, 0xfb, 0x43, 0x11, 0x67, 0x89, 0x6d, 0x9f,
2548    0xb1, 0x6f, 0xe8, 0x48, 0x2f, 0x7e, 0xda, 0xbc,
2549    0x08, 0xc2, 0xde, 0x1c, 0x29, 0xa4, 0x50, 0x7d,
2550    0x9c, 0x8e, 0xbc, 0x0d, 0x2b, 0xe2, 0xda, 0xb6,
2551    0x9c, 0x6c, 0x08, 0xd3, 0x3c, 0xf6, 0x71, 0x23,
2552    0x90, 0x07, 0x8f, 0x99, 0x86, 0x85, 0xf8, 0xaa,
2553    0xed, 0x65, 0x99, 0xf3, 0xf5, 0x69, 0xe2, 0x6b,
2554    0x67, 0x47, 0x5c, 0x8d, 0x5d, 0xee, 0x9c, 0xda,
2555    0xa1, 0x56, 0x73, 0x35, 0xf1, 0xe7, 0x2e, 0xb9,
2556    0xf9, 0x70, 0xc5, 0xb4, 0xdd, 0x21, 0x9f, 0x25,
2557    0x23, 0xf4, 0x74, 0x57, 0xc1, 0xfd, 0x09, 0x2e,
2558    0x80, 0xea, 0x4d, 0x90, 0x93, 0x84, 0x06, 0x43,
2559    0xc0, 0xbc, 0x26, 0xd2, 0xfd, 0x3b, 0x03, 0x2e,
2560    0x93, 0x90, 0xb3, 0x4b, 0xd4, 0x58, 0x31, 0x18,
2561    0xc5, 0xa5, 0xc4, 0x3c, 0xe5, 0xb5, 0x23, 0xfb,
2562    0xec, 0xb0, 0xb8, 0xe7, 0x7e, 0x1a, 0xb3, 0xf9,
2563    0xce, 0x5a, 0x25, 0x02, 0x2e, 0xcf, 0xb3, 0x4a,
2564    0xe3, 0x5e, 0xd5, 0xc8, 0x78, 0x0a, 0x89, 0x7c,
2565    0x3e, 0x30, 0x8a, 0xd5, 0xb0, 0x60, 0xc1, 0x52,
2566    0x7c, 0xbc, 0x9e, 0x47, 0x0a, 0xa7, 0xc3, 0xee,
2567    0x11, 0x06, 0x72, 0x89, 0x23, 0x8b, 0x51, 0xb8,
2568    0xbb, 0x5d, 0xc1, 0xf0, 0x38, 0x66, 0x8e, 0xa7,
2569    0x43, 0xad, 0xc1, 0x40, 0x80, 0x58, 0xe4, 0xdf,
2570    0x0d, 0xb1, 0x2b, 0xa2, 0xd4, 0x58, 0x20, 0x95,
2571    0xee, 0x51, 0x13, 0x94, 0x1e, 0x8d, 0x1e, 0xd4,
2572    0x2d, 0x82, 0x73, 0xa6, 0x92, 0x0c, 0xec, 0x74,
2573    0x12, 0xbe, 0x2a, 0x8c, 0x72, 0xb3, 0x99, 0x7d,
2574    0x33, 0x50, 0xe4, 0xeb, 0xad, 0x24, 0x7c, 0xef,
2575    0x1a, 0x41, 0x4b, 0x04, 0xe6, 0x21, 0xa3, 0x1a,
2576    0xa4, 0x13, 0xf4, 0xdc, 0x70, 0xa2, 0xdc, 0x0d,
2577    0xc1, 0x02, 0x43, 0xeb, 0xf7, 0x69, 0x82, 0x7a,
2578    0x99, 0x61, 0x1b, 0x14, 0xaa, 0xce, 0x2b, 0x1b,
2579    0xd1, 0xaa, 0x3a, 0x99, 0xae, 0x51, 0xae, 0x35,
2580    0xb9, 0x8c, 0xe0, 0x43, 0x6e, 0x1e, 0x17, 0x36,
2581    0xf0, 0x9e, 0xf2, 0x83, 0x22, 0x6c, 0x82, 0xee,
2582    0xfb, 0x72, 0x35, 0x22, 0x45, 0x4a, 0xbc, 0xfa,
2583    0x65, 0x44, 0xa1, 0xce, 0x6a, 0x6a, 0xe1, 0x3f,
2584    0x6f, 0xd0, 0x45, 0x72, 0x29, 0xf4, 0xf4, 0xb0,
2585    0x97, 0x0e, 0x1e, 0xe6, 0xa8, 0xb6, 0xc8, 0x44,
2586    0x11, 0x99, 0x6e, 0xd9, 0xfd, 0x0b, 0x04, 0xaf,
2587    0x10, 0x0a, 0xd0, 0xae, 0x5d, 0xff, 0x78, 0x32,
2588    0x09, 0x39, 0x73, 0x2e, 0xaf, 0x65, 0x70, 0x3b,
2589    0xd5, 0xfe, 0x90, 0xc0, 0x9c, 0xf5, 0xba, 0xbd,
2590    0x9d, 0x78, 0xe9, 0x67, 0x87, 0x79, 0xad, 0x1f,
2591    0x77, 0x12, 0x8e, 0x8d, 0x6e, 0xc3, 0x69, 0xc6,
2592    0x22, 0x60, 0x2d, 0x4f, 0x49, 0x1b, 0xa7, 0xa3,
2593    0x8a, 0x14, 0x9d, 0x48, 0xfe, 0x0c, 0x38, 0x9a,
2594    0x0e, 0xbc, 0x7e, 0x5c, 0x6c, 0x01, 0xc5, 0x68,
2595    0x39, 0xd1, 0x33, 0xca, 0x23, 0xf6, 0x12, 0x02,
2596    0x59, 0x3f, 0xe2, 0x11, 0x9d, 0xa0, 0x41, 0x3d,
2597    0xa5, 0x3b, 0x5a, 0xe1, 0xdc, 0x66, 0x00, 0xcb,
2598    0x91, 0x39, 0x60, 0xd4, 0xa8, 0xdb, 0x91, 0xf3,
2599    0x2a, 0x7b, 0xfc, 0xc7, 0x41, 0x66, 0x88, 0x68,
2600    0x54, 0xff, 0x9f, 0x38, 0x03, 0x8c, 0x93, 0x72,
2601    0x4c, 0xab, 0xbe, 0xeb, 0x3d, 0x74, 0x74, 0x38,
2602    0xcf, 0x46, 0x08, 0xfa, 0x72, 0xcf, 0xbf, 0xed,
2603    0xb6, 0xc1, 0x0c, 0xc5, 0x13, 0xa9, 0x76, 0x67,
2604    0x6b, 0xe2, 0xad, 0xc4, 0x06, 0xfa, 0x0c, 0x81,
2605    0xd8, 0xdd, 0x7b, 0x28, 0x3f, 0x15, 0xb7, 0x0d,
2606    0xb3, 0x56, 0x5a, 0x3c, 0xa6, 0x8f, 0x96, 0x20,
2607    0xa4, 0x02, 0x6e, 0x0a, 0x7f, 0x8d, 0x97, 0x5a,
2608    0xb2, 0xf5, 0xa9, 0xd8, 0xb9, 0x0b, 0x72, 0x0c,
2609    0x6c, 0x6c, 0xcc, 0x31, 0x76, 0x55, 0x1a, 0xde,
2610    0xf5, 0x17, 0xd9, 0xb0, 0x57, 0xea, 0x39, 0xab,
2611    0xcd, 0xb7, 0x5f, 0x16, 0x07, 0xdb, 0x36, 0x63,
2612    0x16, 0x8c, 0x6f, 0x09, 0xe3, 0xc0, 0x43, 0xda,
2613    0xd0, 0x77, 0x17, 0xb4, 0x72, 0x50, 0xfc, 0x8e,
2614    0x1d, 0xdd, 0xec, 0x00, 0x2b, 0x21, 0xe4, 0x71,
2615    0xa4, 0xdd, 0x51, 0xd9, 0xe0, 0xdb, 0x14, 0x21,
2616    0x42, 0xf2, 0x90, 0x49, 0x25, 0x55, 0x48, 0x47,
2617    0x58, 0x7b, 0x96, 0x97, 0x42, 0xb2, 0xd5, 0x50,
2618    0xa9, 0x28, 0xba, 0xec, 0xba, 0x52, 0x6d, 0xd0,
2619    0xb1, 0x75, 0xd8, 0xd4, 0xda, 0x81, 0x10, 0x0c,
2620    0xb0, 0x75, 0x57, 0x57, 0x81, 0x7f, 0x8d, 0xf9,
2621    0x29, 0xaf, 0x27, 0x85, 0x45, 0x4a, 0x84, 0x53,
2622    0x78, 0xde, 0x09, 0xe9, 0xf5, 0x2c, 0xd4, 0x91,
2623    0xc3, 0x3a, 0x9c, 0x50, 0xe1, 0xc6, 0x20, 0x66,
2624    0x26, 0x4a, 0x7b, 0x4f, 0x05, 0x89, 0x97, 0x3b,
2625    0xe1, 0xb8, 0xbc, 0x28, 0xa4, 0x31, 0xa8, 0x13,
2626    0xb3, 0xc2, 0xf5, 0xee, 0x10, 0xec, 0x4c, 0xf4,
2627    0xd6, 0x21, 0xab, 0x9b, 0x58, 0xe8, 0x95, 0x7c,
2628    0x85, 0x64, 0x57, 0x81, 0x79, 0x1b, 0x8b, 0xb1,
2629    0x84, 0xd5, 0xe9, 0x86, 0xe1, 0x6f, 0xce, 0x56,
2630    0xe1, 0x8d, 0x1d, 0xa2, 0x4d, 0x54, 0x97, 0xc3,
2631    0x2e, 0xc5, 0x5d, 0x6e, 0x9b, 0x4f, 0x43, 0x0c,
2632    0xf0, 0x36, 0x68, 0x53, 0x9e, 0x2f, 0xbd, 0x5a,
2633    0x8f, 0x3c, 0x30, 0x9f, 0x38, 0x40, 0x58, 0x34,
2634    0x27, 0x18, 0xfc, 0x70, 0x54, 0x7e, 0x70, 0x15,
2635    0xeb, 0x93, 0x29, 0x15, 0x7d, 0xa7, 0x6b, 0xa0,
2636    0x5b, 0x7d, 0x2b, 0x7a, 0x79, 0x10, 0xb4, 0x8b,
2637    0xd9, 0xfa, 0x94, 0x5d, 0xc2, 0x1b, 0x0d, 0xf7,
2638    0x47, 0x18, 0xa9, 0x8f, 0xa2, 0x64, 0x32, 0x17,
2639    0x15, 0x1d, 0x3b, 0xed, 0x3c, 0x32, 0x8a, 0x69,
2640    0x2d, 0x14, 0xae, 0x5a, 0x4a, 0xa4, 0x79, 0xdb,
2641    0x6e, 0x9e, 0x81, 0xa5, 0x32, 0x92, 0xa3, 0x55,
2642    0x3e, 0xfa, 0x05, 0x21, 0x1e, 0x1d, 0xb8, 0x08,
2643    0x5e, 0xee, 0x21, 0x14, 0xc4, 0x38, 0x17, 0x6c,
2644    0x24, 0x1a, 0xdb, 0xbd, 0xf0, 0x37, 0x33, 0xc2,
2645    0xc5, 0xec, 0xe9, 0x92, 0x6d, 0x1c, 0xc0, 0x3e,
2646    0x58, 0x26, 0x26, 0xde, 0x87, 0xc2, 0xef, 0x2c,
2647    0x9d, 0x18, 0x7b, 0x71, 0x05, 0xf7, 0x9f, 0x42,
2648    0x29, 0x8c, 0x18, 0x9b, 0xf6, 0xe9, 0x34, 0x75,
2649    0x59, 0x6f, 0x18, 0x8c, 0x43, 0xcc, 0x5c, 0xd7,
2650    0x45, 0x14, 0xda, 0xa0, 0xcf, 0x11, 0x10, 0xb2,
2651    0x00, 0xab, 0x94, 0x59, 0x36, 0xd6, 0x77, 0x7b,
2652    0x8a, 0x84, 0xff, 0x22, 0xd3, 0x60, 0x66, 0x06,
2653    0x42, 0xa2, 0xe6, 0xdd, 0xc0, 0xe6, 0xb7, 0x4c,
2654    0xe7, 0xc6, 0x88, 0x71, 0xb9, 0xf2, 0x75, 0x96,
2655    0x30, 0x85, 0xaf, 0x5f, 0xa7, 0xdb, 0x2b, 0xe7,
2656    0x17, 0xbc, 0xa6, 0x6c, 0x2b, 0xec, 0xef, 0x53,
2657    0x26, 0xe5, 0xad, 0xf2, 0x03, 0x02, 0xac, 0x51,
2658    0xf7, 0xa5, 0x06, 0x8f, 0x80, 0x9f, 0xc6, 0xd0,
2659    0xed, 0x0f, 0xed, 0xea, 0xf6, 0x5b, 0x61, 0xfc,
2660    0x2b, 0xb3, 0x44, 0xfd, 0x26, 0x1c, 0xde, 0x45,
2661    0x9f, 0xdb, 0x58, 0x2a, 0x12, 0x41, 0xdf, 0x9d,
2662    0xf6, 0xf9, 0xfc, 0x89, 0xa0, 0x86, 0x33, 0xd2,
2663    0xcf, 0x8b, 0x17, 0x10, 0x84, 0xbe, 0x94, 0x72,
2664    0x77, 0x28, 0x58, 0x52, 0x9a, 0x24, 0x9c, 0x3a,
2665    0x55, 0xd5, 0x57, 0x57, 0xb1, 0x3d, 0x03, 0xa6,
2666    0x0d, 0xb7, 0x89, 0x61, 0xa6, 0x1d, 0xc6, 0x61,
2667    0xa4, 0x75, 0xc2, 0xa7, 0x0e, 0xc9, 0x4c, 0x95,
2668    0x2a, 0xa1, 0x65, 0x63, 0x1f, 0x82, 0x2c, 0xf0,
2669    0xad, 0xcf, 0x24, 0xca, 0x89, 0x64, 0x72, 0x1e,
2670    0x26, 0x66, 0x37, 0x36, 0x4c, 0x35, 0x1e, 0xe9,
2671    0xb5, 0x64, 0xd9, 0xe1, 0x8f, 0x42, 0x5e, 0x9d,
2672    0x1a, 0xd6, 0xfe, 0x20, 0xa9, 0x74, 0xa9, 0x85,
2673    0x62, 0xc6, 0x17, 0x20, 0x63, 0x1b, 0x8e, 0xb5,
2674    0x1a, 0x2a, 0x81, 0xc6, 0x21, 0xf9, 0x54, 0x04,
2675    0x56, 0x26, 0x89, 0x90, 0xa0, 0xab, 0xcb, 0x5f,
2676    0x86, 0x8f, 0x9e, 0xf1, 0x17, 0x65, 0xa7, 0xb7,
2677    0x28, 0x63, 0x39, 0x5c, 0x3c, 0xeb, 0x1f, 0x9d,
2678    0xf9, 0x19, 0xdb, 0xaa, 0x6c, 0x18, 0x8b, 0x57,
2679    0xac, 0xec, 0x55, 0xf6, 0xb8, 0x2a, 0xc9, 0x24,
2680    0x04, 0xa7, 0xcc, 0xec, 0x53, 0x28, 0x3d, 0xae,
2681    0x75, 0x39, 0xaa, 0x66, 0x84, 0xc6, 0x94, 0xd7,
2682    0xc2, 0xdc, 0x21, 0x12, 0x73, 0x0c, 0x06, 0x2b,
2683    0x17, 0x40, 0x69, 0x49, 0xfd, 0x78, 0x7b, 0x9a,
2684    0x13, 0x0f, 0xc4, 0x8a, 0xd2, 0x60, 0x9d, 0xa4,
2685    0x0b, 0x3a, 0xf4, 0x3a, 0x9b, 0x0a, 0x79, 0x3e,
2686    0x31, 0xaa, 0x27, 0x63, 0x41, 0x38, 0x4e, 0x46,
2687    0x14, 0x8c, 0x55, 0x80, 0x7b, 0x75, 0xc8, 0xe9,
2688    0x15, 0x64, 0xc8, 0xc7, 0xdd, 0xf4, 0x1d, 0xe9,
2689    0x25, 0x4a, 0x0e, 0x06, 0x4a, 0x1a, 0xc8, 0x88,
2690    0xec, 0x46, 0xd6, 0xfb, 0x6b, 0xb8, 0x94, 0x28,
2691    0xaf, 0xbc, 0x2f, 0xe6, 0x28, 0x76, 0xc0, 0x0a,
2692    0xfc, 0x60, 0x42, 0xef, 0x45, 0xff, 0x76, 0xf8,
2693    0xe1, 0x50, 0x6f, 0x94, 0xaf, 0xa5, 0xd9, 0x4d,
2694    0xe9, 0xa9, 0x7c, 0x2d, 0x1d, 0xb3, 0x78, 0x66,
2695    0xc3, 0x6e, 0x4d, 0x22, 0xd9, 0x0f, 0xcf, 0xf0,
2696    0x87, 0xa7, 0xdc, 0xec, 0x5a, 0x12, 0x65, 0x55,
2697    0x3d, 0x9b, 0xc8, 0x33, 0xfd, 0x83, 0xfc, 0x02,
2698    0xfb, 0x22, 0x0c, 0x1d, 0x7f, 0xff, 0x38, 0xe1,
2699    0x6b, 0x78, 0x47, 0xa8, 0x54, 0x31, 0x36, 0x69,
2700    0x44, 0x64, 0xae, 0x1a, 0xfc, 0x8b, 0x3c, 0x3a,
2701    0x9f, 0x3e, 0xca, 0x85, 0xa1, 0x0d, 0x56, 0x72,
2702    0x63, 0xb5, 0x7b, 0xfa, 0x4f, 0x18, 0x76, 0x57,
2703    0x3a, 0xa7, 0xb0, 0x20, 0x24, 0x9b, 0xb1, 0x8d,
2704    0x01, 0xec, 0x32, 0x9c, 0x84, 0xc1, 0x8d, 0x88,
2705    0x0d, 0xe4, 0x71, 0xe5, 0x1f, 0xe2, 0x0b, 0xae,
2706    0x87, 0xcf, 0x5f, 0xbf, 0xde, 0x57, 0x2f, 0x22,
2707    0x5a, 0x63, 0x5a, 0x9c, 0x85, 0x46, 0xf1, 0x3a,
2708    0x7e, 0x04, 0xec, 0xce, 0xb4, 0xa0, 0x00, 0x90,
2709    0x9a, 0x09, 0x11, 0xb4, 0x6b, 0x53, 0x37, 0xd2,
2710    0x03, 0xd1, 0x59, 0x2f, 0xdb, 0xda, 0xe9, 0xf8,
2711    0x0a, 0x67, 0x6a, 0x83, 0x30, 0x09, 0x66, 0x82,
2712    0x11, 0x10, 0xda, 0x52, 0x61, 0x40, 0xca, 0x86,
2713    0x85, 0xdf, 0x01, 0xc3, 0x0e, 0x68, 0xd0, 0xb7,
2714    0x0a, 0x37, 0x95, 0x30, 0xc3, 0x0f, 0x37, 0x49,
2715    0x27, 0x4a, 0x93, 0xd3, 0x6a, 0x1a, 0xaf, 0xa2,
2716    0x0a, 0xbf, 0xb7, 0xb7, 0x68, 0xe7, 0x8d, 0x4c,
2717    0x50, 0xf0, 0x9c, 0x10, 0x93, 0x1c, 0xdf, 0x83,
2718    0x7b, 0xe7, 0xfa, 0xc3, 0x41, 0xbd, 0x6c, 0x06,
2719    0x10, 0x8d, 0x4c, 0x38, 0x0f, 0x74, 0x04, 0x48,
2720    0x07, 0xdd, 0xba, 0xbe, 0x6f, 0x92, 0x7b, 0xc6,
2721    0x87, 0xae, 0x0c, 0xe9, 0x46, 0x52, 0x97, 0xa7,
2722    0xe6, 0x9a, 0x91, 0xbb, 0x7e, 0xb0, 0x65, 0xac,
2723    0x22, 0xe0, 0xa3, 0xc7, 0xe8, 0xc5, 0x53, 0x99,
2724    0x82, 0x1c, 0x2c, 0x54, 0x9b, 0xa0, 0xcf, 0x6b,
2725    0xd5, 0x9e, 0x18, 0xf9, 0x3c, 0x17, 0x88, 0xb4,
2726    0xfa, 0x01, 0x46, 0x6e, 0xd6, 0x41, 0xf2, 0xdd,
2727    0xf1, 0xea, 0xbc, 0x1d, 0x6c, 0xbb, 0xe2, 0xcb,
2728    0xe6, 0xfc, 0x22, 0xb5, 0x82, 0x9a, 0x89, 0x60,
2729    0x30, 0xdc, 0x1f, 0x42, 0x20, 0x34, 0x05, 0x02,
2730    0x70, 0x60, 0xbd, 0x95, 0x22, 0x0e, 0xeb, 0x29,
2731    0x23, 0x0c, 0x51, 0x95, 0x74, 0x7e, 0xae, 0xed,
2732    0x3a, 0x5d, 0x83, 0x20, 0xd9, 0x55, 0x80, 0x9b,
2733    0xe0, 0x50, 0x25, 0xe5, 0xbd, 0xfb, 0x45, 0x43,
2734    0xce, 0x34, 0x5a, 0x8a, 0xcf, 0x68, 0x2f, 0xde,
2735    0xdc, 0x95, 0x1d, 0x72, 0x6b, 0x69, 0x7d, 0xe6,
2736    0xd5, 0x82, 0x2f, 0x65, 0x31, 0x8e, 0xab, 0xbd,
2737    0x66, 0xb9, 0x39, 0x15, 0x02, 0x0f, 0xa7, 0x62,
2738    0xfc, 0xdb, 0xc1, 0x50, 0xfa, 0xf1, 0x6a, 0xe6,
2739    0x88, 0x56, 0x16, 0x3d, 0x1a, 0x6c, 0x1c, 0x95,
2740    0x6e, 0x93, 0xdc, 0x72, 0xc3, 0x35, 0x4d, 0x22,
2741    0xe1, 0xd5, 0xa2, 0xa6, 0xcf, 0xe7, 0xaf, 0x2a,
2742    0x02, 0x02, 0x2b, 0xb4, 0xaa, 0x42, 0x5c, 0x12,
2743    0xbb, 0x1d, 0x0b, 0xe6, 0x16, 0x9e, 0x2a, 0xc8,
2744    0xf5, 0xd4, 0x41, 0xf4, 0x72, 0x9b, 0x68, 0xd5,
2745    0x3a, 0x53, 0xb1, 0x61, 0x7a, 0x5e, 0x74, 0x33,
2746    0x52, 0xe7, 0x51, 0x62, 0xcb, 0x02, 0xfa, 0x0f,
2747    0x9d, 0x7d, 0x51, 0xf4, 0x66, 0xeb, 0x80, 0xff,
2748    0x83, 0xac, 0x1c, 0xde, 0x5d, 0xc6, 0x3a, 0x47,
2749    0x3e, 0x03, 0x9d, 0xaf, 0x4d, 0x9d, 0x2e, 0x27,
2750    0xb4, 0xd0, 0x69, 0x4a, 0xdc, 0x66, 0x96, 0xe9,
2751    0x77, 0x81, 0xfe, 0x13, 0x25, 0xd6, 0x4d, 0xa2,
2752    0x3e, 0xa5, 0xe3, 0xe0, 0xbb, 0x97, 0x27, 0x49,
2753    0x92, 0x10, 0x36, 0xdc, 0x31, 0x25, 0x5e, 0xba,
2754    0xa3, 0x5f, 0xca, 0x74, 0xbe, 0xe6, 0x57, 0xd0,
2755    0xfa, 0x46, 0x81, 0x2a, 0xe4, 0xf6, 0x9d, 0xd8,
2756    0xcf, 0xb4, 0x8f, 0x89, 0x75, 0x5e, 0x8b, 0x0e,
2757    0x10, 0x9e, 0x1a, 0xa5, 0x17, 0xc4, 0x56, 0x97,
2758    0x9e, 0x38, 0x38, 0xd8, 0xef, 0x4b, 0x82, 0x79,
2759    0xc4, 0x54, 0x2c, 0x2b, 0xed, 0xe2, 0x6a, 0x83,
2760    0x4b, 0x12, 0x6a, 0xa7, 0xff, 0x31, 0xe7, 0x8d,
2761    0x0a, 0x9f, 0xab, 0x49, 0xae, 0xee, 0xc1, 0xa8,
2762    0x87, 0xdf, 0x2d, 0x11, 0xda, 0xd9, 0xf6, 0xa1,
2763    0x12, 0x82, 0x96, 0x64, 0x68, 0xa8, 0xe2, 0x13,
2764    0xf8, 0x25, 0xf3, 0x3d, 0xa0, 0xcd, 0x0e, 0xfb,
2765    0x1f, 0xbc, 0x27, 0xe3, 0xed, 0x72, 0xa9, 0x31,
2766    0xee, 0x61, 0xcc, 0xb9, 0xb3, 0x4d, 0x72, 0x41,
2767    0x5c, 0xb8, 0x2d, 0x6f, 0xae, 0xdf, 0xf7, 0xf4,
2768    0x07, 0x04, 0xf3, 0xcf, 0x86, 0x30, 0x6f, 0xed,
2769    0x0c, 0x61, 0x4e, 0x78, 0x56, 0x2e, 0x85, 0xf1,
2770    0xaf, 0x6a, 0x76, 0x28, 0x0f, 0x4b, 0x14, 0xfa,
2771    0xf2, 0xda, 0x0c, 0x7f, 0xe1, 0xe3, 0x76, 0x66,
2772    0xb2, 0xd6, 0xb5, 0xe4, 0x61, 0xec, 0x21, 0xcd,
2773    0xfa, 0x58, 0x61, 0x96, 0x3b, 0x91, 0x82, 0xd4,
2774    0xf2, 0xd8, 0xac, 0x91, 0x7e, 0x2f, 0xaa, 0x92,
2775    0x2e, 0x89, 0x02, 0x19, 0x02, 0xb8, 0xb4, 0x28,
2776    0xde, 0x58, 0x69, 0xca, 0x8b, 0x31, 0x2d, 0x05,
2777    0xab, 0x28, 0xdd, 0x82, 0x60, 0x72, 0x98, 0xa1,
2778    0x50, 0x17, 0x22, 0x64, 0x4a, 0x4f, 0xb9, 0xad,
2779    0xb7, 0x03, 0x0b, 0x84, 0x32, 0x06, 0xa6, 0xb9,
2780    0xd2, 0x32, 0x2a, 0xda, 0xb6, 0xdd, 0xad, 0x57,
2781    0xde, 0xfb, 0x81, 0x1e, 0x91, 0xa1, 0x75, 0xcc,
2782    0x09, 0x2e, 0x1a, 0x0e, 0x90, 0x74, 0x26, 0xd1,
2783    0x8f, 0x9e, 0x0a, 0xe6, 0x62, 0x75, 0xca, 0x2c,
2784    0xc7, 0x85, 0xfa, 0x2b, 0xe2, 0x52, 0xe7, 0xb6,
2785    0x01, 0xb8, 0x9a, 0x53, 0x71, 0x92, 0x7b, 0x4e,
2786    0x48, 0x37, 0x2d, 0x18, 0x19, 0xb3, 0x91, 0xf5,
2787    0x26, 0x66, 0x56, 0x17, 0xb8, 0xb9, 0x4d, 0x38,
2788    0x7c, 0x03, 0x6e, 0x07, 0x1c, 0x25, 0xe0, 0x9c,
2789    0x7d, 0xcf, 0xc5, 0xe8, 0x0c, 0x90, 0xa4, 0xad,
2790    0xa3, 0xad, 0x7c, 0x40, 0x87, 0x4e, 0xe3, 0x9d,
2791    0x23, 0x4b, 0x72, 0x72, 0x6e, 0xe6, 0xca, 0x6a,
2792    0x6b, 0x5f, 0x49, 0x8d, 0xe5, 0x09, 0x42, 0x72,
2793    0x0c, 0x84, 0xdc, 0x59, 0x7e, 0xad, 0x1c, 0x58,
2794    0xdf, 0x7e, 0x0e, 0x5e, 0x36, 0xb8, 0x31, 0x64,
2795    0x1c, 0x2e, 0x89, 0xd3, 0x6a, 0x81, 0x7d, 0xce,
2796    0x04, 0xc9, 0x99, 0x5e, 0x52, 0x11, 0x20, 0x64,
2797    0xc6, 0xf0, 0x9a, 0x5f, 0x3f, 0xad, 0x8a, 0xec,
2798    0x26, 0xa2, 0x7b, 0x52, 0x32, 0x5f, 0x36, 0x4b,
2799    0x28, 0xdc, 0xd3, 0xfb, 0x72, 0x7a, 0x1d, 0xeb,
2800    0xf9, 0x74, 0xef, 0x66, 0xad, 0x86, 0x84, 0xda,
2801    0x13, 0x35, 0x7e, 0xe3, 0x1d, 0xb0, 0xb3, 0xc2,
2802    0x2a, 0xc9, 0x78, 0xed, 0x5f, 0x56, 0xd9, 0x08,
2803    0x13, 0x84, 0x92, 0x72, 0xd5, 0x1c, 0xfd, 0x90,
2804    0x5e, 0x11, 0xb5, 0x49, 0x52, 0x07, 0x9d, 0x5e,
2805    0x4c, 0x43, 0x4f, 0x25, 0x0a, 0x7b, 0xc5, 0xaf,
2806    0xbd, 0x68, 0x70, 0x1d, 0xe6, 0xe5, 0x79, 0x18,
2807    0x2c, 0xa3, 0x92, 0x76, 0x59, 0x84, 0x72, 0x10,
2808    0xf3, 0x6b, 0x8b, 0x15, 0xc1, 0x17, 0x35, 0x1a,
2809    0x88, 0x35, 0x25, 0x07, 0xaa, 0xd6, 0x02, 0xaf,
2810    0x03, 0xee, 0x64, 0x42, 0x23, 0x1c, 0x81, 0x01,
2811    0x45, 0xb8, 0xb5, 0x90, 0xa4, 0x69, 0x58, 0xe4,
2812    0xaa, 0xd9, 0x45, 0x91, 0x11, 0xed, 0x17, 0x01,
2813    0x64, 0x1a, 0x87, 0x13, 0x5d, 0x52, 0xa3, 0xca,
2814    0xa7, 0x50, 0xb7, 0xfa, 0x79, 0x1f, 0xce, 0x20,
2815    0x58, 0x9c, 0x64, 0x1a, 0x2d, 0x15, 0xc9, 0xfa,
2816    0x1e, 0x19, 0xcd, 0xcc, 0x11, 0x95, 0xfd, 0x1e,
2817    0x9b, 0xce, 0xea, 0xbe, 0x33, 0x1c, 0xa5, 0x58,
2818    0x02, 0x80, 0x8e, 0x95, 0xc5, 0x34, 0xa5, 0x66,
2819    0x85, 0xf0, 0x45, 0x76, 0xf0, 0x49, 0x6b, 0xea,
2820    0x0d, 0xaf, 0xb0, 0xa0, 0x7f, 0x8e, 0xe7, 0xfe,
2821    0x8f, 0x42, 0x0f, 0xc9, 0xaf, 0x56, 0xea, 0xa4,
2822    0x3e, 0x28, 0xbd, 0x66, 0x9d, 0x9f, 0x68, 0x41,
2823    0x45, 0xcc, 0xa4, 0x21, 0xa3, 0x40, 0xa7, 0x96,
2824    0xe1, 0xa3, 0x5d, 0x96, 0x40, 0xde, 0xe1, 0xd7,
2825    0xb2, 0xbc, 0xc6, 0x01, 0xc5, 0xa0, 0x9f, 0xee,
2826    0x08, 0x40, 0x29, 0xde, 0x90, 0x7e, 0x8a, 0x3a,
2827    0x8f, 0xa2, 0x43, 0xd3, 0xd6, 0x19, 0xd2, 0xe6,
2828    0xc0, 0xc6, 0x02, 0x8f, 0xb2, 0x81, 0x79, 0x2f,
2829    0x58, 0x0c, 0x75, 0x55, 0xb3, 0x92, 0x23, 0x68,
2830    0xd0, 0x30, 0x85, 0xcf, 0x95, 0xc5, 0x61, 0x06,
2831    0x4b, 0x94, 0xa5, 0x36, 0x68, 0x4f, 0x3c, 0xa1,
2832    0x1d, 0xcd, 0x10, 0xba, 0x1a, 0x5f, 0xa4, 0x52,
2833    0x77, 0x99, 0xfa, 0x20, 0xb1, 0xf9, 0x66, 0xa4,
2834    0x86, 0x3f, 0x7a, 0x87, 0x19, 0xdd, 0x4e, 0xb8,
2835    0x99, 0x6f, 0x12, 0x41, 0x43, 0x0c, 0x08, 0x22,
2836    0xc0, 0x47, 0x49, 0x71, 0x33, 0x6f, 0xc7, 0xd1,
2837    0x22, 0x98, 0x15, 0x56, 0x6a, 0xa6, 0x27, 0x73,
2838    0x03, 0x95, 0x5d, 0xb8, 0xe3, 0x6f, 0x49, 0x7a,
2839    0xe1, 0x62, 0x20, 0xae, 0x3d, 0x8b, 0x33, 0x6b,
2840    0x55, 0x2b, 0x3c, 0xcc, 0x0c, 0x13, 0x40, 0x86,
2841    0xda, 0x79, 0x7c, 0x2a, 0x91, 0xd9, 0xf1, 0xad,
2842    0x5d, 0x01, 0x7e, 0x84, 0xcc, 0xd9, 0xe0, 0xed,
2843    0x02, 0x1c, 0x23, 0x6e, 0xa3, 0xa9, 0xbb, 0x02,
2844    0x20, 0x6c, 0x77, 0x7e, 0x8d, 0xbe, 0xc7, 0xd3,
2845    0xe4, 0x02, 0x2f, 0x48, 0x4d, 0x78, 0xcb, 0xe0,
2846    0x23, 0x29, 0x4a, 0x4c, 0x66, 0x8a, 0xb3, 0xdb,
2847    0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2848    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
2849    0x08, 0x0f, 0x19, 0x20, 0x29
2850};
2851
2852/*
2853 * The message has been specially selected so that:
2854 *      it fails the z_max rejection test on iteration one
2855 *      it fails the r0_max rejection test on iteration two
2856 *      it fails the h_ones rejection test on iteration three
2857 *      it successfully generates the signature on iteration four
2858 * Thus, it is an optimal self test in terms of iterations and coverage.
2859 *
2860 * Refer to FIPS 140-3 IG 10.3.A.15 for details of the testing requirements.
2861 */
2862static const unsigned char ml_dsa_65_msg[] = {
2863    0x23, 0x37, 0x34, 0x37, 0x36, 0x38, 0x23
2864};
2865
2866static const ST_KAT_PARAM ml_dsa_key[] = {
2867    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ml_dsa_65_priv_key),
2868    ST_KAT_PARAM_END()
2869};
2870
2871static int ml_dsa_deterministic = 1;
2872static int ml_dsa_encoding = 0;
2873
2874static const ST_KAT_PARAM ml_dsa_sig_init[] = {
2875    ST_KAT_PARAM_INT(OSSL_SIGNATURE_PARAM_DETERMINISTIC, ml_dsa_deterministic),
2876    ST_KAT_PARAM_INT(OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING, ml_dsa_encoding),
2877    ST_KAT_PARAM_END()
2878};
2879#endif /* OPENSSL_NO_ML_DSA */
2880
2881#ifndef OPENSSL_NO_SLH_DSA
2882/*
2883 * Deterministic SLH_DSA key generation supplies the private key elements and
2884 * Half of the public key.
2885 */
2886static const uint8_t slh_dsa_sha2_128f_keygen_entropy[] = {
2887    0xae, 0xd6, 0xf6, 0xf5, 0xc5, 0x40, 0x8b, 0xbf, 0xfa, 0x11, 0x36, 0xbc, 0x90, 0x49, 0xa7, 0x01,
2888    0x4d, 0x4c, 0xe0, 0x71, 0x1e, 0x17, 0x6a, 0x0c, 0x8a, 0x02, 0x35, 0x08, 0xa6, 0x92, 0xc2, 0x07,
2889    0x74, 0xd9, 0x8d, 0x50, 0x00, 0xaf, 0x53, 0xb9, 0x8f, 0x36, 0x38, 0x9a, 0x12, 0x92, 0xbe, 0xd3
2890};
2891
2892/* The expected outputs for the public and private key elements */
2893static const uint8_t slh_dsa_sha2_128f_keygen_priv_pub[] = {
2894    0xAE, 0xD6, 0xF6, 0xF5, 0xC5, 0x40, 0x8B, 0xBF, 0xFA, 0x11, 0x36, 0xBC, 0x90, 0x49, 0xA7, 0x01,
2895    0x4D, 0x4C, 0xE0, 0x71, 0x1E, 0x17, 0x6A, 0x0C, 0x8A, 0x02, 0x35, 0x08, 0xA6, 0x92, 0xC2, 0x07,
2896    0x74, 0xD9, 0x8D, 0x50, 0x00, 0xAF, 0x53, 0xB9, 0x8F, 0x36, 0x38, 0x9A, 0x12, 0x92, 0xBE, 0xD3,
2897    0xF4, 0xA6, 0x50, 0xC5, 0x6C, 0x42, 0x6F, 0xCF, 0xDB, 0x88, 0xE3, 0x35, 0x54, 0x59, 0x44, 0x0C
2898};
2899
2900static const uint8_t slh_dsa_sha2_128f_keygen_pub[] = {
2901    0x74, 0xD9, 0x8D, 0x50, 0x00, 0xAF, 0x53, 0xB9, 0x8F, 0x36, 0x38, 0x9A, 0x12, 0x92, 0xBE, 0xD3,
2902    0xF4, 0xA6, 0x50, 0xC5, 0x6C, 0x42, 0x6F, 0xCF, 0xDB, 0x88, 0xE3, 0x35, 0x54, 0x59, 0x44, 0x0C
2903};
2904
2905static const ST_KAT_PARAM slh_dsa_sha2_128f_keygen_init_params[] = {
2906    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_SLH_DSA_SEED,
2907                       slh_dsa_sha2_128f_keygen_entropy),
2908    ST_KAT_PARAM_END()
2909};
2910
2911static const ST_KAT_PARAM slh_dsa_128f_keygen_expected_params[] = {
2912    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY,
2913                       slh_dsa_sha2_128f_keygen_priv_pub),
2914    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY,
2915                       slh_dsa_sha2_128f_keygen_pub),
2916    ST_KAT_PARAM_END()
2917};
2918
2919static const unsigned char slh_dsa_sha2_sig_msg[] = {
2920    0x3f
2921};
2922
2923static const unsigned char slh_dsa_shake_sig_msg[] = {
2924    0x01, 0x02, 0x03, 0x04
2925};
2926
2927static int deterministic = 1;
2928static const ST_KAT_PARAM slh_dsa_sig_params[] = {
2929    ST_KAT_PARAM_INT(OSSL_SIGNATURE_PARAM_DETERMINISTIC, deterministic),
2930    ST_KAT_PARAM_END()
2931};
2932
2933static const unsigned char slh_dsa_sha2_128f_priv_pub[] = {
2934    0xd5, 0x21, 0x3b, 0xa4, 0xbb, 0x64, 0x70, 0xf1, 0xb9, 0xed, 0xa8, 0x8c, 0xbc, 0x94, 0xe6, 0x27,
2935    0x7a, 0x58, 0xa9, 0x51, 0xef, 0x7f, 0x2b, 0x81, 0x46, 0x1d, 0xba, 0xc4, 0x1b, 0x5a, 0x6b, 0x83,
2936    0xfa, 0x49, 0x5f, 0xb8, 0x34, 0xde, 0xfe, 0xa7, 0xcc, 0x96, 0xa8, 0x13, 0x09, 0x47, 0x91, 0x35,
2937    0xa6, 0x70, 0x29, 0xe9, 0x06, 0x68, 0xc5, 0xa5, 0x8b, 0x96, 0xe6, 0x01, 0x11, 0x49, 0x1f, 0x3d
2938};
2939
2940static const ST_KAT_PARAM slh_dsa_sha2_128f_key_params[] = {
2941    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, slh_dsa_sha2_128f_priv_pub),
2942    ST_KAT_PARAM_END()
2943};
2944
2945static const unsigned char slh_dsa_shake_128f_priv_pub[] = {
2946    0xbb, 0xc7, 0x43, 0x06, 0xf7, 0x5d, 0xc2, 0xda, 0xf7, 0x37, 0x2b, 0x3c, 0x98, 0x41, 0xa4, 0xd6,
2947    0x85, 0x2c, 0x17, 0xb4, 0x59, 0xf1, 0x69, 0x2b, 0x8e, 0x9a, 0x1a, 0x0d, 0xac, 0xe5, 0xba, 0x26,
2948    0x38, 0x0c, 0x99, 0x30, 0x4a, 0x0d, 0xdd, 0x32, 0xf3, 0x44, 0xb9, 0x51, 0x44, 0xe1, 0xfd, 0xef,
2949    0x60, 0xbb, 0xc2, 0x34, 0x0e, 0x08, 0x77, 0x0f, 0xb4, 0x1a, 0x80, 0xa7, 0x6c, 0xb0, 0x8e, 0x34,
2950};
2951
2952static const ST_KAT_PARAM slh_dsa_shake_128f_key_params[] = {
2953    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, slh_dsa_shake_128f_priv_pub),
2954    ST_KAT_PARAM_END()
2955};
2956
2957/* This is the SHA256 digest of the signature */
2958static const unsigned char slh_dsa_sha2_128f_sig_digest[] = {
2959    0xd3, 0x53, 0x7e, 0x05, 0xae, 0x63, 0x87, 0x6b, 0xf7, 0x80, 0x15, 0xff,
2960    0x86, 0xcc, 0x9e, 0x28, 0x4f, 0x91, 0xca, 0xbf, 0xac, 0x19, 0x12, 0x98,
2961    0xfb, 0xaa, 0x37, 0x55, 0x96, 0x35, 0x1d, 0x55
2962};
2963
2964static const unsigned char slh_dsa_shake_128f_sig_digest[] = {
2965    0xb7, 0xeb, 0x1f, 0x00, 0x33, 0x41, 0xff, 0x11,
2966    0x3f, 0xc7, 0x4d, 0xce, 0x90, 0x6c, 0x55, 0xf7,
2967    0x4a, 0x54, 0x8b, 0x86, 0xc1, 0xb1, 0x08, 0x48,
2968    0x89, 0x77, 0x00, 0x72, 0x03, 0x92, 0xd1, 0xa6,
2969};
2970#endif /* OPENSSL_NO_SLH_DSA */
2971
2972/* Hash DRBG inputs for signature KATs */
2973static const unsigned char sig_kat_entropyin[] = {
2974    0x06, 0x6d, 0xc8, 0xce, 0x75, 0xb2, 0x89, 0x66, 0xa6, 0x85, 0x16, 0x3f,
2975    0xe2, 0xa4, 0xd4, 0x27, 0xfb, 0xdb, 0x61, 0x66, 0x50, 0x61, 0x6b, 0xa2,
2976    0x82, 0xfc, 0x33, 0x2b, 0x4e, 0x6f, 0x12, 0x20
2977};
2978static const unsigned char sig_kat_nonce[] = {
2979    0x55, 0x9f, 0x7c, 0x64, 0x89, 0x70, 0x83, 0xec, 0x2d, 0x73, 0x70, 0xd9,
2980    0xf0, 0xe5, 0x07, 0x1f
2981};
2982static const unsigned char sig_kat_persstr[] = {
2983    0x88, 0x6f, 0x54, 0x9a, 0xad, 0x1a, 0xc6, 0x3d, 0x18, 0xcb, 0xcc, 0x66,
2984    0x85, 0xda, 0xa2, 0xc2, 0xf7, 0x9e, 0xb0, 0x89, 0x4c, 0xb4, 0xae, 0xf1,
2985    0xac, 0x54, 0x4f, 0xce, 0x57, 0xf1, 0x5e, 0x11
2986};
2987
2988static const ST_KAT_SIGN st_kat_sign_tests[] = {
2989    {
2990        OSSL_SELF_TEST_DESC_SIGN_RSA,
2991        "RSA", "RSA-SHA256", 0,
2992        rsa_crt_key,
2993        ITM_STR(rsa_sig_msg),
2994        ITM(sig_kat_entropyin),
2995        ITM(sig_kat_nonce),
2996        ITM(sig_kat_persstr),
2997        ITM(rsa_expected_sig)
2998    },
2999#ifndef OPENSSL_NO_EC
3000    {
3001        OSSL_SELF_TEST_DESC_SIGN_ECDSA,
3002        "EC", "ECDSA-SHA256", 0,
3003        ecdsa_prime_key,
3004        ITM_STR(rsa_sig_msg),
3005        ITM(sig_kat_entropyin),
3006        ITM(sig_kat_nonce),
3007        ITM(sig_kat_persstr),
3008        ITM(ecdsa_prime_expected_sig)
3009    },
3010# ifndef OPENSSL_NO_EC2M
3011    {
3012        OSSL_SELF_TEST_DESC_SIGN_ECDSA,
3013        "EC", "ECDSA-SHA256", 0,
3014        ecdsa_bin_key,
3015        ITM_STR(rsa_sig_msg),
3016        ITM(sig_kat_entropyin),
3017        ITM(sig_kat_nonce),
3018        ITM(sig_kat_persstr),
3019        ITM(ecdsa_bin_expected_sig)
3020    },
3021# endif
3022# ifndef OPENSSL_NO_ECX
3023    {
3024        OSSL_SELF_TEST_DESC_SIGN_EDDSA,
3025        "ED448", "ED448", 0,
3026        ed448_key,
3027        ITM(ecx_sig_msg),
3028        NULL, 0, NULL, 0, NULL, 0,
3029        ITM(ed448_expected_sig),
3030    },
3031    {
3032        OSSL_SELF_TEST_DESC_SIGN_EDDSA,
3033        "ED25519", "ED25519", 0,
3034        ed25519_key,
3035        ITM(ecx_sig_msg),
3036        NULL, 0, NULL, 0, NULL, 0,
3037        ITM(ed25519_expected_sig),
3038    },
3039# endif /* OPENSSL_NO_ECX */
3040#endif /* OPENSSL_NO_EC */
3041#ifndef OPENSSL_NO_DSA
3042    {
3043        OSSL_SELF_TEST_DESC_SIGN_DSA,
3044        "DSA", "DSA-SHA256", SIGNATURE_MODE_VERIFY_ONLY,
3045        dsa_key,
3046        ITM_STR(rsa_sig_msg),
3047        ITM(sig_kat_entropyin),
3048        ITM(sig_kat_nonce),
3049        ITM(sig_kat_persstr),
3050        ITM(dsa_expected_sig)
3051    },
3052#endif /* OPENSSL_NO_DSA */
3053
3054#ifndef OPENSSL_NO_ML_DSA
3055    {
3056        OSSL_SELF_TEST_DESC_SIGN_ML_DSA,
3057        "ML-DSA-65", "ML-DSA-65", 0,
3058        ml_dsa_key,
3059        ITM(ml_dsa_65_msg),
3060        NULL, 0,
3061        NULL, 0,
3062        NULL, 0,
3063        ITM(ml_dsa_65_sig),
3064        ml_dsa_sig_init,
3065        ml_dsa_sig_init
3066    },
3067#endif /* OPENSSL_NO_ML_DSA */
3068#ifndef OPENSSL_NO_SLH_DSA
3069    /*
3070     * FIPS 140-3 IG 10.3.A.16 Note 29 says:
3071     *
3072     *  It is recommended (but not required) that if the module implements
3073     *   both "s" and "f" algorithms, the module self-test at least one of
3074     *   each "s" and "f" algorithm.
3075     *
3076     * Because the "s" version is so slow, we only test the "f" versions
3077     * here.
3078     */
3079    {
3080        OSSL_SELF_TEST_DESC_SIGN_SLH_DSA,
3081        "SLH-DSA-SHA2-128f", "SLH-DSA-SHA2-128f", SIGNATURE_MODE_SIG_DIGESTED,
3082        slh_dsa_sha2_128f_key_params,
3083        ITM(slh_dsa_sha2_sig_msg),
3084        NULL, 0, NULL, 0, NULL, 0,
3085        ITM(slh_dsa_sha2_128f_sig_digest),
3086        slh_dsa_sig_params, slh_dsa_sig_params
3087    },
3088    {
3089        OSSL_SELF_TEST_DESC_SIGN_SLH_DSA,
3090        "SLH-DSA-SHAKE-128f", "SLH-DSA-SHAKE-128f", SIGNATURE_MODE_SIG_DIGESTED,
3091        slh_dsa_shake_128f_key_params,
3092        ITM(slh_dsa_shake_sig_msg),
3093        NULL, 0, NULL, 0, NULL, 0,
3094        ITM(slh_dsa_shake_128f_sig_digest),
3095        slh_dsa_sig_params, slh_dsa_sig_params
3096    },
3097#endif /* OPENSSL_NO_SLH_DSA */
3098};
3099
3100#if !defined(OPENSSL_NO_ML_DSA)
3101static const ST_KAT_PARAM ml_dsa_keygen_params[] = {
3102    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_ML_DSA_SEED, sig_kat_entropyin),
3103    ST_KAT_PARAM_END()
3104};
3105#endif
3106
3107/*- KEM SELF TEST DATA */
3108/*
3109 * Test case generated via the OpenSSL commands:
3110 *
3111 *  openssl genpkey -algorithm ML-KEM-512 -out priv-ml-kem-512.pem
3112 *  openssl pkey -in priv-ml-kem-512.pem -pubout -out pub-ml-kem-512.pem
3113 *  openssl pkeyutl -encap -inkey pub-ml-kem-512.pem \
3114 *          -pkeyopt ikme:00000000000000000000000000000000 -secret good.dat \
3115 *          -out ctext.dat
3116 *  openssl pkeyutl -decap -inkey priv-ml-kem-512.pem \
3117 *          -secret goodcmp.dat -in ctext.dat
3118 *  apps/openssl pkeyutl -decap -inkey priv-ml-kem-512.pem \
3119 *          -secret implicit-reject.dat -in <(head -c 768 /dev/zero)
3120 *  openssl pkey -in priv-ml-kem-512.pem -text |
3121 *      sed '1,/^priv:/d; /^pub:/,$d' |
3122 *      tr -d ' :\n' |
3123 *      xxd -r -p |
3124 *      tail -c 32 > z.dat
3125 *  (cat z.dat; head -c 768 /dev/zero) |
3126 *      openssl dgst -shake256 -xoflen 32 -binary > expected.dat
3127 */
3128#ifndef OPENSSL_NO_ML_KEM
3129static const unsigned char ml_kem_512_cipher_text[] = {
3130    0x6b, 0xc5, 0x04, 0x00, 0x27, 0x7a, 0xbb, 0x7e,
3131    0x6b, 0xf9, 0xfb, 0x56, 0x82, 0x01, 0x75, 0xeb,
3132    0xb7, 0xb9, 0xf4, 0xf2, 0x82, 0x2c, 0x6d, 0x0a,
3133    0xe0, 0x80, 0xa3, 0x49, 0x92, 0x0f, 0x6d, 0x00,
3134    0x8e, 0xba, 0x35, 0xb5, 0x42, 0xb9, 0xd7, 0xed,
3135    0x89, 0xcb, 0xfd, 0x38, 0xd7, 0x9f, 0x55, 0x3b,
3136    0xf0, 0x8e, 0x63, 0x80, 0x95, 0xcf, 0x0d, 0x4f,
3137    0x50, 0x40, 0xac, 0x1d, 0x1b, 0xdc, 0x24, 0x84,
3138    0x3b, 0x18, 0xc2, 0x77, 0x9f, 0x24, 0x11, 0x81,
3139    0xa6, 0xcc, 0xd8, 0xf4, 0xe8, 0x00, 0xdc, 0x26,
3140    0x61, 0x36, 0xd1, 0xb6, 0x5d, 0x9c, 0x12, 0x6d,
3141    0xf5, 0xe7, 0x93, 0xc8, 0x6d, 0xac, 0xaf, 0x3c,
3142    0x78, 0x3f, 0xa9, 0xc1, 0x00, 0x6f, 0x08, 0x29,
3143    0x4f, 0x1a, 0x4d, 0x3b, 0xb4, 0x4b, 0x6f, 0xc2,
3144    0x09, 0x00, 0x4b, 0xc1, 0xf0, 0xe6, 0x7f, 0x48,
3145    0x48, 0x09, 0x40, 0xf2, 0x0a, 0x86, 0x18, 0xbf,
3146    0xc6, 0x4e, 0xb2, 0xb0, 0xab, 0xfe, 0x1b, 0xea,
3147    0x91, 0x58, 0x8c, 0x18, 0x6e, 0x30, 0xe8, 0x33,
3148    0x87, 0x29, 0x26, 0xef, 0xe9, 0x0c, 0x3b, 0x8b,
3149    0x0c, 0x99, 0x40, 0x53, 0xb9, 0x30, 0xba, 0x17,
3150    0xb3, 0x8a, 0x74, 0x59, 0x5d, 0x4c, 0x76, 0x1a,
3151    0xd3, 0x3f, 0xe4, 0xf7, 0xa3, 0x0f, 0x3a, 0x2c,
3152    0x85, 0xc1, 0x46, 0xf0, 0xa4, 0x91, 0xa3, 0x12,
3153    0xb2, 0xa4, 0x4b, 0x88, 0x8d, 0x1c, 0x85, 0xb1,
3154    0xe4, 0x41, 0x1f, 0x9d, 0xb7, 0x91, 0x2f, 0x60,
3155    0x98, 0xfd, 0xfc, 0x29, 0x89, 0x11, 0x7d, 0x16,
3156    0x09, 0x9e, 0x76, 0xf1, 0x9c, 0xb3, 0x50, 0xb9,
3157    0xd0, 0x02, 0xd2, 0xa2, 0x0d, 0xdd, 0xee, 0x90,
3158    0x47, 0x0d, 0xb9, 0x4a, 0x53, 0x11, 0xa2, 0x4f,
3159    0x13, 0x5a, 0x40, 0xdc, 0xc6, 0xfe, 0xd7, 0x28,
3160    0x36, 0xec, 0xa0, 0x5e, 0xab, 0xc1, 0x7d, 0x19,
3161    0x33, 0x59, 0xe2, 0xe4, 0xea, 0x26, 0x67, 0x2f,
3162    0xe5, 0x05, 0xd8, 0x34, 0x6e, 0x3c, 0xab, 0x63,
3163    0x8b, 0x24, 0x16, 0xc7, 0x1b, 0x2a, 0x9b, 0xe5,
3164    0x04, 0x78, 0x98, 0x6c, 0x6c, 0x1e, 0x94, 0xe3,
3165    0x7f, 0x86, 0x52, 0xc0, 0x17, 0x56, 0x8d, 0x01,
3166    0x7a, 0x28, 0x81, 0x07, 0x3d, 0x61, 0x2a, 0xcd,
3167    0xc8, 0xb6, 0x7e, 0x5b, 0xad, 0xa8, 0x90, 0xbd,
3168    0x0c, 0x95, 0xb5, 0x09, 0x9d, 0x7c, 0x34, 0x8c,
3169    0x74, 0x8f, 0x8e, 0x7c, 0x28, 0x6c, 0xe2, 0x2f,
3170    0xa2, 0x87, 0x7f, 0x80, 0x43, 0x46, 0x1c, 0xb2,
3171    0x1c, 0x5a, 0xd2, 0xec, 0xad, 0xf9, 0x55, 0xe3,
3172    0x6b, 0x19, 0x54, 0x08, 0x84, 0x1a, 0x34, 0x82,
3173    0xf4, 0x9c, 0xec, 0x3d, 0x65, 0xf9, 0x78, 0x7f,
3174    0x37, 0x47, 0xcf, 0xf1, 0xcb, 0x15, 0xf2, 0xac,
3175    0xff, 0x3b, 0x8f, 0xa0, 0x8c, 0x25, 0x88, 0x5c,
3176    0x38, 0x23, 0x9a, 0x27, 0x16, 0x6a, 0xdf, 0xa3,
3177    0x98, 0x1d, 0x16, 0x33, 0x4b, 0x4f, 0xfb, 0x83,
3178    0x85, 0x66, 0x76, 0x03, 0xb9, 0xb5, 0x46, 0x21,
3179    0xb9, 0xf3, 0xf4, 0xf1, 0x3a, 0x85, 0xec, 0x9e,
3180    0x56, 0x6a, 0xb6, 0x1d, 0xcc, 0xca, 0xfb, 0x11,
3181    0xae, 0x47, 0x7d, 0x93, 0xa5, 0xbc, 0x90, 0x32,
3182    0xde, 0xa1, 0xa5, 0x1e, 0x5d, 0x52, 0x17, 0x98,
3183    0x0a, 0x8b, 0xc4, 0x1a, 0x28, 0x7c, 0x9c, 0x22,
3184    0x3e, 0x33, 0x06, 0x40, 0x77, 0xe5, 0x22, 0x49,
3185    0x86, 0xf9, 0x3c, 0xc5, 0xc1, 0xb9, 0x77, 0x25,
3186    0x53, 0x66, 0x5a, 0x18, 0x83, 0x5a, 0x2b, 0xbf,
3187    0xac, 0x04, 0x70, 0x26, 0xe8, 0x2b, 0xb6, 0x0c,
3188    0xe8, 0x00, 0x95, 0xbb, 0x08, 0x75, 0xf3, 0x37,
3189    0x31, 0x2e, 0xef, 0x28, 0x8d, 0x58, 0x92, 0xd4,
3190    0xfd, 0xd7, 0x02, 0xce, 0x8f, 0x11, 0x83, 0x17,
3191    0x53, 0x19, 0x44, 0xd7, 0xd5, 0x6d, 0x44, 0x04,
3192    0x3a, 0x0a, 0x01, 0x46, 0xf2, 0xd2, 0xa5, 0x05,
3193    0x88, 0xa0, 0xd9, 0x0d, 0xe1, 0xa0, 0x7a, 0xf2,
3194    0x20, 0x2e, 0x5b, 0x05, 0xe4, 0x2b, 0x11, 0x3d,
3195    0xb3, 0x82, 0x64, 0x3b, 0xef, 0xc1, 0x53, 0xba,
3196    0x9f, 0x7f, 0x29, 0x59, 0x87, 0x39, 0x52, 0xda,
3197    0x7b, 0xff, 0xd7, 0xdd, 0xa1, 0xa9, 0x9f, 0xa1,
3198    0xe2, 0x38, 0x74, 0xb0, 0x94, 0xdc, 0xc5, 0xb5,
3199    0xf3, 0x61, 0xdf, 0x92, 0x62, 0xe1, 0x96, 0x87,
3200    0x6d, 0xb4, 0x2c, 0xc7, 0xf0, 0x38, 0xe9, 0x5e,
3201    0xfc, 0xff, 0x4c, 0x01, 0xc7, 0x59, 0x39, 0xe5,
3202    0x9b, 0xfb, 0xf5, 0x2b, 0x1b, 0xe5, 0xf8, 0x25,
3203    0x06, 0x07, 0xc7, 0x82, 0x46, 0x2a, 0x99, 0xd0,
3204    0xa9, 0x67, 0x81, 0xd7, 0xa2, 0x29, 0x96, 0x1a,
3205    0x94, 0x8e, 0x7d, 0x51, 0x76, 0x99, 0xad, 0x61,
3206    0xec, 0xb6, 0xc0, 0x58, 0x8e, 0xd0, 0x9d, 0xff,
3207    0x58, 0x57, 0x1b, 0x2e, 0xad, 0x65, 0xd8, 0xde,
3208    0xa5, 0xfa, 0x81, 0x4b, 0x2c, 0x06, 0x1b, 0xfe,
3209    0x49, 0x20, 0x4d, 0x5e, 0x1b, 0xb7, 0x40, 0x96,
3210    0xaa, 0x81, 0x25, 0xeb, 0x84, 0xdb, 0xea, 0x5d,
3211    0x0b, 0xaf, 0xf9, 0x8e, 0x41, 0xa6, 0xdd, 0x91,
3212    0x3a, 0x68, 0x54, 0xb7, 0x2e, 0xb1, 0x74, 0xff,
3213    0xf5, 0x0d, 0xa7, 0x3c, 0xc7, 0x30, 0x5b, 0x55,
3214    0xc6, 0x2d, 0xc8, 0x4c, 0xb4, 0xad, 0xcc, 0xd0,
3215    0xa1, 0x1b, 0x41, 0xc7, 0x23, 0xe8, 0xda, 0xff,
3216    0xb7, 0x3a, 0x12, 0xc2, 0xdc, 0x39, 0x7c, 0xf4,
3217    0xb9, 0x50, 0x00, 0x53, 0x88, 0xc8, 0x77, 0x49,
3218    0xfd, 0x70, 0x3d, 0xe0, 0xaa, 0x0c, 0x28, 0xd4,
3219    0xa2, 0xec, 0x82, 0x5d, 0xda, 0xe8, 0x05, 0x2f,
3220    0xe8, 0x9c, 0x21, 0x39, 0x3a, 0x22, 0x2f, 0x0a,
3221    0x5c, 0x6d, 0x01, 0xdf, 0xc8, 0x9f, 0x46, 0xf7,
3222    0x15, 0x02, 0xad, 0x19, 0x35, 0x63, 0x55, 0x58,
3223    0xf5, 0x7a, 0x46, 0xc9, 0x7a, 0xe6, 0x33, 0x84,
3224    0x48, 0x2b, 0xf0, 0xe7, 0xc5, 0x72, 0x98, 0x43,
3225    0x6a, 0x99, 0xba, 0x00, 0x57, 0x4f, 0xaa, 0x0a
3226};
3227
3228static const unsigned char ml_kem_512_private_key[] = {
3229    0x87, 0xca, 0x19, 0x93, 0xb6, 0x4d, 0x89, 0x32,
3230    0xae, 0x3b, 0x22, 0x52, 0x82, 0xa1, 0xb3, 0xc1,
3231    0x37, 0x65, 0xdc, 0xc1, 0x22, 0x4c, 0x43, 0x77,
3232    0x33, 0x0a, 0x04, 0xec, 0xec, 0x0b, 0x25, 0x05,
3233    0x40, 0x07, 0x53, 0x82, 0xbe, 0x37, 0x52, 0x53,
3234    0x12, 0x87, 0x7d, 0x77, 0x69, 0xfd, 0x59, 0x4f,
3235    0xbd, 0x16, 0x42, 0x82, 0x58, 0x9d, 0xee, 0x5c,
3236    0x0f, 0x2c, 0x14, 0x7f, 0xc6, 0x2a, 0x95, 0x42,
3237    0x10, 0x3c, 0x08, 0xbc, 0xcc, 0xa0, 0x05, 0x82,
3238    0xe9, 0xc5, 0x26, 0x81, 0xfa, 0xb8, 0x79, 0x78,
3239    0x5b, 0x3e, 0x79, 0x49, 0x68, 0x44, 0xb3, 0x7b,
3240    0xf5, 0x26, 0x62, 0x7a, 0x8a, 0x3c, 0xd8, 0x82,
3241    0x1f, 0x16, 0x1d, 0x92, 0x99, 0xac, 0xc4, 0xa9,
3242    0xb9, 0x30, 0x32, 0x6b, 0x6b, 0x67, 0x3d, 0x16,
3243    0x13, 0x1d, 0xf0, 0x98, 0x94, 0x42, 0x90, 0x68,
3244    0xfc, 0x65, 0xa3, 0xe5, 0x16, 0x22, 0x09, 0x64,
3245    0xc0, 0x7d, 0x54, 0x03, 0x47, 0x89, 0xbe, 0xae,
3246    0x61, 0x4b, 0x13, 0xa1, 0xcd, 0xad, 0xbc, 0x20,
3247    0x5e, 0x36, 0x36, 0x34, 0x41, 0x1d, 0x5b, 0x3a,
3248    0x26, 0x91, 0x80, 0x75, 0xe0, 0x63, 0x9d, 0xd6,
3249    0x35, 0xc9, 0x28, 0x81, 0xa4, 0x6e, 0xfb, 0x95,
3250    0x01, 0x11, 0x8f, 0xcc, 0x18, 0xb3, 0x9a, 0x91,
3251    0x66, 0xa6, 0x37, 0x6c, 0xeb, 0x71, 0x42, 0x29,
3252    0xec, 0x71, 0xa4, 0x99, 0x6d, 0x92, 0x97, 0x9d,
3253    0x94, 0x64, 0x6e, 0xc3, 0xf0, 0x5d, 0xa5, 0x49,
3254    0x8f, 0x66, 0xa5, 0x0a, 0x9a, 0xb9, 0xcf, 0x85,
3255    0x20, 0xa7, 0x28, 0xe1, 0xc2, 0x10, 0x08, 0x72,
3256    0x58, 0x71, 0x56, 0x3e, 0x7b, 0x47, 0x46, 0x81,
3257    0x7d, 0x74, 0xfa, 0xb2, 0xb6, 0xf2, 0xa0, 0xe3,
3258    0x4a, 0x0a, 0x5e, 0x95, 0x2b, 0x32, 0xf1, 0x07,
3259    0x2c, 0x30, 0x5e, 0x81, 0x84, 0x58, 0xf3, 0x42,
3260    0x34, 0xdb, 0xaa, 0xc4, 0x06, 0xcb, 0x63, 0x72,
3261    0xfa, 0x01, 0x86, 0xe8, 0xca, 0xd7, 0x73, 0x1d,
3262    0xac, 0xd8, 0x64, 0x60, 0x66, 0xb1, 0x19, 0xb1,
3263    0x59, 0xac, 0x78, 0x21, 0xab, 0x9a, 0x62, 0xbf,
3264    0xe8, 0x1b, 0xd1, 0xdc, 0x75, 0x08, 0xa4, 0x9e,
3265    0x22, 0x54, 0xa8, 0x36, 0x68, 0x4b, 0xb7, 0x22,
3266    0xa3, 0xbc, 0x04, 0x09, 0xe2, 0xe9, 0x4d, 0xce,
3267    0xf5, 0x46, 0x69, 0x1a, 0x47, 0x80, 0xb2, 0xa5,
3268    0xa0, 0x24, 0xcf, 0x0d, 0x60, 0x95, 0x99, 0x33,
3269    0xad, 0x6a, 0x58, 0x7a, 0x56, 0x53, 0x86, 0x44,
3270    0xa8, 0x3c, 0x1f, 0x92, 0x55, 0x3f, 0x3a, 0x3b,
3271    0x5f, 0x81, 0xaa, 0x0c, 0xc4, 0x4b, 0x1a, 0xe3,
3272    0x61, 0x8a, 0xd0, 0x5d, 0x29, 0x87, 0xb6, 0x7d,
3273    0x1c, 0x85, 0xa5, 0x14, 0xb0, 0xde, 0x1c, 0x8d,
3274    0x5c, 0xc1, 0x5c, 0x04, 0xfc, 0x77, 0xad, 0x03,
3275    0x55, 0x96, 0xe0, 0xa7, 0x43, 0xb5, 0x95, 0x9a,
3276    0xd5, 0x22, 0xef, 0x13, 0x5f, 0x14, 0x9c, 0x0e,
3277    0x7e, 0x56, 0x89, 0x37, 0x33, 0xc9, 0x00, 0x54,
3278    0x7e, 0xea, 0x32, 0x4f, 0x02, 0x85, 0xcd, 0xe5,
3279    0x9c, 0x25, 0x00, 0x3b, 0xad, 0xc2, 0x72, 0x3a,
3280    0x38, 0x66, 0x95, 0xf9, 0xf4, 0x22, 0x1f, 0x50,
3281    0x19, 0x20, 0x6a, 0x31, 0x03, 0xf8, 0x97, 0x91,
3282    0xf0, 0x42, 0xbb, 0xc0, 0x86, 0xde, 0x56, 0x93,
3283    0xf2, 0x78, 0x9b, 0xc9, 0x98, 0x16, 0x47, 0x83,
3284    0x67, 0x55, 0x92, 0x4e, 0x5a, 0xfa, 0x5d, 0x88,
3285    0xf9, 0xc8, 0xef, 0xa8, 0x21, 0x34, 0x58, 0x5f,
3286    0xca, 0xbb, 0x52, 0x98, 0xbc, 0x5c, 0xf5, 0xa7,
3287    0xae, 0xc5, 0xfc, 0x78, 0xf9, 0xa5, 0x30, 0x16,
3288    0x68, 0x9d, 0x62, 0x17, 0x41, 0x7a, 0x95, 0xcf,
3289    0x27, 0xb6, 0x6d, 0xae, 0x58, 0xa7, 0x28, 0x8c,
3290    0x8f, 0xc3, 0x28, 0xac, 0x06, 0x79, 0x9d, 0x94,
3291    0xc4, 0x9d, 0xed, 0xb2, 0x61, 0xf4, 0x44, 0x86,
3292    0xec, 0x12, 0xc3, 0x13, 0x97, 0xa7, 0x8b, 0x9a,
3293    0x63, 0x2e, 0xf1, 0x66, 0x08, 0x84, 0x32, 0xf6,
3294    0x15, 0x3b, 0x91, 0xca, 0xce, 0xf7, 0x40, 0x53,
3295    0xa9, 0x28, 0x11, 0x63, 0xa0, 0x23, 0x2e, 0xc4,
3296    0x44, 0x28, 0x05, 0x01, 0x02, 0x74, 0xcf, 0x9c,
3297    0x3a, 0x1a, 0xbc, 0x93, 0x8a, 0x2c, 0xe8, 0x9a,
3298    0xca, 0xe1, 0x74, 0x62, 0x03, 0x88, 0xc7, 0x12,
3299    0x20, 0x96, 0x3c, 0x4d, 0x10, 0x79, 0x28, 0x6f,
3300    0x7b, 0xa8, 0x1b, 0xfb, 0x5e, 0x57, 0x17, 0xcc,
3301    0x6d, 0xd0, 0x72, 0x8a, 0xb2, 0x70, 0xa3, 0x0a,
3302    0x88, 0x03, 0x5b, 0x88, 0x5d, 0x35, 0x12, 0x8e,
3303    0xac, 0xc1, 0x81, 0xca, 0xb7, 0x2b, 0xb1, 0x96,
3304    0xf6, 0x35, 0xce, 0xbb, 0x75, 0xad, 0x0d, 0xd0,
3305    0xba, 0x4e, 0x43, 0x5b, 0x31, 0x08, 0x93, 0x32,
3306    0x72, 0x63, 0x58, 0xc5, 0xa2, 0x70, 0x95, 0x12,
3307    0x8f, 0xf2, 0xc1, 0x61, 0xeb, 0x22, 0xe9, 0x4a,
3308    0x65, 0xa5, 0x48, 0x5d, 0x4c, 0x11, 0x78, 0x69,
3309    0x0b, 0x1f, 0x39, 0x2b, 0x7f, 0x63, 0x77, 0xad,
3310    0x96, 0x6b, 0x67, 0x80, 0x90, 0x70, 0x57, 0x2b,
3311    0xbc, 0x68, 0x9c, 0xaa, 0xb2, 0xd8, 0x3c, 0xbf,
3312    0xd6, 0x4f, 0xc4, 0x28, 0x65, 0x74, 0x54, 0x84,
3313    0x43, 0x9a, 0x1c, 0x96, 0x50, 0x02, 0x97, 0xc6,
3314    0xcf, 0xb0, 0xb1, 0x1d, 0x98, 0x9a, 0x32, 0x94,
3315    0x73, 0x88, 0x94, 0x78, 0x2d, 0x5f, 0x25, 0x05,
3316    0x5f, 0xa6, 0x96, 0x7a, 0xc8, 0x3a, 0xdf, 0xa8,
3317    0x19, 0xb2, 0x53, 0x53, 0x05, 0xf9, 0x31, 0xdc,
3318    0x58, 0x6c, 0xd1, 0x3a, 0x9b, 0x47, 0x3b, 0x7d,
3319    0x87, 0xe5, 0xb4, 0xb2, 0xd9, 0x96, 0x2a, 0x59,
3320    0x90, 0x3c, 0xcc, 0xad, 0xdc, 0xa2, 0x57, 0x87,
3321    0x71, 0xc6, 0x7e, 0x5a, 0x49, 0x98, 0xc8, 0x94,
3322    0x29, 0x30, 0x7b, 0x0e, 0x01, 0x97, 0x53, 0x18,
3323    0x32, 0x50, 0x73, 0x9e, 0x14, 0x47, 0x97, 0xbd,
3324    0xcc, 0x22, 0xab, 0x02, 0x95, 0xd7, 0xc5, 0x32,
3325    0xdf, 0x17, 0x84, 0x86, 0x77, 0x41, 0x6e, 0x95,
3326    0x4d, 0x66, 0xf9, 0xb0, 0x9e, 0x12, 0x81, 0x53,
3327    0x2a, 0x2e, 0x8f, 0x0c, 0x6a, 0xbe, 0x00, 0x37,
3328    0xe7, 0xe8, 0x11, 0x90, 0x97, 0xc9, 0xec, 0x84,
3329    0x5a, 0xa0, 0x69, 0x85, 0xc0, 0x88, 0x55, 0x2c,
3330    0x41, 0xb6, 0x15, 0x17, 0x36, 0x42, 0xc1, 0x02,
3331    0x51, 0xc0, 0x6e, 0x91, 0xa2, 0x5c, 0x24, 0x3c,
3332    0x02, 0x63, 0xb6, 0x75, 0xc7, 0x20, 0x7d, 0x58,
3333    0x70, 0x1d, 0x13, 0xa5, 0x2e, 0xab, 0x92, 0x56,
3334    0x5e, 0xf1, 0xa1, 0xde, 0xfb, 0xae, 0xfe, 0x4c,
3335    0x0b, 0x03, 0xf5, 0x04, 0x44, 0xa3, 0xbe, 0x20,
3336    0xb1, 0x71, 0x31, 0x0b, 0xa3, 0xf2, 0x08, 0x52,
3337    0xf3, 0xa2, 0xa1, 0x8e, 0x72, 0x29, 0x40, 0x70,
3338    0x15, 0x64, 0x60, 0x52, 0xd2, 0xe7, 0x3a, 0xbe,
3339    0xe3, 0x18, 0xd7, 0x55, 0x89, 0x9c, 0x78, 0x4a,
3340    0x6f, 0xb5, 0xaa, 0xb1, 0x7c, 0x90, 0x2c, 0xb6,
3341    0x8a, 0xfa, 0x36, 0x57, 0xb9, 0x01, 0x2e, 0x1b,
3342    0xb8, 0xb6, 0xaa, 0xc2, 0x68, 0x9a, 0xa4, 0x8c,
3343    0x2d, 0x42, 0x62, 0xbb, 0x29, 0x63, 0xb0, 0x6a,
3344    0x24, 0x22, 0x82, 0x54, 0x1c, 0xf6, 0x14, 0x19,
3345    0xd9, 0x0e, 0x2b, 0xd3, 0x66, 0xbe, 0xe7, 0xa4,
3346    0x36, 0x9b, 0x72, 0x41, 0xa6, 0x6b, 0xf2, 0x64,
3347    0x5d, 0x8e, 0x90, 0x4c, 0x3f, 0x7b, 0x30, 0x0c,
3348    0x04, 0x1d, 0x56, 0x87, 0x39, 0x3d, 0x2c, 0xa9,
3349    0x29, 0x75, 0xcb, 0xfd, 0xc0, 0x18, 0xdd, 0xc6,
3350    0x0a, 0xf5, 0x62, 0x00, 0x9e, 0xb0, 0x88, 0x8e,
3351    0x5a, 0x05, 0x76, 0x24, 0x6a, 0xce, 0x74, 0x5b,
3352    0xb1, 0x63, 0x40, 0x8b, 0x5a, 0x9a, 0xe3, 0xc1,
3353    0x94, 0xa8, 0x5c, 0x21, 0x90, 0x7b, 0x37, 0xb1,
3354    0x62, 0x8e, 0xcd, 0x9a, 0x15, 0xec, 0x20, 0x24,
3355    0x87, 0x30, 0x27, 0x34, 0x44, 0xb0, 0xa2, 0xf4,
3356    0x54, 0xf9, 0xb4, 0x73, 0x0f, 0x33, 0x91, 0x50,
3357    0x47, 0x6e, 0xe0, 0x70, 0x98, 0xf6, 0xbc, 0x1b,
3358    0x97, 0xcc, 0x1b, 0xd3, 0xb8, 0xc1, 0xa2, 0xeb,
3359    0x0e, 0x50, 0xa7, 0x82, 0xf2, 0x11, 0x5d, 0xf6,
3360    0x17, 0x49, 0x6f, 0x6c, 0x6f, 0x8c, 0x09, 0xb0,
3361    0x5f, 0x88, 0x8d, 0x9e, 0x93, 0x3d, 0x28, 0x77,
3362    0x46, 0xc6, 0x31, 0xb3, 0x10, 0x87, 0x26, 0xb0,
3363    0xc4, 0xa7, 0xc8, 0x8b, 0x09, 0xc8, 0x60, 0xac,
3364    0xd7, 0x52, 0x35, 0x70, 0xc8, 0x02, 0xbd, 0x38,
3365    0x72, 0x43, 0x16, 0x2d, 0x12, 0x8c, 0xa2, 0x29,
3366    0x4c, 0x83, 0x43, 0x18, 0xcc, 0x21, 0xfb, 0x14,
3367    0xd2, 0xab, 0x37, 0x3f, 0x22, 0x4e, 0x3f, 0xd4,
3368    0x98, 0x43, 0x85, 0x95, 0x09, 0xf4, 0xca, 0x1a,
3369    0x1a, 0x56, 0x6c, 0x05, 0x67, 0x88, 0xa3, 0xaa,
3370    0x48, 0x4a, 0xaa, 0xbd, 0xf1, 0xa0, 0x8f, 0x1b,
3371    0x44, 0xc7, 0x56, 0xab, 0x2a, 0x0c, 0x8b, 0xc5,
3372    0x85, 0x1e, 0xe2, 0xeb, 0x23, 0x03, 0x4c, 0x2e,
3373    0xaa, 0x5a, 0xc1, 0x5f, 0x89, 0x75, 0x1b, 0xd5,
3374    0xca, 0xe1, 0xd5, 0x90, 0x89, 0xd5, 0x00, 0x2b,
3375    0xb1, 0xb3, 0xbf, 0xca, 0x4a, 0xde, 0x09, 0x82,
3376    0xad, 0x67, 0x83, 0xe9, 0xd3, 0x7f, 0xb3, 0xe3,
3377    0x20, 0xac, 0x98, 0x55, 0xdf, 0x66, 0x6b, 0xfd,
3378    0x7c, 0x6b, 0x87, 0xa9, 0xa4, 0x6e, 0x25, 0x97,
3379    0x12, 0x56, 0x11, 0x61, 0x50, 0x7e, 0x17, 0x35,
3380    0x98, 0xf9, 0x88, 0xac, 0xb6, 0xf9, 0xab, 0x3a,
3381    0x10, 0x92, 0x63, 0x24, 0x46, 0x88, 0xc7, 0x08,
3382    0x78, 0x75, 0x8f, 0xf4, 0xd4, 0x31, 0x3b, 0x76,
3383    0x64, 0xf0, 0xf5, 0x10, 0xe9, 0x13, 0xca, 0x01,
3384    0xc5, 0x2b, 0x3a, 0x1b, 0x46, 0x53, 0x51, 0x44,
3385    0xe2, 0xdb, 0x0c, 0xac, 0xe8, 0xa6, 0x46, 0x66,
3386    0x00, 0xcf, 0x2a, 0x87, 0x83, 0x50, 0x07, 0xe1,
3387    0x6a, 0xa5, 0x07, 0x80, 0x1d, 0x86, 0xb7, 0x38,
3388    0x5e, 0x66, 0x9b, 0xfa, 0xf6, 0xba, 0x1d, 0xf5,
3389    0x68, 0x31, 0x63, 0xc2, 0xd5, 0x70, 0x53, 0x2f,
3390    0xd7, 0x43, 0x90, 0x54, 0x64, 0x0f, 0x24, 0x4c,
3391    0x52, 0x87, 0x13, 0x59, 0xd2, 0x84, 0x2f, 0xc3,
3392    0x37, 0xa0, 0x60, 0x03, 0x3a, 0xf0, 0x5e, 0xaa,
3393    0x00, 0x1c, 0x34, 0xfc, 0x7b, 0xd8, 0xf9, 0x10,
3394    0x29, 0xe4, 0x6c, 0x29, 0x43, 0x36, 0x27, 0x64,
3395    0x5d, 0x67, 0x86, 0x64, 0x21, 0xd6, 0x61, 0xaf,
3396    0x25, 0x74, 0x80, 0x53, 0x2b, 0x88, 0x78, 0x50,
3397    0xdc, 0x49, 0x9f, 0xfe, 0xd5, 0xb1, 0x40, 0x98,
3398    0xa0, 0x33, 0x72, 0x5e, 0x82, 0x0a, 0x5b, 0xe1,
3399    0x40, 0x0a, 0x0c, 0xb7, 0x03, 0x74, 0x1c, 0xa7,
3400    0x4b, 0x47, 0x86, 0x73, 0xaa, 0xcf, 0x85, 0x16,
3401    0x6e, 0xe8, 0xa1, 0x84, 0xdb, 0x2c, 0x58, 0x54,
3402    0x9c, 0x22, 0x40, 0xb8, 0x30, 0x8c, 0x27, 0xbe,
3403    0xba, 0x40, 0xc3, 0xb9, 0xd7, 0x29, 0xed, 0xb1,
3404    0x8c, 0xc2, 0x06, 0x8e, 0xcd, 0xb2, 0x7d, 0xa2,
3405    0x2b, 0x2c, 0xd3, 0xe7, 0xa0, 0xba, 0xa5, 0x30,
3406    0xc5, 0x19, 0x3c, 0xd3, 0xc8, 0x6b, 0xf8, 0x6a,
3407    0x44, 0xf0, 0x79, 0x9e, 0x51, 0x55, 0xb0, 0x9b,
3408    0xe2, 0x50, 0x98, 0x85, 0x23, 0xb3, 0xa7, 0x31,
3409    0xdd, 0x89, 0x1b, 0xc2, 0x00, 0x60, 0x11, 0xa0,
3410    0x65, 0xc0, 0xab, 0x57, 0xf1, 0xa6, 0xc1, 0x78,
3411    0x89, 0x55, 0xe0, 0x13, 0x5f, 0xa5, 0xca, 0x8f,
3412    0x3e, 0x52, 0xc7, 0x5d, 0x37, 0x16, 0x97, 0x3a,
3413    0x2f, 0xb2, 0x2c, 0x0e, 0xb1, 0x7c, 0x1b, 0x32,
3414    0x85, 0x29, 0xd9, 0xfa, 0x76, 0x56, 0xd7, 0x4d,
3415    0xea, 0x74, 0x0d, 0x9f, 0x07, 0x97, 0x77, 0xc3,
3416    0x6c, 0x17, 0xa1, 0x9c, 0x19, 0x58, 0x9e, 0x84,
3417    0xd2, 0xb8, 0xe4, 0xd1, 0xbc, 0x31, 0x07, 0xcb,
3418    0xd2, 0x78, 0x14, 0x22, 0x48, 0x35, 0x48, 0x44,
3419    0x6c, 0x89, 0x93, 0x14, 0x77, 0x44, 0xaa, 0x9e,
3420    0xc1, 0xc5, 0x93, 0xec, 0x2d, 0x5b, 0xaa, 0xc8,
3421    0x6a, 0x0a, 0xf6, 0x4a, 0x85, 0xe9, 0x09, 0xdf,
3422    0x8e, 0x28, 0x16, 0x60, 0x5d, 0x20, 0xb4, 0xe3,
3423    0x82, 0xb3, 0x0b, 0xbb, 0x61, 0xbf, 0x3a, 0x5f,
3424    0x82, 0x1a, 0x0b, 0x5d, 0xba, 0x9a, 0xd3, 0xe7,
3425    0xe5, 0xbd, 0x1b, 0x37, 0xa7, 0x5e, 0x0f, 0x09,
3426    0x29, 0x74, 0xe8, 0x46, 0xe8, 0xc3, 0x7c, 0x45,
3427    0x48, 0x7d, 0x60, 0x73, 0x9f, 0x99, 0x35, 0x17,
3428    0x19, 0xa5, 0x39, 0x47, 0x23, 0x26, 0x2b, 0x3b,
3429    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3430    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3431    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3432    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
3433};
3434
3435static const unsigned char ml_kem_512_secret[] = {
3436    0x4a, 0xd5, 0x3a, 0x06, 0xb2, 0x9f, 0x12, 0x56,
3437    0x84, 0x21, 0xa5, 0x52, 0xc0, 0x81, 0x95, 0xb5,
3438    0x86, 0x73, 0xc8, 0x2f, 0x87, 0x0c, 0xc1, 0xcc,
3439    0xd6, 0x5a, 0x08, 0xe4, 0x32, 0x5f, 0xeb, 0x27
3440};
3441
3442static const unsigned char ml_kem_512_reject_secret[] = {
3443    0x87, 0xf1, 0xe8, 0x13, 0xb7, 0x2e, 0x04, 0x87,
3444    0x47, 0x22, 0x56, 0x6e, 0x12, 0x80, 0xd8, 0x9d,
3445    0x8b, 0x44, 0xb7, 0xfd, 0xff, 0x7d, 0x69, 0x23,
3446    0x36, 0xd7, 0xb8, 0x7f, 0x38, 0xe7, 0x85, 0xce
3447};
3448
3449static const unsigned char ml_kem_512_entropy[ML_KEM_RANDOM_BYTES] = {
3450    0
3451};
3452
3453static const unsigned char ml_kem_512_seed[ML_KEM_SEED_BYTES] = {
3454    0
3455};
3456
3457static const ST_KAT_PARAM ml_kem_keygen_params[] = {
3458    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_ML_KEM_SEED, ml_kem_512_seed),
3459    ST_KAT_PARAM_END()
3460};
3461
3462static const ST_KAT_PARAM ml_kem_key[] = {
3463    ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PRIV_KEY, ml_kem_512_private_key),
3464    ST_KAT_PARAM_END()
3465};
3466
3467static const ST_KAT_KEM st_kat_kem_tests[] = {
3468    {
3469        OSSL_SELF_TEST_DESC_KEM,
3470        "ML-KEM-512",
3471        ml_kem_key,
3472        ITM(ml_kem_512_cipher_text),
3473        ITM(ml_kem_512_entropy),
3474        ITM(ml_kem_512_secret),
3475        ml_kem_512_reject_secret    /* No length because same as _secret's */
3476    },
3477};
3478#endif /* OPENSSL_NO_ML_KEM */
3479
3480#if !defined(OPENSSL_NO_ML_KEM) || !defined(OPENSSL_NO_ML_DSA) || !defined(OPENSSL_NO_SLH_DSA)
3481static const ST_KAT_ASYM_KEYGEN st_kat_asym_keygen_tests[] = {
3482# if !defined(OPENSSL_NO_ML_KEM)
3483    /*
3484     * FIPS 140-3 IG 10.3.A resolution 14 mandates a CAST for ML-KEM
3485     * key generation.
3486     */
3487    {
3488        OSSL_SELF_TEST_DESC_KEYGEN_ML_KEM,
3489        "ML-KEM-512",
3490        ml_kem_keygen_params,
3491        ml_kem_key
3492    },
3493# endif
3494# if !defined(OPENSSL_NO_ML_DSA)
3495    {
3496        OSSL_SELF_TEST_DESC_KEYGEN_ML_DSA,
3497        "ML-DSA-65",
3498        ml_dsa_keygen_params,
3499        ml_dsa_key
3500    },
3501# endif
3502# if !defined(OPENSSL_NO_SLH_DSA)
3503    {
3504        OSSL_SELF_TEST_DESC_KEYGEN_SLH_DSA,
3505        "SLH-DSA-SHA2-128f",
3506        slh_dsa_sha2_128f_keygen_init_params,
3507        slh_dsa_128f_keygen_expected_params
3508    },
3509# endif
3510};
3511#endif /* !OPENSSL_NO_ML_DSA || !OPENSSL_NO_SLH_DSA */
3512
3513static const ST_KAT_ASYM_CIPHER st_kat_asym_cipher_tests[] = {
3514    {
3515        OSSL_SELF_TEST_DESC_ASYM_RSA_ENC,
3516        "RSA",
3517        1,
3518        rsa_pub_key,
3519        rsa_enc_params,
3520        ITM(rsa_asym_plaintext_encrypt),
3521        ITM(rsa_asym_expected_encrypt),
3522    },
3523    {
3524        OSSL_SELF_TEST_DESC_ASYM_RSA_DEC,
3525        "RSA",
3526        0,
3527        rsa_priv_key,
3528        rsa_enc_params,
3529        ITM(rsa_asym_expected_encrypt),
3530        ITM(rsa_asym_plaintext_encrypt),
3531    },
3532    {
3533        OSSL_SELF_TEST_DESC_ASYM_RSA_DEC,
3534        "RSA",
3535        0,
3536        rsa_crt_key,
3537        rsa_enc_params,
3538        ITM(rsa_asym_expected_encrypt),
3539        ITM(rsa_asym_plaintext_encrypt),
3540    },
3541};
3542