xref: /dpdk/examples/fips_validation/fips_validation.h (revision 904efb4cba8e661d6a09dc671baabea6d31ea9b3)
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,
493d0fad56SMarko Kovacevic 		FIPS_TEST_ALGO_MAX
503d0fad56SMarko Kovacevic };
513d0fad56SMarko Kovacevic 
523d0fad56SMarko Kovacevic enum file_types {
533d0fad56SMarko Kovacevic 	FIPS_TYPE_REQ = 1,
543d0fad56SMarko Kovacevic 	FIPS_TYPE_FAX,
55f556293fSBrandon Lo 	FIPS_TYPE_RSP,
56f556293fSBrandon Lo 	FIPS_TYPE_JSON,
573d0fad56SMarko Kovacevic };
583d0fad56SMarko Kovacevic 
593d0fad56SMarko Kovacevic enum fips_test_op {
603d0fad56SMarko Kovacevic 	FIPS_TEST_ENC_AUTH_GEN = 1,
613d0fad56SMarko Kovacevic 	FIPS_TEST_DEC_AUTH_VERIF,
6236128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_KEYGEN,
6336128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_SIGGEN,
6436128a67SGowrishankar Muthukrishnan 	FIPS_TEST_ASYM_SIGVER
653d0fad56SMarko Kovacevic };
663d0fad56SMarko Kovacevic 
673d0fad56SMarko Kovacevic #define MAX_LINE_PER_VECTOR            16
683d0fad56SMarko Kovacevic 
693d0fad56SMarko Kovacevic struct fips_val {
703d0fad56SMarko Kovacevic 	uint8_t *val;
713d0fad56SMarko Kovacevic 	uint32_t len;
723d0fad56SMarko Kovacevic };
733d0fad56SMarko Kovacevic 
743d0fad56SMarko Kovacevic struct fips_test_vector {
753d0fad56SMarko Kovacevic 	union {
763d0fad56SMarko Kovacevic 		struct {
773d0fad56SMarko Kovacevic 			struct fips_val key;
783d0fad56SMarko Kovacevic 			struct fips_val digest;
793d0fad56SMarko Kovacevic 			struct fips_val auth_aad;
803d0fad56SMarko Kovacevic 			struct fips_val aad;
813d0fad56SMarko Kovacevic 		} cipher_auth;
823d0fad56SMarko Kovacevic 		struct {
833d0fad56SMarko Kovacevic 			struct fips_val key;
843d0fad56SMarko Kovacevic 			struct fips_val digest;
853d0fad56SMarko Kovacevic 			struct fips_val aad;
863d0fad56SMarko Kovacevic 		} aead;
873d0fad56SMarko Kovacevic 	};
8836128a67SGowrishankar Muthukrishnan 	struct {
8936128a67SGowrishankar Muthukrishnan 		struct fips_val seed;
9036128a67SGowrishankar Muthukrishnan 		struct fips_val signature;
9136128a67SGowrishankar Muthukrishnan 		struct fips_val e;
9236128a67SGowrishankar Muthukrishnan 		struct fips_val n;
9336128a67SGowrishankar Muthukrishnan 		struct fips_val d;
9436128a67SGowrishankar Muthukrishnan 		struct fips_val p;
9536128a67SGowrishankar Muthukrishnan 		struct fips_val q;
9636128a67SGowrishankar Muthukrishnan 		struct fips_val dp;
9736128a67SGowrishankar Muthukrishnan 		struct fips_val dq;
9836128a67SGowrishankar Muthukrishnan 		struct fips_val qinv;
9936128a67SGowrishankar Muthukrishnan 	} rsa;
100b455d261SGowrishankar Muthukrishnan 	struct {
101b455d261SGowrishankar Muthukrishnan 		struct fips_val seed;
102b455d261SGowrishankar Muthukrishnan 		struct fips_val pkey;
103b455d261SGowrishankar Muthukrishnan 		struct fips_val qx;
104b455d261SGowrishankar Muthukrishnan 		struct fips_val qy;
105b455d261SGowrishankar Muthukrishnan 		struct fips_val r;
106b455d261SGowrishankar Muthukrishnan 		struct fips_val s;
107b455d261SGowrishankar Muthukrishnan 		struct fips_val k;
108b455d261SGowrishankar Muthukrishnan 	} ecdsa;
1093d0fad56SMarko Kovacevic 
1103d0fad56SMarko Kovacevic 	struct fips_val pt;
1113d0fad56SMarko Kovacevic 	struct fips_val ct;
1123d0fad56SMarko Kovacevic 	struct fips_val iv;
1133d0fad56SMarko Kovacevic 	enum rte_crypto_op_status status;
1143d0fad56SMarko Kovacevic };
1153d0fad56SMarko Kovacevic 
1163d0fad56SMarko Kovacevic typedef int (*post_prcess_t)(struct fips_val *val);
1173d0fad56SMarko Kovacevic 
1183d0fad56SMarko Kovacevic typedef int (*parse_callback_t)(const char *key, char *text,
1193d0fad56SMarko Kovacevic 		struct fips_val *val);
1203d0fad56SMarko Kovacevic 
1213d0fad56SMarko Kovacevic struct fips_test_callback {
1223d0fad56SMarko Kovacevic 	const char *key;
1233d0fad56SMarko Kovacevic 	parse_callback_t cb;
1243d0fad56SMarko Kovacevic 	struct fips_val *val;
1253d0fad56SMarko Kovacevic };
1263d0fad56SMarko Kovacevic 
127cd255ccfSMarko Kovacevic enum fips_aesavs_test_types {
128cd255ccfSMarko Kovacevic 	AESAVS_TYPE_GFXBOX = 1,
129cd255ccfSMarko Kovacevic 	AESAVS_TYPE_KEYSBOX,
130cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARKEY,
131cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARTXT,
132cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MMT,
133cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MCT,
1348b8546aaSGowrishankar Muthukrishnan 	AESAVS_TYPE_AFT,
135c8956fd2SBrian Dooley 	AESAVS_TYPE_CTR,
136cd255ccfSMarko Kovacevic };
137cd255ccfSMarko Kovacevic 
138527cbf3dSMarko Kovacevic enum fips_tdes_test_types {
139527cbf3dSMarko Kovacevic 	TDES_INVERSE_PERMUTATION = 0,
140527cbf3dSMarko Kovacevic 	TDES_PERMUTATION,
141527cbf3dSMarko Kovacevic 	TDES_SUBSTITUTION_TABLE,
142527cbf3dSMarko Kovacevic 	TDES_VARIABLE_KEY,
143527cbf3dSMarko Kovacevic 	TDES_VARIABLE_TEXT,
144527cbf3dSMarko Kovacevic 	TDES_KAT,
14564569ffaSGowrishankar Muthukrishnan 	TDES_AFT, /* Functional Test */
146527cbf3dSMarko Kovacevic 	TDES_MCT, /* Monte Carlo (Modes) Test */
147527cbf3dSMarko Kovacevic 	TDES_MMT /* Multi block Message Test */
148527cbf3dSMarko Kovacevic };
149527cbf3dSMarko Kovacevic 
150efe3a8dbSMichael Shamis enum fips_tdes_test_mode {
151efe3a8dbSMichael Shamis 	TDES_MODE_CBC = 0,
152efe3a8dbSMichael Shamis 	TDES_MODE_ECB
153efe3a8dbSMichael Shamis };
154efe3a8dbSMichael Shamis 
155305921f4SMarko Kovacevic enum fips_ccm_test_types {
156305921f4SMarko Kovacevic 	CCM_VADT	= 1, /* Variable Associated Data Test */
157305921f4SMarko Kovacevic 	CCM_VPT,		 /* Variable Payload Test */
158305921f4SMarko Kovacevic 	CCM_VNT,		 /* Variable Nonce Test */
159305921f4SMarko Kovacevic 	CCM_VTT,		 /* Variable Tag Test */
160305921f4SMarko Kovacevic 	CCM_DVPT,	 /*  Decryption-Verification Process Test */
161305921f4SMarko Kovacevic };
162305921f4SMarko Kovacevic 
163f4797baeSDamian Nowak enum fips_sha_test_types {
164f4797baeSDamian Nowak 	SHA_KAT = 0,
165d5c24714SGowrishankar Muthukrishnan 	SHA_AFT,
166225f04fbSGowrishankar Muthukrishnan 	SHA_MCT,
167225f04fbSGowrishankar Muthukrishnan 	SHAKE_VOT
168f4797baeSDamian Nowak };
169f4797baeSDamian Nowak 
17036128a67SGowrishankar Muthukrishnan enum fips_rsa_test_types {
17136128a67SGowrishankar Muthukrishnan 	RSA_AFT = 0,
17236128a67SGowrishankar Muthukrishnan 	RSA_GDT,
17336128a67SGowrishankar Muthukrishnan 	RSA_KAT
17436128a67SGowrishankar Muthukrishnan };
17536128a67SGowrishankar Muthukrishnan 
176b455d261SGowrishankar Muthukrishnan enum fips_ecdsa_test_types {
177b455d261SGowrishankar Muthukrishnan 	ECDSA_AFT = 0,
178b455d261SGowrishankar Muthukrishnan };
179b455d261SGowrishankar Muthukrishnan 
180cd255ccfSMarko Kovacevic struct aesavs_interim_data {
181cd255ccfSMarko Kovacevic 	enum fips_aesavs_test_types test_type;
182cd255ccfSMarko Kovacevic 	uint32_t cipher_algo;
183cd255ccfSMarko Kovacevic 	uint32_t key_len;
184cd255ccfSMarko Kovacevic };
185cd255ccfSMarko Kovacevic 
186f64adb67SMarko Kovacevic struct hmac_interim_data {
187f64adb67SMarko Kovacevic 	enum rte_crypto_auth_algorithm algo;
188f64adb67SMarko Kovacevic };
189f64adb67SMarko Kovacevic 
190527cbf3dSMarko Kovacevic struct tdes_interim_data {
191527cbf3dSMarko Kovacevic 	enum fips_tdes_test_types test_type;
192efe3a8dbSMichael Shamis 	enum fips_tdes_test_mode test_mode;
193527cbf3dSMarko Kovacevic 	uint32_t nb_keys;
194527cbf3dSMarko Kovacevic };
195527cbf3dSMarko Kovacevic 
196305921f4SMarko Kovacevic struct ccm_interim_data {
197305921f4SMarko Kovacevic 	enum fips_ccm_test_types test_type;
198305921f4SMarko Kovacevic 	uint32_t aad_len;
199305921f4SMarko Kovacevic 	uint32_t pt_len;
200305921f4SMarko Kovacevic 	uint32_t digest_len;
201305921f4SMarko Kovacevic 	uint32_t key_len;
202305921f4SMarko Kovacevic 	uint32_t iv_len;
203305921f4SMarko Kovacevic };
204305921f4SMarko Kovacevic 
205f4797baeSDamian Nowak struct sha_interim_data {
20636128a67SGowrishankar Muthukrishnan 	/* keep algo always on top as it is also used in asym digest */
207f4797baeSDamian Nowak 	enum rte_crypto_auth_algorithm algo;
20836128a67SGowrishankar Muthukrishnan 	enum fips_sha_test_types test_type;
209225f04fbSGowrishankar Muthukrishnan 	uint8_t min_outlen;
2101ea7940eSGowrishankar Muthukrishnan 	uint8_t md_blocks;
211f4797baeSDamian Nowak };
212f4797baeSDamian Nowak 
213d09abf2dSFan Zhang struct gcm_interim_data {
214d09abf2dSFan Zhang 	uint8_t is_gmac;
215d09abf2dSFan Zhang 	uint8_t gen_iv;
216d09abf2dSFan Zhang };
217d09abf2dSFan Zhang 
218f8e431edSGowrishankar Muthukrishnan enum xts_tweak_modes {
219f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_HEX = 0,
220f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_NUMBER
221f8e431edSGowrishankar Muthukrishnan };
222f8e431edSGowrishankar Muthukrishnan 
223f8e431edSGowrishankar Muthukrishnan struct xts_interim_data {
224f8e431edSGowrishankar Muthukrishnan 	enum xts_tweak_modes tweak_mode;
225f8e431edSGowrishankar Muthukrishnan };
226f8e431edSGowrishankar Muthukrishnan 
22736128a67SGowrishankar Muthukrishnan struct rsa_interim_data {
22836128a67SGowrishankar Muthukrishnan 	enum rte_crypto_auth_algorithm auth;
22936128a67SGowrishankar Muthukrishnan 	uint16_t modulo;
23036128a67SGowrishankar Muthukrishnan 	uint16_t saltlen;
23136128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_padding_type padding;
23236128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_priv_key_type privkey;
2338ee030b4SGowrishankar Muthukrishnan 	uint8_t random_msg;
23436128a67SGowrishankar Muthukrishnan };
23536128a67SGowrishankar Muthukrishnan 
236b455d261SGowrishankar Muthukrishnan struct ecdsa_interim_data {
237b455d261SGowrishankar Muthukrishnan 	enum rte_crypto_auth_algorithm auth;
238b455d261SGowrishankar Muthukrishnan 	enum rte_crypto_curve_id curve_id;
239b455d261SGowrishankar Muthukrishnan 	uint8_t curve_len;
240b455d261SGowrishankar Muthukrishnan 	uint8_t random_msg;
241b455d261SGowrishankar Muthukrishnan 	uint8_t pubkey_gen;
242b455d261SGowrishankar Muthukrishnan };
243b455d261SGowrishankar Muthukrishnan 
2448d70a194SDavid Marchand #ifdef USE_JANSSON
2450b65d54fSGowrishankar Muthukrishnan /*
2460b65d54fSGowrishankar Muthukrishnan  * Maximum length of buffer to hold any json string.
2470b65d54fSGowrishankar Muthukrishnan  * Esp, in asym op, modulo bits decide char buffer size.
2480b65d54fSGowrishankar Muthukrishnan  * max = (modulo / 4)
2490b65d54fSGowrishankar Muthukrishnan  */
250*904efb4cSGowrishankar Muthukrishnan #define FIPS_TEST_JSON_BUF_LEN ((4096 / 4) + 1)
2510b65d54fSGowrishankar Muthukrishnan 
252f556293fSBrandon Lo struct fips_test_json_info {
253f556293fSBrandon Lo 	/* Information used for reading from json */
254f556293fSBrandon Lo 	json_t *json_root;
255f556293fSBrandon Lo 	json_t *json_vector_set;
256f556293fSBrandon Lo 	json_t *json_test_group;
257f556293fSBrandon Lo 	json_t *json_test_case;
258f556293fSBrandon Lo 	/* Location of json write output */
259f556293fSBrandon Lo 	json_t *json_write_root;
260f556293fSBrandon Lo 	json_t *json_write_group;
261f556293fSBrandon Lo 	json_t *json_write_set;
262f556293fSBrandon Lo 	json_t *json_write_case;
263f556293fSBrandon Lo 	/* Other info */
264f556293fSBrandon Lo 	uint8_t is_sample;
265f556293fSBrandon Lo };
2668d70a194SDavid Marchand #endif /* USE_JANSSON */
267f556293fSBrandon Lo 
2683d0fad56SMarko Kovacevic struct fips_test_interim_info {
2693d0fad56SMarko Kovacevic 	FILE *fp_rd;
2703d0fad56SMarko Kovacevic 	FILE *fp_wr;
2713d0fad56SMarko Kovacevic 	enum file_types file_type;
2723d0fad56SMarko Kovacevic 	enum fips_test_algorithms algo;
2733d0fad56SMarko Kovacevic 	char *one_line_text;
2743d0fad56SMarko Kovacevic 	char *vec[MAX_LINE_PER_VECTOR];
27532440cdfSAyuj Verma 	uint32_t vec_start_off;
2763d0fad56SMarko Kovacevic 	uint32_t nb_vec_lines;
2773d0fad56SMarko Kovacevic 	char device_name[MAX_STRING_SIZE];
2789275af3bSOlivier Matz 	char file_name[MAX_FILE_NAME_SIZE];
27979365018SArchana Muniganti 	float version;
2803d0fad56SMarko Kovacevic 
281cd255ccfSMarko Kovacevic 	union {
282cd255ccfSMarko Kovacevic 		struct aesavs_interim_data aes_data;
283f64adb67SMarko Kovacevic 		struct hmac_interim_data hmac_data;
284527cbf3dSMarko Kovacevic 		struct tdes_interim_data tdes_data;
285305921f4SMarko Kovacevic 		struct ccm_interim_data ccm_data;
286f4797baeSDamian Nowak 		struct sha_interim_data sha_data;
287d09abf2dSFan Zhang 		struct gcm_interim_data gcm_data;
288f8e431edSGowrishankar Muthukrishnan 		struct xts_interim_data xts_data;
28936128a67SGowrishankar Muthukrishnan 		struct rsa_interim_data rsa_data;
290b455d261SGowrishankar Muthukrishnan 		struct ecdsa_interim_data ecdsa_data;
291cd255ccfSMarko Kovacevic 	} interim_info;
292cd255ccfSMarko Kovacevic 
2933d0fad56SMarko Kovacevic 	enum fips_test_op op;
2943d0fad56SMarko Kovacevic 
2953d0fad56SMarko Kovacevic 	const struct fips_test_callback *callbacks;
2963d0fad56SMarko Kovacevic 	const struct fips_test_callback *interim_callbacks;
2973d0fad56SMarko Kovacevic 	const struct fips_test_callback *writeback_callbacks;
2983d0fad56SMarko Kovacevic 
2990bd998fbSGowrishankar Muthukrishnan 	post_prcess_t parse_interim_writeback;
300b455d261SGowrishankar Muthukrishnan 	post_prcess_t post_interim_writeback;
3013d0fad56SMarko Kovacevic 	post_prcess_t parse_writeback;
3023d0fad56SMarko Kovacevic 	post_prcess_t kat_check;
3033d0fad56SMarko Kovacevic };
3043d0fad56SMarko Kovacevic 
3053d0fad56SMarko Kovacevic extern struct fips_test_vector vec;
3063d0fad56SMarko Kovacevic extern struct fips_test_interim_info info;
3073d0fad56SMarko Kovacevic 
3088d70a194SDavid Marchand #ifdef USE_JANSSON
309f556293fSBrandon Lo extern struct fips_test_json_info json_info;
3108d70a194SDavid Marchand #endif /* USE_JANSSON */
311f556293fSBrandon Lo 
3123d0fad56SMarko Kovacevic int
3133d0fad56SMarko Kovacevic fips_test_init(const char *req_file_path, const char *rsp_file_path,
3143d0fad56SMarko Kovacevic 		const char *device_name);
3153d0fad56SMarko Kovacevic 
3163d0fad56SMarko Kovacevic void
3173d0fad56SMarko Kovacevic fips_test_clear(void);
3183d0fad56SMarko Kovacevic 
3193d0fad56SMarko Kovacevic int
3203d0fad56SMarko Kovacevic fips_test_fetch_one_block(void);
3213d0fad56SMarko Kovacevic 
3223d0fad56SMarko Kovacevic int
3233d0fad56SMarko Kovacevic fips_test_parse_one_case(void);
3243d0fad56SMarko Kovacevic 
3253d0fad56SMarko Kovacevic void
3263d0fad56SMarko Kovacevic fips_test_write_one_case(void);
3273d0fad56SMarko Kovacevic 
3288d70a194SDavid Marchand #ifdef USE_JANSSON
329f556293fSBrandon Lo int
330f556293fSBrandon Lo fips_test_parse_one_json_vector_set(void);
331f556293fSBrandon Lo 
332f556293fSBrandon Lo int
333f556293fSBrandon Lo fips_test_parse_one_json_group(void);
334f556293fSBrandon Lo 
335f556293fSBrandon Lo int
336f556293fSBrandon Lo fips_test_parse_one_json_case(void);
337b09aac2dSBrandon Lo 
338b09aac2dSBrandon Lo int
339b09aac2dSBrandon Lo parse_test_gcm_json_init(void);
340443c93d8SBrandon Lo 
341443c93d8SBrandon Lo int
34255a7050eSGowrishankar Muthukrishnan parse_test_ccm_json_init(void);
34355a7050eSGowrishankar Muthukrishnan 
34455a7050eSGowrishankar Muthukrishnan int
345443c93d8SBrandon Lo parse_test_hmac_json_init(void);
346443c93d8SBrandon Lo 
347443c93d8SBrandon Lo int
348443c93d8SBrandon Lo parse_test_hmac_json_algorithm(void);
349d3b50557SBrandon Lo 
350d3b50557SBrandon Lo int
351d3b50557SBrandon Lo parse_test_cmac_json_init(void);
3528b8546aaSGowrishankar Muthukrishnan 
3538b8546aaSGowrishankar Muthukrishnan int
3548b8546aaSGowrishankar Muthukrishnan parse_test_aes_json_init(void);
355f8e431edSGowrishankar Muthukrishnan 
356f8e431edSGowrishankar Muthukrishnan int
357f8e431edSGowrishankar Muthukrishnan parse_test_xts_json_init(void);
358d5c24714SGowrishankar Muthukrishnan 
359d5c24714SGowrishankar Muthukrishnan int
360d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_init(void);
361d5c24714SGowrishankar Muthukrishnan 
362d5c24714SGowrishankar Muthukrishnan int
363d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_algorithm(void);
364d5c24714SGowrishankar Muthukrishnan 
365d5c24714SGowrishankar Muthukrishnan int
366d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_test_type(void);
36764569ffaSGowrishankar Muthukrishnan 
36864569ffaSGowrishankar Muthukrishnan int
36964569ffaSGowrishankar Muthukrishnan parse_test_tdes_json_init(void);
37036128a67SGowrishankar Muthukrishnan 
37136128a67SGowrishankar Muthukrishnan int
37236128a67SGowrishankar Muthukrishnan parse_test_rsa_json_init(void);
3738ee030b4SGowrishankar Muthukrishnan 
3748ee030b4SGowrishankar Muthukrishnan int
375b455d261SGowrishankar Muthukrishnan parse_test_ecdsa_json_init(void);
376b455d261SGowrishankar Muthukrishnan 
377b455d261SGowrishankar Muthukrishnan int
3788ee030b4SGowrishankar Muthukrishnan fips_test_randomize_message(struct fips_val *msg, struct fips_val *rand);
3798d70a194SDavid Marchand #endif /* USE_JANSSON */
380f556293fSBrandon Lo 
3813d0fad56SMarko Kovacevic int
382cd255ccfSMarko Kovacevic parse_test_aes_init(void);
383cd255ccfSMarko Kovacevic 
384cd255ccfSMarko Kovacevic int
385527cbf3dSMarko Kovacevic parse_test_tdes_init(void);
386527cbf3dSMarko Kovacevic 
387527cbf3dSMarko Kovacevic int
388f64adb67SMarko Kovacevic parse_test_hmac_init(void);
389f64adb67SMarko Kovacevic 
390f64adb67SMarko Kovacevic int
3914aaad299SMarko Kovacevic parse_test_gcm_init(void);
3924aaad299SMarko Kovacevic 
3934aaad299SMarko Kovacevic int
394ac026f46SMarko Kovacevic parse_test_cmac_init(void);
395ac026f46SMarko Kovacevic 
396ac026f46SMarko Kovacevic int
397305921f4SMarko Kovacevic parse_test_ccm_init(void);
398305921f4SMarko Kovacevic 
399305921f4SMarko Kovacevic int
400f4797baeSDamian Nowak parse_test_sha_init(void);
401f4797baeSDamian Nowak 
402f4797baeSDamian Nowak int
403d5a9ea55SSucharitha Sarananaga parse_test_xts_init(void);
404d5a9ea55SSucharitha Sarananaga 
405d5a9ea55SSucharitha Sarananaga int
4063d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
4073d0fad56SMarko Kovacevic 
4083d0fad56SMarko Kovacevic int
4093d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
4103d0fad56SMarko Kovacevic 
4113d0fad56SMarko Kovacevic int
4123d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
4133d0fad56SMarko Kovacevic 
4143d0fad56SMarko Kovacevic int
415fc6e6515SIbtisam Tariq parser_read_uint16(uint16_t *value, const char *p);
416fc6e6515SIbtisam Tariq 
417fc6e6515SIbtisam Tariq int
4183d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4193d0fad56SMarko Kovacevic 
4203d0fad56SMarko Kovacevic int
4213d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
4223d0fad56SMarko Kovacevic 
4233d0fad56SMarko Kovacevic int
4243d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
4253d0fad56SMarko Kovacevic 
4263d0fad56SMarko Kovacevic int
4273d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4283d0fad56SMarko Kovacevic 
4293d0fad56SMarko Kovacevic int
4303d0fad56SMarko Kovacevic writeback_hex_str(const char *key, char *dst, struct fips_val *val);
4313d0fad56SMarko Kovacevic 
4323d0fad56SMarko Kovacevic void
4333d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
4343d0fad56SMarko Kovacevic 
4353d0fad56SMarko Kovacevic int
4363d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
4373d0fad56SMarko Kovacevic 
438d09abf2dSFan Zhang typedef int (*fips_test_one_case_t)(void);
439d09abf2dSFan Zhang typedef int (*fips_prepare_op_t)(void);
44036128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_sym_xform_t)(struct rte_crypto_sym_xform *);
44136128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_asym_xform_t)(struct rte_crypto_asym_xform *);
442d09abf2dSFan Zhang 
443d09abf2dSFan Zhang struct fips_test_ops {
44436128a67SGowrishankar Muthukrishnan 	fips_prepare_sym_xform_t prepare_sym_xform;
44536128a67SGowrishankar Muthukrishnan 	fips_prepare_asym_xform_t prepare_asym_xform;
44636128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_sym_op;
44736128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_asym_op;
448d09abf2dSFan Zhang 	fips_test_one_case_t test;
449d09abf2dSFan Zhang };
450d09abf2dSFan Zhang 
451d09abf2dSFan Zhang extern struct fips_test_ops test_ops;
452d09abf2dSFan Zhang 
453d09abf2dSFan Zhang int prepare_aead_op(void);
454d09abf2dSFan Zhang 
455d09abf2dSFan Zhang int prepare_auth_op(void);
456d09abf2dSFan Zhang 
457d09abf2dSFan Zhang int prepare_gcm_xform(struct rte_crypto_sym_xform *xform);
458d09abf2dSFan Zhang 
459d09abf2dSFan Zhang int prepare_gmac_xform(struct rte_crypto_sym_xform *xform);
460d09abf2dSFan Zhang 
4618bc8ba43SGowrishankar Muthukrishnan int parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo);
4628bc8ba43SGowrishankar Muthukrishnan 
4633d0fad56SMarko Kovacevic #endif
464