xref: /dpdk/examples/fips_validation/fips_validation.h (revision f64adb6714e07daf2a1d4fe3ee3172f3f4a80c07)
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 
83d0fad56SMarko Kovacevic #define FIPS_PARSE_ERR(fmt, args)					\
93d0fad56SMarko Kovacevic 	RTE_LOG(ERR, USER1, "FIPS parse error" ## fmt ## "\n", ## args)
103d0fad56SMarko Kovacevic 
113d0fad56SMarko Kovacevic #define ERR_MSG_SIZE		128
123d0fad56SMarko Kovacevic #define MAX_CASE_LINE		15
133d0fad56SMarko Kovacevic #define MAX_LINE_CHAR		204800 /*< max number of characters per line */
143d0fad56SMarko Kovacevic #define MAX_NB_TESTS		10240
153d0fad56SMarko Kovacevic #define MAX_BUF_SIZE		2048
163d0fad56SMarko Kovacevic #define MAX_STRING_SIZE		64
173d0fad56SMarko Kovacevic 
183d0fad56SMarko Kovacevic #define POSITIVE_TEST		0
193d0fad56SMarko Kovacevic #define NEGATIVE_TEST		-1
203d0fad56SMarko Kovacevic 
213d0fad56SMarko Kovacevic #define REQ_FILE_PERFIX		"req"
223d0fad56SMarko Kovacevic #define RSP_FILE_PERFIX		"rsp"
233d0fad56SMarko Kovacevic #define FAX_FILE_PERFIX		"fax"
243d0fad56SMarko Kovacevic 
253d0fad56SMarko Kovacevic enum fips_test_algorithms {
26cd255ccfSMarko Kovacevic 		FIPS_TEST_ALGO_AES = 0,
27*f64adb67SMarko Kovacevic 		FIPS_TEST_ALGO_HMAC,
283d0fad56SMarko Kovacevic 		FIPS_TEST_ALGO_MAX
293d0fad56SMarko Kovacevic };
303d0fad56SMarko Kovacevic 
313d0fad56SMarko Kovacevic enum file_types {
323d0fad56SMarko Kovacevic 	FIPS_TYPE_REQ = 1,
333d0fad56SMarko Kovacevic 	FIPS_TYPE_FAX,
343d0fad56SMarko Kovacevic 	FIPS_TYPE_RSP
353d0fad56SMarko Kovacevic };
363d0fad56SMarko Kovacevic 
373d0fad56SMarko Kovacevic enum fips_test_op {
383d0fad56SMarko Kovacevic 	FIPS_TEST_ENC_AUTH_GEN = 1,
393d0fad56SMarko Kovacevic 	FIPS_TEST_DEC_AUTH_VERIF,
403d0fad56SMarko Kovacevic };
413d0fad56SMarko Kovacevic 
423d0fad56SMarko Kovacevic #define MAX_LINE_PER_VECTOR            16
433d0fad56SMarko Kovacevic 
443d0fad56SMarko Kovacevic struct fips_val {
453d0fad56SMarko Kovacevic 	uint8_t *val;
463d0fad56SMarko Kovacevic 	uint32_t len;
473d0fad56SMarko Kovacevic };
483d0fad56SMarko Kovacevic 
493d0fad56SMarko Kovacevic struct fips_test_vector {
503d0fad56SMarko Kovacevic 	union {
513d0fad56SMarko Kovacevic 		struct {
523d0fad56SMarko Kovacevic 			struct fips_val key;
533d0fad56SMarko Kovacevic 			struct fips_val digest;
543d0fad56SMarko Kovacevic 			struct fips_val auth_aad;
553d0fad56SMarko Kovacevic 			struct fips_val aad;
563d0fad56SMarko Kovacevic 		} cipher_auth;
573d0fad56SMarko Kovacevic 		struct {
583d0fad56SMarko Kovacevic 			struct fips_val key;
593d0fad56SMarko Kovacevic 			struct fips_val digest;
603d0fad56SMarko Kovacevic 			struct fips_val aad;
613d0fad56SMarko Kovacevic 		} aead;
623d0fad56SMarko Kovacevic 	};
633d0fad56SMarko Kovacevic 
643d0fad56SMarko Kovacevic 	struct fips_val pt;
653d0fad56SMarko Kovacevic 	struct fips_val ct;
663d0fad56SMarko Kovacevic 	struct fips_val iv;
673d0fad56SMarko Kovacevic 
683d0fad56SMarko Kovacevic 	enum rte_crypto_op_status status;
693d0fad56SMarko Kovacevic };
703d0fad56SMarko Kovacevic 
713d0fad56SMarko Kovacevic typedef int (*post_prcess_t)(struct fips_val *val);
723d0fad56SMarko Kovacevic 
733d0fad56SMarko Kovacevic typedef int (*parse_callback_t)(const char *key, char *text,
743d0fad56SMarko Kovacevic 		struct fips_val *val);
753d0fad56SMarko Kovacevic 
763d0fad56SMarko Kovacevic struct fips_test_callback {
773d0fad56SMarko Kovacevic 	const char *key;
783d0fad56SMarko Kovacevic 	parse_callback_t cb;
793d0fad56SMarko Kovacevic 	struct fips_val *val;
803d0fad56SMarko Kovacevic };
813d0fad56SMarko Kovacevic 
82cd255ccfSMarko Kovacevic enum fips_aesavs_test_types {
83cd255ccfSMarko Kovacevic 	AESAVS_TYPE_GFXBOX = 1,
84cd255ccfSMarko Kovacevic 	AESAVS_TYPE_KEYSBOX,
85cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARKEY,
86cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARTXT,
87cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MMT,
88cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MCT,
89cd255ccfSMarko Kovacevic };
90cd255ccfSMarko Kovacevic 
91cd255ccfSMarko Kovacevic struct aesavs_interim_data {
92cd255ccfSMarko Kovacevic 	enum fips_aesavs_test_types test_type;
93cd255ccfSMarko Kovacevic 	uint32_t cipher_algo;
94cd255ccfSMarko Kovacevic 	uint32_t key_len;
95cd255ccfSMarko Kovacevic };
96cd255ccfSMarko Kovacevic 
97*f64adb67SMarko Kovacevic struct hmac_interim_data {
98*f64adb67SMarko Kovacevic 	enum rte_crypto_auth_algorithm algo;
99*f64adb67SMarko Kovacevic };
100*f64adb67SMarko Kovacevic 
1013d0fad56SMarko Kovacevic struct fips_test_interim_info {
1023d0fad56SMarko Kovacevic 	FILE *fp_rd;
1033d0fad56SMarko Kovacevic 	FILE *fp_wr;
1043d0fad56SMarko Kovacevic 	enum file_types file_type;
1053d0fad56SMarko Kovacevic 	enum fips_test_algorithms algo;
1063d0fad56SMarko Kovacevic 	char *one_line_text;
1073d0fad56SMarko Kovacevic 	char *vec[MAX_LINE_PER_VECTOR];
1083d0fad56SMarko Kovacevic 	uint32_t nb_vec_lines;
1093d0fad56SMarko Kovacevic 	char device_name[MAX_STRING_SIZE];
1103d0fad56SMarko Kovacevic 
111cd255ccfSMarko Kovacevic 	union {
112cd255ccfSMarko Kovacevic 		struct aesavs_interim_data aes_data;
113*f64adb67SMarko Kovacevic 		struct hmac_interim_data hmac_data;
114cd255ccfSMarko Kovacevic 
115cd255ccfSMarko Kovacevic 	} interim_info;
116cd255ccfSMarko Kovacevic 
1173d0fad56SMarko Kovacevic 	enum fips_test_op op;
1183d0fad56SMarko Kovacevic 
1193d0fad56SMarko Kovacevic 	const struct fips_test_callback *callbacks;
1203d0fad56SMarko Kovacevic 	const struct fips_test_callback *interim_callbacks;
1213d0fad56SMarko Kovacevic 	const struct fips_test_callback *writeback_callbacks;
1223d0fad56SMarko Kovacevic 
1233d0fad56SMarko Kovacevic 	post_prcess_t parse_writeback;
1243d0fad56SMarko Kovacevic 	post_prcess_t kat_check;
1253d0fad56SMarko Kovacevic };
1263d0fad56SMarko Kovacevic 
1273d0fad56SMarko Kovacevic extern struct fips_test_vector vec;
1283d0fad56SMarko Kovacevic extern struct fips_test_interim_info info;
1293d0fad56SMarko Kovacevic 
1303d0fad56SMarko Kovacevic int
1313d0fad56SMarko Kovacevic fips_test_init(const char *req_file_path, const char *rsp_file_path,
1323d0fad56SMarko Kovacevic 		const char *device_name);
1333d0fad56SMarko Kovacevic 
1343d0fad56SMarko Kovacevic void
1353d0fad56SMarko Kovacevic fips_test_clear(void);
1363d0fad56SMarko Kovacevic 
1373d0fad56SMarko Kovacevic int
1383d0fad56SMarko Kovacevic fips_test_fetch_one_block(void);
1393d0fad56SMarko Kovacevic 
1403d0fad56SMarko Kovacevic int
1413d0fad56SMarko Kovacevic fips_test_parse_one_case(void);
1423d0fad56SMarko Kovacevic 
1433d0fad56SMarko Kovacevic void
1443d0fad56SMarko Kovacevic fips_test_write_one_case(void);
1453d0fad56SMarko Kovacevic 
1463d0fad56SMarko Kovacevic int
147cd255ccfSMarko Kovacevic parse_test_aes_init(void);
148cd255ccfSMarko Kovacevic 
149cd255ccfSMarko Kovacevic int
150*f64adb67SMarko Kovacevic parse_test_hmac_init(void);
151*f64adb67SMarko Kovacevic 
152*f64adb67SMarko Kovacevic int
1533d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
1543d0fad56SMarko Kovacevic 
1553d0fad56SMarko Kovacevic int
1563d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
1573d0fad56SMarko Kovacevic 
1583d0fad56SMarko Kovacevic int
1593d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
1603d0fad56SMarko Kovacevic 
1613d0fad56SMarko Kovacevic int
1623d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
1633d0fad56SMarko Kovacevic 
1643d0fad56SMarko Kovacevic int
1653d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
1663d0fad56SMarko Kovacevic 
1673d0fad56SMarko Kovacevic int
1683d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
1693d0fad56SMarko Kovacevic 
1703d0fad56SMarko Kovacevic int
1713d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
1723d0fad56SMarko Kovacevic 
1733d0fad56SMarko Kovacevic int
1743d0fad56SMarko Kovacevic writeback_hex_str(const char *key, char *dst, struct fips_val *val);
1753d0fad56SMarko Kovacevic 
1763d0fad56SMarko Kovacevic void
1773d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
1783d0fad56SMarko Kovacevic 
1793d0fad56SMarko Kovacevic int
1803d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
1813d0fad56SMarko Kovacevic 
1823d0fad56SMarko Kovacevic #endif
183