1527cbf3dSMarko Kovacevic /* SPDX-License-Identifier: BSD-3-Clause
2527cbf3dSMarko Kovacevic * Copyright(c) 2018 Intel Corporation
3527cbf3dSMarko Kovacevic */
4527cbf3dSMarko Kovacevic
5527cbf3dSMarko Kovacevic #include <string.h>
6527cbf3dSMarko Kovacevic #include <stdio.h>
7527cbf3dSMarko Kovacevic
8527cbf3dSMarko Kovacevic #include <rte_malloc.h>
9527cbf3dSMarko Kovacevic #include <rte_cryptodev.h>
10527cbf3dSMarko Kovacevic
11527cbf3dSMarko Kovacevic #include "fips_validation.h"
12527cbf3dSMarko Kovacevic
13527cbf3dSMarko Kovacevic #define NEW_LINE_STR "#"
14527cbf3dSMarko Kovacevic #define TEST_TYPE_KEY " for CBC"
15efe3a8dbSMichael Shamis #define TEST_TYPE_ECB_KEY " for ECB"
16527cbf3dSMarko Kovacevic #define TEST_CBCI_KEY " for CBCI"
17527cbf3dSMarko Kovacevic
18527cbf3dSMarko Kovacevic #define ENC_STR "[ENCRYPT]"
19527cbf3dSMarko Kovacevic #define DEC_STR "[DECRYPT]"
20527cbf3dSMarko Kovacevic
21527cbf3dSMarko Kovacevic #define COUNT_STR "COUNT = "
22527cbf3dSMarko Kovacevic #define KEY1_STR "KEY1 = "
23527cbf3dSMarko Kovacevic #define KEY2_STR "KEY2 = "
24527cbf3dSMarko Kovacevic #define KEY3_STR "KEY3 = "
25527cbf3dSMarko Kovacevic
26527cbf3dSMarko Kovacevic #define KEYS_STR "KEYs = "
27527cbf3dSMarko Kovacevic #define IV_STR "IV = "
28527cbf3dSMarko Kovacevic #define PT_STR "PLAINTEXT = "
29527cbf3dSMarko Kovacevic #define CT_STR "CIPHERTEXT = "
30527cbf3dSMarko Kovacevic #define NK_STR "NumKeys = "
31527cbf3dSMarko Kovacevic
32527cbf3dSMarko Kovacevic #define SET_STR " = "
33527cbf3dSMarko Kovacevic
34527cbf3dSMarko Kovacevic #define PLAIN_TEXT 0
35527cbf3dSMarko Kovacevic #define CIPHER_TEXT 1
36527cbf3dSMarko Kovacevic #define KEY_TEXT 2
37527cbf3dSMarko Kovacevic #define IV_TEXT 3
38527cbf3dSMarko Kovacevic
39527cbf3dSMarko Kovacevic #define DEVICE_STR "# Config Info for : "
40527cbf3dSMarko Kovacevic
41*64569ffaSGowrishankar Muthukrishnan #define ALGO_JSON_STR "algorithm"
42*64569ffaSGowrishankar Muthukrishnan #define TESTTYPE_JSON_STR "testType"
43*64569ffaSGowrishankar Muthukrishnan #define DIR_JSON_STR "direction"
44*64569ffaSGowrishankar Muthukrishnan #define KEYOPT_JSON_STR "keyingOption"
45*64569ffaSGowrishankar Muthukrishnan
46*64569ffaSGowrishankar Muthukrishnan #define PT_JSON_STR "pt"
47*64569ffaSGowrishankar Muthukrishnan #define CT_JSON_STR "ct"
48*64569ffaSGowrishankar Muthukrishnan #define IV_JSON_STR "iv"
49*64569ffaSGowrishankar Muthukrishnan #define KEY1_JSON_STR "key1"
50*64569ffaSGowrishankar Muthukrishnan #define KEY2_JSON_STR "key2"
51*64569ffaSGowrishankar Muthukrishnan #define KEY3_JSON_STR "key3"
52*64569ffaSGowrishankar Muthukrishnan
53*64569ffaSGowrishankar Muthukrishnan #define OP_ENC_JSON_STR "encrypt"
54*64569ffaSGowrishankar Muthukrishnan #define OP_DEC_JSON_STR "decrypt"
55*64569ffaSGowrishankar Muthukrishnan
56527cbf3dSMarko Kovacevic struct {
57527cbf3dSMarko Kovacevic uint32_t type;
58527cbf3dSMarko Kovacevic const char *desc;
59527cbf3dSMarko Kovacevic } test_types[] = {
60527cbf3dSMarko Kovacevic {TDES_INVERSE_PERMUTATION, "INVERSE PERMUTATION"},
61527cbf3dSMarko Kovacevic {TDES_PERMUTATION, "PERMUTATION OPERATION"},
62527cbf3dSMarko Kovacevic {TDES_SUBSTITUTION_TABLE, "SUBSTITUTION TABLE"},
63527cbf3dSMarko Kovacevic {TDES_VARIABLE_KEY, "VARIABLE KEY"},
64527cbf3dSMarko Kovacevic {TDES_VARIABLE_TEXT, "VARIABLE PLAINTEXT/CIPHERTEXT"},
65527cbf3dSMarko Kovacevic {TDES_VARIABLE_TEXT, "KAT"},
66*64569ffaSGowrishankar Muthukrishnan {TDES_AFT, "Functional Test"},
67527cbf3dSMarko Kovacevic {TDES_MCT, "Monte Carlo (Modes) Test"},
68527cbf3dSMarko Kovacevic {TDES_MMT, "Multi block Message Test"},
69527cbf3dSMarko Kovacevic };
70527cbf3dSMarko Kovacevic
71527cbf3dSMarko Kovacevic static int
72527cbf3dSMarko Kovacevic writeback_tdes_hex_str(const char *key, char *dst, struct fips_val *val);
73527cbf3dSMarko Kovacevic
74527cbf3dSMarko Kovacevic static int
75527cbf3dSMarko Kovacevic parse_tdes_uint8_hex_str(const char *key, char *src, struct fips_val *val);
76527cbf3dSMarko Kovacevic
77527cbf3dSMarko Kovacevic static int
78a1862286SArchana Muniganti parse_tdes_interim(const char *key, char *text, struct fips_val *val);
79527cbf3dSMarko Kovacevic
80527cbf3dSMarko Kovacevic struct fips_test_callback tdes_tests_vectors[] = {
81527cbf3dSMarko Kovacevic {KEYS_STR, parse_tdes_uint8_hex_str, &vec.cipher_auth.key},
82527cbf3dSMarko Kovacevic {KEY1_STR, parse_tdes_uint8_hex_str, &vec.cipher_auth.key},
83527cbf3dSMarko Kovacevic {KEY2_STR, parse_tdes_uint8_hex_str, &vec.cipher_auth.key},
84527cbf3dSMarko Kovacevic {KEY3_STR, parse_tdes_uint8_hex_str, &vec.cipher_auth.key},
85527cbf3dSMarko Kovacevic {IV_STR, parse_uint8_hex_str, &vec.iv},
86527cbf3dSMarko Kovacevic {PT_STR, parse_uint8_hex_str, &vec.pt},
87527cbf3dSMarko Kovacevic {CT_STR, parse_uint8_hex_str, &vec.ct},
88527cbf3dSMarko Kovacevic {NULL, NULL, NULL} /**< end pointer */
89527cbf3dSMarko Kovacevic };
90527cbf3dSMarko Kovacevic
91527cbf3dSMarko Kovacevic struct fips_test_callback tdes_tests_interim_vectors[] = {
92527cbf3dSMarko Kovacevic {ENC_STR, parse_tdes_interim, NULL},
93527cbf3dSMarko Kovacevic {DEC_STR, parse_tdes_interim, NULL},
94a1862286SArchana Muniganti {NK_STR, parse_tdes_interim, NULL},
95527cbf3dSMarko Kovacevic {NULL, NULL, NULL} /**< end pointer */
96527cbf3dSMarko Kovacevic };
97527cbf3dSMarko Kovacevic
98527cbf3dSMarko Kovacevic struct fips_test_callback tdes_writeback_callbacks[] = {
99527cbf3dSMarko Kovacevic /** First element is used to pass COUNT string */
100527cbf3dSMarko Kovacevic {COUNT_STR, NULL, NULL},
101527cbf3dSMarko Kovacevic {IV_STR, writeback_hex_str, &vec.iv},
102527cbf3dSMarko Kovacevic {KEY1_STR, writeback_tdes_hex_str, &vec.cipher_auth.key},
103527cbf3dSMarko Kovacevic {KEY2_STR, writeback_tdes_hex_str, &vec.cipher_auth.key},
104527cbf3dSMarko Kovacevic {KEY3_STR, writeback_tdes_hex_str, &vec.cipher_auth.key},
105527cbf3dSMarko Kovacevic {KEYS_STR, writeback_tdes_hex_str, &vec.cipher_auth.key},
106527cbf3dSMarko Kovacevic {PT_STR, writeback_hex_str, &vec.pt},
107527cbf3dSMarko Kovacevic {CT_STR, writeback_hex_str, &vec.ct},
108527cbf3dSMarko Kovacevic {NULL, NULL, NULL} /**< end pointer */
109527cbf3dSMarko Kovacevic };
110527cbf3dSMarko Kovacevic
111*64569ffaSGowrishankar Muthukrishnan #ifdef USE_JANSSON
112*64569ffaSGowrishankar Muthukrishnan static struct {
113*64569ffaSGowrishankar Muthukrishnan enum fips_tdes_test_types type;
114*64569ffaSGowrishankar Muthukrishnan const char *desc;
115*64569ffaSGowrishankar Muthukrishnan } const tdes_test_types[] = {
116*64569ffaSGowrishankar Muthukrishnan {TDES_AFT, "AFT"},
117*64569ffaSGowrishankar Muthukrishnan {TDES_MCT, "MCT"},
118*64569ffaSGowrishankar Muthukrishnan };
119*64569ffaSGowrishankar Muthukrishnan
120*64569ffaSGowrishankar Muthukrishnan static struct {
121*64569ffaSGowrishankar Muthukrishnan enum fips_tdes_test_mode mode;
122*64569ffaSGowrishankar Muthukrishnan const char *desc;
123*64569ffaSGowrishankar Muthukrishnan } const tdes_test_modes[] = {
124*64569ffaSGowrishankar Muthukrishnan {TDES_MODE_CBC, "CBC"},
125*64569ffaSGowrishankar Muthukrishnan {TDES_MODE_ECB, "ECB"},
126*64569ffaSGowrishankar Muthukrishnan };
127*64569ffaSGowrishankar Muthukrishnan
128*64569ffaSGowrishankar Muthukrishnan #define TDES_KEYS_TUPLE_LEN 24
129*64569ffaSGowrishankar Muthukrishnan
130*64569ffaSGowrishankar Muthukrishnan static int
parser_tdes_read_key(const char * key,char * src,struct fips_val * val)131*64569ffaSGowrishankar Muthukrishnan parser_tdes_read_key(const char *key, char *src, struct fips_val *val)
132*64569ffaSGowrishankar Muthukrishnan {
133*64569ffaSGowrishankar Muthukrishnan uint8_t tmp_key[TDES_KEYS_TUPLE_LEN] = {0};
134*64569ffaSGowrishankar Muthukrishnan uint32_t len, i;
135*64569ffaSGowrishankar Muthukrishnan
136*64569ffaSGowrishankar Muthukrishnan len = strlen(src) / 2;
137*64569ffaSGowrishankar Muthukrishnan
138*64569ffaSGowrishankar Muthukrishnan if (val->val) {
139*64569ffaSGowrishankar Muthukrishnan memcpy(tmp_key, val->val, val->len);
140*64569ffaSGowrishankar Muthukrishnan rte_free(val->val);
141*64569ffaSGowrishankar Muthukrishnan }
142*64569ffaSGowrishankar Muthukrishnan
143*64569ffaSGowrishankar Muthukrishnan val->val = rte_zmalloc(NULL, TDES_KEYS_TUPLE_LEN, 0);
144*64569ffaSGowrishankar Muthukrishnan if (!val->val)
145*64569ffaSGowrishankar Muthukrishnan return -1;
146*64569ffaSGowrishankar Muthukrishnan
147*64569ffaSGowrishankar Muthukrishnan memcpy(val->val, tmp_key, TDES_KEYS_TUPLE_LEN);
148*64569ffaSGowrishankar Muthukrishnan
149*64569ffaSGowrishankar Muthukrishnan if (strstr(key, KEY1_JSON_STR)) {
150*64569ffaSGowrishankar Muthukrishnan for (i = 0; i < len; i++) {
151*64569ffaSGowrishankar Muthukrishnan char byte[3] = {src[i * 2], src[i * 2 + 1], '\0'};
152*64569ffaSGowrishankar Muthukrishnan
153*64569ffaSGowrishankar Muthukrishnan if (parser_read_uint8_hex(&val->val[i], byte) < 0)
154*64569ffaSGowrishankar Muthukrishnan goto error_exit;
155*64569ffaSGowrishankar Muthukrishnan }
156*64569ffaSGowrishankar Muthukrishnan
157*64569ffaSGowrishankar Muthukrishnan if (info.interim_info.tdes_data.nb_keys == 2)
158*64569ffaSGowrishankar Muthukrishnan memcpy(val->val + 16, val->val, 8);
159*64569ffaSGowrishankar Muthukrishnan
160*64569ffaSGowrishankar Muthukrishnan } else if (strstr(key, KEY2_JSON_STR)) {
161*64569ffaSGowrishankar Muthukrishnan for (i = 0; i < len; i++) {
162*64569ffaSGowrishankar Muthukrishnan char byte[3] = {src[i * 2], src[i * 2 + 1], '\0'};
163*64569ffaSGowrishankar Muthukrishnan
164*64569ffaSGowrishankar Muthukrishnan if (parser_read_uint8_hex(&val->val[i + 8], byte) < 0)
165*64569ffaSGowrishankar Muthukrishnan goto error_exit;
166*64569ffaSGowrishankar Muthukrishnan }
167*64569ffaSGowrishankar Muthukrishnan
168*64569ffaSGowrishankar Muthukrishnan } else if (strstr(key, KEY3_JSON_STR)) {
169*64569ffaSGowrishankar Muthukrishnan for (i = 0; i < len; i++) {
170*64569ffaSGowrishankar Muthukrishnan char byte[3] = {src[i * 2], src[i * 2 + 1], '\0'};
171*64569ffaSGowrishankar Muthukrishnan
172*64569ffaSGowrishankar Muthukrishnan if (parser_read_uint8_hex(&val->val[i + 16], byte) < 0)
173*64569ffaSGowrishankar Muthukrishnan goto error_exit;
174*64569ffaSGowrishankar Muthukrishnan }
175*64569ffaSGowrishankar Muthukrishnan } else
176*64569ffaSGowrishankar Muthukrishnan return -EINVAL;
177*64569ffaSGowrishankar Muthukrishnan
178*64569ffaSGowrishankar Muthukrishnan val->len = TDES_KEYS_TUPLE_LEN;
179*64569ffaSGowrishankar Muthukrishnan
180*64569ffaSGowrishankar Muthukrishnan return 0;
181*64569ffaSGowrishankar Muthukrishnan
182*64569ffaSGowrishankar Muthukrishnan error_exit:
183*64569ffaSGowrishankar Muthukrishnan rte_free(val->val);
184*64569ffaSGowrishankar Muthukrishnan memset(val, 0, sizeof(*val));
185*64569ffaSGowrishankar Muthukrishnan return -EINVAL;
186*64569ffaSGowrishankar Muthukrishnan }
187*64569ffaSGowrishankar Muthukrishnan
188*64569ffaSGowrishankar Muthukrishnan struct fips_test_callback tdes_dec_json_vectors[] = {
189*64569ffaSGowrishankar Muthukrishnan {KEY1_JSON_STR, parser_tdes_read_key, &vec.cipher_auth.key},
190*64569ffaSGowrishankar Muthukrishnan {KEY2_JSON_STR, parser_tdes_read_key, &vec.cipher_auth.key},
191*64569ffaSGowrishankar Muthukrishnan {KEY3_JSON_STR, parser_tdes_read_key, &vec.cipher_auth.key},
192*64569ffaSGowrishankar Muthukrishnan {IV_JSON_STR, parse_uint8_hex_str, &vec.iv},
193*64569ffaSGowrishankar Muthukrishnan {CT_JSON_STR, parse_uint8_hex_str, &vec.ct},
194*64569ffaSGowrishankar Muthukrishnan {NULL, NULL, NULL} /**< end pointer */
195*64569ffaSGowrishankar Muthukrishnan };
196*64569ffaSGowrishankar Muthukrishnan
197*64569ffaSGowrishankar Muthukrishnan struct fips_test_callback tdes_enc_json_vectors[] = {
198*64569ffaSGowrishankar Muthukrishnan {KEY1_JSON_STR, parser_tdes_read_key, &vec.cipher_auth.key},
199*64569ffaSGowrishankar Muthukrishnan {KEY2_JSON_STR, parser_tdes_read_key, &vec.cipher_auth.key},
200*64569ffaSGowrishankar Muthukrishnan {KEY3_JSON_STR, parser_tdes_read_key, &vec.cipher_auth.key},
201*64569ffaSGowrishankar Muthukrishnan {IV_JSON_STR, parse_uint8_hex_str, &vec.iv},
202*64569ffaSGowrishankar Muthukrishnan {PT_JSON_STR, parse_uint8_hex_str, &vec.pt},
203*64569ffaSGowrishankar Muthukrishnan {NULL, NULL, NULL} /**< end pointer */
204*64569ffaSGowrishankar Muthukrishnan };
205*64569ffaSGowrishankar Muthukrishnan
206*64569ffaSGowrishankar Muthukrishnan static int
parse_test_tdes_json_writeback(struct fips_val * val)207*64569ffaSGowrishankar Muthukrishnan parse_test_tdes_json_writeback(struct fips_val *val)
208*64569ffaSGowrishankar Muthukrishnan {
209*64569ffaSGowrishankar Muthukrishnan struct fips_val tmp_val;
210*64569ffaSGowrishankar Muthukrishnan json_t *tcId;
211*64569ffaSGowrishankar Muthukrishnan
212*64569ffaSGowrishankar Muthukrishnan tcId = json_object_get(json_info.json_test_case, "tcId");
213*64569ffaSGowrishankar Muthukrishnan
214*64569ffaSGowrishankar Muthukrishnan json_info.json_write_case = json_object();
215*64569ffaSGowrishankar Muthukrishnan json_object_set(json_info.json_write_case, "tcId", tcId);
216*64569ffaSGowrishankar Muthukrishnan
217*64569ffaSGowrishankar Muthukrishnan if (info.op == FIPS_TEST_ENC_AUTH_GEN) {
218*64569ffaSGowrishankar Muthukrishnan json_t *ct;
219*64569ffaSGowrishankar Muthukrishnan
220*64569ffaSGowrishankar Muthukrishnan tmp_val.val = val->val;
221*64569ffaSGowrishankar Muthukrishnan tmp_val.len = vec.pt.len;
222*64569ffaSGowrishankar Muthukrishnan
223*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
224*64569ffaSGowrishankar Muthukrishnan ct = json_string(info.one_line_text);
225*64569ffaSGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, CT_JSON_STR, ct);
226*64569ffaSGowrishankar Muthukrishnan
227*64569ffaSGowrishankar Muthukrishnan tmp_val.val = val->val + vec.pt.len;
228*64569ffaSGowrishankar Muthukrishnan tmp_val.len = val->len - vec.pt.len;
229*64569ffaSGowrishankar Muthukrishnan
230*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
231*64569ffaSGowrishankar Muthukrishnan } else {
232*64569ffaSGowrishankar Muthukrishnan if (vec.status == RTE_CRYPTO_OP_STATUS_SUCCESS) {
233*64569ffaSGowrishankar Muthukrishnan tmp_val.val = val->val;
234*64569ffaSGowrishankar Muthukrishnan tmp_val.len = vec.ct.len;
235*64569ffaSGowrishankar Muthukrishnan
236*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
237*64569ffaSGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, PT_JSON_STR,
238*64569ffaSGowrishankar Muthukrishnan json_string(info.one_line_text));
239*64569ffaSGowrishankar Muthukrishnan } else {
240*64569ffaSGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "testPassed", json_false());
241*64569ffaSGowrishankar Muthukrishnan }
242*64569ffaSGowrishankar Muthukrishnan }
243*64569ffaSGowrishankar Muthukrishnan
244*64569ffaSGowrishankar Muthukrishnan return 0;
245*64569ffaSGowrishankar Muthukrishnan }
246*64569ffaSGowrishankar Muthukrishnan
247*64569ffaSGowrishankar Muthukrishnan static int
parse_test_tdes_mct_json_writeback(struct fips_val * val)248*64569ffaSGowrishankar Muthukrishnan parse_test_tdes_mct_json_writeback(struct fips_val *val)
249*64569ffaSGowrishankar Muthukrishnan {
250*64569ffaSGowrishankar Muthukrishnan json_t *tcId, *resArr, *res, *ct, *pt, *key, *iv;
251*64569ffaSGowrishankar Muthukrishnan struct fips_val tmp_val;
252*64569ffaSGowrishankar Muthukrishnan
253*64569ffaSGowrishankar Muthukrishnan tcId = json_object_get(json_info.json_test_case, "tcId");
254*64569ffaSGowrishankar Muthukrishnan if (json_info.json_write_case) {
255*64569ffaSGowrishankar Muthukrishnan json_t *wcId;
256*64569ffaSGowrishankar Muthukrishnan
257*64569ffaSGowrishankar Muthukrishnan wcId = json_object_get(json_info.json_write_case, "tcId");
258*64569ffaSGowrishankar Muthukrishnan if (!json_equal(tcId, wcId)) {
259*64569ffaSGowrishankar Muthukrishnan json_info.json_write_case = json_object();
260*64569ffaSGowrishankar Muthukrishnan json_object_set(json_info.json_write_case, "tcId", tcId);
261*64569ffaSGowrishankar Muthukrishnan json_object_set(json_info.json_write_case, "resultsArray", json_array());
262*64569ffaSGowrishankar Muthukrishnan }
263*64569ffaSGowrishankar Muthukrishnan } else {
264*64569ffaSGowrishankar Muthukrishnan json_info.json_write_case = json_object();
265*64569ffaSGowrishankar Muthukrishnan json_object_set(json_info.json_write_case, "tcId", tcId);
266*64569ffaSGowrishankar Muthukrishnan json_object_set(json_info.json_write_case, "resultsArray", json_array());
267*64569ffaSGowrishankar Muthukrishnan }
268*64569ffaSGowrishankar Muthukrishnan
269*64569ffaSGowrishankar Muthukrishnan resArr = json_object_get(json_info.json_write_case, "resultsArray");
270*64569ffaSGowrishankar Muthukrishnan if (!json_is_array(resArr))
271*64569ffaSGowrishankar Muthukrishnan return -EINVAL;
272*64569ffaSGowrishankar Muthukrishnan
273*64569ffaSGowrishankar Muthukrishnan res = json_object();
274*64569ffaSGowrishankar Muthukrishnan if (info .op == FIPS_TEST_ENC_AUTH_GEN) {
275*64569ffaSGowrishankar Muthukrishnan tmp_val.len = 8;
276*64569ffaSGowrishankar Muthukrishnan tmp_val.val = vec.cipher_auth.key.val;
277*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
278*64569ffaSGowrishankar Muthukrishnan key = json_string(info.one_line_text);
279*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, KEY1_JSON_STR, key);
280*64569ffaSGowrishankar Muthukrishnan
281*64569ffaSGowrishankar Muthukrishnan tmp_val.val = vec.cipher_auth.key.val + 8;
282*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
283*64569ffaSGowrishankar Muthukrishnan key = json_string(info.one_line_text);
284*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, KEY2_JSON_STR, key);
285*64569ffaSGowrishankar Muthukrishnan
286*64569ffaSGowrishankar Muthukrishnan tmp_val.val = vec.cipher_auth.key.val + 16;
287*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
288*64569ffaSGowrishankar Muthukrishnan key = json_string(info.one_line_text);
289*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, KEY3_JSON_STR, key);
290*64569ffaSGowrishankar Muthukrishnan
291*64569ffaSGowrishankar Muthukrishnan if (info.interim_info.tdes_data.test_mode == TDES_MODE_CBC) {
292*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &val[2]);
293*64569ffaSGowrishankar Muthukrishnan iv = json_string(info.one_line_text);
294*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, IV_JSON_STR, iv);
295*64569ffaSGowrishankar Muthukrishnan }
296*64569ffaSGowrishankar Muthukrishnan
297*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &val[1]);
298*64569ffaSGowrishankar Muthukrishnan pt = json_string(info.one_line_text);
299*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, PT_JSON_STR, pt);
300*64569ffaSGowrishankar Muthukrishnan
301*64569ffaSGowrishankar Muthukrishnan tmp_val.val = val->val;
302*64569ffaSGowrishankar Muthukrishnan tmp_val.len = vec.pt.len;
303*64569ffaSGowrishankar Muthukrishnan
304*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
305*64569ffaSGowrishankar Muthukrishnan ct = json_string(info.one_line_text);
306*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, CT_JSON_STR, ct);
307*64569ffaSGowrishankar Muthukrishnan
308*64569ffaSGowrishankar Muthukrishnan tmp_val.val = val->val + vec.pt.len;
309*64569ffaSGowrishankar Muthukrishnan tmp_val.len = val->len - vec.pt.len;
310*64569ffaSGowrishankar Muthukrishnan
311*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
312*64569ffaSGowrishankar Muthukrishnan } else {
313*64569ffaSGowrishankar Muthukrishnan if (vec.status == RTE_CRYPTO_OP_STATUS_SUCCESS) {
314*64569ffaSGowrishankar Muthukrishnan tmp_val.len = 8;
315*64569ffaSGowrishankar Muthukrishnan tmp_val.val = vec.cipher_auth.key.val;
316*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
317*64569ffaSGowrishankar Muthukrishnan key = json_string(info.one_line_text);
318*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, KEY1_JSON_STR, key);
319*64569ffaSGowrishankar Muthukrishnan
320*64569ffaSGowrishankar Muthukrishnan tmp_val.val = vec.cipher_auth.key.val + 8;
321*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
322*64569ffaSGowrishankar Muthukrishnan key = json_string(info.one_line_text);
323*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, KEY2_JSON_STR, key);
324*64569ffaSGowrishankar Muthukrishnan
325*64569ffaSGowrishankar Muthukrishnan tmp_val.val = vec.cipher_auth.key.val + 16;
326*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
327*64569ffaSGowrishankar Muthukrishnan key = json_string(info.one_line_text);
328*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, KEY3_JSON_STR, key);
329*64569ffaSGowrishankar Muthukrishnan
330*64569ffaSGowrishankar Muthukrishnan if (info.interim_info.tdes_data.test_mode == TDES_MODE_CBC) {
331*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &val[2]);
332*64569ffaSGowrishankar Muthukrishnan iv = json_string(info.one_line_text);
333*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, IV_JSON_STR, iv);
334*64569ffaSGowrishankar Muthukrishnan }
335*64569ffaSGowrishankar Muthukrishnan
336*64569ffaSGowrishankar Muthukrishnan tmp_val.val = val->val;
337*64569ffaSGowrishankar Muthukrishnan tmp_val.len = vec.ct.len;
338*64569ffaSGowrishankar Muthukrishnan
339*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &tmp_val);
340*64569ffaSGowrishankar Muthukrishnan pt = json_string(info.one_line_text);
341*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, PT_JSON_STR, pt);
342*64569ffaSGowrishankar Muthukrishnan
343*64569ffaSGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &val[1]);
344*64569ffaSGowrishankar Muthukrishnan ct = json_string(info.one_line_text);
345*64569ffaSGowrishankar Muthukrishnan json_object_set_new(res, CT_JSON_STR, ct);
346*64569ffaSGowrishankar Muthukrishnan } else {
347*64569ffaSGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "testPassed", json_false());
348*64569ffaSGowrishankar Muthukrishnan }
349*64569ffaSGowrishankar Muthukrishnan }
350*64569ffaSGowrishankar Muthukrishnan
351*64569ffaSGowrishankar Muthukrishnan json_array_append_new(resArr, res);
352*64569ffaSGowrishankar Muthukrishnan
353*64569ffaSGowrishankar Muthukrishnan return 0;
354*64569ffaSGowrishankar Muthukrishnan }
355*64569ffaSGowrishankar Muthukrishnan
parse_test_tdes_json_init(void)356*64569ffaSGowrishankar Muthukrishnan int parse_test_tdes_json_init(void)
357*64569ffaSGowrishankar Muthukrishnan {
358*64569ffaSGowrishankar Muthukrishnan json_t *type_obj = json_object_get(json_info.json_test_group, TESTTYPE_JSON_STR);
359*64569ffaSGowrishankar Muthukrishnan json_t *algo_obj = json_object_get(json_info.json_vector_set, ALGO_JSON_STR);
360*64569ffaSGowrishankar Muthukrishnan const char *type_str = json_string_value(type_obj);
361*64569ffaSGowrishankar Muthukrishnan const char *algo_str = json_string_value(algo_obj);
362*64569ffaSGowrishankar Muthukrishnan uint32_t i;
363*64569ffaSGowrishankar Muthukrishnan
364*64569ffaSGowrishankar Muthukrishnan if (json_info.json_test_group) {
365*64569ffaSGowrishankar Muthukrishnan json_t *direction_obj, *opt_obj;
366*64569ffaSGowrishankar Muthukrishnan const char *direction_str;
367*64569ffaSGowrishankar Muthukrishnan int opt_val;
368*64569ffaSGowrishankar Muthukrishnan
369*64569ffaSGowrishankar Muthukrishnan direction_obj = json_object_get(json_info.json_test_group, DIR_JSON_STR);
370*64569ffaSGowrishankar Muthukrishnan direction_str = json_string_value(direction_obj);
371*64569ffaSGowrishankar Muthukrishnan
372*64569ffaSGowrishankar Muthukrishnan if (strcmp(direction_str, OP_ENC_JSON_STR) == 0) {
373*64569ffaSGowrishankar Muthukrishnan info.op = FIPS_TEST_ENC_AUTH_GEN;
374*64569ffaSGowrishankar Muthukrishnan info.callbacks = tdes_enc_json_vectors;
375*64569ffaSGowrishankar Muthukrishnan } else if (strcmp(direction_str, OP_DEC_JSON_STR) == 0) {
376*64569ffaSGowrishankar Muthukrishnan info.op = FIPS_TEST_DEC_AUTH_VERIF;
377*64569ffaSGowrishankar Muthukrishnan info.callbacks = tdes_dec_json_vectors;
378*64569ffaSGowrishankar Muthukrishnan } else {
379*64569ffaSGowrishankar Muthukrishnan return -EINVAL;
380*64569ffaSGowrishankar Muthukrishnan }
381*64569ffaSGowrishankar Muthukrishnan
382*64569ffaSGowrishankar Muthukrishnan opt_obj = json_object_get(json_info.json_test_group, KEYOPT_JSON_STR);
383*64569ffaSGowrishankar Muthukrishnan opt_val = json_integer_value(opt_obj);
384*64569ffaSGowrishankar Muthukrishnan if (opt_val == 2)
385*64569ffaSGowrishankar Muthukrishnan info.interim_info.tdes_data.nb_keys = 2;
386*64569ffaSGowrishankar Muthukrishnan else
387*64569ffaSGowrishankar Muthukrishnan info.interim_info.tdes_data.nb_keys = 3;
388*64569ffaSGowrishankar Muthukrishnan
389*64569ffaSGowrishankar Muthukrishnan info.interim_callbacks = NULL;
390*64569ffaSGowrishankar Muthukrishnan }
391*64569ffaSGowrishankar Muthukrishnan
392*64569ffaSGowrishankar Muthukrishnan for (i = 0; i < RTE_DIM(tdes_test_types); i++)
393*64569ffaSGowrishankar Muthukrishnan if (strstr(type_str, tdes_test_types[i].desc)) {
394*64569ffaSGowrishankar Muthukrishnan info.interim_info.tdes_data.test_type =
395*64569ffaSGowrishankar Muthukrishnan tdes_test_types[i].type;
396*64569ffaSGowrishankar Muthukrishnan break;
397*64569ffaSGowrishankar Muthukrishnan }
398*64569ffaSGowrishankar Muthukrishnan
399*64569ffaSGowrishankar Muthukrishnan if (i >= RTE_DIM(tdes_test_types))
400*64569ffaSGowrishankar Muthukrishnan return -EINVAL;
401*64569ffaSGowrishankar Muthukrishnan
402*64569ffaSGowrishankar Muthukrishnan for (i = 0; RTE_DIM(tdes_test_modes); i++)
403*64569ffaSGowrishankar Muthukrishnan if (strstr(algo_str, tdes_test_modes[i].desc)) {
404*64569ffaSGowrishankar Muthukrishnan info.interim_info.tdes_data.test_mode =
405*64569ffaSGowrishankar Muthukrishnan tdes_test_modes[i].mode;
406*64569ffaSGowrishankar Muthukrishnan break;
407*64569ffaSGowrishankar Muthukrishnan }
408*64569ffaSGowrishankar Muthukrishnan
409*64569ffaSGowrishankar Muthukrishnan if (i >= RTE_DIM(tdes_test_modes))
410*64569ffaSGowrishankar Muthukrishnan return -EINVAL;
411*64569ffaSGowrishankar Muthukrishnan
412*64569ffaSGowrishankar Muthukrishnan switch (info.interim_info.tdes_data.test_type) {
413*64569ffaSGowrishankar Muthukrishnan case TDES_AFT:
414*64569ffaSGowrishankar Muthukrishnan info.parse_writeback = parse_test_tdes_json_writeback;
415*64569ffaSGowrishankar Muthukrishnan break;
416*64569ffaSGowrishankar Muthukrishnan case TDES_MCT:
417*64569ffaSGowrishankar Muthukrishnan info.parse_writeback = parse_test_tdes_mct_json_writeback;
418*64569ffaSGowrishankar Muthukrishnan break;
419*64569ffaSGowrishankar Muthukrishnan default:
420*64569ffaSGowrishankar Muthukrishnan info.parse_writeback = NULL;
421*64569ffaSGowrishankar Muthukrishnan };
422*64569ffaSGowrishankar Muthukrishnan
423*64569ffaSGowrishankar Muthukrishnan if (info.parse_writeback == NULL)
424*64569ffaSGowrishankar Muthukrishnan return -EINVAL;
425*64569ffaSGowrishankar Muthukrishnan
426*64569ffaSGowrishankar Muthukrishnan return 0;
427*64569ffaSGowrishankar Muthukrishnan }
428*64569ffaSGowrishankar Muthukrishnan #endif /* USE_JANSSON */
429*64569ffaSGowrishankar Muthukrishnan
430527cbf3dSMarko Kovacevic static int
parse_tdes_interim(const char * key,char * text,__rte_unused struct fips_val * val)431a1862286SArchana Muniganti parse_tdes_interim(const char *key, char *text,
432f2fc83b4SThomas Monjalon __rte_unused struct fips_val *val)
433527cbf3dSMarko Kovacevic {
434527cbf3dSMarko Kovacevic if (strstr(key, ENC_STR))
435527cbf3dSMarko Kovacevic info.op = FIPS_TEST_ENC_AUTH_GEN;
436527cbf3dSMarko Kovacevic else if (strstr(key, DEC_STR))
437527cbf3dSMarko Kovacevic info.op = FIPS_TEST_DEC_AUTH_VERIF;
438a1862286SArchana Muniganti else if (strstr(key, NK_STR)) {
439a1862286SArchana Muniganti if (strcmp(text, "NumKeys = 1") == 0)
440527cbf3dSMarko Kovacevic info.interim_info.tdes_data.nb_keys = 1;
441a1862286SArchana Muniganti else if (strcmp(text, "NumKeys = 2") == 0)
442527cbf3dSMarko Kovacevic info.interim_info.tdes_data.nb_keys = 2;
443a1862286SArchana Muniganti else if (strcmp(text, "NumKeys = 3") == 0)
444527cbf3dSMarko Kovacevic info.interim_info.tdes_data.nb_keys = 3;
445527cbf3dSMarko Kovacevic else
446527cbf3dSMarko Kovacevic return -EINVAL;
447a1862286SArchana Muniganti } else
448a1862286SArchana Muniganti return -EINVAL;
449527cbf3dSMarko Kovacevic
450527cbf3dSMarko Kovacevic return 0;
451527cbf3dSMarko Kovacevic }
452527cbf3dSMarko Kovacevic
453527cbf3dSMarko Kovacevic static int
parse_tdes_uint8_hex_str(const char * key,char * src,struct fips_val * val)454527cbf3dSMarko Kovacevic parse_tdes_uint8_hex_str(const char *key, char *src, struct fips_val *val)
455527cbf3dSMarko Kovacevic {
456527cbf3dSMarko Kovacevic uint8_t tmp_key[24] = {0};
457527cbf3dSMarko Kovacevic uint32_t len, i;
458527cbf3dSMarko Kovacevic
459527cbf3dSMarko Kovacevic src += strlen(key);
460527cbf3dSMarko Kovacevic
461527cbf3dSMarko Kovacevic len = strlen(src) / 2;
462527cbf3dSMarko Kovacevic
463527cbf3dSMarko Kovacevic if (val->val) {
464527cbf3dSMarko Kovacevic memcpy(tmp_key, val->val, val->len);
465527cbf3dSMarko Kovacevic rte_free(val->val);
466527cbf3dSMarko Kovacevic }
467527cbf3dSMarko Kovacevic
468527cbf3dSMarko Kovacevic val->val = rte_zmalloc(NULL, 24, 0);
469527cbf3dSMarko Kovacevic if (!val->val)
470527cbf3dSMarko Kovacevic return -1;
471527cbf3dSMarko Kovacevic
472527cbf3dSMarko Kovacevic memcpy(val->val, tmp_key, 24);
473527cbf3dSMarko Kovacevic
474527cbf3dSMarko Kovacevic if (strstr(key, KEYS_STR)) {
475527cbf3dSMarko Kovacevic for (i = 0; i < len; i++) {
476527cbf3dSMarko Kovacevic char byte[3] = {src[i * 2], src[i * 2 + 1], '\0'};
477527cbf3dSMarko Kovacevic
478527cbf3dSMarko Kovacevic if (parser_read_uint8_hex(&val->val[i], byte) < 0)
479527cbf3dSMarko Kovacevic goto error_exit;
480527cbf3dSMarko Kovacevic }
481527cbf3dSMarko Kovacevic
482527cbf3dSMarko Kovacevic memcpy(val->val + 8, val->val, 8);
483527cbf3dSMarko Kovacevic memcpy(val->val + 16, val->val, 8);
484527cbf3dSMarko Kovacevic
485527cbf3dSMarko Kovacevic } else if (strstr(key, KEY1_STR)) {
486527cbf3dSMarko Kovacevic for (i = 0; i < len; i++) {
487527cbf3dSMarko Kovacevic char byte[3] = {src[i * 2], src[i * 2 + 1], '\0'};
488527cbf3dSMarko Kovacevic
489527cbf3dSMarko Kovacevic if (parser_read_uint8_hex(&val->val[i], byte) < 0)
490527cbf3dSMarko Kovacevic goto error_exit;
491527cbf3dSMarko Kovacevic }
492527cbf3dSMarko Kovacevic
493527cbf3dSMarko Kovacevic if (info.interim_info.tdes_data.nb_keys == 2)
494527cbf3dSMarko Kovacevic memcpy(val->val + 16, val->val, 8);
495527cbf3dSMarko Kovacevic
496527cbf3dSMarko Kovacevic } else if (strstr(key, KEY2_STR)) {
497527cbf3dSMarko Kovacevic for (i = 0; i < len; i++) {
498527cbf3dSMarko Kovacevic char byte[3] = {src[i * 2], src[i * 2 + 1], '\0'};
499527cbf3dSMarko Kovacevic
500527cbf3dSMarko Kovacevic if (parser_read_uint8_hex(&val->val[i + 8], byte) < 0)
501527cbf3dSMarko Kovacevic goto error_exit;
502527cbf3dSMarko Kovacevic }
503527cbf3dSMarko Kovacevic
504527cbf3dSMarko Kovacevic } else if (strstr(key, KEY3_STR)) {
505527cbf3dSMarko Kovacevic for (i = 0; i < len; i++) {
506527cbf3dSMarko Kovacevic char byte[3] = {src[i * 2], src[i * 2 + 1], '\0'};
507527cbf3dSMarko Kovacevic
508527cbf3dSMarko Kovacevic if (parser_read_uint8_hex(&val->val[i + 16], byte) < 0)
509527cbf3dSMarko Kovacevic goto error_exit;
510527cbf3dSMarko Kovacevic }
511527cbf3dSMarko Kovacevic } else
512527cbf3dSMarko Kovacevic return -EINVAL;
513527cbf3dSMarko Kovacevic
514527cbf3dSMarko Kovacevic val->len = 24;
515527cbf3dSMarko Kovacevic
516527cbf3dSMarko Kovacevic return 0;
517527cbf3dSMarko Kovacevic
518527cbf3dSMarko Kovacevic error_exit:
519527cbf3dSMarko Kovacevic rte_free(val->val);
520527cbf3dSMarko Kovacevic memset(val, 0, sizeof(*val));
521527cbf3dSMarko Kovacevic return -EINVAL;
522527cbf3dSMarko Kovacevic }
523527cbf3dSMarko Kovacevic
524527cbf3dSMarko Kovacevic static int
parse_test_tdes_writeback(struct fips_val * val)525527cbf3dSMarko Kovacevic parse_test_tdes_writeback(struct fips_val *val)
526527cbf3dSMarko Kovacevic {
527527cbf3dSMarko Kovacevic
528527cbf3dSMarko Kovacevic if (info.op == FIPS_TEST_ENC_AUTH_GEN)
529527cbf3dSMarko Kovacevic fprintf(info.fp_wr, "%s", CT_STR);
530527cbf3dSMarko Kovacevic else
531527cbf3dSMarko Kovacevic fprintf(info.fp_wr, "%s", PT_STR);
532527cbf3dSMarko Kovacevic
533527cbf3dSMarko Kovacevic parse_write_hex_str(val);
534527cbf3dSMarko Kovacevic
535527cbf3dSMarko Kovacevic return 0;
536527cbf3dSMarko Kovacevic
537527cbf3dSMarko Kovacevic }
538527cbf3dSMarko Kovacevic
539527cbf3dSMarko Kovacevic static int
writeback_tdes_hex_str(const char * key,char * dst,struct fips_val * val)540527cbf3dSMarko Kovacevic writeback_tdes_hex_str(const char *key, char *dst, struct fips_val *val)
541527cbf3dSMarko Kovacevic {
54286ce81afSMarko Kovacevic struct fips_val tmp_val = {0};
543527cbf3dSMarko Kovacevic
544527cbf3dSMarko Kovacevic tmp_val.len = 8;
545527cbf3dSMarko Kovacevic
546527cbf3dSMarko Kovacevic if (strstr(key, KEY1_STR))
547527cbf3dSMarko Kovacevic tmp_val.val = val->val;
548527cbf3dSMarko Kovacevic else if (strstr(key, KEY2_STR))
549527cbf3dSMarko Kovacevic tmp_val.val = val->val + 8;
550527cbf3dSMarko Kovacevic else if (strstr(key, KEY3_STR))
551527cbf3dSMarko Kovacevic tmp_val.val = val->val + 16;
55275b3dddfSChaitanya Babu Talluri else
55375b3dddfSChaitanya Babu Talluri return -EINVAL;
554527cbf3dSMarko Kovacevic
555527cbf3dSMarko Kovacevic return writeback_hex_str(key, dst, &tmp_val);
556527cbf3dSMarko Kovacevic }
557527cbf3dSMarko Kovacevic
558527cbf3dSMarko Kovacevic static int
rsp_test_tdes_check(struct fips_val * val)559527cbf3dSMarko Kovacevic rsp_test_tdes_check(struct fips_val *val)
560527cbf3dSMarko Kovacevic {
561527cbf3dSMarko Kovacevic struct fips_val *data;
562527cbf3dSMarko Kovacevic
563527cbf3dSMarko Kovacevic if (info.op == FIPS_TEST_ENC_AUTH_GEN)
564527cbf3dSMarko Kovacevic data = &vec.ct;
565527cbf3dSMarko Kovacevic else
566527cbf3dSMarko Kovacevic data = &vec.pt;
567527cbf3dSMarko Kovacevic
568527cbf3dSMarko Kovacevic if (memcmp(val->val, data->val, val->len) == 0)
569527cbf3dSMarko Kovacevic fprintf(info.fp_wr, "Success\n");
570527cbf3dSMarko Kovacevic else
571527cbf3dSMarko Kovacevic fprintf(info.fp_wr, "Failed\n");
572527cbf3dSMarko Kovacevic
573527cbf3dSMarko Kovacevic return 0;
574527cbf3dSMarko Kovacevic }
575527cbf3dSMarko Kovacevic
576527cbf3dSMarko Kovacevic int
parse_test_tdes_init(void)577527cbf3dSMarko Kovacevic parse_test_tdes_init(void)
578527cbf3dSMarko Kovacevic {
579527cbf3dSMarko Kovacevic uint32_t i;
580527cbf3dSMarko Kovacevic
581527cbf3dSMarko Kovacevic for (i = 0; i < info.nb_vec_lines; i++) {
582527cbf3dSMarko Kovacevic char *line = info.vec[i];
583527cbf3dSMarko Kovacevic uint32_t j;
584527cbf3dSMarko Kovacevic
585527cbf3dSMarko Kovacevic if (strstr(line, TEST_CBCI_KEY))
586527cbf3dSMarko Kovacevic return -EPERM;
587527cbf3dSMarko Kovacevic
588527cbf3dSMarko Kovacevic for (j = 0; j < RTE_DIM(test_types); j++)
589527cbf3dSMarko Kovacevic if (strstr(line, test_types[j].desc)) {
590527cbf3dSMarko Kovacevic info.interim_info.tdes_data.test_type =
591527cbf3dSMarko Kovacevic test_types[j].type;
592efe3a8dbSMichael Shamis if (strstr(line, TEST_TYPE_ECB_KEY))
593efe3a8dbSMichael Shamis info.interim_info.tdes_data.test_mode =
594efe3a8dbSMichael Shamis TDES_MODE_ECB;
595efe3a8dbSMichael Shamis else
596efe3a8dbSMichael Shamis info.interim_info.tdes_data.test_mode =
597efe3a8dbSMichael Shamis TDES_MODE_CBC;
598527cbf3dSMarko Kovacevic break;
599527cbf3dSMarko Kovacevic }
600527cbf3dSMarko Kovacevic }
601527cbf3dSMarko Kovacevic
602527cbf3dSMarko Kovacevic info.parse_writeback = parse_test_tdes_writeback;
603527cbf3dSMarko Kovacevic info.callbacks = tdes_tests_vectors;
604527cbf3dSMarko Kovacevic info.interim_callbacks = tdes_tests_interim_vectors;
605527cbf3dSMarko Kovacevic info.writeback_callbacks = tdes_writeback_callbacks;
606527cbf3dSMarko Kovacevic info.kat_check = rsp_test_tdes_check;
607527cbf3dSMarko Kovacevic
608527cbf3dSMarko Kovacevic return 0;
609527cbf3dSMarko Kovacevic }
610