fc8bf2b54e8b67308b781ac44148edd5e8d8fc43
[openssl.git] / providers / fips / self_test_data.inc
1 /*
2  * Copyright 2019-2021 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 /* Macros to build Self test data */
11 #define ITM(x) x, sizeof(x)
12 #define ITM_STR(x) x, (sizeof(x) - 1)
13
14 #define ST_KAT_PARAM_END() { "", 0, NULL, 0 }
15 #define ST_KAT_PARAM_BIGNUM(name, data)                                        \
16     { name, OSSL_PARAM_UNSIGNED_INTEGER, ITM(data) }
17 #define ST_KAT_PARAM_OCTET(name, data)                                         \
18     { name, OSSL_PARAM_OCTET_STRING, ITM(data) }
19 #define ST_KAT_PARAM_UTF8STRING(name, data)                                    \
20     { name, OSSL_PARAM_UTF8_STRING, ITM_STR(data) }
21 #define ST_KAT_PARAM_INT(name, i)                                              \
22     { name, OSSL_PARAM_INTEGER, &i, sizeof(i) }
23
24 /* used to store raw parameters for keys and algorithms */
25 typedef struct st_kat_param_st {
26     const char *name;  /* an OSSL_PARAM name */
27     size_t type;       /* the type associated with the data */
28     const void *data;  /* unsigned char [], or char [] depending on the type */
29     size_t data_len;   /* the length of the data */
30 } ST_KAT_PARAM;
31
32 typedef struct st_kat_st {
33     const char *desc;
34     const char *algorithm;
35     const unsigned char *pt;
36     size_t pt_len;
37     const unsigned char *expected;
38     size_t expected_len;
39 } ST_KAT;
40
41 typedef ST_KAT ST_KAT_DIGEST;
42 typedef struct st_kat_cipher_st {
43     ST_KAT base;
44     const unsigned char *key;
45     size_t key_len;
46     const unsigned char *iv;
47     size_t iv_len;
48     const unsigned char *aad;
49     size_t aad_len;
50     const unsigned char *tag;
51     size_t tag_len;
52 } ST_KAT_CIPHER;
53
54 typedef struct st_kat_kdf_st {
55     const char *desc;
56     const char *algorithm;
57     const ST_KAT_PARAM *params;
58     const unsigned char *expected;
59     size_t expected_len;
60 } ST_KAT_KDF;
61
62 typedef struct st_kat_drbg_st {
63     const char *desc;
64     const char *algorithm;
65     const char *param_name;
66     char *param_value;
67     const unsigned char *entropyin;
68     size_t entropyinlen;
69     const unsigned char *nonce;
70     size_t noncelen;
71     const unsigned char *persstr;
72     size_t persstrlen;
73     const unsigned char *entropyinpr1;
74     size_t entropyinpr1len;
75     const unsigned char *entropyinpr2;
76     size_t entropyinpr2len;
77     const unsigned char *entropyaddin1;
78     size_t entropyaddin1len;
79     const unsigned char *entropyaddin2;
80     size_t entropyaddin2len;
81     const unsigned char *expected;
82     size_t expectedlen;
83 } ST_KAT_DRBG;
84
85 typedef struct st_kat_kas_st {
86     const char *desc;
87     const char *algorithm;
88
89     const ST_KAT_PARAM *key_group;
90     const ST_KAT_PARAM *key_host_data;
91     const ST_KAT_PARAM *key_peer_data;
92
93     const unsigned char *expected;
94     size_t expected_len;
95 } ST_KAT_KAS;
96
97 typedef struct st_kat_sign_st {
98     const char *desc;
99     const char *algorithm;
100     const char *mdalgorithm;
101     const ST_KAT_PARAM *key;
102     const unsigned char *sig_expected; /* Set to NULL if this value changes */
103     size_t sig_expected_len;
104 } ST_KAT_SIGN;
105
106 typedef struct st_kat_asym_cipher_st {
107     const char *desc;
108     const char *algorithm;
109     int encrypt;
110     const ST_KAT_PARAM *key;
111     const ST_KAT_PARAM *postinit;
112     const unsigned char *in;
113     size_t in_len;
114     const unsigned char *expected;
115     size_t expected_len;
116 } ST_KAT_ASYM_CIPHER;
117
118 /*- DIGEST TEST DATA */
119 static const unsigned char sha1_pt[] = "abc";
120 static const unsigned char sha1_digest[] = {
121     0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, 0x25, 0x71,
122     0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D
123 };
124
125 static const unsigned char sha512_pt[] = "abc";
126 static const unsigned char sha512_digest[] = {
127     0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, 0xCC, 0x41, 0x73, 0x49,
128     0xAE, 0x20, 0x41, 0x31, 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2,
129     0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, 0x21, 0x92, 0x99, 0x2A,
130     0x27, 0x4F, 0xC1, 0xA8, 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD,
131     0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, 0x2A, 0x9A, 0xC9, 0x4F,
132     0xA5, 0x4C, 0xA4, 0x9F
133 };
134 static const unsigned char sha3_256_pt[] = { 0xe7, 0x37, 0x21, 0x05 };
135 static const unsigned char sha3_256_digest[] = {
136     0x3a, 0x42, 0xb6, 0x8a, 0xb0, 0x79, 0xf2, 0x8c, 0x4c, 0xa3, 0xc7, 0x52,
137     0x29, 0x6f, 0x27, 0x90, 0x06, 0xc4, 0xfe, 0x78, 0xb1, 0xeb, 0x79, 0xd9,
138     0x89, 0x77, 0x7f, 0x05, 0x1e, 0x40, 0x46, 0xae
139 };
140
141 static const ST_KAT_DIGEST st_kat_digest_tests[] =
142 {
143     {
144          OSSL_SELF_TEST_DESC_MD_SHA1,
145          "SHA1",
146          ITM_STR(sha1_pt),
147          ITM(sha1_digest),
148     },
149     {
150          OSSL_SELF_TEST_DESC_MD_SHA2,
151          "SHA512",
152          ITM_STR(sha512_pt),
153          ITM(sha512_digest),
154     },
155     {
156          OSSL_SELF_TEST_DESC_MD_SHA3,
157          "SHA3-256",
158          ITM(sha3_256_pt),
159          ITM(sha3_256_digest),
160     },
161 };
162
163
164 /*- CIPHER TEST DATA */
165
166 /* DES3 test data */
167 static const unsigned char des_ede3_cbc_pt[] = {
168     0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
169     0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
170     0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
171     0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51
172 };
173 static const unsigned char des_ede3_cbc_key[] = {
174     0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
175     0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01,
176     0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23
177 };
178 static const unsigned char des_ede3_cbc_iv[] = {
179     0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17
180 };
181 static const unsigned char des_ede3_cbc_ct[] = {
182     0x20, 0x79, 0xC3, 0xD5, 0x3A, 0xA7, 0x63, 0xE1,
183     0x93, 0xB7, 0x9E, 0x25, 0x69, 0xAB, 0x52, 0x62,
184     0x51, 0x65, 0x70, 0x48, 0x1F, 0x25, 0xB5, 0x0F,
185     0x73, 0xC0, 0xBD, 0xA8, 0x5C, 0x8E, 0x0D, 0xA7
186 };
187
188 /* AES-256 GCM test data */
189 static const unsigned char aes_256_gcm_key[] = {
190     0x92, 0xe1, 0x1d, 0xcd, 0xaa, 0x86, 0x6f, 0x5c,
191     0xe7, 0x90, 0xfd, 0x24, 0x50, 0x1f, 0x92, 0x50,
192     0x9a, 0xac, 0xf4, 0xcb, 0x8b, 0x13, 0x39, 0xd5,
193     0x0c, 0x9c, 0x12, 0x40, 0x93, 0x5d, 0xd0, 0x8b
194 };
195 static const unsigned char aes_256_gcm_iv[] = {
196     0xac, 0x93, 0xa1, 0xa6, 0x14, 0x52, 0x99, 0xbd,
197     0xe9, 0x02, 0xf2, 0x1a
198 };
199 static const unsigned char aes_256_gcm_pt[] = {
200     0x2d, 0x71, 0xbc, 0xfa, 0x91, 0x4e, 0x4a, 0xc0,
201     0x45, 0xb2, 0xaa, 0x60, 0x95, 0x5f, 0xad, 0x24
202 };
203 static const unsigned char aes_256_gcm_aad[] = {
204     0x1e, 0x08, 0x89, 0x01, 0x6f, 0x67, 0x60, 0x1c,
205     0x8e, 0xbe, 0xa4, 0x94, 0x3b, 0xc2, 0x3a, 0xd6
206 };
207 static const unsigned char aes_256_gcm_ct[] = {
208     0x89, 0x95, 0xae, 0x2e, 0x6d, 0xf3, 0xdb, 0xf9,
209     0x6f, 0xac, 0x7b, 0x71, 0x37, 0xba, 0xe6, 0x7f
210 };
211 static const unsigned char aes_256_gcm_tag[] = {
212     0xec, 0xa5, 0xaa, 0x77, 0xd5, 0x1d, 0x4a, 0x0a,
213     0x14, 0xd9, 0xc5, 0x1e, 0x1d, 0xa4, 0x74, 0xab
214 };
215
216 static const ST_KAT_CIPHER st_kat_cipher_tests[] = {
217 #ifndef OPENSSL_NO_DES
218     {
219         {
220             OSSL_SELF_TEST_DESC_CIPHER_TDES,
221             "DES-EDE3-CBC",
222             ITM(des_ede3_cbc_pt),
223             ITM(des_ede3_cbc_ct)
224         },
225         ITM(des_ede3_cbc_key),
226         ITM(des_ede3_cbc_iv),
227     },
228 #endif
229     {
230         {
231             OSSL_SELF_TEST_DESC_CIPHER_AES_GCM,
232             "AES-256-GCM",
233             ITM(aes_256_gcm_pt),
234             ITM(aes_256_gcm_ct),
235         },
236         ITM(aes_256_gcm_key),
237         ITM(aes_256_gcm_iv),
238         ITM(aes_256_gcm_aad),
239         ITM(aes_256_gcm_tag)
240     }
241 };
242
243 static const char hkdf_digest[] = "SHA256";
244 static const unsigned char hkdf_secret[] = { 's', 'e', 'c', 'r', 'e', 't' };
245 static const unsigned char hkdf_salt[] = { 's', 'a', 'l', 't' };
246 static const unsigned char hkdf_info[] = { 'l', 'a', 'b', 'e', 'l' };
247
248 static const ST_KAT_PARAM hkdf_params[] = {
249     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, hkdf_digest),
250     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, hkdf_secret),
251     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SALT, hkdf_salt),
252     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, hkdf_info),
253     ST_KAT_PARAM_END()
254 };
255 static const unsigned char hkdf_expected[] = {
256     0x2a, 0xc4, 0x36, 0x9f, 0x52, 0x59, 0x96, 0xf8,
257     0xde, 0x13
258 };
259
260 static const char sskdf_digest[] = "SHA224";
261 static const unsigned char sskdf_secret[] = {
262     0x6d, 0xbd, 0xc2, 0x3f, 0x04, 0x54, 0x88, 0xe4,
263     0x06, 0x27, 0x57, 0xb0, 0x6b, 0x9e, 0xba, 0xe1,
264     0x83, 0xfc, 0x5a, 0x59, 0x46, 0xd8, 0x0d, 0xb9,
265     0x3f, 0xec, 0x6f, 0x62, 0xec, 0x07, 0xe3, 0x72,
266     0x7f, 0x01, 0x26, 0xae, 0xd1, 0x2c, 0xe4, 0xb2,
267     0x62, 0xf4, 0x7d, 0x48, 0xd5, 0x42, 0x87, 0xf8,
268     0x1d, 0x47, 0x4c, 0x7c, 0x3b, 0x18, 0x50, 0xe9
269 };
270 static const unsigned char sskdf_otherinfo[] = {
271     0xa1, 0xb2, 0xc3, 0xd4, 0xe5, 0x43, 0x41, 0x56,
272     0x53, 0x69, 0x64, 0x3c, 0x83, 0x2e, 0x98, 0x49,
273     0xdc, 0xdb, 0xa7, 0x1e, 0x9a, 0x31, 0x39, 0xe6,
274     0x06, 0xe0, 0x95, 0xde, 0x3c, 0x26, 0x4a, 0x66,
275     0xe9, 0x8a, 0x16, 0x58, 0x54, 0xcd, 0x07, 0x98,
276     0x9b, 0x1e, 0xe0, 0xec, 0x3f, 0x8d, 0xbe
277 };
278 static const unsigned char sskdf_expected[] = {
279     0xa4, 0x62, 0xde, 0x16, 0xa8, 0x9d, 0xe8, 0x46,
280     0x6e, 0xf5, 0x46, 0x0b, 0x47, 0xb8
281 };
282 static const ST_KAT_PARAM sskdf_params[] = {
283     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, sskdf_digest),
284     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, sskdf_secret),
285     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, sskdf_otherinfo),
286     ST_KAT_PARAM_END()
287 };
288
289 static const char x942kdf_digest[] = "SHA1";
290 static const char x942kdf_cekalg[] = "AES-128-WRAP";
291 static const unsigned char x942kdf_secret[] = {
292     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
293     0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
294     0x10, 0x11, 0x12, 0x13
295 };
296 static const unsigned char x942kdf_expected[] = {
297     0xd6, 0xd6, 0xb0, 0x94, 0xc1, 0x02, 0x7a, 0x7d,
298     0xe6, 0xe3, 0x11, 0x72, 0x94, 0xa3, 0x53, 0x64
299 };
300 static const ST_KAT_PARAM x942kdf_params[] = {
301     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, x942kdf_digest),
302     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_CEK_ALG, x942kdf_cekalg),
303     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, x942kdf_secret),
304     ST_KAT_PARAM_END()
305 };
306
307 static const char x963kdf_digest[] = "SHA256";
308 static const unsigned char x963kdf_otherinfo[] = {
309     0x75, 0xee, 0xf8, 0x1a, 0xa3, 0x04, 0x1e, 0x33,
310     0xb8, 0x09, 0x71, 0x20, 0x3d, 0x2c, 0x0c, 0x52
311 };
312 static const unsigned char x963kdf_secret[] = {
313     0x22, 0x51, 0x8b, 0x10, 0xe7, 0x0f, 0x2a, 0x3f,
314     0x24, 0x38, 0x10, 0xae, 0x32, 0x54, 0x13, 0x9e,
315     0xfb, 0xee, 0x04, 0xaa, 0x57, 0xc7, 0xaf, 0x7d
316 };
317 static const unsigned char x963kdf_expected[] = {
318     0xc4, 0x98, 0xaf, 0x77, 0x16, 0x1c, 0xc5, 0x9f,
319     0x29, 0x62, 0xb9, 0xa7, 0x13, 0xe2, 0xb2, 0x15,
320     0x15, 0x2d, 0x13, 0x97, 0x66, 0xce, 0x34, 0xa7,
321     0x76, 0xdf, 0x11, 0x86, 0x6a, 0x69, 0xbf, 0x2e
322 };
323 static const ST_KAT_PARAM x963kdf_params[] = {
324     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, x963kdf_digest),
325     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, x963kdf_secret),
326     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, x963kdf_otherinfo),
327     ST_KAT_PARAM_END()
328 };
329
330 static const char pbkdf2_digest[] = "SHA256";
331 static const unsigned char pbkdf2_password[] = {
332     0x70, 0x61, 0x73, 0x73, 0x00, 0x77, 0x6f, 0x72,
333     0x64
334 };
335 static const unsigned char pbkdf2_salt[] = {
336     0x73, 0x61, 0x00, 0x6c, 0x74
337 };
338 static const unsigned char pbkdf2_expected[] = {
339     0x89, 0xb6, 0x9d, 0x05, 0x16, 0xf8, 0x29, 0x89,
340     0x3c, 0x69, 0x62, 0x26, 0x65, 0x0a, 0x86, 0x87,
341 };
342 static int pbkdf2_iterations = 4096;
343 static int pbkdf2_pkcs5 = 1;
344 static const ST_KAT_PARAM pbkdf2_params[] = {
345     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, pbkdf2_digest),
346     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_PASSWORD, pbkdf2_password),
347     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SALT, pbkdf2_salt),
348     ST_KAT_PARAM_INT(OSSL_KDF_PARAM_ITER, pbkdf2_iterations),
349     ST_KAT_PARAM_INT(OSSL_KDF_PARAM_PKCS5, pbkdf2_pkcs5),
350     ST_KAT_PARAM_END()
351 };
352
353 static const char sshkdf_digest[] = "SHA1";
354 static const char sshkdf_type[] = EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV;
355 static const unsigned char sshkdf_key[] = {
356     0x00, 0x00, 0x00, 0x80, 0x55, 0xba, 0xe9, 0x31,
357     0xc0, 0x7f, 0xd8, 0x24, 0xbf, 0x10, 0xad, 0xd1,
358     0x90, 0x2b, 0x6f, 0xbc, 0x7c, 0x66, 0x53, 0x47,
359     0x38, 0x34, 0x98, 0xa6, 0x86, 0x92, 0x9f, 0xf5,
360     0xa2, 0x5f, 0x8e, 0x40, 0xcb, 0x66, 0x45, 0xea,
361     0x81, 0x4f, 0xb1, 0xa5, 0xe0, 0xa1, 0x1f, 0x85,
362     0x2f, 0x86, 0x25, 0x56, 0x41, 0xe5, 0xed, 0x98,
363     0x6e, 0x83, 0xa7, 0x8b, 0xc8, 0x26, 0x94, 0x80,
364     0xea, 0xc0, 0xb0, 0xdf, 0xd7, 0x70, 0xca, 0xb9,
365     0x2e, 0x7a, 0x28, 0xdd, 0x87, 0xff, 0x45, 0x24,
366     0x66, 0xd6, 0xae, 0x86, 0x7c, 0xea, 0xd6, 0x3b,
367     0x36, 0x6b, 0x1c, 0x28, 0x6e, 0x6c, 0x48, 0x11,
368     0xa9, 0xf1, 0x4c, 0x27, 0xae, 0xa1, 0x4c, 0x51,
369     0x71, 0xd4, 0x9b, 0x78, 0xc0, 0x6e, 0x37, 0x35,
370     0xd3, 0x6e, 0x6a, 0x3b, 0xe3, 0x21, 0xdd, 0x5f,
371     0xc8, 0x23, 0x08, 0xf3, 0x4e, 0xe1, 0xcb, 0x17,
372     0xfb, 0xa9, 0x4a, 0x59,
373 };
374 static const unsigned char sshkdf_xcghash[] = {
375     0xa4, 0xeb, 0xd4, 0x59, 0x34, 0xf5, 0x67, 0x92,
376     0xb5, 0x11, 0x2d, 0xcd, 0x75, 0xa1, 0x07, 0x5f,
377     0xdc, 0x88, 0x92, 0x45,
378 };
379 static const unsigned char sshkdf_session_id[] = {
380     0xa4, 0xeb, 0xd4, 0x59, 0x34, 0xf5, 0x67, 0x92,
381     0xb5, 0x11, 0x2d, 0xcd, 0x75, 0xa1, 0x07, 0x5f,
382     0xdc, 0x88, 0x92, 0x45,
383 };
384 static const unsigned char sshkdf_expected[] = {
385     0xe2, 0xf6, 0x27, 0xc0, 0xb4, 0x3f, 0x1a, 0xc1,
386 };
387 static const ST_KAT_PARAM sshkdf_params[] = {
388     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, sshkdf_digest),
389     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_SSHKDF_TYPE, sshkdf_type),
390     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, sshkdf_key),
391     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SSHKDF_XCGHASH, sshkdf_xcghash),
392     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SSHKDF_SESSION_ID, sshkdf_session_id),
393     ST_KAT_PARAM_END()
394 };
395
396 static const char tls12prf_digest[] = "SHA256";
397 static const unsigned char tls12prf_secret[] = {
398     0x20, 0x2c, 0x88, 0xc0, 0x0f, 0x84, 0xa1, 0x7a,
399     0x20, 0x02, 0x70, 0x79, 0x60, 0x47, 0x87, 0x46,
400     0x11, 0x76, 0x45, 0x55, 0x39, 0xe7, 0x05, 0xbe,
401     0x73, 0x08, 0x90, 0x60, 0x2c, 0x28, 0x9a, 0x50,
402     0x01, 0xe3, 0x4e, 0xeb, 0x3a, 0x04, 0x3e, 0x5d,
403     0x52, 0xa6, 0x5e, 0x66, 0x12, 0x51, 0x88, 0xbf,
404 };
405 static const unsigned char tls12prf_seed[] = {
406     'k', 'e', 'y', ' ', 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n',
407     0xae, 0x6c, 0x80, 0x6f, 0x8a, 0xd4, 0xd8, 0x07,
408     0x84, 0x54, 0x9d, 0xff, 0x28, 0xa4, 0xb5, 0x8f,
409     0xd8, 0x37, 0x68, 0x1a, 0x51, 0xd9, 0x28, 0xc3,
410     0xe3, 0x0e, 0xe5, 0xff, 0x14, 0xf3, 0x98, 0x68,
411     0x62, 0xe1, 0xfd, 0x91, 0xf2, 0x3f, 0x55, 0x8a,
412     0x60, 0x5f, 0x28, 0x47, 0x8c, 0x58, 0xcf, 0x72,
413     0x63, 0x7b, 0x89, 0x78, 0x4d, 0x95, 0x9d, 0xf7,
414     0xe9, 0x46, 0xd3, 0xf0, 0x7b, 0xd1, 0xb6, 0x16,
415  };
416 static const unsigned char tls12prf_expected[] = {
417     0xd0, 0x61, 0x39, 0x88, 0x9f, 0xff, 0xac, 0x1e,
418     0x3a, 0x71, 0x86, 0x5f, 0x50, 0x4a, 0xa5, 0xd0,
419     0xd2, 0xa2, 0xe8, 0x95, 0x06, 0xc6, 0xf2, 0x27,
420     0x9b, 0x67, 0x0c, 0x3e, 0x1b, 0x74, 0xf5, 0x31,
421     0x01, 0x6a, 0x25, 0x30, 0xc5, 0x1a, 0x3a, 0x0f,
422     0x7e, 0x1d, 0x65, 0x90, 0xd0, 0xf0, 0x56, 0x6b,
423     0x2f, 0x38, 0x7f, 0x8d, 0x11, 0xfd, 0x4f, 0x73,
424     0x1c, 0xdd, 0x57, 0x2d, 0x2e, 0xae, 0x92, 0x7f,
425     0x6f, 0x2f, 0x81, 0x41, 0x0b, 0x25, 0xe6, 0x96,
426     0x0b, 0xe6, 0x89, 0x85, 0xad, 0xd6, 0xc3, 0x84,
427     0x45, 0xad, 0x9f, 0x8c, 0x64, 0xbf, 0x80, 0x68,
428     0xbf, 0x9a, 0x66, 0x79, 0x48, 0x5d, 0x96, 0x6f,
429     0x1a, 0xd6, 0xf6, 0x8b, 0x43, 0x49, 0x5b, 0x10,
430     0xa6, 0x83, 0x75, 0x5e, 0xa2, 0xb8, 0x58, 0xd7,
431     0x0c, 0xca, 0xc7, 0xec, 0x8b, 0x05, 0x3c, 0x6b,
432     0xd4, 0x1c, 0xa2, 0x99, 0xd4, 0xe5, 0x19, 0x28,
433 };
434 static const ST_KAT_PARAM tls12prf_params[] = {
435     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, tls12prf_digest),
436     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SECRET, tls12prf_secret),
437     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SEED, tls12prf_seed),
438     ST_KAT_PARAM_END()
439 };
440
441 static const char kbkdf_digest[] = "SHA256";
442 static const char kbkdf_mac[] = "HMAC";
443 static const unsigned char kbkdf_salt[] = { 'p', 'r', 'f' };
444 static const unsigned char kbkdf_prfinput[] = { 't', 'e', 's', 't' };
445 static unsigned char kbkdf_key[] = {
446     0x37, 0x05, 0xD9, 0x60, 0x80, 0xC1, 0x77, 0x28,
447     0xA0, 0xE8, 0x00, 0xEA, 0xB6, 0xE0, 0xD2, 0x3C,
448 };
449 static unsigned char kbkdf_expected[] = {
450     0x9D, 0x18, 0x86, 0x16, 0xF6, 0x38, 0x52, 0xFE,
451     0x86, 0x91, 0x5B, 0xB8, 0x40, 0xB4, 0xA8, 0x86,
452     0xFF, 0x3E, 0x6B, 0xB0, 0xF8, 0x19, 0xB4, 0x9B,
453     0x89, 0x33, 0x93, 0xD3, 0x93, 0x85, 0x42, 0x95,
454 };
455 static const ST_KAT_PARAM kbkdf_params[] = {
456     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_DIGEST, kbkdf_digest),
457     ST_KAT_PARAM_UTF8STRING(OSSL_KDF_PARAM_MAC, kbkdf_mac),
458     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_KEY, kbkdf_key),
459     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_SALT, kbkdf_salt),
460     ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, kbkdf_prfinput),
461     ST_KAT_PARAM_END()
462 };
463
464 static const ST_KAT_KDF st_kat_kdf_tests[] =
465 {
466     {
467         OSSL_SELF_TEST_DESC_KDF_TLS12_PRF,
468         OSSL_KDF_NAME_TLS1_PRF,
469         tls12prf_params,
470         ITM(tls12prf_expected)
471     },
472     {
473         OSSL_SELF_TEST_DESC_KDF_PBKDF2,
474         OSSL_KDF_NAME_PBKDF2,
475         pbkdf2_params,
476         ITM(pbkdf2_expected)
477     },
478     {
479         OSSL_SELF_TEST_DESC_KDF_SSHKDF,
480         OSSL_KDF_NAME_SSHKDF,
481         sshkdf_params,
482         ITM(sshkdf_expected)
483     },
484     {
485         OSSL_SELF_TEST_DESC_KDF_KBKDF,
486         OSSL_KDF_NAME_KBKDF,
487         kbkdf_params,
488         ITM(kbkdf_expected)
489     },
490     {
491         OSSL_SELF_TEST_DESC_KDF_HKDF,
492         OSSL_KDF_NAME_HKDF,
493         hkdf_params,
494         ITM(hkdf_expected)
495     },
496     {
497         OSSL_SELF_TEST_DESC_KDF_SSKDF,
498         OSSL_KDF_NAME_SSKDF,
499         sskdf_params,
500         ITM(sskdf_expected)
501     },
502     {
503         OSSL_SELF_TEST_DESC_KDF_X963KDF,
504         OSSL_KDF_NAME_X963KDF,
505         x963kdf_params,
506         ITM(x963kdf_expected)
507     },
508     {
509         OSSL_SELF_TEST_DESC_KDF_X942KDF,
510         OSSL_KDF_NAME_X942KDF_ASN1,
511         x942kdf_params,
512         ITM(x942kdf_expected)
513     },
514 };
515
516 /*-
517 * DRBG test vectors are a small subset of
518 * https://csrc.nist.rip/groups/STM/cavp/documents/drbg/drbgtestvectors.zip
519 * Using the folder drbgvectors_pr_true
520 * Generated for CAVS 14.3.
521 */
522
523 /*
524  * Hash_DRBG.rsp
525  *
526  * [SHA-256]
527  * [PredictionResistance = True]
528  * [EntropyInputLen = 256]
529  * [NonceLen = 128]
530  * [PersonalizationStringLen = 256]
531  * [AdditionalInputLen = 256]
532  * [ReturnedBitsLen = 1024]
533  *
534  * COUNT = 14
535  */
536 static const unsigned char drbg_hash_sha256_pr_entropyin[] = {
537     0x06, 0x6d, 0xc8, 0xce, 0x75, 0xb2, 0x89, 0x66, 0xa6, 0x85, 0x16, 0x3f,
538     0xe2, 0xa4, 0xd4, 0x27, 0xfb, 0xdb, 0x61, 0x66, 0x50, 0x61, 0x6b, 0xa2,
539     0x82, 0xfc, 0x33, 0x2b, 0x4e, 0x6f, 0x12, 0x20
540 };
541 static const unsigned char drbg_hash_sha256_pr_nonce[] = {
542     0x55, 0x9f, 0x7c, 0x64, 0x89, 0x70, 0x83, 0xec, 0x2d, 0x73, 0x70, 0xd9,
543     0xf0, 0xe5, 0x07, 0x1f
544 };
545 static const unsigned char drbg_hash_sha256_pr_persstr[] = {
546     0x88, 0x6f, 0x54, 0x9a, 0xad, 0x1a, 0xc6, 0x3d, 0x18, 0xcb, 0xcc, 0x66,
547     0x85, 0xda, 0xa2, 0xc2, 0xf7, 0x9e, 0xb0, 0x89, 0x4c, 0xb4, 0xae, 0xf1,
548     0xac, 0x54, 0x4f, 0xce, 0x57, 0xf1, 0x5e, 0x11
549 };
550 static const unsigned char drbg_hash_sha256_pr_entropyinpr0[] = {
551     0xff, 0x80, 0xb7, 0xd2, 0x6a, 0x05, 0xbc, 0x8a, 0x7a, 0xbe, 0x53, 0x28,
552     0x6b, 0x0e, 0xeb, 0x73, 0x3b, 0x71, 0x5a, 0x20, 0x5b, 0xfa, 0x4f, 0xf6,
553     0x37, 0x03, 0xde, 0xad, 0xb6, 0xea, 0x0e, 0xf4
554 };
555 static const unsigned char drbg_hash_sha256_pr_entropyinpr1[] = {
556     0xc7, 0x38, 0x32, 0x53, 0x46, 0x81, 0xed, 0xe3, 0x7e, 0x03, 0x84, 0x6d,
557     0x3c, 0x84, 0x17, 0x67, 0x29, 0x7d, 0x24, 0x6c, 0x68, 0x92, 0x41, 0xd2,
558     0xe7, 0x75, 0xbe, 0x7e, 0xc9, 0x96, 0x29, 0x3d
559 };
560 static const unsigned char drbg_hash_sha256_pr_addin0[] = {
561     0xb7, 0x21, 0x5f, 0x14, 0xac, 0x7b, 0xaf, 0xd0, 0xa9, 0x17, 0x72, 0xba,
562     0x22, 0xf7, 0x19, 0xaf, 0xbd, 0x20, 0xb3, 0x11, 0x63, 0x6c, 0x2b, 0x1e,
563     0x83, 0xe4, 0xa8, 0x23, 0x35, 0x3f, 0xc6, 0xea
564 };
565 static const unsigned char drbg_hash_sha256_pr_addin1[] = {
566     0xce, 0xd3, 0x1f, 0x7e, 0x0d, 0xae, 0x5b, 0xb5, 0xc0, 0x43, 0xe2, 0x46,
567     0xb2, 0x94, 0x73, 0xe2, 0xfd, 0x39, 0x51, 0x2e, 0xad, 0x45, 0x69, 0xee,
568     0xe3, 0xe3, 0x80, 0x33, 0x14, 0xab, 0xa7, 0xa3
569 };
570 static const unsigned char drbg_hash_sha256_pr_expected[] = {
571     0x60, 0xc2, 0x34, 0xcf, 0xaf, 0xb4, 0x68, 0x03, 0x3b, 0xf1, 0x95, 0xe5,
572     0x78, 0xce, 0x26, 0x6e, 0x14, 0x65, 0x32, 0x6a, 0x96, 0xa9, 0xe0, 0x3f,
573     0x8b, 0x89, 0x36, 0x70, 0xef, 0x62, 0x75, 0x4d, 0x5e, 0x80, 0xd5, 0x53,
574     0xa1, 0xf8, 0x49, 0x50, 0x20, 0x8b, 0x93, 0x43, 0x07, 0x9f, 0x2e, 0xf8,
575     0x56, 0xe9, 0xc5, 0x70, 0x61, 0x85, 0x97, 0xb5, 0xdc, 0x82, 0xa2, 0xda,
576     0xea, 0xa3, 0xfd, 0x9b, 0x2f, 0xd2, 0xa0, 0xd7, 0x1b, 0xc6, 0x29, 0x35,
577     0xcc, 0xb8, 0x3d, 0xa0, 0x67, 0x98, 0x05, 0xa0, 0xe3, 0x1e, 0xfe, 0xe4,
578     0xf0, 0xe5, 0x13, 0xb0, 0x83, 0x17, 0xfa, 0xca, 0x93, 0x5e, 0x38, 0x29,
579     0x48, 0xd2, 0x72, 0xdb, 0x76, 0x3e, 0x6d, 0xf3, 0x25, 0x10, 0xff, 0x1b,
580     0x99, 0xff, 0xf8, 0xc6, 0x0e, 0xb0, 0xdd, 0x29, 0x2e, 0xbc, 0xbb, 0xc8,
581     0x0a, 0x01, 0x6e, 0xd3, 0xb0, 0x0e, 0x4e, 0xab
582 };
583
584 /*
585  * CTR_DRBG.rsp
586  *
587  * [AES-128 use df]
588  * [PredictionResistance = True]
589  * [EntropyInputLen = 128]
590  * [NonceLen = 64]
591  * [PersonalizationStringLen = 128]
592  * [AdditionalInputLen = 128]
593  * [ReturnedBitsLen = 512]
594  *
595  * COUNT = 0
596  */
597 static const unsigned char drbg_ctr_aes128_pr_df_entropyin[] = {
598     0x92, 0x89, 0x8f, 0x31, 0xfa, 0x1c, 0xff, 0x6d, 0x18, 0x2f, 0x26, 0x06,
599     0x43, 0xdf, 0xf8, 0x18
600 };
601 static const unsigned char drbg_ctr_aes128_pr_df_nonce[] = {
602     0xc2, 0xa4, 0xd9, 0x72, 0xc3, 0xb9, 0xb6, 0x97
603 };
604 static const unsigned char drbg_ctr_aes128_pr_df_persstr[] = {
605     0xea, 0x65, 0xee, 0x60, 0x26, 0x4e, 0x7e, 0xb6, 0x0e, 0x82, 0x68, 0xc4,
606     0x37, 0x3c, 0x5c, 0x0b
607 };
608 static const unsigned char drbg_ctr_aes128_pr_df_entropyinpr0[] = {
609     0x20, 0x72, 0x8a, 0x06, 0xf8, 0x6f, 0x8d, 0xd4, 0x41, 0xe2, 0x72, 0xb7,
610     0xc4, 0x2c, 0xe8, 0x10
611 };
612 static const unsigned char drbg_ctr_aes128_pr_df_entropyinpr1[] = {
613     0x3d, 0xb0, 0xf0, 0x94, 0xf3, 0x05, 0x50, 0x33, 0x17, 0x86, 0x3e, 0x22,
614     0x08, 0xf7, 0xa5, 0x01
615 };
616 static const unsigned char drbg_ctr_aes128_pr_df_addin0[] = {
617     0x1a, 0x40, 0xfa, 0xe3, 0xcc, 0x6c, 0x7c, 0xa0, 0xf8, 0xda, 0xba, 0x59,
618     0x23, 0x6d, 0xad, 0x1d
619 };
620 static const unsigned char drbg_ctr_aes128_pr_df_addin1[] = {
621     0x9f, 0x72, 0x76, 0x6c, 0xc7, 0x46, 0xe5, 0xed, 0x2e, 0x53, 0x20, 0x12,
622     0xbc, 0x59, 0x31, 0x8c
623 };
624 static const unsigned char drbg_ctr_aes128_pr_df_expected[] = {
625     0x5a, 0x35, 0x39, 0x87, 0x0f, 0x4d, 0x22, 0xa4, 0x09, 0x24, 0xee, 0x71,
626     0xc9, 0x6f, 0xac, 0x72, 0x0a, 0xd6, 0xf0, 0x88, 0x82, 0xd0, 0x83, 0x28,
627     0x73, 0xec, 0x3f, 0x93, 0xd8, 0xab, 0x45, 0x23, 0xf0, 0x7e, 0xac, 0x45,
628     0x14, 0x5e, 0x93, 0x9f, 0xb1, 0xd6, 0x76, 0x43, 0x3d, 0xb6, 0xe8, 0x08,
629     0x88, 0xf6, 0xda, 0x89, 0x08, 0x77, 0x42, 0xfe, 0x1a, 0xf4, 0x3f, 0xc4,
630     0x23, 0xc5, 0x1f, 0x68
631 };
632
633 /*
634  * HMAC_DRBG.rsp
635  *
636  * [SHA-1]
637  * [PredictionResistance = True]
638  * [EntropyInputLen = 128]
639  * [NonceLen = 64]
640  * [PersonalizationStringLen = 128]
641  * [AdditionalInputLen = 128]
642  * [ReturnedBitsLen = 640]
643  *
644  * COUNT = 0
645  */
646 static const unsigned char drbg_hmac_sha1_pr_entropyin[] = {
647     0x68, 0x0f, 0xac, 0xe9, 0x0d, 0x7b, 0xca, 0x21, 0xd4, 0xa0, 0xed, 0xb7,
648     0x79, 0x9e, 0xe5, 0xd8
649 };
650 static const unsigned char drbg_hmac_sha1_pr_nonce[] = {
651     0xb7, 0xbe, 0x9e, 0xed, 0xdd, 0x0e, 0x3b, 0x4b
652 };
653 static const unsigned char drbg_hmac_sha1_pr_persstr[] = {
654     0xf5, 0x8c, 0x40, 0xae, 0x70, 0xf7, 0xa5, 0x56, 0x48, 0xa9, 0x31, 0xa0,
655     0xa9, 0x31, 0x3d, 0xd7
656 };
657 static const unsigned char drbg_hmac_sha1_pr_entropyinpr0[] = {
658     0x7c, 0xaf, 0xe2, 0x31, 0x63, 0x0a, 0xa9, 0x5a, 0x74, 0x2c, 0x4e, 0x5f,
659     0x5f, 0x22, 0xc6, 0xa4
660 };
661 static const unsigned char drbg_hmac_sha1_pr_entropyinpr1[] = {
662     0x1c, 0x0d, 0x77, 0x92, 0x89, 0x88, 0x27, 0x94, 0x8a, 0x58, 0x9f, 0x82,
663     0x2d, 0x1a, 0xf7, 0xa6
664 };
665 static const unsigned char drbg_hmac_sha1_pr_addin0[] = {
666     0xdc, 0x36, 0x63, 0xf0, 0x62, 0x78, 0x9c, 0xd1, 0x5c, 0xbb, 0x20, 0xc3,
667     0xc1, 0x8c, 0xd9, 0xd7
668 };
669 static const unsigned char drbg_hmac_sha1_pr_addin1[] = {
670     0xfe, 0x85, 0xb0, 0xab, 0x14, 0xc6, 0x96, 0xe6, 0x9c, 0x24, 0xe7, 0xb5,
671     0xa1, 0x37, 0x12, 0x0c
672 };
673 static const unsigned char drbg_hmac_sha1_pr_expected[] = {
674     0x68, 0x00, 0x4b, 0x3a, 0x28, 0xf7, 0xf0, 0x1c, 0xf9, 0xe9, 0xb5, 0x71,
675     0x20, 0x79, 0xef, 0x80, 0x87, 0x1b, 0x08, 0xb9, 0xa9, 0x1b, 0xcd, 0x2b,
676     0x9f, 0x09, 0x4d, 0xa4, 0x84, 0x80, 0xb3, 0x4c, 0xaf, 0xd5, 0x59, 0x6b,
677     0x0c, 0x0a, 0x48, 0xe1, 0x48, 0xda, 0xbc, 0x6f, 0x77, 0xb8, 0xff, 0xaf,
678     0x18, 0x70, 0x28, 0xe1, 0x04, 0x13, 0x7a, 0x4f, 0xeb, 0x1c, 0x72, 0xb0,
679     0xc4, 0x4f, 0xe8, 0xb1, 0xaf, 0xab, 0xa5, 0xbc, 0xfd, 0x86, 0x67, 0xf2,
680     0xf5, 0x5b, 0x46, 0x06, 0x63, 0x2e, 0x3c, 0xbc
681 };
682
683 static const ST_KAT_DRBG st_kat_drbg_tests[] =
684 {
685     {
686         OSSL_SELF_TEST_DESC_DRBG_HASH,
687         "HASH-DRBG", "digest", "SHA256",
688         ITM(drbg_hash_sha256_pr_entropyin),
689         ITM(drbg_hash_sha256_pr_nonce),
690         ITM(drbg_hash_sha256_pr_persstr),
691         ITM(drbg_hash_sha256_pr_entropyinpr0),
692         ITM(drbg_hash_sha256_pr_entropyinpr1),
693         ITM(drbg_hash_sha256_pr_addin0),
694         ITM(drbg_hash_sha256_pr_addin1),
695         ITM(drbg_hash_sha256_pr_expected)
696     },
697     {
698         OSSL_SELF_TEST_DESC_DRBG_CTR,
699         "CTR-DRBG", "cipher", "AES-128-CTR",
700         ITM(drbg_ctr_aes128_pr_df_entropyin),
701         ITM(drbg_ctr_aes128_pr_df_nonce),
702         ITM(drbg_ctr_aes128_pr_df_persstr),
703         ITM(drbg_ctr_aes128_pr_df_entropyinpr0),
704         ITM(drbg_ctr_aes128_pr_df_entropyinpr1),
705         ITM(drbg_ctr_aes128_pr_df_addin0),
706         ITM(drbg_ctr_aes128_pr_df_addin1),
707         ITM(drbg_ctr_aes128_pr_df_expected)
708     },
709     {
710         OSSL_SELF_TEST_DESC_DRBG_HMAC,
711         "HMAC-DRBG", "digest", "SHA1",
712         ITM(drbg_hmac_sha1_pr_entropyin),
713         ITM(drbg_hmac_sha1_pr_nonce),
714         ITM(drbg_hmac_sha1_pr_persstr),
715         ITM(drbg_hmac_sha1_pr_entropyinpr0),
716         ITM(drbg_hmac_sha1_pr_entropyinpr1),
717         ITM(drbg_hmac_sha1_pr_addin0),
718         ITM(drbg_hmac_sha1_pr_addin1),
719         ITM(drbg_hmac_sha1_pr_expected)
720     }
721 };
722
723 /* KEY EXCHANGE TEST DATA */
724
725 #ifndef OPENSSL_NO_DH
726 /* DH KAT */
727 static const unsigned char dh_p[] = {
728     0xdc, 0xca, 0x15, 0x11, 0xb2, 0x31, 0x32, 0x25,
729     0xf5, 0x21, 0x16, 0xe1, 0x54, 0x27, 0x89, 0xe0,
730     0x01, 0xf0, 0x42, 0x5b, 0xcc, 0xc7, 0xf3, 0x66,
731     0xf7, 0x40, 0x64, 0x07, 0xf1, 0xc9, 0xfa, 0x8b,
732     0xe6, 0x10, 0xf1, 0x77, 0x8b, 0xb1, 0x70, 0xbe,
733     0x39, 0xdb, 0xb7, 0x6f, 0x85, 0xbf, 0x24, 0xce,
734     0x68, 0x80, 0xad, 0xb7, 0x62, 0x9f, 0x7c, 0x6d,
735     0x01, 0x5e, 0x61, 0xd4, 0x3f, 0xa3, 0xee, 0x4d,
736     0xe1, 0x85, 0xf2, 0xcf, 0xd0, 0x41, 0xff, 0xde,
737     0x9d, 0x41, 0x84, 0x07, 0xe1, 0x51, 0x38, 0xbb,
738     0x02, 0x1d, 0xae, 0xb3, 0x5f, 0x76, 0x2d, 0x17,
739     0x82, 0xac, 0xc6, 0x58, 0xd3, 0x2b, 0xd4, 0xb0,
740     0x23, 0x2c, 0x92, 0x7d, 0xd3, 0x8f, 0xa0, 0x97,
741     0xb3, 0xd1, 0x85, 0x9f, 0xa8, 0xac, 0xaf, 0xb9,
742     0x8f, 0x06, 0x66, 0x08, 0xfc, 0x64, 0x4e, 0xc7,
743     0xdd, 0xb6, 0xf0, 0x85, 0x99, 0xf9, 0x2a, 0xc1,
744     0xb5, 0x98, 0x25, 0xda, 0x84, 0x32, 0x07, 0x7d,
745     0xef, 0x69, 0x56, 0x46, 0x06, 0x3c, 0x20, 0x82,
746     0x3c, 0x95, 0x07, 0xab, 0x6f, 0x01, 0x76, 0xd4,
747     0x73, 0x0d, 0x99, 0x0d, 0xbb, 0xe6, 0x36, 0x1c,
748     0xd8, 0xb2, 0xb9, 0x4d, 0x3d, 0x2f, 0x32, 0x9b,
749     0x82, 0x09, 0x9b, 0xd6, 0x61, 0xf4, 0x29, 0x50,
750     0xf4, 0x03, 0xdf, 0x3e, 0xde, 0x62, 0xa3, 0x31,
751     0x88, 0xb0, 0x27, 0x98, 0xba, 0x82, 0x3f, 0x44,
752     0xb9, 0x46, 0xfe, 0x9d, 0xf6, 0x77, 0xa0, 0xc5,
753     0xa1, 0x23, 0x8e, 0xaa, 0x97, 0xb7, 0x0f, 0x80,
754     0xda, 0x8c, 0xac, 0x88, 0xe0, 0x92, 0xb1, 0x12,
755     0x70, 0x60, 0xff, 0xbf, 0x45, 0x57, 0x99, 0x94,
756     0x01, 0x1d, 0xc2, 0xfa, 0xa5, 0xe7, 0xf6, 0xc7,
757     0x62, 0x45, 0xe1, 0xcc, 0x31, 0x22, 0x31, 0xc1,
758     0x7d, 0x1c, 0xa6, 0xb1, 0x90, 0x07, 0xef, 0x0d,
759     0xb9, 0x9f, 0x9c, 0xb6, 0x0e, 0x1d, 0x5f, 0x69
760 };
761 static const unsigned char dh_q[] = {
762     0x89, 0x8b, 0x22, 0x67, 0x17, 0xef, 0x03, 0x9e,
763     0x60, 0x3e, 0x82, 0xe5, 0xc7, 0xaf, 0xe4, 0x83,
764     0x74, 0xac, 0x5f, 0x62, 0x5c, 0x54, 0xf1, 0xea,
765     0x11, 0xac, 0xb5, 0x7d
766 };
767 static const unsigned char dh_g[] = {
768     0x5e, 0xf7, 0xb8, 0x8f, 0x2d, 0xf6, 0x01, 0x39,
769     0x35, 0x1d, 0xfb, 0xfe, 0x12, 0x66, 0x80, 0x5f,
770     0xdf, 0x35, 0x6c, 0xdf, 0xd1, 0x3a, 0x4d, 0xa0,
771     0x05, 0x0c, 0x7e, 0xde, 0x24, 0x6d, 0xf5, 0x9f,
772     0x6a, 0xbf, 0x96, 0xad, 0xe5, 0xf2, 0xb2, 0x8f,
773     0xfe, 0x88, 0xd6, 0xbc, 0xe7, 0xf7, 0x89, 0x4a,
774     0x3d, 0x53, 0x5f, 0xc8, 0x21, 0x26, 0xdd, 0xd4,
775     0x24, 0x87, 0x2e, 0x16, 0xb8, 0x38, 0xdf, 0x8c,
776     0x51, 0xe9, 0x01, 0x6f, 0x88, 0x9c, 0x7c, 0x20,
777     0x3e, 0x98, 0xa8, 0xb6, 0x31, 0xf9, 0xc7, 0x25,
778     0x63, 0xd3, 0x8a, 0x49, 0x58, 0x9a, 0x07, 0x53,
779     0xd3, 0x58, 0xe7, 0x83, 0x31, 0x8c, 0xef, 0xd9,
780     0x67, 0x7c, 0x7b, 0x2d, 0xbb, 0x77, 0xd6, 0xdc,
781     0xe2, 0xa1, 0x96, 0x37, 0x95, 0xca, 0x64, 0xb9,
782     0x2d, 0x1c, 0x9a, 0xac, 0x6d, 0x0e, 0x8d, 0x43,
783     0x1d, 0xe5, 0xe5, 0x00, 0x60, 0xdf, 0xf7, 0x86,
784     0x89, 0xc9, 0xec, 0xa1, 0xc1, 0x24, 0x8c, 0x16,
785     0xed, 0x09, 0xc7, 0xad, 0x41, 0x2a, 0x17, 0x40,
786     0x6d, 0x2b, 0x52, 0x5a, 0xa1, 0xca, 0xbb, 0x23,
787     0x7b, 0x97, 0x34, 0xec, 0x7b, 0x8c, 0xe3, 0xfa,
788     0xe0, 0x2f, 0x29, 0xc5, 0xef, 0xed, 0x30, 0xd6,
789     0x91, 0x87, 0xda, 0x10, 0x9c, 0x2c, 0x9f, 0xe2,
790     0xaa, 0xdb, 0xb0, 0xc2, 0x2a, 0xf5, 0x4c, 0x61,
791     0x66, 0x55, 0x00, 0x0c, 0x43, 0x1c, 0x6b, 0x4a,
792     0x37, 0x97, 0x63, 0xb0, 0xa9, 0x16, 0x58, 0xef,
793     0xc8, 0x4e, 0x8b, 0x06, 0x35, 0x8c, 0x8b, 0x4f,
794     0x21, 0x37, 0x10, 0xfd, 0x10, 0x17, 0x2c, 0xf3,
795     0x9b, 0x83, 0x0c, 0x2d, 0xd8, 0x4a, 0x0c, 0x8a,
796     0xb8, 0x25, 0x16, 0xec, 0xab, 0x99, 0x5f, 0xa4,
797     0x21, 0x5e, 0x02, 0x3e, 0x4e, 0xcf, 0x80, 0x74,
798     0xc3, 0x9d, 0x6c, 0x88, 0xb7, 0x0d, 0x1e, 0xe4,
799     0xe9, 0x6f, 0xdc, 0x20, 0xea, 0x11, 0x5c, 0x32
800 };
801 static const unsigned char dh_priv[] = {
802     0x14, 0x33, 0xe0, 0xb5, 0xa9, 0x17, 0xb6, 0x0a,
803     0x30, 0x23, 0xf2, 0xf8, 0xaa, 0x2c, 0x2d, 0x70,
804     0xd2, 0x96, 0x8a, 0xba, 0x9a, 0xea, 0xc8, 0x15,
805     0x40, 0xb8, 0xfc, 0xe6
806 };
807 static const unsigned char dh_pub[] = {
808     0x95, 0xdd, 0x33, 0x8d, 0x29, 0xe5, 0x71, 0x04,
809     0x92, 0xb9, 0x18, 0x31, 0x7b, 0x72, 0xa3, 0x69,
810     0x36, 0xe1, 0x95, 0x1a, 0x2e, 0xe5, 0xa5, 0x59,
811     0x16, 0x99, 0xc0, 0x48, 0x6d, 0x0d, 0x4f, 0x9b,
812     0xdd, 0x6d, 0x5a, 0x3f, 0x6b, 0x98, 0x89, 0x0c,
813     0x62, 0xb3, 0x76, 0x52, 0xd3, 0x6e, 0x71, 0x21,
814     0x11, 0xe6, 0x8a, 0x73, 0x55, 0x37, 0x25, 0x06,
815     0x99, 0xef, 0xe3, 0x30, 0x53, 0x73, 0x91, 0xfb,
816     0xc2, 0xc5, 0x48, 0xbc, 0x5a, 0xc3, 0xe5, 0xb2,
817     0x33, 0x86, 0xc3, 0xee, 0xf5, 0xeb, 0x43, 0xc0,
818     0x99, 0xd7, 0x0a, 0x52, 0x02, 0x68, 0x7e, 0x83,
819     0x96, 0x42, 0x48, 0xfc, 0xa9, 0x1f, 0x40, 0x90,
820     0x8e, 0x8f, 0xb3, 0x31, 0x93, 0x15, 0xf6, 0xd2,
821     0x60, 0x6d, 0x7f, 0x7c, 0xd5, 0x2c, 0xc6, 0xe7,
822     0xc5, 0x84, 0x3a, 0xfb, 0x22, 0x51, 0x9c, 0xf0,
823     0xf0, 0xf9, 0xd3, 0xa0, 0xa4, 0xe8, 0xc8, 0x88,
824     0x99, 0xef, 0xed, 0xe7, 0x36, 0x43, 0x51, 0xfb,
825     0x6a, 0x36, 0x3e, 0xe7, 0x17, 0xe5, 0x44, 0x5a,
826     0xda, 0xb4, 0xc9, 0x31, 0xa6, 0x48, 0x39, 0x97,
827     0xb8, 0x7d, 0xad, 0x83, 0x67, 0x7e, 0x4d, 0x1d,
828     0x3a, 0x77, 0x75, 0xe0, 0xf6, 0xd0, 0x0f, 0xdf,
829     0x73, 0xc7, 0xad, 0x80, 0x1e, 0x66, 0x5a, 0x0e,
830     0x5a, 0x79, 0x6d, 0x0a, 0x03, 0x80, 0xa1, 0x9f,
831     0xa1, 0x82, 0xef, 0xc8, 0xa0, 0x4f, 0x5e, 0x4d,
832     0xb9, 0x0d, 0x1a, 0x86, 0x37, 0xf9, 0x5d, 0xb1,
833     0x64, 0x36, 0xbd, 0xc8, 0xf3, 0xfc, 0x09, 0x6c,
834     0x4f, 0xf7, 0xf2, 0x34, 0xbe, 0x8f, 0xef, 0x47,
835     0x9a, 0xc4, 0xb0, 0xdc, 0x4b, 0x77, 0x26, 0x3e,
836     0x07, 0xd9, 0x95, 0x9d, 0xe0, 0xf1, 0xbf, 0x3f,
837     0x0a, 0xe3, 0xd9, 0xd5, 0x0e, 0x4b, 0x89, 0xc9,
838     0x9e, 0x3e, 0xa1, 0x21, 0x73, 0x43, 0xdd, 0x8c,
839     0x65, 0x81, 0xac, 0xc4, 0x95, 0x9c, 0x91, 0xd3
840 };
841 static const unsigned char dh_peer_pub[] = {
842     0x1f, 0xc1, 0xda, 0x34, 0x1d, 0x1a, 0x84, 0x6a,
843     0x96, 0xb7, 0xbe, 0x24, 0x34, 0x0f, 0x87, 0x7d,
844     0xd0, 0x10, 0xaa, 0x03, 0x56, 0xd5, 0xad, 0x58,
845     0xaa, 0xe9, 0xc7, 0xb0, 0x8f, 0x74, 0x9a, 0x32,
846     0x23, 0x51, 0x10, 0xb5, 0xd8, 0x8e, 0xb5, 0xdb,
847     0xfa, 0x97, 0x8d, 0x27, 0xec, 0xc5, 0x30, 0xf0,
848     0x2d, 0x31, 0x14, 0x00, 0x5b, 0x64, 0xb1, 0xc0,
849     0xe0, 0x24, 0xcb, 0x8a, 0xe2, 0x16, 0x98, 0xbc,
850     0xa9, 0xe6, 0x0d, 0x42, 0x80, 0x86, 0x22, 0xf1,
851     0x81, 0xc5, 0x6e, 0x1d, 0xe7, 0xa9, 0x6e, 0x6e,
852     0xfe, 0xe9, 0xd6, 0x65, 0x67, 0xe9, 0x1b, 0x97,
853     0x70, 0x42, 0xc7, 0xe3, 0xd0, 0x44, 0x8f, 0x05,
854     0xfb, 0x77, 0xf5, 0x22, 0xb9, 0xbf, 0xc8, 0xd3,
855     0x3c, 0xc3, 0xc3, 0x1e, 0xd3, 0xb3, 0x1f, 0x0f,
856     0xec, 0xb6, 0xdb, 0x4f, 0x6e, 0xa3, 0x11, 0xe7,
857     0x7a, 0xfd, 0xbc, 0xd4, 0x7a, 0xee, 0x1b, 0xb1,
858     0x50, 0xf2, 0x16, 0x87, 0x35, 0x78, 0xfb, 0x96,
859     0x46, 0x8e, 0x8f, 0x9f, 0x3d, 0xe8, 0xef, 0xbf,
860     0xce, 0x75, 0x62, 0x4b, 0x1d, 0xf0, 0x53, 0x22,
861     0xa3, 0x4f, 0x14, 0x63, 0xe8, 0x39, 0xe8, 0x98,
862     0x4c, 0x4a, 0xd0, 0xa9, 0x6e, 0x1a, 0xc8, 0x42,
863     0xe5, 0x31, 0x8c, 0xc2, 0x3c, 0x06, 0x2a, 0x8c,
864     0xa1, 0x71, 0xb8, 0xd5, 0x75, 0x98, 0x0d, 0xde,
865     0x7f, 0xc5, 0x6f, 0x15, 0x36, 0x52, 0x38, 0x20,
866     0xd4, 0x31, 0x92, 0xbf, 0xd5, 0x1e, 0x8e, 0x22,
867     0x89, 0x78, 0xac, 0xa5, 0xb9, 0x44, 0x72, 0xf3,
868     0x39, 0xca, 0xeb, 0x99, 0x31, 0xb4, 0x2b, 0xe3,
869     0x01, 0x26, 0x8b, 0xc9, 0x97, 0x89, 0xc9, 0xb2,
870     0x55, 0x71, 0xc3, 0xc0, 0xe4, 0xcb, 0x3f, 0x00,
871     0x7f, 0x1a, 0x51, 0x1c, 0xbb, 0x53, 0xc8, 0x51,
872     0x9c, 0xdd, 0x13, 0x02, 0xab, 0xca, 0x6c, 0x0f,
873     0x34, 0xf9, 0x67, 0x39, 0xf1, 0x7f, 0xf4, 0x8b
874 };
875
876 static const unsigned char dh_secret_expected[] = {
877     0x08, 0xff, 0x33, 0xbb, 0x2e, 0xcf, 0xf4, 0x9a,
878     0x7d, 0x4a, 0x79, 0x12, 0xae, 0xb1, 0xbb, 0x6a,
879     0xb5, 0x11, 0x64, 0x1b, 0x4a, 0x76, 0x77, 0x0c,
880     0x8c, 0xc1, 0xbc, 0xc2, 0x33, 0x34, 0x3d, 0xfe,
881     0x70, 0x0d, 0x11, 0x81, 0x3d, 0x2c, 0x9e, 0xd2,
882     0x3b, 0x21, 0x1c, 0xa9, 0xe8, 0x78, 0x69, 0x21,
883     0xed, 0xca, 0x28, 0x3c, 0x68, 0xb1, 0x61, 0x53,
884     0xfa, 0x01, 0xe9, 0x1a, 0xb8, 0x2c, 0x90, 0xdd,
885     0xab, 0x4a, 0x95, 0x81, 0x67, 0x70, 0xa9, 0x87,
886     0x10, 0xe1, 0x4c, 0x92, 0xab, 0x83, 0xb6, 0xe4,
887     0x6e, 0x1e, 0x42, 0x6e, 0xe8, 0x52, 0x43, 0x0d,
888     0x61, 0x87, 0xda, 0xa3, 0x72, 0x0a, 0x6b, 0xcd,
889     0x73, 0x23, 0x5c, 0x6b, 0x0f, 0x94, 0x1f, 0x33,
890     0x64, 0xf5, 0x04, 0x20, 0x55, 0x1a, 0x4b, 0xfe,
891     0xaf, 0xe2, 0xbc, 0x43, 0x85, 0x05, 0xa5, 0x9a,
892     0x4a, 0x40, 0xda, 0xca, 0x7a, 0x89, 0x5a, 0x73,
893     0xdb, 0x57, 0x5c, 0x74, 0xc1, 0x3a, 0x23, 0xad,
894     0x88, 0x32, 0x95, 0x7d, 0x58, 0x2d, 0x38, 0xf0,
895     0xa6, 0x16, 0x5f, 0xb0, 0xd7, 0xe9, 0xb8, 0x79,
896     0x9e, 0x42, 0xfd, 0x32, 0x20, 0xe3, 0x32, 0xe9,
897     0x81, 0x85, 0xa0, 0xc9, 0x42, 0x97, 0x57, 0xb2,
898     0xd0, 0xd0, 0x2c, 0x17, 0xdb, 0xaa, 0x1f, 0xf6,
899     0xed, 0x93, 0xd7, 0xe7, 0x3e, 0x24, 0x1e, 0xae,
900     0xd9, 0x0c, 0xaf, 0x39, 0x4d, 0x2b, 0xc6, 0x57,
901     0x0f, 0x18, 0xc8, 0x1f, 0x2b, 0xe5, 0xd0, 0x1a,
902     0x2c, 0xa9, 0x9f, 0xf1, 0x42, 0xb5, 0xd9, 0x63,
903     0xf9, 0xf5, 0x00, 0x32, 0x5e, 0x75, 0x56, 0xf9,
904     0x58, 0x49, 0xb3, 0xff, 0xc7, 0x47, 0x94, 0x86,
905     0xbe, 0x1d, 0x45, 0x96, 0xa3, 0x10, 0x6b, 0xd5,
906     0xcb, 0x4f, 0x61, 0xc5, 0x7e, 0xc5, 0xf1, 0x00,
907     0xfb, 0x7a, 0x0c, 0x82, 0xa1, 0x0b, 0x82, 0x52,
908     0x6a, 0x97, 0xd1, 0xd9, 0x7d, 0x98, 0xea, 0xf6
909 };
910
911 static const ST_KAT_PARAM dh_group[] = {
912     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_P, dh_p),
913     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_Q, dh_q),
914     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_G, dh_g),
915     ST_KAT_PARAM_END()
916 };
917
918 /* The host's private key */
919 static const ST_KAT_PARAM dh_host_key[] = {
920     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PUB_KEY, dh_pub),
921     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, dh_priv),
922     ST_KAT_PARAM_END()
923 };
924
925 /* The peer's public key */
926 static const ST_KAT_PARAM dh_peer_key[] = {
927     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PUB_KEY, dh_peer_pub),
928     ST_KAT_PARAM_END()
929 };
930 #endif /* OPENSSL_NO_DH */
931
932
933 #ifndef OPENSSL_NO_EC
934 static const char ecdh_curve_name[] = "prime256v1";
935 static const unsigned char ecdh_privd[] = {
936     0x33, 0xd0, 0x43, 0x83, 0xa9, 0x89, 0x56, 0x03,
937     0xd2, 0xd7, 0xfe, 0x6b, 0x01, 0x6f, 0xe4, 0x59,
938     0xcc, 0x0d, 0x9a, 0x24, 0x6c, 0x86, 0x1b, 0x2e,
939     0xdc, 0x4b, 0x4d, 0x35, 0x43, 0xe1, 0x1b, 0xad
940 };
941 static const unsigned char ecdh_pub[] = {
942     0x04,
943     0x1b, 0x93, 0x67, 0x55, 0x1c, 0x55, 0x9f, 0x63,
944     0xd1, 0x22, 0xa4, 0xd8, 0xd1, 0x0a, 0x60, 0x6d,
945     0x02, 0xa5, 0x77, 0x57, 0xc8, 0xa3, 0x47, 0x73,
946     0x3a, 0x6a, 0x08, 0x28, 0x39, 0xbd, 0xc9, 0xd2,
947     0x80, 0xec, 0xe9, 0xa7, 0x08, 0x29, 0x71, 0x2f,
948     0xc9, 0x56, 0x82, 0xee, 0x9a, 0x85, 0x0f, 0x6d,
949     0x7f, 0x59, 0x5f, 0x8c, 0xd1, 0x96, 0x0b, 0xdf,
950     0x29, 0x3e, 0x49, 0x07, 0x88, 0x3f, 0x9a, 0x29
951 };
952 static const unsigned char ecdh_peer_pub[] = {
953     0x04,
954     0x1f, 0x72, 0xbd, 0x2a, 0x3e, 0xeb, 0x6c, 0x76,
955     0xe5, 0x5d, 0x69, 0x75, 0x24, 0xbf, 0x2f, 0x5b,
956     0x96, 0xb2, 0x91, 0x62, 0x06, 0x35, 0xcc, 0xb2,
957     0x4b, 0x31, 0x1b, 0x0c, 0x6f, 0x06, 0x9f, 0x86,
958     0xcf, 0xc8, 0xac, 0xd5, 0x4f, 0x4d, 0x77, 0xf3,
959     0x70, 0x4a, 0x8f, 0x04, 0x9a, 0xb1, 0x03, 0xc7,
960     0xeb, 0xd5, 0x94, 0x78, 0x61, 0xab, 0x78, 0x0c,
961     0x4a, 0x2d, 0x6b, 0xf3, 0x2f, 0x2e, 0x4a, 0xbc
962 };
963
964 static const ST_KAT_PARAM ecdh_group[] = {
965     ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, ecdh_curve_name),
966     ST_KAT_PARAM_END()
967 };
968 static const ST_KAT_PARAM ecdh_host_key[] = {
969     ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecdh_pub),
970     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, ecdh_privd),
971     ST_KAT_PARAM_END()
972 };
973 static const ST_KAT_PARAM ecdh_peer_key[] = {
974     ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecdh_peer_pub),
975     ST_KAT_PARAM_END()
976 };
977 static const unsigned char ecdh_secret_expected[] = {
978     0x45, 0x2a, 0x2f, 0x0d, 0x24, 0xe6, 0x8d, 0xd0,
979     0xda, 0x59, 0x7b, 0x0c, 0xec, 0x9b, 0x4c, 0x38,
980     0x41, 0xdd, 0xce, 0xb3, 0xcc, 0xf1, 0x90, 0x8e,
981     0x30, 0xdb, 0x5b, 0x5f, 0x97, 0xea, 0xe0, 0xc2
982 };
983 #endif /* OPENSSL_NO_EC */
984
985 #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
986 static const ST_KAT_KAS st_kat_kas_tests[] =
987 {
988 # ifndef OPENSSL_NO_DH
989     {
990         OSSL_SELF_TEST_DESC_KA_DH,
991         "DH",
992         dh_group,
993         dh_host_key,
994         dh_peer_key,
995         ITM(dh_secret_expected)
996     },
997 # endif /* OPENSSL_NO_DH */
998 # ifndef OPENSSL_NO_EC
999     {
1000         OSSL_SELF_TEST_DESC_KA_ECDH,
1001         "EC",
1002         ecdh_group,
1003         ecdh_host_key,
1004         ecdh_peer_key,
1005         ITM(ecdh_secret_expected)
1006     },
1007 # endif /* OPENSSL_NO_EC */
1008 };
1009 #endif /* !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC) */
1010
1011 /* RSA key data */
1012 static const unsigned char rsa_n[] = {
1013     0xDB, 0x10, 0x1A, 0xC2, 0xA3, 0xF1, 0xDC, 0xFF,
1014     0x13, 0x6B, 0xED, 0x44, 0xDF, 0xF0, 0x02, 0x6D,
1015     0x13, 0xC7, 0x88, 0xDA, 0x70, 0x6B, 0x54, 0xF1,
1016     0xE8, 0x27, 0xDC, 0xC3, 0x0F, 0x99, 0x6A, 0xFA,
1017     0xC6, 0x67, 0xFF, 0x1D, 0x1E, 0x3C, 0x1D, 0xC1,
1018     0xB5, 0x5F, 0x6C, 0xC0, 0xB2, 0x07, 0x3A, 0x6D,
1019     0x41, 0xE4, 0x25, 0x99, 0xAC, 0xFC, 0xD2, 0x0F,
1020     0x02, 0xD3, 0xD1, 0x54, 0x06, 0x1A, 0x51, 0x77,
1021     0xBD, 0xB6, 0xBF, 0xEA, 0xA7, 0x5C, 0x06, 0xA9,
1022     0x5D, 0x69, 0x84, 0x45, 0xD7, 0xF5, 0x05, 0xBA,
1023     0x47, 0xF0, 0x1B, 0xD7, 0x2B, 0x24, 0xEC, 0xCB,
1024     0x9B, 0x1B, 0x10, 0x8D, 0x81, 0xA0, 0xBE, 0xB1,
1025     0x8C, 0x33, 0xE4, 0x36, 0xB8, 0x43, 0xEB, 0x19,
1026     0x2A, 0x81, 0x8D, 0xDE, 0x81, 0x0A, 0x99, 0x48,
1027     0xB6, 0xF6, 0xBC, 0xCD, 0x49, 0x34, 0x3A, 0x8F,
1028     0x26, 0x94, 0xE3, 0x28, 0x82, 0x1A, 0x7C, 0x8F,
1029     0x59, 0x9F, 0x45, 0xE8, 0x5D, 0x1A, 0x45, 0x76,
1030     0x04, 0x56, 0x05, 0xA1, 0xD0, 0x1B, 0x8C, 0x77,
1031     0x6D, 0xAF, 0x53, 0xFA, 0x71, 0xE2, 0x67, 0xE0,
1032     0x9A, 0xFE, 0x03, 0xA9, 0x85, 0xD2, 0xC9, 0xAA,
1033     0xBA, 0x2A, 0xBC, 0xF4, 0xA0, 0x08, 0xF5, 0x13,
1034     0x98, 0x13, 0x5D, 0xF0, 0xD9, 0x33, 0x34, 0x2A,
1035     0x61, 0xC3, 0x89, 0x55, 0xF0, 0xAE, 0x1A, 0x9C,
1036     0x22, 0xEE, 0x19, 0x05, 0x8D, 0x32, 0xFE, 0xEC,
1037     0x9C, 0x84, 0xBA, 0xB7, 0xF9, 0x6C, 0x3A, 0x4F,
1038     0x07, 0xFC, 0x45, 0xEB, 0x12, 0xE5, 0x7B, 0xFD,
1039     0x55, 0xE6, 0x29, 0x69, 0xD1, 0xC2, 0xE8, 0xB9,
1040     0x78, 0x59, 0xF6, 0x79, 0x10, 0xC6, 0x4E, 0xEB,
1041     0x6A, 0x5E, 0xB9, 0x9A, 0xC7, 0xC4, 0x5B, 0x63,
1042     0xDA, 0xA3, 0x3F, 0x5E, 0x92, 0x7A, 0x81, 0x5E,
1043     0xD6, 0xB0, 0xE2, 0x62, 0x8F, 0x74, 0x26, 0xC2,
1044     0x0C, 0xD3, 0x9A, 0x17, 0x47, 0xE6, 0x8E, 0xAB
1045 };
1046 static const unsigned char rsa_e[] = { 0x01, 0x00, 0x01 };
1047 static const unsigned char rsa_d[] = {
1048     0x52, 0x41, 0xF4, 0xDA, 0x7B, 0xB7, 0x59, 0x55,
1049     0xCA, 0xD4, 0x2F, 0x0F, 0x3A, 0xCB, 0xA4, 0x0D,
1050     0x93, 0x6C, 0xCC, 0x9D, 0xC1, 0xB2, 0xFB, 0xFD,
1051     0xAE, 0x40, 0x31, 0xAC, 0x69, 0x52, 0x21, 0x92,
1052     0xB3, 0x27, 0xDF, 0xEA, 0xEE, 0x2C, 0x82, 0xBB,
1053     0xF7, 0x40, 0x32, 0xD5, 0x14, 0xC4, 0x94, 0x12,
1054     0xEC, 0xB8, 0x1F, 0xCA, 0x59, 0xE3, 0xC1, 0x78,
1055     0xF3, 0x85, 0xD8, 0x47, 0xA5, 0xD7, 0x02, 0x1A,
1056     0x65, 0x79, 0x97, 0x0D, 0x24, 0xF4, 0xF0, 0x67,
1057     0x6E, 0x75, 0x2D, 0xBF, 0x10, 0x3D, 0xA8, 0x7D,
1058     0xEF, 0x7F, 0x60, 0xE4, 0xE6, 0x05, 0x82, 0x89,
1059     0x5D, 0xDF, 0xC6, 0xD2, 0x6C, 0x07, 0x91, 0x33,
1060     0x98, 0x42, 0xF0, 0x02, 0x00, 0x25, 0x38, 0xC5,
1061     0x85, 0x69, 0x8A, 0x7D, 0x2F, 0x95, 0x6C, 0x43,
1062     0x9A, 0xB8, 0x81, 0xE2, 0xD0, 0x07, 0x35, 0xAA,
1063     0x05, 0x41, 0xC9, 0x1E, 0xAF, 0xE4, 0x04, 0x3B,
1064     0x19, 0xB8, 0x73, 0xA2, 0xAC, 0x4B, 0x1E, 0x66,
1065     0x48, 0xD8, 0x72, 0x1F, 0xAC, 0xF6, 0xCB, 0xBC,
1066     0x90, 0x09, 0xCA, 0xEC, 0x0C, 0xDC, 0xF9, 0x2C,
1067     0xD7, 0xEB, 0xAE, 0xA3, 0xA4, 0x47, 0xD7, 0x33,
1068     0x2F, 0x8A, 0xCA, 0xBC, 0x5E, 0xF0, 0x77, 0xE4,
1069     0x97, 0x98, 0x97, 0xC7, 0x10, 0x91, 0x7D, 0x2A,
1070     0xA6, 0xFF, 0x46, 0x83, 0x97, 0xDE, 0xE9, 0xE2,
1071     0x17, 0x03, 0x06, 0x14, 0xE2, 0xD7, 0xB1, 0x1D,
1072     0x77, 0xAF, 0x51, 0x27, 0x5B, 0x5E, 0x69, 0xB8,
1073     0x81, 0xE6, 0x11, 0xC5, 0x43, 0x23, 0x81, 0x04,
1074     0x62, 0xFF, 0xE9, 0x46, 0xB8, 0xD8, 0x44, 0xDB,
1075     0xA5, 0xCC, 0x31, 0x54, 0x34, 0xCE, 0x3E, 0x82,
1076     0xD6, 0xBF, 0x7A, 0x0B, 0x64, 0x21, 0x6D, 0x88,
1077     0x7E, 0x5B, 0x45, 0x12, 0x1E, 0x63, 0x8D, 0x49,
1078     0xA7, 0x1D, 0xD9, 0x1E, 0x06, 0xCD, 0xE8, 0xBA,
1079     0x2C, 0x8C, 0x69, 0x32, 0xEA, 0xBE, 0x60, 0x71
1080 };
1081 static const unsigned char rsa_p[] = {
1082     0xFA, 0xAC, 0xE1, 0x37, 0x5E, 0x32, 0x11, 0x34,
1083     0xC6, 0x72, 0x58, 0x2D, 0x91, 0x06, 0x3E, 0x77,
1084     0xE7, 0x11, 0x21, 0xCD, 0x4A, 0xF8, 0xA4, 0x3F,
1085     0x0F, 0xEF, 0x31, 0xE3, 0xF3, 0x55, 0xA0, 0xB9,
1086     0xAC, 0xB6, 0xCB, 0xBB, 0x41, 0xD0, 0x32, 0x81,
1087     0x9A, 0x8F, 0x7A, 0x99, 0x30, 0x77, 0x6C, 0x68,
1088     0x27, 0xE2, 0x96, 0xB5, 0x72, 0xC9, 0xC3, 0xD4,
1089     0x42, 0xAA, 0xAA, 0xCA, 0x95, 0x8F, 0xFF, 0xC9,
1090     0x9B, 0x52, 0x34, 0x30, 0x1D, 0xCF, 0xFE, 0xCF,
1091     0x3C, 0x56, 0x68, 0x6E, 0xEF, 0xE7, 0x6C, 0xD7,
1092     0xFB, 0x99, 0xF5, 0x4A, 0xA5, 0x21, 0x1F, 0x2B,
1093     0xEA, 0x93, 0xE8, 0x98, 0x26, 0xC4, 0x6E, 0x42,
1094     0x21, 0x5E, 0xA0, 0xA1, 0x2A, 0x58, 0x35, 0xBB,
1095     0x10, 0xE7, 0xBA, 0x27, 0x0A, 0x3B, 0xB3, 0xAF,
1096     0xE2, 0x75, 0x36, 0x04, 0xAC, 0x56, 0xA0, 0xAB,
1097     0x52, 0xDE, 0xCE, 0xDD, 0x2C, 0x28, 0x77, 0x03
1098 };
1099 static const unsigned char rsa_q[] = {
1100     0xDF, 0xB7, 0x52, 0xB6, 0xD7, 0xC0, 0xE2, 0x96,
1101     0xE7, 0xC9, 0xFE, 0x5D, 0x71, 0x5A, 0xC4, 0x40,
1102     0x96, 0x2F, 0xE5, 0x87, 0xEA, 0xF3, 0xA5, 0x77,
1103     0x11, 0x67, 0x3C, 0x8D, 0x56, 0x08, 0xA7, 0xB5,
1104     0x67, 0xFA, 0x37, 0xA8, 0xB8, 0xCF, 0x61, 0xE8,
1105     0x63, 0xD8, 0x38, 0x06, 0x21, 0x2B, 0x92, 0x09,
1106     0xA6, 0x39, 0x3A, 0xEA, 0xA8, 0xB4, 0x45, 0x4B,
1107     0x36, 0x10, 0x4C, 0xE4, 0x00, 0x66, 0x71, 0x65,
1108     0xF8, 0x0B, 0x94, 0x59, 0x4F, 0x8C, 0xFD, 0xD5,
1109     0x34, 0xA2, 0xE7, 0x62, 0x84, 0x0A, 0xA7, 0xBB,
1110     0xDB, 0xD9, 0x8A, 0xCD, 0x05, 0xE1, 0xCC, 0x57,
1111     0x7B, 0xF1, 0xF1, 0x1F, 0x11, 0x9D, 0xBA, 0x3E,
1112     0x45, 0x18, 0x99, 0x1B, 0x41, 0x64, 0x43, 0xEE,
1113     0x97, 0x5D, 0x77, 0x13, 0x5B, 0x74, 0x69, 0x73,
1114     0x87, 0x95, 0x05, 0x07, 0xBE, 0x45, 0x07, 0x17,
1115     0x7E, 0x4A, 0x69, 0x22, 0xF3, 0xDB, 0x05, 0x39
1116 };
1117 static const unsigned char rsa_dp[] = {
1118     0x5E, 0xD8, 0xDC, 0xDA, 0x53, 0x44, 0xC4, 0x67,
1119     0xE0, 0x92, 0x51, 0x34, 0xE4, 0x83, 0xA5, 0x4D,
1120     0x3E, 0xDB, 0xA7, 0x9B, 0x82, 0xBB, 0x73, 0x81,
1121     0xFC, 0xE8, 0x77, 0x4B, 0x15, 0xBE, 0x17, 0x73,
1122     0x49, 0x9B, 0x5C, 0x98, 0xBC, 0xBD, 0x26, 0xEF,
1123     0x0C, 0xE9, 0x2E, 0xED, 0x19, 0x7E, 0x86, 0x41,
1124     0x1E, 0x9E, 0x48, 0x81, 0xDD, 0x2D, 0xE4, 0x6F,
1125     0xC2, 0xCD, 0xCA, 0x93, 0x9E, 0x65, 0x7E, 0xD5,
1126     0xEC, 0x73, 0xFD, 0x15, 0x1B, 0xA2, 0xA0, 0x7A,
1127     0x0F, 0x0D, 0x6E, 0xB4, 0x53, 0x07, 0x90, 0x92,
1128     0x64, 0x3B, 0x8B, 0xA9, 0x33, 0xB3, 0xC5, 0x94,
1129     0x9B, 0x4C, 0x5D, 0x9C, 0x7C, 0x46, 0xA4, 0xA5,
1130     0x56, 0xF4, 0xF3, 0xF8, 0x27, 0x0A, 0x7B, 0x42,
1131     0x0D, 0x92, 0x70, 0x47, 0xE7, 0x42, 0x51, 0xA9,
1132     0xC2, 0x18, 0xB1, 0x58, 0xB1, 0x50, 0x91, 0xB8,
1133     0x61, 0x41, 0xB6, 0xA9, 0xCE, 0xD4, 0x7C, 0xBB
1134 };
1135 static const unsigned char rsa_dq[] = {
1136     0x54, 0x09, 0x1F, 0x0F, 0x03, 0xD8, 0xB6, 0xC5,
1137     0x0C, 0xE8, 0xB9, 0x9E, 0x0C, 0x38, 0x96, 0x43,
1138     0xD4, 0xA6, 0xC5, 0x47, 0xDB, 0x20, 0x0E, 0xE5,
1139     0xBD, 0x29, 0xD4, 0x7B, 0x1A, 0xF8, 0x41, 0x57,
1140     0x49, 0x69, 0x9A, 0x82, 0xCC, 0x79, 0x4A, 0x43,
1141     0xEB, 0x4D, 0x8B, 0x2D, 0xF2, 0x43, 0xD5, 0xA5,
1142     0xBE, 0x44, 0xFD, 0x36, 0xAC, 0x8C, 0x9B, 0x02,
1143     0xF7, 0x9A, 0x03, 0xE8, 0x19, 0xA6, 0x61, 0xAE,
1144     0x76, 0x10, 0x93, 0x77, 0x41, 0x04, 0xAB, 0x4C,
1145     0xED, 0x6A, 0xCC, 0x14, 0x1B, 0x99, 0x8D, 0x0C,
1146     0x6A, 0x37, 0x3B, 0x86, 0x6C, 0x51, 0x37, 0x5B,
1147     0x1D, 0x79, 0xF2, 0xA3, 0x43, 0x10, 0xC6, 0xA7,
1148     0x21, 0x79, 0x6D, 0xF9, 0xE9, 0x04, 0x6A, 0xE8,
1149     0x32, 0xFF, 0xAE, 0xFD, 0x1C, 0x7B, 0x8C, 0x29,
1150     0x13, 0xA3, 0x0C, 0xB2, 0xAD, 0xEC, 0x6C, 0x0F,
1151     0x8D, 0x27, 0x12, 0x7B, 0x48, 0xB2, 0xDB, 0x31
1152 };
1153 static const unsigned char rsa_qInv[] = {
1154     0x8D, 0x1B, 0x05, 0xCA, 0x24, 0x1F, 0x0C, 0x53,
1155     0x19, 0x52, 0x74, 0x63, 0x21, 0xFA, 0x78, 0x46,
1156     0x79, 0xAF, 0x5C, 0xDE, 0x30, 0xA4, 0x6C, 0x20,
1157     0x38, 0xE6, 0x97, 0x39, 0xB8, 0x7A, 0x70, 0x0D,
1158     0x8B, 0x6C, 0x6D, 0x13, 0x74, 0xD5, 0x1C, 0xDE,
1159     0xA9, 0xF4, 0x60, 0x37, 0xFE, 0x68, 0x77, 0x5E,
1160     0x0B, 0x4E, 0x5E, 0x03, 0x31, 0x30, 0xDF, 0xD6,
1161     0xAE, 0x85, 0xD0, 0x81, 0xBB, 0x61, 0xC7, 0xB1,
1162     0x04, 0x5A, 0xC4, 0x6D, 0x56, 0x1C, 0xD9, 0x64,
1163     0xE7, 0x85, 0x7F, 0x88, 0x91, 0xC9, 0x60, 0x28,
1164     0x05, 0xE2, 0xC6, 0x24, 0x8F, 0xDD, 0x61, 0x64,
1165     0xD8, 0x09, 0xDE, 0x7E, 0xD3, 0x4A, 0x61, 0x1A,
1166     0xD3, 0x73, 0x58, 0x4B, 0xD8, 0xA0, 0x54, 0x25,
1167     0x48, 0x83, 0x6F, 0x82, 0x6C, 0xAF, 0x36, 0x51,
1168     0x2A, 0x5D, 0x14, 0x2F, 0x41, 0x25, 0x00, 0xDD,
1169     0xF8, 0xF3, 0x95, 0xFE, 0x31, 0x25, 0x50, 0x12
1170 };
1171
1172 static const ST_KAT_PARAM rsa_crt_key[] = {
1173     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_N, rsa_n),
1174     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_E, rsa_e),
1175     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_D, rsa_d),
1176     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_FACTOR, rsa_p),
1177     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_FACTOR, rsa_q),
1178     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_EXPONENT, rsa_dp),
1179     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_EXPONENT, rsa_dq),
1180     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_COEFFICIENT, rsa_qInv),
1181     ST_KAT_PARAM_END()
1182 };
1183
1184 static const ST_KAT_PARAM rsa_pub_key[] = {
1185     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_N, rsa_n),
1186     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_E, rsa_e),
1187     ST_KAT_PARAM_END()
1188 };
1189
1190 static const ST_KAT_PARAM rsa_priv_key[] = {
1191     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_N, rsa_n),
1192     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_E, rsa_e),
1193     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_RSA_D, rsa_d),
1194     ST_KAT_PARAM_END()
1195 };
1196
1197 static const ST_KAT_PARAM rsa_enc_params[] = {
1198     ST_KAT_PARAM_UTF8STRING(OSSL_ASYM_CIPHER_PARAM_PAD_MODE,
1199                             OSSL_PKEY_RSA_PAD_MODE_NONE),
1200     ST_KAT_PARAM_END()
1201 };
1202
1203 static const unsigned char rsa_expected_sig[256] = {
1204     0xad, 0xbe, 0x2a, 0xaf, 0x16, 0x85, 0xc5, 0x00,
1205     0x91, 0x3e, 0xd0, 0x49, 0xfb, 0x3a, 0x81, 0xb9,
1206     0x6c, 0x28, 0xbc, 0xbf, 0xea, 0x96, 0x5f, 0xe4,
1207     0x9f, 0x99, 0xf7, 0x18, 0x8c, 0xec, 0x60, 0x28,
1208     0xeb, 0x29, 0x02, 0x49, 0xfc, 0xda, 0xd7, 0x78,
1209     0x68, 0xf8, 0xe1, 0xe9, 0x4d, 0x20, 0x6d, 0x32,
1210     0xa6, 0xde, 0xfc, 0xe4, 0xda, 0xcc, 0x6c, 0x75,
1211     0x36, 0x6b, 0xff, 0x5a, 0xac, 0x01, 0xa8, 0xc2,
1212     0xa9, 0xe6, 0x8b, 0x18, 0x3e, 0xec, 0xea, 0x4c,
1213     0x4a, 0x9e, 0x00, 0x09, 0xd1, 0x8a, 0x69, 0x1b,
1214     0x8b, 0xd9, 0xad, 0x37, 0xe5, 0x7c, 0xff, 0x7d,
1215     0x59, 0x56, 0x3e, 0xa0, 0xc6, 0x32, 0xd8, 0x35,
1216     0x2f, 0xff, 0xfb, 0x05, 0x02, 0xcd, 0xd7, 0x19,
1217     0xb9, 0x00, 0x86, 0x2a, 0xcf, 0xaa, 0x78, 0x16,
1218     0x4b, 0xf1, 0xa7, 0x59, 0xef, 0x7d, 0xe8, 0x74,
1219     0x23, 0x5c, 0xb2, 0xd4, 0x8a, 0x99, 0xa5, 0xbc,
1220     0xfa, 0x63, 0xd8, 0xf7, 0xbd, 0xc6, 0x00, 0x13,
1221     0x06, 0x02, 0x9a, 0xd4, 0xa7, 0xb4, 0x3d, 0x61,
1222     0xab, 0xf1, 0xc2, 0x95, 0x59, 0x9b, 0x3d, 0x67,
1223     0x1f, 0xde, 0x57, 0xb6, 0xb6, 0x9f, 0xb0, 0x87,
1224     0xd6, 0x51, 0xd5, 0x3e, 0x00, 0xe2, 0xc9, 0xa0,
1225     0x03, 0x66, 0xbc, 0x01, 0xb3, 0x8e, 0xfa, 0xf1,
1226     0x15, 0xeb, 0x26, 0xf1, 0x5d, 0x81, 0x90, 0xb4,
1227     0x1c, 0x00, 0x7c, 0x83, 0x4a, 0xa5, 0xde, 0x64,
1228     0xae, 0xea, 0x6c, 0x43, 0xc3, 0x20, 0x77, 0x77,
1229     0x42, 0x12, 0x24, 0xf5, 0xe3, 0x70, 0xdd, 0x59,
1230     0x48, 0x9c, 0xef, 0xd4, 0x8a, 0x3c, 0x29, 0x6a,
1231     0x0c, 0x9c, 0xf2, 0x13, 0xa4, 0x1c, 0x2f, 0x49,
1232     0xcd, 0xb4, 0xaa, 0x28, 0x40, 0x34, 0xc6, 0x75,
1233     0xba, 0x30, 0xe6, 0xd8, 0x5b, 0x2f, 0x08, 0xd0,
1234     0x29, 0xa5, 0x39, 0xfb, 0x6e, 0x3b, 0x0f, 0x52,
1235     0x2c, 0x68, 0xf0, 0x37, 0xa9, 0xd2, 0x56, 0xd6
1236 };
1237
1238 static const unsigned char rsa_asym_plaintext_encrypt[256] = {
1239    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1240    0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1241 };
1242 static const unsigned char rsa_asym_expected_encrypt[256] = {
1243     0x54, 0xac, 0x23, 0x96, 0x1d, 0x82, 0x5d, 0x8b,
1244     0x8f, 0x36, 0x33, 0xd0, 0xf4, 0x02, 0xa2, 0x61,
1245     0xb1, 0x13, 0xd4, 0x4a, 0x46, 0x06, 0x37, 0x3c,
1246     0xbf, 0x40, 0x05, 0x3c, 0xc6, 0x3b, 0x64, 0xdc,
1247     0x22, 0x22, 0xaf, 0x36, 0x79, 0x62, 0x45, 0xf0,
1248     0x97, 0x82, 0x22, 0x44, 0x86, 0x4a, 0x7c, 0xfa,
1249     0xac, 0x03, 0x21, 0x84, 0x3f, 0x31, 0xad, 0x2a,
1250     0xa4, 0x6e, 0x7a, 0xc5, 0x93, 0xf3, 0x0f, 0xfc,
1251     0xf1, 0x62, 0xce, 0x82, 0x12, 0x45, 0xc9, 0x35,
1252     0xb0, 0x7a, 0xcd, 0x99, 0x8c, 0x91, 0x6b, 0x5a,
1253     0xd3, 0x46, 0xdb, 0xf9, 0x9e, 0x52, 0x49, 0xbd,
1254     0x1e, 0xe8, 0xda, 0xac, 0x61, 0x47, 0xc2, 0xda,
1255     0xfc, 0x1e, 0xfb, 0x74, 0xd7, 0xd6, 0xc1, 0x18,
1256     0x86, 0x3e, 0x20, 0x9c, 0x7a, 0xe1, 0x04, 0xb7,
1257     0x38, 0x43, 0xb1, 0x4e, 0xa0, 0xd8, 0xc1, 0x39,
1258     0x4d, 0xe1, 0xd3, 0xb0, 0xb3, 0xf1, 0x82, 0x87,
1259     0x1f, 0x74, 0xb5, 0x69, 0xfd, 0x33, 0xd6, 0x21,
1260     0x7c, 0x61, 0x60, 0x28, 0xca, 0x70, 0xdb, 0xa0,
1261     0xbb, 0xc8, 0x73, 0xa9, 0x82, 0xf8, 0x6b, 0xd8,
1262     0xf0, 0xc9, 0x7b, 0x20, 0xdf, 0x9d, 0xfb, 0x8c,
1263     0xd4, 0xa2, 0x89, 0xe1, 0x9b, 0x04, 0xad, 0xaa,
1264     0x11, 0x6c, 0x8f, 0xce, 0x83, 0x29, 0x56, 0x69,
1265     0xbb, 0x00, 0x3b, 0xef, 0xca, 0x2d, 0xcd, 0x52,
1266     0xc8, 0xf1, 0xb3, 0x9b, 0xb4, 0x4f, 0x6d, 0x9c,
1267     0x3d, 0x69, 0xcc, 0x6d, 0x1f, 0x38, 0x4d, 0xe6,
1268     0xbb, 0x0c, 0x87, 0xdc, 0x5f, 0xa9, 0x24, 0x93,
1269     0x03, 0x46, 0xa2, 0x33, 0x6c, 0xf4, 0xd8, 0x5d,
1270     0x68, 0xf3, 0xd3, 0xe0, 0xf2, 0x30, 0xdb, 0xf5,
1271     0x4f, 0x0f, 0xad, 0xc7, 0xd0, 0xaa, 0x47, 0xd9,
1272     0x9f, 0x85, 0x1b, 0x2e, 0x6c, 0x3c, 0x57, 0x04,
1273     0x29, 0xf4, 0xf5, 0x66, 0x7d, 0x93, 0x4a, 0xaa,
1274     0x05, 0x52, 0x55, 0xc1, 0xc6, 0x06, 0x90, 0xab,
1275 };
1276
1277 #ifndef OPENSSL_NO_EC
1278 /* ECDSA key data */
1279 static const char ecd_curve_name[] = "secp224r1";
1280 static const unsigned char ecd_priv[] = {
1281     0x98, 0x1f, 0xb5, 0xf1, 0xfc, 0x87, 0x1d, 0x7d,
1282     0xde, 0x1e, 0x01, 0x64, 0x09, 0x9b, 0xe7, 0x1b,
1283     0x9f, 0xad, 0x63, 0xdd, 0x33, 0x01, 0xd1, 0x50,
1284     0x80, 0x93, 0x50, 0x30
1285 };
1286 static const unsigned char ecd_pub[] = {
1287     0x04, 0x95, 0x47, 0x99, 0x44, 0x29, 0x8f, 0x51,
1288     0x39, 0xe2, 0x53, 0xec, 0x79, 0xb0, 0x4d, 0xde,
1289     0x87, 0x1a, 0x76, 0x54, 0xd5, 0x96, 0xb8, 0x7a,
1290     0x6d, 0xf4, 0x1c, 0x2c, 0x87, 0x91, 0x5f, 0xd5,
1291     0x31, 0xdd, 0x24, 0xe5, 0x78, 0xd9, 0x08, 0x24,
1292     0x8a, 0x49, 0x99, 0xec, 0x55, 0xf2, 0x82, 0xb3,
1293     0xc4, 0xb7, 0x33, 0x68, 0xe4, 0x24, 0xa9, 0x12,
1294     0x82
1295 };
1296
1297 static const ST_KAT_PARAM ecdsa_key[] = {
1298     ST_KAT_PARAM_UTF8STRING(OSSL_PKEY_PARAM_GROUP_NAME, ecd_curve_name),
1299     ST_KAT_PARAM_OCTET(OSSL_PKEY_PARAM_PUB_KEY, ecd_pub),
1300     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, ecd_priv),
1301     ST_KAT_PARAM_END()
1302 };
1303 #endif /* OPENSSL_NO_EC */
1304
1305 #ifndef OPENSSL_NO_DSA
1306 /* dsa 2048 */
1307 static const unsigned char dsa_p[] = {
1308     0xa2, 0x9b, 0x88, 0x72, 0xce, 0x8b, 0x84, 0x23,
1309     0xb7, 0xd5, 0xd2, 0x1d, 0x4b, 0x02, 0xf5, 0x7e,
1310     0x03, 0xe9, 0xe6, 0xb8, 0xa2, 0x58, 0xdc, 0x16,
1311     0x61, 0x1b, 0xa0, 0x98, 0xab, 0x54, 0x34, 0x15,
1312     0xe4, 0x15, 0xf1, 0x56, 0x99, 0x7a, 0x3e, 0xe2,
1313     0x36, 0x65, 0x8f, 0xa0, 0x93, 0x26, 0x0d, 0xe3,
1314     0xad, 0x42, 0x2e, 0x05, 0xe0, 0x46, 0xf9, 0xec,
1315     0x29, 0x16, 0x1a, 0x37, 0x5f, 0x0e, 0xb4, 0xef,
1316     0xfc, 0xef, 0x58, 0x28, 0x5c, 0x5d, 0x39, 0xed,
1317     0x42, 0x5d, 0x7a, 0x62, 0xca, 0x12, 0x89, 0x6c,
1318     0x4a, 0x92, 0xcb, 0x19, 0x46, 0xf2, 0x95, 0x2a,
1319     0x48, 0x13, 0x3f, 0x07, 0xda, 0x36, 0x4d, 0x1b,
1320     0xdf, 0x6b, 0x0f, 0x71, 0x39, 0x98, 0x3e, 0x69,
1321     0x3c, 0x80, 0x05, 0x9b, 0x0e, 0xac, 0xd1, 0x47,
1322     0x9b, 0xa9, 0xf2, 0x85, 0x77, 0x54, 0xed, 0xe7,
1323     0x5f, 0x11, 0x2b, 0x07, 0xeb, 0xbf, 0x35, 0x34,
1324     0x8b, 0xbf, 0x3e, 0x01, 0xe0, 0x2f, 0x2d, 0x47,
1325     0x3d, 0xe3, 0x94, 0x53, 0xf9, 0x9d, 0xd2, 0x36,
1326     0x75, 0x41, 0xca, 0xca, 0x3b, 0xa0, 0x11, 0x66,
1327     0x34, 0x3d, 0x7b, 0x5b, 0x58, 0xa3, 0x7b, 0xd1,
1328     0xb7, 0x52, 0x1d, 0xb2, 0xf1, 0x3b, 0x86, 0x70,
1329     0x71, 0x32, 0xfe, 0x09, 0xf4, 0xcd, 0x09, 0xdc,
1330     0x16, 0x18, 0xfa, 0x34, 0x01, 0xeb, 0xf9, 0xcc,
1331     0x7b, 0x19, 0xfa, 0x94, 0xaa, 0x47, 0x20, 0x88,
1332     0x13, 0x3d, 0x6c, 0xb2, 0xd3, 0x5c, 0x11, 0x79,
1333     0xc8, 0xc8, 0xff, 0x36, 0x87, 0x58, 0xd5, 0x07,
1334     0xd9, 0xf9, 0xa1, 0x7d, 0x46, 0xc1, 0x10, 0xfe,
1335     0x31, 0x44, 0xce, 0x9b, 0x02, 0x2b, 0x42, 0xe4,
1336     0x19, 0xeb, 0x4f, 0x53, 0x88, 0x61, 0x3b, 0xfc,
1337     0x3e, 0x26, 0x24, 0x1a, 0x43, 0x2e, 0x87, 0x06,
1338     0xbc, 0x58, 0xef, 0x76, 0x11, 0x72, 0x78, 0xde,
1339     0xab, 0x6c, 0xf6, 0x92, 0x61, 0x82, 0x91, 0xb7
1340 };
1341 static const unsigned char dsa_q[] = {
1342     0xa3, 0xbf, 0xd9, 0xab, 0x78, 0x84, 0x79, 0x4e,
1343     0x38, 0x34, 0x50, 0xd5, 0x89, 0x1d, 0xc1, 0x8b,
1344     0x65, 0x15, 0x7b, 0xdc, 0xfc, 0xda, 0xc5, 0x15,
1345     0x18, 0x90, 0x28, 0x67
1346 };
1347 static const unsigned char dsa_g[] = {
1348     0x68, 0x19, 0x27, 0x88, 0x69, 0xc7, 0xfd, 0x3d,
1349     0x2d, 0x7b, 0x77, 0xf7, 0x7e, 0x81, 0x50, 0xd9,
1350     0xad, 0x43, 0x3b, 0xea, 0x3b, 0xa8, 0x5e, 0xfc,
1351     0x80, 0x41, 0x5a, 0xa3, 0x54, 0x5f, 0x78, 0xf7,
1352     0x22, 0x96, 0xf0, 0x6c, 0xb1, 0x9c, 0xed, 0xa0,
1353     0x6c, 0x94, 0xb0, 0x55, 0x1c, 0xfe, 0x6e, 0x6f,
1354     0x86, 0x3e, 0x31, 0xd1, 0xde, 0x6e, 0xed, 0x7d,
1355     0xab, 0x8b, 0x0c, 0x9d, 0xf2, 0x31, 0xe0, 0x84,
1356     0x34, 0xd1, 0x18, 0x4f, 0x91, 0xd0, 0x33, 0x69,
1357     0x6b, 0xb3, 0x82, 0xf8, 0x45, 0x5e, 0x98, 0x88,
1358     0xf5, 0xd3, 0x1d, 0x47, 0x84, 0xec, 0x40, 0x12,
1359     0x02, 0x46, 0xf4, 0xbe, 0xa6, 0x17, 0x94, 0xbb,
1360     0xa5, 0x86, 0x6f, 0x09, 0x74, 0x64, 0x63, 0xbd,
1361     0xf8, 0xe9, 0xe1, 0x08, 0xcd, 0x95, 0x29, 0xc3,
1362     0xd0, 0xf6, 0xdf, 0x80, 0x31, 0x6e, 0x2e, 0x70,
1363     0xaa, 0xeb, 0x1b, 0x26, 0xcd, 0xb8, 0xad, 0x97,
1364     0xbc, 0x3d, 0x28, 0x7e, 0x0b, 0x8d, 0x61, 0x6c,
1365     0x42, 0xe6, 0x5b, 0x87, 0xdb, 0x20, 0xde, 0xb7,
1366     0x00, 0x5b, 0xc4, 0x16, 0x74, 0x7a, 0x64, 0x70,
1367     0x14, 0x7a, 0x68, 0xa7, 0x82, 0x03, 0x88, 0xeb,
1368     0xf4, 0x4d, 0x52, 0xe0, 0x62, 0x8a, 0xf9, 0xcf,
1369     0x1b, 0x71, 0x66, 0xd0, 0x34, 0x65, 0xf3, 0x5a,
1370     0xcc, 0x31, 0xb6, 0x11, 0x0c, 0x43, 0xda, 0xbc,
1371     0x7c, 0x5d, 0x59, 0x1e, 0x67, 0x1e, 0xaf, 0x7c,
1372     0x25, 0x2c, 0x1c, 0x14, 0x53, 0x36, 0xa1, 0xa4,
1373     0xdd, 0xf1, 0x32, 0x44, 0xd5, 0x5e, 0x83, 0x56,
1374     0x80, 0xca, 0xb2, 0x53, 0x3b, 0x82, 0xdf, 0x2e,
1375     0xfe, 0x55, 0xec, 0x18, 0xc1, 0xe6, 0xcd, 0x00,
1376     0x7b, 0xb0, 0x89, 0x75, 0x8b, 0xb1, 0x7c, 0x2c,
1377     0xbe, 0x14, 0x44, 0x1b, 0xd0, 0x93, 0xae, 0x66,
1378     0xe5, 0x97, 0x6d, 0x53, 0x73, 0x3f, 0x4f, 0xa3,
1379     0x26, 0x97, 0x01, 0xd3, 0x1d, 0x23, 0xd4, 0x67
1380 };
1381 static const unsigned char dsa_pub[] = {
1382     0xa0, 0x12, 0xb3, 0xb1, 0x70, 0xb3, 0x07, 0x22,
1383     0x79, 0x57, 0xb7, 0xca, 0x20, 0x61, 0xa8, 0x16,
1384     0xac, 0x7a, 0x2b, 0x3d, 0x9a, 0xe9, 0x95, 0xa5,
1385     0x11, 0x9c, 0x38, 0x5b, 0x60, 0x3b, 0xf6, 0xf6,
1386     0xc5, 0xde, 0x4d, 0xc5, 0xec, 0xb5, 0xdf, 0xa4,
1387     0xa4, 0x1c, 0x68, 0x66, 0x2e, 0xb2, 0x5b, 0x63,
1388     0x8b, 0x7e, 0x26, 0x20, 0xba, 0x89, 0x8d, 0x07,
1389     0xda, 0x6c, 0x49, 0x91, 0xe7, 0x6c, 0xc0, 0xec,
1390     0xd1, 0xad, 0x34, 0x21, 0x07, 0x70, 0x67, 0xe4,
1391     0x7c, 0x18, 0xf5, 0x8a, 0x92, 0xa7, 0x2a, 0xd4,
1392     0x31, 0x99, 0xec, 0xb7, 0xbd, 0x84, 0xe7, 0xd3,
1393     0xaf, 0xb9, 0x01, 0x9f, 0x0e, 0x9d, 0xd0, 0xfb,
1394     0xaa, 0x48, 0x73, 0x00, 0xb1, 0x30, 0x81, 0xe3,
1395     0x3c, 0x90, 0x28, 0x76, 0x43, 0x6f, 0x7b, 0x03,
1396     0xc3, 0x45, 0x52, 0x84, 0x81, 0xd3, 0x62, 0x81,
1397     0x5e, 0x24, 0xfe, 0x59, 0xda, 0xc5, 0xac, 0x34,
1398     0x66, 0x0d, 0x4c, 0x8a, 0x76, 0xcb, 0x99, 0xa7,
1399     0xc7, 0xde, 0x93, 0xeb, 0x95, 0x6c, 0xd6, 0xbc,
1400     0x88, 0xe5, 0x8d, 0x90, 0x10, 0x34, 0x94, 0x4a,
1401     0x09, 0x4b, 0x01, 0x80, 0x3a, 0x43, 0xc6, 0x72,
1402     0xb9, 0x68, 0x8c, 0x0e, 0x01, 0xd8, 0xf4, 0xfc,
1403     0x91, 0xc6, 0x2a, 0x3f, 0x88, 0x02, 0x1f, 0x7b,
1404     0xd6, 0xa6, 0x51, 0xb1, 0xa8, 0x8f, 0x43, 0xaa,
1405     0x4e, 0xf2, 0x76, 0x53, 0xd1, 0x2b, 0xf8, 0xb7,
1406     0x09, 0x9f, 0xdf, 0x6b, 0x46, 0x10, 0x82, 0xf8,
1407     0xe9, 0x39, 0x10, 0x7b, 0xfd, 0x2f, 0x72, 0x10,
1408     0x08, 0x7d, 0x32, 0x6c, 0x37, 0x52, 0x00, 0xf1,
1409     0xf5, 0x1e, 0x7e, 0x74, 0xa3, 0x41, 0x31, 0x90,
1410     0x1b, 0xcd, 0x08, 0x63, 0x52, 0x1f, 0xf8, 0xd6,
1411     0x76, 0xc4, 0x85, 0x81, 0x86, 0x87, 0x36, 0xc5,
1412     0xe5, 0x1b, 0x16, 0xa4, 0xe3, 0x92, 0x15, 0xea,
1413     0x0b, 0x17, 0xc4, 0x73, 0x59, 0x74, 0xc5, 0x16
1414 };
1415 static const unsigned char dsa_priv[] = {
1416     0x6c, 0xca, 0xee, 0xf6, 0xd7, 0x3b, 0x4e, 0x80,
1417     0xf1, 0x1c, 0x17, 0xb8, 0xe9, 0x62, 0x7c, 0x03,
1418     0x66, 0x35, 0xba, 0xc3, 0x94, 0x23, 0x50, 0x5e,
1419     0x40, 0x7e, 0x5c, 0xb7
1420 };
1421
1422 static const ST_KAT_PARAM dsa_key[] = {
1423     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_P, dsa_p),
1424     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_Q, dsa_q),
1425     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_FFC_G, dsa_g),
1426     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PUB_KEY, dsa_pub),
1427     ST_KAT_PARAM_BIGNUM(OSSL_PKEY_PARAM_PRIV_KEY, dsa_priv),
1428     ST_KAT_PARAM_END()
1429 };
1430 #endif /* OPENSSL_NO_DSA */
1431
1432 static const ST_KAT_SIGN st_kat_sign_tests[] = {
1433     {
1434         OSSL_SELF_TEST_DESC_SIGN_RSA,
1435         "RSA",
1436         "SHA-256",
1437         rsa_crt_key,
1438         ITM(rsa_expected_sig)
1439     },
1440 #ifndef OPENSSL_NO_EC
1441     {
1442         OSSL_SELF_TEST_DESC_SIGN_ECDSA,
1443         "EC",
1444         "SHA-256",
1445         ecdsa_key,
1446         /*
1447          * The ECDSA signature changes each time due to it using a random k.
1448          * So there is no expected KAT for this case.
1449          */
1450     },
1451 #endif /* OPENSSL_NO_EC */
1452 #ifndef OPENSSL_NO_DSA
1453     {
1454         OSSL_SELF_TEST_DESC_SIGN_DSA,
1455         "DSA",
1456         "SHA-256",
1457         dsa_key,
1458         /*
1459          * The DSA signature changes each time due to it using a random k.
1460          * So there is no expected KAT for this case.
1461          */
1462     },
1463 #endif /* OPENSSL_NO_DSA */
1464 };
1465
1466 static const ST_KAT_ASYM_CIPHER st_kat_asym_cipher_tests[] = {
1467     {
1468         OSSL_SELF_TEST_DESC_ASYM_RSA_ENC,
1469         "RSA",
1470         1,
1471         rsa_pub_key,
1472         rsa_enc_params,
1473         ITM(rsa_asym_plaintext_encrypt),
1474         ITM(rsa_asym_expected_encrypt),
1475     },
1476     {
1477         OSSL_SELF_TEST_DESC_ASYM_RSA_DEC,
1478         "RSA",
1479         0,
1480         rsa_priv_key,
1481         rsa_enc_params,
1482         ITM(rsa_asym_expected_encrypt),
1483         ITM(rsa_asym_plaintext_encrypt),
1484     },
1485     {
1486         OSSL_SELF_TEST_DESC_ASYM_RSA_DEC,
1487         "RSA",
1488         0,
1489         rsa_crt_key,
1490         rsa_enc_params,
1491         ITM(rsa_asym_expected_encrypt),
1492         ITM(rsa_asym_plaintext_encrypt),
1493     },
1494 };