xref: /dpdk/examples/fips_validation/fips_validation.h (revision b455d261eb89951733c24cf75467b30441c232df)
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,
48*b455d261SGowrishankar 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;
100*b455d261SGowrishankar Muthukrishnan 	struct {
101*b455d261SGowrishankar Muthukrishnan 		struct fips_val seed;
102*b455d261SGowrishankar Muthukrishnan 		struct fips_val pkey;
103*b455d261SGowrishankar Muthukrishnan 		struct fips_val qx;
104*b455d261SGowrishankar Muthukrishnan 		struct fips_val qy;
105*b455d261SGowrishankar Muthukrishnan 		struct fips_val r;
106*b455d261SGowrishankar Muthukrishnan 		struct fips_val s;
107*b455d261SGowrishankar Muthukrishnan 		struct fips_val k;
108*b455d261SGowrishankar 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,
166f4797baeSDamian Nowak 	SHA_MCT
167f4797baeSDamian Nowak };
168f4797baeSDamian Nowak 
16936128a67SGowrishankar Muthukrishnan enum fips_rsa_test_types {
17036128a67SGowrishankar Muthukrishnan 	RSA_AFT = 0,
17136128a67SGowrishankar Muthukrishnan 	RSA_GDT,
17236128a67SGowrishankar Muthukrishnan 	RSA_KAT
17336128a67SGowrishankar Muthukrishnan };
17436128a67SGowrishankar Muthukrishnan 
175*b455d261SGowrishankar Muthukrishnan enum fips_ecdsa_test_types {
176*b455d261SGowrishankar Muthukrishnan 	ECDSA_AFT = 0,
177*b455d261SGowrishankar Muthukrishnan };
178*b455d261SGowrishankar Muthukrishnan 
179cd255ccfSMarko Kovacevic struct aesavs_interim_data {
180cd255ccfSMarko Kovacevic 	enum fips_aesavs_test_types test_type;
181cd255ccfSMarko Kovacevic 	uint32_t cipher_algo;
182cd255ccfSMarko Kovacevic 	uint32_t key_len;
183cd255ccfSMarko Kovacevic };
184cd255ccfSMarko Kovacevic 
185f64adb67SMarko Kovacevic struct hmac_interim_data {
186f64adb67SMarko Kovacevic 	enum rte_crypto_auth_algorithm algo;
187f64adb67SMarko Kovacevic };
188f64adb67SMarko Kovacevic 
189527cbf3dSMarko Kovacevic struct tdes_interim_data {
190527cbf3dSMarko Kovacevic 	enum fips_tdes_test_types test_type;
191efe3a8dbSMichael Shamis 	enum fips_tdes_test_mode test_mode;
192527cbf3dSMarko Kovacevic 	uint32_t nb_keys;
193527cbf3dSMarko Kovacevic };
194527cbf3dSMarko Kovacevic 
195305921f4SMarko Kovacevic struct ccm_interim_data {
196305921f4SMarko Kovacevic 	enum fips_ccm_test_types test_type;
197305921f4SMarko Kovacevic 	uint32_t aad_len;
198305921f4SMarko Kovacevic 	uint32_t pt_len;
199305921f4SMarko Kovacevic 	uint32_t digest_len;
200305921f4SMarko Kovacevic 	uint32_t key_len;
201305921f4SMarko Kovacevic 	uint32_t iv_len;
202305921f4SMarko Kovacevic };
203305921f4SMarko Kovacevic 
204f4797baeSDamian Nowak struct sha_interim_data {
20536128a67SGowrishankar Muthukrishnan 	/* keep algo always on top as it is also used in asym digest */
206f4797baeSDamian Nowak 	enum rte_crypto_auth_algorithm algo;
20736128a67SGowrishankar Muthukrishnan 	enum fips_sha_test_types test_type;
208f4797baeSDamian Nowak };
209f4797baeSDamian Nowak 
210d09abf2dSFan Zhang struct gcm_interim_data {
211d09abf2dSFan Zhang 	uint8_t is_gmac;
212d09abf2dSFan Zhang 	uint8_t gen_iv;
213d09abf2dSFan Zhang };
214d09abf2dSFan Zhang 
215f8e431edSGowrishankar Muthukrishnan enum xts_tweak_modes {
216f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_HEX = 0,
217f8e431edSGowrishankar Muthukrishnan 	XTS_TWEAK_MODE_NUMBER
218f8e431edSGowrishankar Muthukrishnan };
219f8e431edSGowrishankar Muthukrishnan 
220f8e431edSGowrishankar Muthukrishnan struct xts_interim_data {
221f8e431edSGowrishankar Muthukrishnan 	enum xts_tweak_modes tweak_mode;
222f8e431edSGowrishankar Muthukrishnan };
223f8e431edSGowrishankar Muthukrishnan 
22436128a67SGowrishankar Muthukrishnan struct rsa_interim_data {
22536128a67SGowrishankar Muthukrishnan 	enum rte_crypto_auth_algorithm auth;
22636128a67SGowrishankar Muthukrishnan 	uint16_t modulo;
22736128a67SGowrishankar Muthukrishnan 	uint16_t saltlen;
22836128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_padding_type padding;
22936128a67SGowrishankar Muthukrishnan 	enum rte_crypto_rsa_priv_key_type privkey;
2308ee030b4SGowrishankar Muthukrishnan 	uint8_t random_msg;
23136128a67SGowrishankar Muthukrishnan };
23236128a67SGowrishankar Muthukrishnan 
233*b455d261SGowrishankar Muthukrishnan struct ecdsa_interim_data {
234*b455d261SGowrishankar Muthukrishnan 	enum rte_crypto_auth_algorithm auth;
235*b455d261SGowrishankar Muthukrishnan 	enum rte_crypto_curve_id curve_id;
236*b455d261SGowrishankar Muthukrishnan 	uint8_t curve_len;
237*b455d261SGowrishankar Muthukrishnan 	uint8_t random_msg;
238*b455d261SGowrishankar Muthukrishnan 	uint8_t pubkey_gen;
239*b455d261SGowrishankar Muthukrishnan };
240*b455d261SGowrishankar Muthukrishnan 
2418d70a194SDavid Marchand #ifdef USE_JANSSON
2420b65d54fSGowrishankar Muthukrishnan /*
2430b65d54fSGowrishankar Muthukrishnan  * Maximum length of buffer to hold any json string.
2440b65d54fSGowrishankar Muthukrishnan  * Esp, in asym op, modulo bits decide char buffer size.
2450b65d54fSGowrishankar Muthukrishnan  * max = (modulo / 4)
2460b65d54fSGowrishankar Muthukrishnan  */
2470b65d54fSGowrishankar Muthukrishnan #define FIPS_TEST_JSON_BUF_LEN (4096 / 4)
2480b65d54fSGowrishankar Muthukrishnan 
249f556293fSBrandon Lo struct fips_test_json_info {
250f556293fSBrandon Lo 	/* Information used for reading from json */
251f556293fSBrandon Lo 	json_t *json_root;
252f556293fSBrandon Lo 	json_t *json_vector_set;
253f556293fSBrandon Lo 	json_t *json_test_group;
254f556293fSBrandon Lo 	json_t *json_test_case;
255f556293fSBrandon Lo 	/* Location of json write output */
256f556293fSBrandon Lo 	json_t *json_write_root;
257f556293fSBrandon Lo 	json_t *json_write_group;
258f556293fSBrandon Lo 	json_t *json_write_set;
259f556293fSBrandon Lo 	json_t *json_write_case;
260f556293fSBrandon Lo 	/* Other info */
261f556293fSBrandon Lo 	uint8_t is_sample;
262f556293fSBrandon Lo };
2638d70a194SDavid Marchand #endif /* USE_JANSSON */
264f556293fSBrandon Lo 
2653d0fad56SMarko Kovacevic struct fips_test_interim_info {
2663d0fad56SMarko Kovacevic 	FILE *fp_rd;
2673d0fad56SMarko Kovacevic 	FILE *fp_wr;
2683d0fad56SMarko Kovacevic 	enum file_types file_type;
2693d0fad56SMarko Kovacevic 	enum fips_test_algorithms algo;
2703d0fad56SMarko Kovacevic 	char *one_line_text;
2713d0fad56SMarko Kovacevic 	char *vec[MAX_LINE_PER_VECTOR];
27232440cdfSAyuj Verma 	uint32_t vec_start_off;
2733d0fad56SMarko Kovacevic 	uint32_t nb_vec_lines;
2743d0fad56SMarko Kovacevic 	char device_name[MAX_STRING_SIZE];
2759275af3bSOlivier Matz 	char file_name[MAX_FILE_NAME_SIZE];
27679365018SArchana Muniganti 	float version;
2773d0fad56SMarko Kovacevic 
278cd255ccfSMarko Kovacevic 	union {
279cd255ccfSMarko Kovacevic 		struct aesavs_interim_data aes_data;
280f64adb67SMarko Kovacevic 		struct hmac_interim_data hmac_data;
281527cbf3dSMarko Kovacevic 		struct tdes_interim_data tdes_data;
282305921f4SMarko Kovacevic 		struct ccm_interim_data ccm_data;
283f4797baeSDamian Nowak 		struct sha_interim_data sha_data;
284d09abf2dSFan Zhang 		struct gcm_interim_data gcm_data;
285f8e431edSGowrishankar Muthukrishnan 		struct xts_interim_data xts_data;
28636128a67SGowrishankar Muthukrishnan 		struct rsa_interim_data rsa_data;
287*b455d261SGowrishankar Muthukrishnan 		struct ecdsa_interim_data ecdsa_data;
288cd255ccfSMarko Kovacevic 	} interim_info;
289cd255ccfSMarko Kovacevic 
2903d0fad56SMarko Kovacevic 	enum fips_test_op op;
2913d0fad56SMarko Kovacevic 
2923d0fad56SMarko Kovacevic 	const struct fips_test_callback *callbacks;
2933d0fad56SMarko Kovacevic 	const struct fips_test_callback *interim_callbacks;
2943d0fad56SMarko Kovacevic 	const struct fips_test_callback *writeback_callbacks;
2953d0fad56SMarko Kovacevic 
2960bd998fbSGowrishankar Muthukrishnan 	post_prcess_t parse_interim_writeback;
297*b455d261SGowrishankar Muthukrishnan 	post_prcess_t post_interim_writeback;
2983d0fad56SMarko Kovacevic 	post_prcess_t parse_writeback;
2993d0fad56SMarko Kovacevic 	post_prcess_t kat_check;
3003d0fad56SMarko Kovacevic };
3013d0fad56SMarko Kovacevic 
3023d0fad56SMarko Kovacevic extern struct fips_test_vector vec;
3033d0fad56SMarko Kovacevic extern struct fips_test_interim_info info;
3043d0fad56SMarko Kovacevic 
3058d70a194SDavid Marchand #ifdef USE_JANSSON
306f556293fSBrandon Lo extern struct fips_test_json_info json_info;
3078d70a194SDavid Marchand #endif /* USE_JANSSON */
308f556293fSBrandon Lo 
3093d0fad56SMarko Kovacevic int
3103d0fad56SMarko Kovacevic fips_test_init(const char *req_file_path, const char *rsp_file_path,
3113d0fad56SMarko Kovacevic 		const char *device_name);
3123d0fad56SMarko Kovacevic 
3133d0fad56SMarko Kovacevic void
3143d0fad56SMarko Kovacevic fips_test_clear(void);
3153d0fad56SMarko Kovacevic 
3163d0fad56SMarko Kovacevic int
3173d0fad56SMarko Kovacevic fips_test_fetch_one_block(void);
3183d0fad56SMarko Kovacevic 
3193d0fad56SMarko Kovacevic int
3203d0fad56SMarko Kovacevic fips_test_parse_one_case(void);
3213d0fad56SMarko Kovacevic 
3223d0fad56SMarko Kovacevic void
3233d0fad56SMarko Kovacevic fips_test_write_one_case(void);
3243d0fad56SMarko Kovacevic 
3258d70a194SDavid Marchand #ifdef USE_JANSSON
326f556293fSBrandon Lo int
327f556293fSBrandon Lo fips_test_parse_one_json_vector_set(void);
328f556293fSBrandon Lo 
329f556293fSBrandon Lo int
330f556293fSBrandon Lo fips_test_parse_one_json_group(void);
331f556293fSBrandon Lo 
332f556293fSBrandon Lo int
333f556293fSBrandon Lo fips_test_parse_one_json_case(void);
334b09aac2dSBrandon Lo 
335b09aac2dSBrandon Lo int
336b09aac2dSBrandon Lo parse_test_gcm_json_init(void);
337443c93d8SBrandon Lo 
338443c93d8SBrandon Lo int
339443c93d8SBrandon Lo parse_test_hmac_json_init(void);
340443c93d8SBrandon Lo 
341443c93d8SBrandon Lo int
342443c93d8SBrandon Lo parse_test_hmac_json_algorithm(void);
343d3b50557SBrandon Lo 
344d3b50557SBrandon Lo int
345d3b50557SBrandon Lo parse_test_cmac_json_init(void);
3468b8546aaSGowrishankar Muthukrishnan 
3478b8546aaSGowrishankar Muthukrishnan int
3488b8546aaSGowrishankar Muthukrishnan parse_test_aes_json_init(void);
349f8e431edSGowrishankar Muthukrishnan 
350f8e431edSGowrishankar Muthukrishnan int
351f8e431edSGowrishankar Muthukrishnan parse_test_xts_json_init(void);
352d5c24714SGowrishankar Muthukrishnan 
353d5c24714SGowrishankar Muthukrishnan int
354d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_init(void);
355d5c24714SGowrishankar Muthukrishnan 
356d5c24714SGowrishankar Muthukrishnan int
357d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_algorithm(void);
358d5c24714SGowrishankar Muthukrishnan 
359d5c24714SGowrishankar Muthukrishnan int
360d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_test_type(void);
36164569ffaSGowrishankar Muthukrishnan 
36264569ffaSGowrishankar Muthukrishnan int
36364569ffaSGowrishankar Muthukrishnan parse_test_tdes_json_init(void);
36436128a67SGowrishankar Muthukrishnan 
36536128a67SGowrishankar Muthukrishnan int
36636128a67SGowrishankar Muthukrishnan parse_test_rsa_json_init(void);
3678ee030b4SGowrishankar Muthukrishnan 
3688ee030b4SGowrishankar Muthukrishnan int
369*b455d261SGowrishankar Muthukrishnan parse_test_ecdsa_json_init(void);
370*b455d261SGowrishankar Muthukrishnan 
371*b455d261SGowrishankar Muthukrishnan int
3728ee030b4SGowrishankar Muthukrishnan fips_test_randomize_message(struct fips_val *msg, struct fips_val *rand);
3738d70a194SDavid Marchand #endif /* USE_JANSSON */
374f556293fSBrandon Lo 
3753d0fad56SMarko Kovacevic int
376cd255ccfSMarko Kovacevic parse_test_aes_init(void);
377cd255ccfSMarko Kovacevic 
378cd255ccfSMarko Kovacevic int
379527cbf3dSMarko Kovacevic parse_test_tdes_init(void);
380527cbf3dSMarko Kovacevic 
381527cbf3dSMarko Kovacevic int
382f64adb67SMarko Kovacevic parse_test_hmac_init(void);
383f64adb67SMarko Kovacevic 
384f64adb67SMarko Kovacevic int
3854aaad299SMarko Kovacevic parse_test_gcm_init(void);
3864aaad299SMarko Kovacevic 
3874aaad299SMarko Kovacevic int
388ac026f46SMarko Kovacevic parse_test_cmac_init(void);
389ac026f46SMarko Kovacevic 
390ac026f46SMarko Kovacevic int
391305921f4SMarko Kovacevic parse_test_ccm_init(void);
392305921f4SMarko Kovacevic 
393305921f4SMarko Kovacevic int
394f4797baeSDamian Nowak parse_test_sha_init(void);
395f4797baeSDamian Nowak 
396f4797baeSDamian Nowak int
397d5a9ea55SSucharitha Sarananaga parse_test_xts_init(void);
398d5a9ea55SSucharitha Sarananaga 
399d5a9ea55SSucharitha Sarananaga int
4003d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
4013d0fad56SMarko Kovacevic 
4023d0fad56SMarko Kovacevic int
4033d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
4043d0fad56SMarko Kovacevic 
4053d0fad56SMarko Kovacevic int
4063d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
4073d0fad56SMarko Kovacevic 
4083d0fad56SMarko Kovacevic int
409fc6e6515SIbtisam Tariq parser_read_uint16(uint16_t *value, const char *p);
410fc6e6515SIbtisam Tariq 
411fc6e6515SIbtisam Tariq int
4123d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4133d0fad56SMarko Kovacevic 
4143d0fad56SMarko Kovacevic int
4153d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
4163d0fad56SMarko Kovacevic 
4173d0fad56SMarko Kovacevic int
4183d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
4193d0fad56SMarko Kovacevic 
4203d0fad56SMarko Kovacevic int
4213d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
4223d0fad56SMarko Kovacevic 
4233d0fad56SMarko Kovacevic int
4243d0fad56SMarko Kovacevic writeback_hex_str(const char *key, char *dst, struct fips_val *val);
4253d0fad56SMarko Kovacevic 
4263d0fad56SMarko Kovacevic void
4273d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
4283d0fad56SMarko Kovacevic 
4293d0fad56SMarko Kovacevic int
4303d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
4313d0fad56SMarko Kovacevic 
432d09abf2dSFan Zhang typedef int (*fips_test_one_case_t)(void);
433d09abf2dSFan Zhang typedef int (*fips_prepare_op_t)(void);
43436128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_sym_xform_t)(struct rte_crypto_sym_xform *);
43536128a67SGowrishankar Muthukrishnan typedef int (*fips_prepare_asym_xform_t)(struct rte_crypto_asym_xform *);
436d09abf2dSFan Zhang 
437d09abf2dSFan Zhang struct fips_test_ops {
43836128a67SGowrishankar Muthukrishnan 	fips_prepare_sym_xform_t prepare_sym_xform;
43936128a67SGowrishankar Muthukrishnan 	fips_prepare_asym_xform_t prepare_asym_xform;
44036128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_sym_op;
44136128a67SGowrishankar Muthukrishnan 	fips_prepare_op_t prepare_asym_op;
442d09abf2dSFan Zhang 	fips_test_one_case_t test;
443d09abf2dSFan Zhang };
444d09abf2dSFan Zhang 
445d09abf2dSFan Zhang extern struct fips_test_ops test_ops;
446d09abf2dSFan Zhang 
447d09abf2dSFan Zhang int prepare_aead_op(void);
448d09abf2dSFan Zhang 
449d09abf2dSFan Zhang int prepare_auth_op(void);
450d09abf2dSFan Zhang 
451d09abf2dSFan Zhang int prepare_gcm_xform(struct rte_crypto_sym_xform *xform);
452d09abf2dSFan Zhang 
453d09abf2dSFan Zhang int prepare_gmac_xform(struct rte_crypto_sym_xform *xform);
454d09abf2dSFan Zhang 
4558bc8ba43SGowrishankar Muthukrishnan int parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo);
4568bc8ba43SGowrishankar Muthukrishnan 
4573d0fad56SMarko Kovacevic #endif
458