xref: /dpdk/examples/fips_validation/fips_validation.h (revision 12ede9ac497fed989a1f4d0357e839cbe7d1e45b)
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,
48b455d261SGowrishankar Muthukrishnan 		FIPS_TEST_ALGO_ECDSA,
49*12ede9acSGowrishankar Muthukrishnan 		FIPS_TEST_ALGO_EDDSA,
503d0fad56SMarko Kovacevic 		FIPS_TEST_ALGO_MAX
513d0fad56SMarko Kovacevic };
523d0fad56SMarko Kovacevic 
533d0fad56SMarko Kovacevic enum file_types {
543d0fad56SMarko Kovacevic 	FIPS_TYPE_REQ = 1,
553d0fad56SMarko Kovacevic 	FIPS_TYPE_FAX,
56f556293fSBrandon Lo 	FIPS_TYPE_RSP,
57f556293fSBrandon Lo 	FIPS_TYPE_JSON,
583d0fad56SMarko Kovacevic };
593d0fad56SMarko Kovacevic 
603d0fad56SMarko Kovacevic enum fips_test_op {
613d0fad56SMarko Kovacevic 	FIPS_TEST_ENC_AUTH_GEN = 1,
623d0fad56SMarko Kovacevic 	FIPS_TEST_DEC_AUTH_VERIF,
6336128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_KEYGEN,
6436128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_SIGGEN,
6536128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_SIGVER
663d0fad56SMarko Kovacevic };
673d0fad56SMarko Kovacevic 
683d0fad56SMarko Kovacevic #define MAX_LINE_PER_VECTOR            16
693d0fad56SMarko Kovacevic 
703d0fad56SMarko Kovacevic struct fips_val {
713d0fad56SMarko Kovacevic 	uint8_t *val;
723d0fad56SMarko Kovacevic 	uint32_t len;
733d0fad56SMarko Kovacevic };
743d0fad56SMarko Kovacevic 
753d0fad56SMarko Kovacevic struct fips_test_vector {
763d0fad56SMarko Kovacevic 	union {
773d0fad56SMarko Kovacevic 		struct {
783d0fad56SMarko Kovacevic 			struct fips_val key;
793d0fad56SMarko Kovacevic 			struct fips_val digest;
803d0fad56SMarko Kovacevic 			struct fips_val auth_aad;
813d0fad56SMarko Kovacevic 			struct fips_val aad;
823d0fad56SMarko Kovacevic 		} cipher_auth;
833d0fad56SMarko Kovacevic 		struct {
843d0fad56SMarko Kovacevic 			struct fips_val key;
853d0fad56SMarko Kovacevic 			struct fips_val digest;
863d0fad56SMarko Kovacevic 			struct fips_val aad;
873d0fad56SMarko Kovacevic 		} aead;
883d0fad56SMarko Kovacevic 	};
8936128a67SGowrishankar Muthukrishnan 	struct {
9036128a67SGowrishankar Muthukrishnan 		struct fips_val seed;
9136128a67SGowrishankar Muthukrishnan 		struct fips_val signature;
9236128a67SGowrishankar Muthukrishnan 		struct fips_val e;
9336128a67SGowrishankar Muthukrishnan 		struct fips_val n;
9436128a67SGowrishankar Muthukrishnan 		struct fips_val d;
9536128a67SGowrishankar Muthukrishnan 		struct fips_val p;
9636128a67SGowrishankar Muthukrishnan 		struct fips_val q;
9736128a67SGowrishankar Muthukrishnan 		struct fips_val dp;
9836128a67SGowrishankar Muthukrishnan 		struct fips_val dq;
9936128a67SGowrishankar Muthukrishnan 		struct fips_val qinv;
10036128a67SGowrishankar Muthukrishnan 	} rsa;
101b455d261SGowrishankar Muthukrishnan 	struct {
102b455d261SGowrishankar Muthukrishnan 		struct fips_val seed;
103b455d261SGowrishankar Muthukrishnan 		struct fips_val pkey;
104b455d261SGowrishankar Muthukrishnan 		struct fips_val qx;
105b455d261SGowrishankar Muthukrishnan 		struct fips_val qy;
106b455d261SGowrishankar Muthukrishnan 		struct fips_val r;
107b455d261SGowrishankar Muthukrishnan 		struct fips_val s;
108b455d261SGowrishankar Muthukrishnan 		struct fips_val k;
109b455d261SGowrishankar Muthukrishnan 	} ecdsa;
110*12ede9acSGowrishankar Muthukrishnan 	struct {
111*12ede9acSGowrishankar Muthukrishnan 		struct fips_val pkey;
112*12ede9acSGowrishankar Muthukrishnan 		struct fips_val q;
113*12ede9acSGowrishankar Muthukrishnan 		struct fips_val ctx;
114*12ede9acSGowrishankar Muthukrishnan 		struct fips_val sign;
115*12ede9acSGowrishankar Muthukrishnan 	} eddsa;
1163d0fad56SMarko Kovacevic 
1173d0fad56SMarko Kovacevic 	struct fips_val pt;
1183d0fad56SMarko Kovacevic 	struct fips_val ct;
1193d0fad56SMarko Kovacevic 	struct fips_val iv;
1203d0fad56SMarko Kovacevic 	enum rte_crypto_op_status status;
1213d0fad56SMarko Kovacevic };
1223d0fad56SMarko Kovacevic 
1233d0fad56SMarko Kovacevic typedef int (*post_prcess_t)(struct fips_val *val);
1243d0fad56SMarko Kovacevic 
1253d0fad56SMarko Kovacevic typedef int (*parse_callback_t)(const char *key, char *text,
1263d0fad56SMarko Kovacevic 		struct fips_val *val);
1273d0fad56SMarko Kovacevic 
1283d0fad56SMarko Kovacevic struct fips_test_callback {
1293d0fad56SMarko Kovacevic 	const char *key;
1303d0fad56SMarko Kovacevic 	parse_callback_t cb;
1313d0fad56SMarko Kovacevic 	struct fips_val *val;
1323d0fad56SMarko Kovacevic };
1333d0fad56SMarko Kovacevic 
134cd255ccfSMarko Kovacevic enum fips_aesavs_test_types {
135cd255ccfSMarko Kovacevic 	AESAVS_TYPE_GFXBOX = 1,
136cd255ccfSMarko Kovacevic 	AESAVS_TYPE_KEYSBOX,
137cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARKEY,
138cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARTXT,
139cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MMT,
140cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MCT,
1418b8546aaSGowrishankar Muthukrishnan 	AESAVS_TYPE_AFT,
142c8956fd2SBrian Dooley 	AESAVS_TYPE_CTR,
143cd255ccfSMarko Kovacevic };
144cd255ccfSMarko Kovacevic 
145527cbf3dSMarko Kovacevic enum fips_tdes_test_types {
146527cbf3dSMarko Kovacevic 	TDES_INVERSE_PERMUTATION = 0,
147527cbf3dSMarko Kovacevic 	TDES_PERMUTATION,
148527cbf3dSMarko Kovacevic 	TDES_SUBSTITUTION_TABLE,
149527cbf3dSMarko Kovacevic 	TDES_VARIABLE_KEY,
150527cbf3dSMarko Kovacevic 	TDES_VARIABLE_TEXT,
151527cbf3dSMarko Kovacevic 	TDES_KAT,
15264569ffaSGowrishankar Muthukrishnan 	TDES_AFT, /* Functional Test */
153527cbf3dSMarko Kovacevic 	TDES_MCT, /* Monte Carlo (Modes) Test */
154527cbf3dSMarko Kovacevic 	TDES_MMT /* Multi block Message Test */
155527cbf3dSMarko Kovacevic };
156527cbf3dSMarko Kovacevic 
157efe3a8dbSMichael Shamis enum fips_tdes_test_mode {
158efe3a8dbSMichael Shamis 	TDES_MODE_CBC = 0,
159efe3a8dbSMichael Shamis 	TDES_MODE_ECB
160efe3a8dbSMichael Shamis };
161efe3a8dbSMichael Shamis 
162305921f4SMarko Kovacevic enum fips_ccm_test_types {
163305921f4SMarko Kovacevic 	CCM_VADT	= 1, /* Variable Associated Data Test */
164305921f4SMarko Kovacevic 	CCM_VPT,		 /* Variable Payload Test */
165305921f4SMarko Kovacevic 	CCM_VNT,		 /* Variable Nonce Test */
166305921f4SMarko Kovacevic 	CCM_VTT,		 /* Variable Tag Test */
167305921f4SMarko Kovacevic 	CCM_DVPT,	 /*  Decryption-Verification Process Test */
168305921f4SMarko Kovacevic };
169305921f4SMarko Kovacevic 
170f4797baeSDamian Nowak enum fips_sha_test_types {
171f4797baeSDamian Nowak 	SHA_KAT = 0,
172d5c24714SGowrishankar Muthukrishnan 	SHA_AFT,
173225f04fbSGowrishankar Muthukrishnan 	SHA_MCT,
174225f04fbSGowrishankar Muthukrishnan 	SHAKE_VOT
175f4797baeSDamian Nowak };
176f4797baeSDamian Nowak 
17736128a67SGowrishankar Muthukrishnan enum fips_rsa_test_types {
17836128a67SGowrishankar Muthukrishnan 	RSA_AFT = 0,
17936128a67SGowrishankar Muthukrishnan 	RSA_GDT,
18036128a67SGowrishankar Muthukrishnan 	RSA_KAT
18136128a67SGowrishankar Muthukrishnan };
18236128a67SGowrishankar Muthukrishnan 
183b455d261SGowrishankar Muthukrishnan enum fips_ecdsa_test_types {
184b455d261SGowrishankar Muthukrishnan 	ECDSA_AFT = 0,
185b455d261SGowrishankar Muthukrishnan };
186b455d261SGowrishankar Muthukrishnan 
187*12ede9acSGowrishankar Muthukrishnan enum fips_eddsa_test_types {
188*12ede9acSGowrishankar Muthukrishnan 	EDDSA_AFT = 0,
189*12ede9acSGowrishankar Muthukrishnan 	EDDSA_BFT
190*12ede9acSGowrishankar Muthukrishnan };
191*12ede9acSGowrishankar Muthukrishnan 
192cd255ccfSMarko Kovacevic struct aesavs_interim_data {
193cd255ccfSMarko Kovacevic 	enum fips_aesavs_test_types test_type;
194cd255ccfSMarko Kovacevic 	uint32_t cipher_algo;
195cd255ccfSMarko Kovacevic 	uint32_t key_len;
196cd255ccfSMarko Kovacevic };
197cd255ccfSMarko Kovacevic 
198f64adb67SMarko Kovacevic struct hmac_interim_data {
199f64adb67SMarko Kovacevic 	enum rte_crypto_auth_algorithm algo;
200f64adb67SMarko Kovacevic };
201f64adb67SMarko Kovacevic 
202527cbf3dSMarko Kovacevic struct tdes_interim_data {
203527cbf3dSMarko Kovacevic 	enum fips_tdes_test_types test_type;
204efe3a8dbSMichael Shamis 	enum fips_tdes_test_mode test_mode;
205527cbf3dSMarko Kovacevic 	uint32_t nb_keys;
206527cbf3dSMarko Kovacevic };
207527cbf3dSMarko Kovacevic 
208305921f4SMarko Kovacevic struct ccm_interim_data {
209305921f4SMarko Kovacevic 	enum fips_ccm_test_types test_type;
210305921f4SMarko Kovacevic 	uint32_t aad_len;
211305921f4SMarko Kovacevic 	uint32_t pt_len;
212305921f4SMarko Kovacevic 	uint32_t digest_len;
213305921f4SMarko Kovacevic 	uint32_t key_len;
214305921f4SMarko Kovacevic 	uint32_t iv_len;
215305921f4SMarko Kovacevic };
216305921f4SMarko Kovacevic 
217f4797baeSDamian Nowak struct sha_interim_data {
21836128a67SGowrishankar Muthukrishnan 	/* keep algo always on top as it is also used in asym digest */
219f4797baeSDamian Nowak 	enum rte_crypto_auth_algorithm algo;
22036128a67SGowrishankar Muthukrishnan 	enum fips_sha_test_types test_type;
221225f04fbSGowrishankar Muthukrishnan 	uint8_t min_outlen;
2221ea7940eSGowrishankar Muthukrishnan 	uint8_t md_blocks;
223f4797baeSDamian Nowak };
224f4797baeSDamian Nowak 
225d09abf2dSFan Zhang struct gcm_interim_data {
226d09abf2dSFan Zhang 	uint8_t is_gmac;
227d09abf2dSFan Zhang 	uint8_t gen_iv;
228d09abf2dSFan Zhang };
229d09abf2dSFan Zhang 
230f8e431edSGowrishankar Muthukrishnan enum xts_tweak_modes {
231f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_HEX = 0,
232f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_NUMBER
233f8e431edSGowrishankar Muthukrishnan };
234f8e431edSGowrishankar Muthukrishnan 
235f8e431edSGowrishankar Muthukrishnan struct xts_interim_data {
236f8e431edSGowrishankar Muthukrishnan 	enum xts_tweak_modes tweak_mode;
237f8e431edSGowrishankar Muthukrishnan };
238f8e431edSGowrishankar Muthukrishnan 
23936128a67SGowrishankar Muthukrishnan struct rsa_interim_data {
24036128a67SGowrishankar Muthukrishnan 	enum rte_crypto_auth_algorithm auth;
24136128a67SGowrishankar Muthukrishnan 	uint16_t modulo;
24236128a67SGowrishankar Muthukrishnan 	uint16_t saltlen;
24336128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_padding_type padding;
24436128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_priv_key_type privkey;
2458ee030b4SGowrishankar Muthukrishnan 	uint8_t random_msg;
24636128a67SGowrishankar Muthukrishnan };
24736128a67SGowrishankar Muthukrishnan 
248b455d261SGowrishankar Muthukrishnan struct ecdsa_interim_data {
249b455d261SGowrishankar Muthukrishnan 	enum rte_crypto_auth_algorithm auth;
250b455d261SGowrishankar Muthukrishnan 	enum rte_crypto_curve_id curve_id;
251b455d261SGowrishankar Muthukrishnan 	uint8_t curve_len;
252b455d261SGowrishankar Muthukrishnan 	uint8_t random_msg;
253b455d261SGowrishankar Muthukrishnan 	uint8_t pubkey_gen;
254b455d261SGowrishankar Muthukrishnan };
255b455d261SGowrishankar Muthukrishnan 
256*12ede9acSGowrishankar Muthukrishnan struct eddsa_interim_data {
257*12ede9acSGowrishankar Muthukrishnan 	enum rte_crypto_curve_id curve_id;
258*12ede9acSGowrishankar Muthukrishnan 	uint8_t curve_len;
259*12ede9acSGowrishankar Muthukrishnan 	uint8_t pubkey_gen;
260*12ede9acSGowrishankar Muthukrishnan 	bool prehash;
261*12ede9acSGowrishankar Muthukrishnan };
262*12ede9acSGowrishankar Muthukrishnan 
2638d70a194SDavid Marchand #ifdef USE_JANSSON
2640b65d54fSGowrishankar Muthukrishnan /*
2650b65d54fSGowrishankar Muthukrishnan  * Maximum length of buffer to hold any json string.
2660b65d54fSGowrishankar Muthukrishnan  * Esp, in asym op, modulo bits decide char buffer size.
2670b65d54fSGowrishankar Muthukrishnan  * max = (modulo / 4)
2680b65d54fSGowrishankar Muthukrishnan  */
269904efb4cSGowrishankar Muthukrishnan #define FIPS_TEST_JSON_BUF_LEN ((4096 / 4) + 1)
2700b65d54fSGowrishankar Muthukrishnan 
271f556293fSBrandon Lo struct fips_test_json_info {
272f556293fSBrandon Lo 	/* Information used for reading from json */
273f556293fSBrandon Lo 	json_t *json_root;
274f556293fSBrandon Lo 	json_t *json_vector_set;
275f556293fSBrandon Lo 	json_t *json_test_group;
276f556293fSBrandon Lo 	json_t *json_test_case;
277f556293fSBrandon Lo 	/* Location of json write output */
278f556293fSBrandon Lo 	json_t *json_write_root;
279f556293fSBrandon Lo 	json_t *json_write_group;
280f556293fSBrandon Lo 	json_t *json_write_set;
281f556293fSBrandon Lo 	json_t *json_write_case;
282f556293fSBrandon Lo 	/* Other info */
283f556293fSBrandon Lo 	uint8_t is_sample;
284f556293fSBrandon Lo };
2858d70a194SDavid Marchand #endif /* USE_JANSSON */
286f556293fSBrandon Lo 
2873d0fad56SMarko Kovacevic struct fips_test_interim_info {
2883d0fad56SMarko Kovacevic 	FILE *fp_rd;
2893d0fad56SMarko Kovacevic 	FILE *fp_wr;
2903d0fad56SMarko Kovacevic 	enum file_types file_type;
2913d0fad56SMarko Kovacevic 	enum fips_test_algorithms algo;
2923d0fad56SMarko Kovacevic 	char *one_line_text;
2933d0fad56SMarko Kovacevic 	char *vec[MAX_LINE_PER_VECTOR];
29432440cdfSAyuj Verma 	uint32_t vec_start_off;
2953d0fad56SMarko Kovacevic 	uint32_t nb_vec_lines;
2963d0fad56SMarko Kovacevic 	char device_name[MAX_STRING_SIZE];
2979275af3bSOlivier Matz 	char file_name[MAX_FILE_NAME_SIZE];
29879365018SArchana Muniganti 	float version;
2993d0fad56SMarko Kovacevic 
300cd255ccfSMarko Kovacevic 	union {
301cd255ccfSMarko Kovacevic 		struct aesavs_interim_data aes_data;
302f64adb67SMarko Kovacevic 		struct hmac_interim_data hmac_data;
303527cbf3dSMarko Kovacevic 		struct tdes_interim_data tdes_data;
304305921f4SMarko Kovacevic 		struct ccm_interim_data ccm_data;
305f4797baeSDamian Nowak 		struct sha_interim_data sha_data;
306d09abf2dSFan Zhang 		struct gcm_interim_data gcm_data;
307f8e431edSGowrishankar Muthukrishnan 		struct xts_interim_data xts_data;
30836128a67SGowrishankar Muthukrishnan 		struct rsa_interim_data rsa_data;
309b455d261SGowrishankar Muthukrishnan 		struct ecdsa_interim_data ecdsa_data;
310*12ede9acSGowrishankar Muthukrishnan 		struct eddsa_interim_data eddsa_data;
311cd255ccfSMarko Kovacevic 	} interim_info;
312cd255ccfSMarko Kovacevic 
3133d0fad56SMarko Kovacevic 	enum fips_test_op op;
3143d0fad56SMarko Kovacevic 
3153d0fad56SMarko Kovacevic 	const struct fips_test_callback *callbacks;
3163d0fad56SMarko Kovacevic 	const struct fips_test_callback *interim_callbacks;
3173d0fad56SMarko Kovacevic 	const struct fips_test_callback *writeback_callbacks;
3183d0fad56SMarko Kovacevic 
3190bd998fbSGowrishankar Muthukrishnan 	post_prcess_t parse_interim_writeback;
320b455d261SGowrishankar Muthukrishnan 	post_prcess_t post_interim_writeback;
3213d0fad56SMarko Kovacevic 	post_prcess_t parse_writeback;
3223d0fad56SMarko Kovacevic 	post_prcess_t kat_check;
3233d0fad56SMarko Kovacevic };
3243d0fad56SMarko Kovacevic 
3253d0fad56SMarko Kovacevic extern struct fips_test_vector vec;
3263d0fad56SMarko Kovacevic extern struct fips_test_interim_info info;
3273d0fad56SMarko Kovacevic 
3288d70a194SDavid Marchand #ifdef USE_JANSSON
329f556293fSBrandon Lo extern struct fips_test_json_info json_info;
3308d70a194SDavid Marchand #endif /* USE_JANSSON */
331f556293fSBrandon Lo 
3323d0fad56SMarko Kovacevic int
3333d0fad56SMarko Kovacevic fips_test_init(const char *req_file_path, const char *rsp_file_path,
3343d0fad56SMarko Kovacevic 		const char *device_name);
3353d0fad56SMarko Kovacevic 
3363d0fad56SMarko Kovacevic void
3373d0fad56SMarko Kovacevic fips_test_clear(void);
3383d0fad56SMarko Kovacevic 
3393d0fad56SMarko Kovacevic int
3403d0fad56SMarko Kovacevic fips_test_fetch_one_block(void);
3413d0fad56SMarko Kovacevic 
3423d0fad56SMarko Kovacevic int
3433d0fad56SMarko Kovacevic fips_test_parse_one_case(void);
3443d0fad56SMarko Kovacevic 
3453d0fad56SMarko Kovacevic void
3463d0fad56SMarko Kovacevic fips_test_write_one_case(void);
3473d0fad56SMarko Kovacevic 
3488d70a194SDavid Marchand #ifdef USE_JANSSON
349f556293fSBrandon Lo int
350f556293fSBrandon Lo fips_test_parse_one_json_vector_set(void);
351f556293fSBrandon Lo 
352f556293fSBrandon Lo int
353f556293fSBrandon Lo fips_test_parse_one_json_group(void);
354f556293fSBrandon Lo 
355f556293fSBrandon Lo int
356f556293fSBrandon Lo fips_test_parse_one_json_case(void);
357b09aac2dSBrandon Lo 
358b09aac2dSBrandon Lo int
359b09aac2dSBrandon Lo parse_test_gcm_json_init(void);
360443c93d8SBrandon Lo 
361443c93d8SBrandon Lo int
36255a7050eSGowrishankar Muthukrishnan parse_test_ccm_json_init(void);
36355a7050eSGowrishankar Muthukrishnan 
36455a7050eSGowrishankar Muthukrishnan int
365443c93d8SBrandon Lo parse_test_hmac_json_init(void);
366443c93d8SBrandon Lo 
367443c93d8SBrandon Lo int
368443c93d8SBrandon Lo parse_test_hmac_json_algorithm(void);
369d3b50557SBrandon Lo 
370d3b50557SBrandon Lo int
371d3b50557SBrandon Lo parse_test_cmac_json_init(void);
3728b8546aaSGowrishankar Muthukrishnan 
3738b8546aaSGowrishankar Muthukrishnan int
3748b8546aaSGowrishankar Muthukrishnan parse_test_aes_json_init(void);
375f8e431edSGowrishankar Muthukrishnan 
376f8e431edSGowrishankar Muthukrishnan int
377f8e431edSGowrishankar Muthukrishnan parse_test_xts_json_init(void);
378d5c24714SGowrishankar Muthukrishnan 
379d5c24714SGowrishankar Muthukrishnan int
380d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_init(void);
381d5c24714SGowrishankar Muthukrishnan 
382d5c24714SGowrishankar Muthukrishnan int
383d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_algorithm(void);
384d5c24714SGowrishankar Muthukrishnan 
385d5c24714SGowrishankar Muthukrishnan int
386d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_test_type(void);
38764569ffaSGowrishankar Muthukrishnan 
38864569ffaSGowrishankar Muthukrishnan int
38964569ffaSGowrishankar Muthukrishnan parse_test_tdes_json_init(void);
39036128a67SGowrishankar Muthukrishnan 
39136128a67SGowrishankar Muthukrishnan int
39236128a67SGowrishankar Muthukrishnan parse_test_rsa_json_init(void);
3938ee030b4SGowrishankar Muthukrishnan 
3948ee030b4SGowrishankar Muthukrishnan int
395b455d261SGowrishankar Muthukrishnan parse_test_ecdsa_json_init(void);
396b455d261SGowrishankar Muthukrishnan 
397b455d261SGowrishankar Muthukrishnan int
398*12ede9acSGowrishankar Muthukrishnan parse_test_eddsa_json_init(void);
399*12ede9acSGowrishankar Muthukrishnan 
400*12ede9acSGowrishankar Muthukrishnan int
4018ee030b4SGowrishankar Muthukrishnan fips_test_randomize_message(struct fips_val *msg, struct fips_val *rand);
4028d70a194SDavid Marchand #endif /* USE_JANSSON */
403f556293fSBrandon Lo 
4043d0fad56SMarko Kovacevic int
405cd255ccfSMarko Kovacevic parse_test_aes_init(void);
406cd255ccfSMarko Kovacevic 
407cd255ccfSMarko Kovacevic int
408527cbf3dSMarko Kovacevic parse_test_tdes_init(void);
409527cbf3dSMarko Kovacevic 
410527cbf3dSMarko Kovacevic int
411f64adb67SMarko Kovacevic parse_test_hmac_init(void);
412f64adb67SMarko Kovacevic 
413f64adb67SMarko Kovacevic int
4144aaad299SMarko Kovacevic parse_test_gcm_init(void);
4154aaad299SMarko Kovacevic 
4164aaad299SMarko Kovacevic int
417ac026f46SMarko Kovacevic parse_test_cmac_init(void);
418ac026f46SMarko Kovacevic 
419ac026f46SMarko Kovacevic int
420305921f4SMarko Kovacevic parse_test_ccm_init(void);
421305921f4SMarko Kovacevic 
422305921f4SMarko Kovacevic int
423f4797baeSDamian Nowak parse_test_sha_init(void);
424f4797baeSDamian Nowak 
425f4797baeSDamian Nowak int
426d5a9ea55SSucharitha Sarananaga parse_test_xts_init(void);
427d5a9ea55SSucharitha Sarananaga 
428d5a9ea55SSucharitha Sarananaga int
4293d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
4303d0fad56SMarko Kovacevic 
4313d0fad56SMarko Kovacevic int
4323d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
4333d0fad56SMarko Kovacevic 
4343d0fad56SMarko Kovacevic int
4353d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
4363d0fad56SMarko Kovacevic 
4373d0fad56SMarko Kovacevic int
438fc6e6515SIbtisam Tariq parser_read_uint16(uint16_t *value, const char *p);
439fc6e6515SIbtisam Tariq 
440fc6e6515SIbtisam Tariq int
4413d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4423d0fad56SMarko Kovacevic 
4433d0fad56SMarko Kovacevic int
4443d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
4453d0fad56SMarko Kovacevic 
4463d0fad56SMarko Kovacevic int
4473d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
4483d0fad56SMarko Kovacevic 
4493d0fad56SMarko Kovacevic int
4503d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4513d0fad56SMarko Kovacevic 
4523d0fad56SMarko Kovacevic int
4533d0fad56SMarko Kovacevic writeback_hex_str(const char *key, char *dst, struct fips_val *val);
4543d0fad56SMarko Kovacevic 
4553d0fad56SMarko Kovacevic void
4563d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
4573d0fad56SMarko Kovacevic 
4583d0fad56SMarko Kovacevic int
4593d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
4603d0fad56SMarko Kovacevic 
461d09abf2dSFan Zhang typedef int (*fips_test_one_case_t)(void);
462d09abf2dSFan Zhang typedef int (*fips_prepare_op_t)(void);
46336128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_sym_xform_t)(struct rte_crypto_sym_xform *);
46436128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_asym_xform_t)(struct rte_crypto_asym_xform *);
465d09abf2dSFan Zhang 
466d09abf2dSFan Zhang struct fips_test_ops {
46736128a67SGowrishankar Muthukrishnan 	fips_prepare_sym_xform_t prepare_sym_xform;
46836128a67SGowrishankar Muthukrishnan 	fips_prepare_asym_xform_t prepare_asym_xform;
46936128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_sym_op;
47036128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_asym_op;
471d09abf2dSFan Zhang 	fips_test_one_case_t test;
472d09abf2dSFan Zhang };
473d09abf2dSFan Zhang 
474d09abf2dSFan Zhang extern struct fips_test_ops test_ops;
475d09abf2dSFan Zhang 
476d09abf2dSFan Zhang int prepare_aead_op(void);
477d09abf2dSFan Zhang 
478d09abf2dSFan Zhang int prepare_auth_op(void);
479d09abf2dSFan Zhang 
480d09abf2dSFan Zhang int prepare_gcm_xform(struct rte_crypto_sym_xform *xform);
481d09abf2dSFan Zhang 
482d09abf2dSFan Zhang int prepare_gmac_xform(struct rte_crypto_sym_xform *xform);
483d09abf2dSFan Zhang 
4848bc8ba43SGowrishankar Muthukrishnan int parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo);
4858bc8ba43SGowrishankar Muthukrishnan 
4863d0fad56SMarko Kovacevic #endif
487