xref: /dpdk/examples/fips_validation/fips_validation.h (revision cd255ccf57647830bfdda8d760dad833f019b76a)
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 {
26*cd255ccfSMarko Kovacevic 		FIPS_TEST_ALGO_AES = 0,
273d0fad56SMarko Kovacevic 		FIPS_TEST_ALGO_MAX
283d0fad56SMarko Kovacevic };
293d0fad56SMarko Kovacevic 
303d0fad56SMarko Kovacevic enum file_types {
313d0fad56SMarko Kovacevic 	FIPS_TYPE_REQ = 1,
323d0fad56SMarko Kovacevic 	FIPS_TYPE_FAX,
333d0fad56SMarko Kovacevic 	FIPS_TYPE_RSP
343d0fad56SMarko Kovacevic };
353d0fad56SMarko Kovacevic 
363d0fad56SMarko Kovacevic enum fips_test_op {
373d0fad56SMarko Kovacevic 	FIPS_TEST_ENC_AUTH_GEN = 1,
383d0fad56SMarko Kovacevic 	FIPS_TEST_DEC_AUTH_VERIF,
393d0fad56SMarko Kovacevic };
403d0fad56SMarko Kovacevic 
413d0fad56SMarko Kovacevic #define MAX_LINE_PER_VECTOR            16
423d0fad56SMarko Kovacevic 
433d0fad56SMarko Kovacevic struct fips_val {
443d0fad56SMarko Kovacevic 	uint8_t *val;
453d0fad56SMarko Kovacevic 	uint32_t len;
463d0fad56SMarko Kovacevic };
473d0fad56SMarko Kovacevic 
483d0fad56SMarko Kovacevic struct fips_test_vector {
493d0fad56SMarko Kovacevic 	union {
503d0fad56SMarko Kovacevic 		struct {
513d0fad56SMarko Kovacevic 			struct fips_val key;
523d0fad56SMarko Kovacevic 			struct fips_val digest;
533d0fad56SMarko Kovacevic 			struct fips_val auth_aad;
543d0fad56SMarko Kovacevic 			struct fips_val aad;
553d0fad56SMarko Kovacevic 		} cipher_auth;
563d0fad56SMarko Kovacevic 		struct {
573d0fad56SMarko Kovacevic 			struct fips_val key;
583d0fad56SMarko Kovacevic 			struct fips_val digest;
593d0fad56SMarko Kovacevic 			struct fips_val aad;
603d0fad56SMarko Kovacevic 		} aead;
613d0fad56SMarko Kovacevic 	};
623d0fad56SMarko Kovacevic 
633d0fad56SMarko Kovacevic 	struct fips_val pt;
643d0fad56SMarko Kovacevic 	struct fips_val ct;
653d0fad56SMarko Kovacevic 	struct fips_val iv;
663d0fad56SMarko Kovacevic 
673d0fad56SMarko Kovacevic 	enum rte_crypto_op_status status;
683d0fad56SMarko Kovacevic };
693d0fad56SMarko Kovacevic 
703d0fad56SMarko Kovacevic typedef int (*post_prcess_t)(struct fips_val *val);
713d0fad56SMarko Kovacevic 
723d0fad56SMarko Kovacevic typedef int (*parse_callback_t)(const char *key, char *text,
733d0fad56SMarko Kovacevic 		struct fips_val *val);
743d0fad56SMarko Kovacevic 
753d0fad56SMarko Kovacevic struct fips_test_callback {
763d0fad56SMarko Kovacevic 	const char *key;
773d0fad56SMarko Kovacevic 	parse_callback_t cb;
783d0fad56SMarko Kovacevic 	struct fips_val *val;
793d0fad56SMarko Kovacevic };
803d0fad56SMarko Kovacevic 
81*cd255ccfSMarko Kovacevic enum fips_aesavs_test_types {
82*cd255ccfSMarko Kovacevic 	AESAVS_TYPE_GFXBOX = 1,
83*cd255ccfSMarko Kovacevic 	AESAVS_TYPE_KEYSBOX,
84*cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARKEY,
85*cd255ccfSMarko Kovacevic 	AESAVS_TYPE_VARTXT,
86*cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MMT,
87*cd255ccfSMarko Kovacevic 	AESAVS_TYPE_MCT,
88*cd255ccfSMarko Kovacevic };
89*cd255ccfSMarko Kovacevic 
90*cd255ccfSMarko Kovacevic struct aesavs_interim_data {
91*cd255ccfSMarko Kovacevic 	enum fips_aesavs_test_types test_type;
92*cd255ccfSMarko Kovacevic 	uint32_t cipher_algo;
93*cd255ccfSMarko Kovacevic 	uint32_t key_len;
94*cd255ccfSMarko Kovacevic };
95*cd255ccfSMarko Kovacevic 
963d0fad56SMarko Kovacevic struct fips_test_interim_info {
973d0fad56SMarko Kovacevic 	FILE *fp_rd;
983d0fad56SMarko Kovacevic 	FILE *fp_wr;
993d0fad56SMarko Kovacevic 	enum file_types file_type;
1003d0fad56SMarko Kovacevic 	enum fips_test_algorithms algo;
1013d0fad56SMarko Kovacevic 	char *one_line_text;
1023d0fad56SMarko Kovacevic 	char *vec[MAX_LINE_PER_VECTOR];
1033d0fad56SMarko Kovacevic 	uint32_t nb_vec_lines;
1043d0fad56SMarko Kovacevic 	char device_name[MAX_STRING_SIZE];
1053d0fad56SMarko Kovacevic 
106*cd255ccfSMarko Kovacevic 	union {
107*cd255ccfSMarko Kovacevic 		struct aesavs_interim_data aes_data;
108*cd255ccfSMarko Kovacevic 
109*cd255ccfSMarko Kovacevic 	} interim_info;
110*cd255ccfSMarko Kovacevic 
1113d0fad56SMarko Kovacevic 	enum fips_test_op op;
1123d0fad56SMarko Kovacevic 
1133d0fad56SMarko Kovacevic 	const struct fips_test_callback *callbacks;
1143d0fad56SMarko Kovacevic 	const struct fips_test_callback *interim_callbacks;
1153d0fad56SMarko Kovacevic 	const struct fips_test_callback *writeback_callbacks;
1163d0fad56SMarko Kovacevic 
1173d0fad56SMarko Kovacevic 	post_prcess_t parse_writeback;
1183d0fad56SMarko Kovacevic 	post_prcess_t kat_check;
1193d0fad56SMarko Kovacevic };
1203d0fad56SMarko Kovacevic 
1213d0fad56SMarko Kovacevic extern struct fips_test_vector vec;
1223d0fad56SMarko Kovacevic extern struct fips_test_interim_info info;
1233d0fad56SMarko Kovacevic 
1243d0fad56SMarko Kovacevic int
1253d0fad56SMarko Kovacevic fips_test_init(const char *req_file_path, const char *rsp_file_path,
1263d0fad56SMarko Kovacevic 		const char *device_name);
1273d0fad56SMarko Kovacevic 
1283d0fad56SMarko Kovacevic void
1293d0fad56SMarko Kovacevic fips_test_clear(void);
1303d0fad56SMarko Kovacevic 
1313d0fad56SMarko Kovacevic int
1323d0fad56SMarko Kovacevic fips_test_fetch_one_block(void);
1333d0fad56SMarko Kovacevic 
1343d0fad56SMarko Kovacevic int
1353d0fad56SMarko Kovacevic fips_test_parse_one_case(void);
1363d0fad56SMarko Kovacevic 
1373d0fad56SMarko Kovacevic void
1383d0fad56SMarko Kovacevic fips_test_write_one_case(void);
1393d0fad56SMarko Kovacevic 
1403d0fad56SMarko Kovacevic int
141*cd255ccfSMarko Kovacevic parse_test_aes_init(void);
142*cd255ccfSMarko Kovacevic 
143*cd255ccfSMarko Kovacevic int
1443d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
1453d0fad56SMarko Kovacevic 
1463d0fad56SMarko Kovacevic int
1473d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
1483d0fad56SMarko Kovacevic 
1493d0fad56SMarko Kovacevic int
1503d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
1513d0fad56SMarko Kovacevic 
1523d0fad56SMarko Kovacevic int
1533d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
1543d0fad56SMarko Kovacevic 
1553d0fad56SMarko Kovacevic int
1563d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
1573d0fad56SMarko Kovacevic 
1583d0fad56SMarko Kovacevic int
1593d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
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 writeback_hex_str(const char *key, char *dst, struct fips_val *val);
1663d0fad56SMarko Kovacevic 
1673d0fad56SMarko Kovacevic void
1683d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
1693d0fad56SMarko Kovacevic 
1703d0fad56SMarko Kovacevic int
1713d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
1723d0fad56SMarko Kovacevic 
1733d0fad56SMarko Kovacevic #endif
174