xref: /dpdk/examples/fips_validation/fips_validation.h (revision 225f04fb3e4cce954a987923c030a1caed147299)
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,
166*225f04fbSGowrishankar Muthukrishnan 	SHA_MCT,
167*225f04fbSGowrishankar 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;
209*225f04fbSGowrishankar 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  */
2500b65d54fSGowrishankar Muthukrishnan #define FIPS_TEST_JSON_BUF_LEN (4096 / 4)
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
342443c93d8SBrandon Lo parse_test_hmac_json_init(void);
343443c93d8SBrandon Lo 
344443c93d8SBrandon Lo int
345443c93d8SBrandon Lo parse_test_hmac_json_algorithm(void);
346d3b50557SBrandon Lo 
347d3b50557SBrandon Lo int
348d3b50557SBrandon Lo parse_test_cmac_json_init(void);
3498b8546aaSGowrishankar Muthukrishnan 
3508b8546aaSGowrishankar Muthukrishnan int
3518b8546aaSGowrishankar Muthukrishnan parse_test_aes_json_init(void);
352f8e431edSGowrishankar Muthukrishnan 
353f8e431edSGowrishankar Muthukrishnan int
354f8e431edSGowrishankar Muthukrishnan parse_test_xts_json_init(void);
355d5c24714SGowrishankar Muthukrishnan 
356d5c24714SGowrishankar Muthukrishnan int
357d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_init(void);
358d5c24714SGowrishankar Muthukrishnan 
359d5c24714SGowrishankar Muthukrishnan int
360d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_algorithm(void);
361d5c24714SGowrishankar Muthukrishnan 
362d5c24714SGowrishankar Muthukrishnan int
363d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_test_type(void);
36464569ffaSGowrishankar Muthukrishnan 
36564569ffaSGowrishankar Muthukrishnan int
36664569ffaSGowrishankar Muthukrishnan parse_test_tdes_json_init(void);
36736128a67SGowrishankar Muthukrishnan 
36836128a67SGowrishankar Muthukrishnan int
36936128a67SGowrishankar Muthukrishnan parse_test_rsa_json_init(void);
3708ee030b4SGowrishankar Muthukrishnan 
3718ee030b4SGowrishankar Muthukrishnan int
372b455d261SGowrishankar Muthukrishnan parse_test_ecdsa_json_init(void);
373b455d261SGowrishankar Muthukrishnan 
374b455d261SGowrishankar Muthukrishnan int
3758ee030b4SGowrishankar Muthukrishnan fips_test_randomize_message(struct fips_val *msg, struct fips_val *rand);
3768d70a194SDavid Marchand #endif /* USE_JANSSON */
377f556293fSBrandon Lo 
3783d0fad56SMarko Kovacevic int
379cd255ccfSMarko Kovacevic parse_test_aes_init(void);
380cd255ccfSMarko Kovacevic 
381cd255ccfSMarko Kovacevic int
382527cbf3dSMarko Kovacevic parse_test_tdes_init(void);
383527cbf3dSMarko Kovacevic 
384527cbf3dSMarko Kovacevic int
385f64adb67SMarko Kovacevic parse_test_hmac_init(void);
386f64adb67SMarko Kovacevic 
387f64adb67SMarko Kovacevic int
3884aaad299SMarko Kovacevic parse_test_gcm_init(void);
3894aaad299SMarko Kovacevic 
3904aaad299SMarko Kovacevic int
391ac026f46SMarko Kovacevic parse_test_cmac_init(void);
392ac026f46SMarko Kovacevic 
393ac026f46SMarko Kovacevic int
394305921f4SMarko Kovacevic parse_test_ccm_init(void);
395305921f4SMarko Kovacevic 
396305921f4SMarko Kovacevic int
397f4797baeSDamian Nowak parse_test_sha_init(void);
398f4797baeSDamian Nowak 
399f4797baeSDamian Nowak int
400d5a9ea55SSucharitha Sarananaga parse_test_xts_init(void);
401d5a9ea55SSucharitha Sarananaga 
402d5a9ea55SSucharitha Sarananaga int
4033d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
4043d0fad56SMarko Kovacevic 
4053d0fad56SMarko Kovacevic int
4063d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
4073d0fad56SMarko Kovacevic 
4083d0fad56SMarko Kovacevic int
4093d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
4103d0fad56SMarko Kovacevic 
4113d0fad56SMarko Kovacevic int
412fc6e6515SIbtisam Tariq parser_read_uint16(uint16_t *value, const char *p);
413fc6e6515SIbtisam Tariq 
414fc6e6515SIbtisam Tariq int
4153d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4163d0fad56SMarko Kovacevic 
4173d0fad56SMarko Kovacevic int
4183d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
4193d0fad56SMarko Kovacevic 
4203d0fad56SMarko Kovacevic int
4213d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
4223d0fad56SMarko Kovacevic 
4233d0fad56SMarko Kovacevic int
4243d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4253d0fad56SMarko Kovacevic 
4263d0fad56SMarko Kovacevic int
4273d0fad56SMarko Kovacevic writeback_hex_str(const char *key, char *dst, struct fips_val *val);
4283d0fad56SMarko Kovacevic 
4293d0fad56SMarko Kovacevic void
4303d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
4313d0fad56SMarko Kovacevic 
4323d0fad56SMarko Kovacevic int
4333d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
4343d0fad56SMarko Kovacevic 
435d09abf2dSFan Zhang typedef int (*fips_test_one_case_t)(void);
436d09abf2dSFan Zhang typedef int (*fips_prepare_op_t)(void);
43736128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_sym_xform_t)(struct rte_crypto_sym_xform *);
43836128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_asym_xform_t)(struct rte_crypto_asym_xform *);
439d09abf2dSFan Zhang 
440d09abf2dSFan Zhang struct fips_test_ops {
44136128a67SGowrishankar Muthukrishnan 	fips_prepare_sym_xform_t prepare_sym_xform;
44236128a67SGowrishankar Muthukrishnan 	fips_prepare_asym_xform_t prepare_asym_xform;
44336128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_sym_op;
44436128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_asym_op;
445d09abf2dSFan Zhang 	fips_test_one_case_t test;
446d09abf2dSFan Zhang };
447d09abf2dSFan Zhang 
448d09abf2dSFan Zhang extern struct fips_test_ops test_ops;
449d09abf2dSFan Zhang 
450d09abf2dSFan Zhang int prepare_aead_op(void);
451d09abf2dSFan Zhang 
452d09abf2dSFan Zhang int prepare_auth_op(void);
453d09abf2dSFan Zhang 
454d09abf2dSFan Zhang int prepare_gcm_xform(struct rte_crypto_sym_xform *xform);
455d09abf2dSFan Zhang 
456d09abf2dSFan Zhang int prepare_gmac_xform(struct rte_crypto_sym_xform *xform);
457d09abf2dSFan Zhang 
4588bc8ba43SGowrishankar Muthukrishnan int parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo);
4598bc8ba43SGowrishankar Muthukrishnan 
4603d0fad56SMarko Kovacevic #endif
461