xref: /dpdk/examples/fips_validation/fips_validation.h (revision 8ee030b40d929196d14d38a39e2f5c846e4b67ee)
13d0fad56SMarko Kovacevic /* SPDX-License-Identifier: BSD-3-Clause
23d0fad56SMarko Kovacevic  * Copyright(c) 2018 Intel Corporation
33d0fad56SMarko Kovacevic  */
43d0fad56SMarko Kovacevic 
53d0fad56SMarko Kovacevic #ifndef _FIPS_VALIDATION_H_
63d0fad56SMarko Kovacevic #define _FIPS_VALIDATION_H_
73d0fad56SMarko Kovacevic 
88d70a194SDavid Marchand #ifdef USE_JANSSON
9f556293fSBrandon Lo #include <jansson.h>
108d70a194SDavid Marchand #endif /* USE_JANSSON */
11f556293fSBrandon Lo 
123d0fad56SMarko Kovacevic #define FIPS_PARSE_ERR(fmt, args)					\
133d0fad56SMarko Kovacevic 	RTE_LOG(ERR, USER1, "FIPS parse error" ## fmt ## "\n", ## args)
143d0fad56SMarko Kovacevic 
153d0fad56SMarko Kovacevic #define ERR_MSG_SIZE		128
163d0fad56SMarko Kovacevic #define MAX_CASE_LINE		15
173d0fad56SMarko Kovacevic #define MAX_LINE_CHAR		204800 /*< max number of characters per line */
183d0fad56SMarko Kovacevic #define MAX_NB_TESTS		10240
19952e10cdSFan Zhang #define DEF_MBUF_SEG_SIZE	(UINT16_MAX - sizeof(struct rte_mbuf) - \
20952e10cdSFan Zhang 				RTE_PKTMBUF_HEADROOM)
213d0fad56SMarko Kovacevic #define MAX_STRING_SIZE		64
229275af3bSOlivier Matz #define MAX_FILE_NAME_SIZE	256
23f4797baeSDamian Nowak #define MAX_DIGEST_SIZE		64
243d0fad56SMarko Kovacevic 
253d0fad56SMarko Kovacevic #define POSITIVE_TEST		0
263d0fad56SMarko Kovacevic #define NEGATIVE_TEST		-1
273d0fad56SMarko Kovacevic 
28f556293fSBrandon Lo #define REQ_FILE_PREFIX		"req"
29f556293fSBrandon Lo #define RSP_FILE_PREFIX		"rsp"
30f556293fSBrandon Lo #define FAX_FILE_PREFIX		"fax"
31f556293fSBrandon Lo #define JSON_FILE_PREFIX	"json"
32f556293fSBrandon Lo 
33f556293fSBrandon Lo #define ACVVERSION			"1.0"
343d0fad56SMarko Kovacevic 
353d0fad56SMarko Kovacevic enum fips_test_algorithms {
36cd255ccfSMarko Kovacevic 		FIPS_TEST_ALGO_AES = 0,
3775777166SGowrishankar Muthukrishnan 		FIPS_TEST_ALGO_AES_CBC,
38c8956fd2SBrian Dooley 		FIPS_TEST_ALGO_AES_CTR,
394aaad299SMarko Kovacevic 		FIPS_TEST_ALGO_AES_GCM,
40e27268bdSBrian Dooley 		FIPS_TEST_ALGO_AES_GMAC,
41ac026f46SMarko Kovacevic 		FIPS_TEST_ALGO_AES_CMAC,
42305921f4SMarko Kovacevic 		FIPS_TEST_ALGO_AES_CCM,
43f8e431edSGowrishankar Muthukrishnan 		FIPS_TEST_ALGO_AES_XTS,
44f64adb67SMarko Kovacevic 		FIPS_TEST_ALGO_HMAC,
45527cbf3dSMarko Kovacevic 		FIPS_TEST_ALGO_TDES,
46f4797baeSDamian Nowak 		FIPS_TEST_ALGO_SHA,
4736128a67SGowrishankar Muthukrishnan 		FIPS_TEST_ALGO_RSA,
483d0fad56SMarko Kovacevic 		FIPS_TEST_ALGO_MAX
493d0fad56SMarko Kovacevic };
503d0fad56SMarko Kovacevic 
513d0fad56SMarko Kovacevic enum file_types {
523d0fad56SMarko Kovacevic 	FIPS_TYPE_REQ = 1,
533d0fad56SMarko Kovacevic 	FIPS_TYPE_FAX,
54f556293fSBrandon Lo 	FIPS_TYPE_RSP,
55f556293fSBrandon Lo 	FIPS_TYPE_JSON,
563d0fad56SMarko Kovacevic };
573d0fad56SMarko Kovacevic 
583d0fad56SMarko Kovacevic enum fips_test_op {
593d0fad56SMarko Kovacevic 	FIPS_TEST_ENC_AUTH_GEN = 1,
603d0fad56SMarko Kovacevic 	FIPS_TEST_DEC_AUTH_VERIF,
6136128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_KEYGEN,
6236128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_SIGGEN,
6336128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_SIGVER
643d0fad56SMarko Kovacevic };
653d0fad56SMarko Kovacevic 
663d0fad56SMarko Kovacevic #define MAX_LINE_PER_VECTOR            16
673d0fad56SMarko Kovacevic 
683d0fad56SMarko Kovacevic struct fips_val {
693d0fad56SMarko Kovacevic 	uint8_t *val;
703d0fad56SMarko Kovacevic 	uint32_t len;
713d0fad56SMarko Kovacevic };
723d0fad56SMarko Kovacevic 
733d0fad56SMarko Kovacevic struct fips_test_vector {
743d0fad56SMarko Kovacevic 	union {
753d0fad56SMarko Kovacevic 		struct {
763d0fad56SMarko Kovacevic 			struct fips_val key;
773d0fad56SMarko Kovacevic 			struct fips_val digest;
783d0fad56SMarko Kovacevic 			struct fips_val auth_aad;
793d0fad56SMarko Kovacevic 			struct fips_val aad;
803d0fad56SMarko Kovacevic 		} cipher_auth;
813d0fad56SMarko Kovacevic 		struct {
823d0fad56SMarko Kovacevic 			struct fips_val key;
833d0fad56SMarko Kovacevic 			struct fips_val digest;
843d0fad56SMarko Kovacevic 			struct fips_val aad;
853d0fad56SMarko Kovacevic 		} aead;
863d0fad56SMarko Kovacevic 	};
8736128a67SGowrishankar Muthukrishnan 	struct {
8836128a67SGowrishankar Muthukrishnan 		struct fips_val seed;
8936128a67SGowrishankar Muthukrishnan 		struct fips_val signature;
9036128a67SGowrishankar Muthukrishnan 		struct fips_val e;
9136128a67SGowrishankar Muthukrishnan 		struct fips_val n;
9236128a67SGowrishankar Muthukrishnan 		struct fips_val d;
9336128a67SGowrishankar Muthukrishnan 		struct fips_val p;
9436128a67SGowrishankar Muthukrishnan 		struct fips_val q;
9536128a67SGowrishankar Muthukrishnan 		struct fips_val dp;
9636128a67SGowrishankar Muthukrishnan 		struct fips_val dq;
9736128a67SGowrishankar Muthukrishnan 		struct fips_val qinv;
9836128a67SGowrishankar Muthukrishnan 	} rsa;
993d0fad56SMarko Kovacevic 
1003d0fad56SMarko Kovacevic 	struct fips_val pt;
1013d0fad56SMarko Kovacevic 	struct fips_val ct;
1023d0fad56SMarko Kovacevic 	struct fips_val iv;
1033d0fad56SMarko Kovacevic 	enum rte_crypto_op_status status;
1043d0fad56SMarko Kovacevic };
1053d0fad56SMarko Kovacevic 
1063d0fad56SMarko Kovacevic typedef int (*post_prcess_t)(struct fips_val *val);
1073d0fad56SMarko Kovacevic 
1083d0fad56SMarko Kovacevic typedef int (*parse_callback_t)(const char *key, char *text,
1093d0fad56SMarko Kovacevic 		struct fips_val *val);
1103d0fad56SMarko Kovacevic 
1113d0fad56SMarko Kovacevic struct fips_test_callback {
1123d0fad56SMarko Kovacevic 	const char *key;
1133d0fad56SMarko Kovacevic 	parse_callback_t cb;
1143d0fad56SMarko Kovacevic 	struct fips_val *val;
1153d0fad56SMarko Kovacevic };
1163d0fad56SMarko Kovacevic 
117cd255ccfSMarko Kovacevic enum fips_aesavs_test_types {
118cd255ccfSMarko Kovacevic 	AESAVS_TYPE_GFXBOX = 1,
119cd255ccfSMarko Kovacevic 	AESAVS_TYPE_KEYSBOX,
120cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARKEY,
121cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARTXT,
122cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MMT,
123cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MCT,
1248b8546aaSGowrishankar Muthukrishnan 	AESAVS_TYPE_AFT,
125c8956fd2SBrian Dooley 	AESAVS_TYPE_CTR,
126cd255ccfSMarko Kovacevic };
127cd255ccfSMarko Kovacevic 
128527cbf3dSMarko Kovacevic enum fips_tdes_test_types {
129527cbf3dSMarko Kovacevic 	TDES_INVERSE_PERMUTATION = 0,
130527cbf3dSMarko Kovacevic 	TDES_PERMUTATION,
131527cbf3dSMarko Kovacevic 	TDES_SUBSTITUTION_TABLE,
132527cbf3dSMarko Kovacevic 	TDES_VARIABLE_KEY,
133527cbf3dSMarko Kovacevic 	TDES_VARIABLE_TEXT,
134527cbf3dSMarko Kovacevic 	TDES_KAT,
13564569ffaSGowrishankar Muthukrishnan 	TDES_AFT, /* Functional Test */
136527cbf3dSMarko Kovacevic 	TDES_MCT, /* Monte Carlo (Modes) Test */
137527cbf3dSMarko Kovacevic 	TDES_MMT /* Multi block Message Test */
138527cbf3dSMarko Kovacevic };
139527cbf3dSMarko Kovacevic 
140efe3a8dbSMichael Shamis enum fips_tdes_test_mode {
141efe3a8dbSMichael Shamis 	TDES_MODE_CBC = 0,
142efe3a8dbSMichael Shamis 	TDES_MODE_ECB
143efe3a8dbSMichael Shamis };
144efe3a8dbSMichael Shamis 
145305921f4SMarko Kovacevic enum fips_ccm_test_types {
146305921f4SMarko Kovacevic 	CCM_VADT	= 1, /* Variable Associated Data Test */
147305921f4SMarko Kovacevic 	CCM_VPT,		 /* Variable Payload Test */
148305921f4SMarko Kovacevic 	CCM_VNT,		 /* Variable Nonce Test */
149305921f4SMarko Kovacevic 	CCM_VTT,		 /* Variable Tag Test */
150305921f4SMarko Kovacevic 	CCM_DVPT,	 /*  Decryption-Verification Process Test */
151305921f4SMarko Kovacevic };
152305921f4SMarko Kovacevic 
153f4797baeSDamian Nowak enum fips_sha_test_types {
154f4797baeSDamian Nowak 	SHA_KAT = 0,
155d5c24714SGowrishankar Muthukrishnan 	SHA_AFT,
156f4797baeSDamian Nowak 	SHA_MCT
157f4797baeSDamian Nowak };
158f4797baeSDamian Nowak 
15936128a67SGowrishankar Muthukrishnan enum fips_rsa_test_types {
16036128a67SGowrishankar Muthukrishnan 	RSA_AFT = 0,
16136128a67SGowrishankar Muthukrishnan 	RSA_GDT,
16236128a67SGowrishankar Muthukrishnan 	RSA_KAT
16336128a67SGowrishankar Muthukrishnan };
16436128a67SGowrishankar Muthukrishnan 
165cd255ccfSMarko Kovacevic struct aesavs_interim_data {
166cd255ccfSMarko Kovacevic 	enum fips_aesavs_test_types test_type;
167cd255ccfSMarko Kovacevic 	uint32_t cipher_algo;
168cd255ccfSMarko Kovacevic 	uint32_t key_len;
169cd255ccfSMarko Kovacevic };
170cd255ccfSMarko Kovacevic 
171f64adb67SMarko Kovacevic struct hmac_interim_data {
172f64adb67SMarko Kovacevic 	enum rte_crypto_auth_algorithm algo;
173f64adb67SMarko Kovacevic };
174f64adb67SMarko Kovacevic 
175527cbf3dSMarko Kovacevic struct tdes_interim_data {
176527cbf3dSMarko Kovacevic 	enum fips_tdes_test_types test_type;
177efe3a8dbSMichael Shamis 	enum fips_tdes_test_mode test_mode;
178527cbf3dSMarko Kovacevic 	uint32_t nb_keys;
179527cbf3dSMarko Kovacevic };
180527cbf3dSMarko Kovacevic 
181305921f4SMarko Kovacevic struct ccm_interim_data {
182305921f4SMarko Kovacevic 	enum fips_ccm_test_types test_type;
183305921f4SMarko Kovacevic 	uint32_t aad_len;
184305921f4SMarko Kovacevic 	uint32_t pt_len;
185305921f4SMarko Kovacevic 	uint32_t digest_len;
186305921f4SMarko Kovacevic 	uint32_t key_len;
187305921f4SMarko Kovacevic 	uint32_t iv_len;
188305921f4SMarko Kovacevic };
189305921f4SMarko Kovacevic 
190f4797baeSDamian Nowak struct sha_interim_data {
19136128a67SGowrishankar Muthukrishnan 	/* keep algo always on top as it is also used in asym digest */
192f4797baeSDamian Nowak 	enum rte_crypto_auth_algorithm algo;
19336128a67SGowrishankar Muthukrishnan 	enum fips_sha_test_types test_type;
194f4797baeSDamian Nowak };
195f4797baeSDamian Nowak 
196d09abf2dSFan Zhang struct gcm_interim_data {
197d09abf2dSFan Zhang 	uint8_t is_gmac;
198d09abf2dSFan Zhang 	uint8_t gen_iv;
199d09abf2dSFan Zhang };
200d09abf2dSFan Zhang 
201f8e431edSGowrishankar Muthukrishnan enum xts_tweak_modes {
202f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_HEX = 0,
203f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_NUMBER
204f8e431edSGowrishankar Muthukrishnan };
205f8e431edSGowrishankar Muthukrishnan 
206f8e431edSGowrishankar Muthukrishnan struct xts_interim_data {
207f8e431edSGowrishankar Muthukrishnan 	enum xts_tweak_modes tweak_mode;
208f8e431edSGowrishankar Muthukrishnan };
209f8e431edSGowrishankar Muthukrishnan 
21036128a67SGowrishankar Muthukrishnan struct rsa_interim_data {
21136128a67SGowrishankar Muthukrishnan 	enum rte_crypto_auth_algorithm auth;
21236128a67SGowrishankar Muthukrishnan 	uint16_t modulo;
21336128a67SGowrishankar Muthukrishnan 	uint16_t saltlen;
21436128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_padding_type padding;
21536128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_priv_key_type privkey;
216*8ee030b4SGowrishankar Muthukrishnan 	uint8_t random_msg;
21736128a67SGowrishankar Muthukrishnan };
21836128a67SGowrishankar Muthukrishnan 
2198d70a194SDavid Marchand #ifdef USE_JANSSON
2200b65d54fSGowrishankar Muthukrishnan /*
2210b65d54fSGowrishankar Muthukrishnan  * Maximum length of buffer to hold any json string.
2220b65d54fSGowrishankar Muthukrishnan  * Esp, in asym op, modulo bits decide char buffer size.
2230b65d54fSGowrishankar Muthukrishnan  * max = (modulo / 4)
2240b65d54fSGowrishankar Muthukrishnan  */
2250b65d54fSGowrishankar Muthukrishnan #define FIPS_TEST_JSON_BUF_LEN (4096 / 4)
2260b65d54fSGowrishankar Muthukrishnan 
227f556293fSBrandon Lo struct fips_test_json_info {
228f556293fSBrandon Lo 	/* Information used for reading from json */
229f556293fSBrandon Lo 	json_t *json_root;
230f556293fSBrandon Lo 	json_t *json_vector_set;
231f556293fSBrandon Lo 	json_t *json_test_group;
232f556293fSBrandon Lo 	json_t *json_test_case;
233f556293fSBrandon Lo 	/* Location of json write output */
234f556293fSBrandon Lo 	json_t *json_write_root;
235f556293fSBrandon Lo 	json_t *json_write_group;
236f556293fSBrandon Lo 	json_t *json_write_set;
237f556293fSBrandon Lo 	json_t *json_write_case;
238f556293fSBrandon Lo 	/* Other info */
239f556293fSBrandon Lo 	uint8_t is_sample;
240f556293fSBrandon Lo };
2418d70a194SDavid Marchand #endif /* USE_JANSSON */
242f556293fSBrandon Lo 
2433d0fad56SMarko Kovacevic struct fips_test_interim_info {
2443d0fad56SMarko Kovacevic 	FILE *fp_rd;
2453d0fad56SMarko Kovacevic 	FILE *fp_wr;
2463d0fad56SMarko Kovacevic 	enum file_types file_type;
2473d0fad56SMarko Kovacevic 	enum fips_test_algorithms algo;
2483d0fad56SMarko Kovacevic 	char *one_line_text;
2493d0fad56SMarko Kovacevic 	char *vec[MAX_LINE_PER_VECTOR];
25032440cdfSAyuj Verma 	uint32_t vec_start_off;
2513d0fad56SMarko Kovacevic 	uint32_t nb_vec_lines;
2523d0fad56SMarko Kovacevic 	char device_name[MAX_STRING_SIZE];
2539275af3bSOlivier Matz 	char file_name[MAX_FILE_NAME_SIZE];
25479365018SArchana Muniganti 	float version;
2553d0fad56SMarko Kovacevic 
256cd255ccfSMarko Kovacevic 	union {
257cd255ccfSMarko Kovacevic 		struct aesavs_interim_data aes_data;
258f64adb67SMarko Kovacevic 		struct hmac_interim_data hmac_data;
259527cbf3dSMarko Kovacevic 		struct tdes_interim_data tdes_data;
260305921f4SMarko Kovacevic 		struct ccm_interim_data ccm_data;
261f4797baeSDamian Nowak 		struct sha_interim_data sha_data;
262d09abf2dSFan Zhang 		struct gcm_interim_data gcm_data;
263f8e431edSGowrishankar Muthukrishnan 		struct xts_interim_data xts_data;
26436128a67SGowrishankar Muthukrishnan 		struct rsa_interim_data rsa_data;
265cd255ccfSMarko Kovacevic 	} interim_info;
266cd255ccfSMarko Kovacevic 
2673d0fad56SMarko Kovacevic 	enum fips_test_op op;
2683d0fad56SMarko Kovacevic 
2693d0fad56SMarko Kovacevic 	const struct fips_test_callback *callbacks;
2703d0fad56SMarko Kovacevic 	const struct fips_test_callback *interim_callbacks;
2713d0fad56SMarko Kovacevic 	const struct fips_test_callback *writeback_callbacks;
2723d0fad56SMarko Kovacevic 
2730bd998fbSGowrishankar Muthukrishnan 	post_prcess_t parse_interim_writeback;
2743d0fad56SMarko Kovacevic 	post_prcess_t parse_writeback;
2753d0fad56SMarko Kovacevic 	post_prcess_t kat_check;
2763d0fad56SMarko Kovacevic };
2773d0fad56SMarko Kovacevic 
2783d0fad56SMarko Kovacevic extern struct fips_test_vector vec;
2793d0fad56SMarko Kovacevic extern struct fips_test_interim_info info;
2803d0fad56SMarko Kovacevic 
2818d70a194SDavid Marchand #ifdef USE_JANSSON
282f556293fSBrandon Lo extern struct fips_test_json_info json_info;
2838d70a194SDavid Marchand #endif /* USE_JANSSON */
284f556293fSBrandon Lo 
2853d0fad56SMarko Kovacevic int
2863d0fad56SMarko Kovacevic fips_test_init(const char *req_file_path, const char *rsp_file_path,
2873d0fad56SMarko Kovacevic 		const char *device_name);
2883d0fad56SMarko Kovacevic 
2893d0fad56SMarko Kovacevic void
2903d0fad56SMarko Kovacevic fips_test_clear(void);
2913d0fad56SMarko Kovacevic 
2923d0fad56SMarko Kovacevic int
2933d0fad56SMarko Kovacevic fips_test_fetch_one_block(void);
2943d0fad56SMarko Kovacevic 
2953d0fad56SMarko Kovacevic int
2963d0fad56SMarko Kovacevic fips_test_parse_one_case(void);
2973d0fad56SMarko Kovacevic 
2983d0fad56SMarko Kovacevic void
2993d0fad56SMarko Kovacevic fips_test_write_one_case(void);
3003d0fad56SMarko Kovacevic 
3018d70a194SDavid Marchand #ifdef USE_JANSSON
302f556293fSBrandon Lo int
303f556293fSBrandon Lo fips_test_parse_one_json_vector_set(void);
304f556293fSBrandon Lo 
305f556293fSBrandon Lo int
306f556293fSBrandon Lo fips_test_parse_one_json_group(void);
307f556293fSBrandon Lo 
308f556293fSBrandon Lo int
309f556293fSBrandon Lo fips_test_parse_one_json_case(void);
310b09aac2dSBrandon Lo 
311b09aac2dSBrandon Lo int
312b09aac2dSBrandon Lo parse_test_gcm_json_init(void);
313443c93d8SBrandon Lo 
314443c93d8SBrandon Lo int
315443c93d8SBrandon Lo parse_test_hmac_json_init(void);
316443c93d8SBrandon Lo 
317443c93d8SBrandon Lo int
318443c93d8SBrandon Lo parse_test_hmac_json_algorithm(void);
319d3b50557SBrandon Lo 
320d3b50557SBrandon Lo int
321d3b50557SBrandon Lo parse_test_cmac_json_init(void);
3228b8546aaSGowrishankar Muthukrishnan 
3238b8546aaSGowrishankar Muthukrishnan int
3248b8546aaSGowrishankar Muthukrishnan parse_test_aes_json_init(void);
325f8e431edSGowrishankar Muthukrishnan 
326f8e431edSGowrishankar Muthukrishnan int
327f8e431edSGowrishankar Muthukrishnan parse_test_xts_json_init(void);
328d5c24714SGowrishankar Muthukrishnan 
329d5c24714SGowrishankar Muthukrishnan int
330d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_init(void);
331d5c24714SGowrishankar Muthukrishnan 
332d5c24714SGowrishankar Muthukrishnan int
333d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_algorithm(void);
334d5c24714SGowrishankar Muthukrishnan 
335d5c24714SGowrishankar Muthukrishnan int
336d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_test_type(void);
33764569ffaSGowrishankar Muthukrishnan 
33864569ffaSGowrishankar Muthukrishnan int
33964569ffaSGowrishankar Muthukrishnan parse_test_tdes_json_init(void);
34036128a67SGowrishankar Muthukrishnan 
34136128a67SGowrishankar Muthukrishnan int
34236128a67SGowrishankar Muthukrishnan parse_test_rsa_json_init(void);
343*8ee030b4SGowrishankar Muthukrishnan 
344*8ee030b4SGowrishankar Muthukrishnan int
345*8ee030b4SGowrishankar Muthukrishnan fips_test_randomize_message(struct fips_val *msg, struct fips_val *rand);
3468d70a194SDavid Marchand #endif /* USE_JANSSON */
347f556293fSBrandon Lo 
3483d0fad56SMarko Kovacevic int
349cd255ccfSMarko Kovacevic parse_test_aes_init(void);
350cd255ccfSMarko Kovacevic 
351cd255ccfSMarko Kovacevic int
352527cbf3dSMarko Kovacevic parse_test_tdes_init(void);
353527cbf3dSMarko Kovacevic 
354527cbf3dSMarko Kovacevic int
355f64adb67SMarko Kovacevic parse_test_hmac_init(void);
356f64adb67SMarko Kovacevic 
357f64adb67SMarko Kovacevic int
3584aaad299SMarko Kovacevic parse_test_gcm_init(void);
3594aaad299SMarko Kovacevic 
3604aaad299SMarko Kovacevic int
361ac026f46SMarko Kovacevic parse_test_cmac_init(void);
362ac026f46SMarko Kovacevic 
363ac026f46SMarko Kovacevic int
364305921f4SMarko Kovacevic parse_test_ccm_init(void);
365305921f4SMarko Kovacevic 
366305921f4SMarko Kovacevic int
367f4797baeSDamian Nowak parse_test_sha_init(void);
368f4797baeSDamian Nowak 
369f4797baeSDamian Nowak int
370d5a9ea55SSucharitha Sarananaga parse_test_xts_init(void);
371d5a9ea55SSucharitha Sarananaga 
372d5a9ea55SSucharitha Sarananaga int
3733d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
3743d0fad56SMarko Kovacevic 
3753d0fad56SMarko Kovacevic int
3763d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
3773d0fad56SMarko Kovacevic 
3783d0fad56SMarko Kovacevic int
3793d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
3803d0fad56SMarko Kovacevic 
3813d0fad56SMarko Kovacevic int
382fc6e6515SIbtisam Tariq parser_read_uint16(uint16_t *value, const char *p);
383fc6e6515SIbtisam Tariq 
384fc6e6515SIbtisam Tariq int
3853d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
3863d0fad56SMarko Kovacevic 
3873d0fad56SMarko Kovacevic int
3883d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
3893d0fad56SMarko Kovacevic 
3903d0fad56SMarko Kovacevic int
3913d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
3923d0fad56SMarko Kovacevic 
3933d0fad56SMarko Kovacevic int
3943d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
3953d0fad56SMarko Kovacevic 
3963d0fad56SMarko Kovacevic int
3973d0fad56SMarko Kovacevic writeback_hex_str(const char *key, char *dst, struct fips_val *val);
3983d0fad56SMarko Kovacevic 
3993d0fad56SMarko Kovacevic void
4003d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
4013d0fad56SMarko Kovacevic 
4023d0fad56SMarko Kovacevic int
4033d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
4043d0fad56SMarko Kovacevic 
405d09abf2dSFan Zhang typedef int (*fips_test_one_case_t)(void);
406d09abf2dSFan Zhang typedef int (*fips_prepare_op_t)(void);
40736128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_sym_xform_t)(struct rte_crypto_sym_xform *);
40836128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_asym_xform_t)(struct rte_crypto_asym_xform *);
409d09abf2dSFan Zhang 
410d09abf2dSFan Zhang struct fips_test_ops {
41136128a67SGowrishankar Muthukrishnan 	fips_prepare_sym_xform_t prepare_sym_xform;
41236128a67SGowrishankar Muthukrishnan 	fips_prepare_asym_xform_t prepare_asym_xform;
41336128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_sym_op;
41436128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_asym_op;
415d09abf2dSFan Zhang 	fips_test_one_case_t test;
416d09abf2dSFan Zhang };
417d09abf2dSFan Zhang 
418d09abf2dSFan Zhang extern struct fips_test_ops test_ops;
419d09abf2dSFan Zhang 
420d09abf2dSFan Zhang int prepare_aead_op(void);
421d09abf2dSFan Zhang 
422d09abf2dSFan Zhang int prepare_auth_op(void);
423d09abf2dSFan Zhang 
424d09abf2dSFan Zhang int prepare_gcm_xform(struct rte_crypto_sym_xform *xform);
425d09abf2dSFan Zhang 
426d09abf2dSFan Zhang int prepare_gmac_xform(struct rte_crypto_sym_xform *xform);
427d09abf2dSFan Zhang 
4288bc8ba43SGowrishankar Muthukrishnan int parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo);
4298bc8ba43SGowrishankar Muthukrishnan 
4303d0fad56SMarko Kovacevic #endif
431