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