xref: /dpdk/examples/fips_validation/fips_validation_tdes.c (revision 64569ffa0f739e28a58d9455a863ef71a3686722)
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