xref: /dpdk/examples/fips_validation/fips_validation.h (revision 3d0fad56b74a02fe6c1bb2b3ee752646c34cfbc5)
1*3d0fad56SMarko Kovacevic /* SPDX-License-Identifier: BSD-3-Clause
2*3d0fad56SMarko Kovacevic  * Copyright(c) 2018 Intel Corporation
3*3d0fad56SMarko Kovacevic  */
4*3d0fad56SMarko Kovacevic 
5*3d0fad56SMarko Kovacevic #ifndef _FIPS_VALIDATION_H_
6*3d0fad56SMarko Kovacevic #define _FIPS_VALIDATION_H_
7*3d0fad56SMarko Kovacevic 
8*3d0fad56SMarko Kovacevic #define FIPS_PARSE_ERR(fmt, args)					\
9*3d0fad56SMarko Kovacevic 	RTE_LOG(ERR, USER1, "FIPS parse error" ## fmt ## "\n", ## args)
10*3d0fad56SMarko Kovacevic 
11*3d0fad56SMarko Kovacevic #define ERR_MSG_SIZE		128
12*3d0fad56SMarko Kovacevic #define MAX_CASE_LINE		15
13*3d0fad56SMarko Kovacevic #define MAX_LINE_CHAR		204800 /*< max number of characters per line */
14*3d0fad56SMarko Kovacevic #define MAX_NB_TESTS		10240
15*3d0fad56SMarko Kovacevic #define MAX_BUF_SIZE		2048
16*3d0fad56SMarko Kovacevic #define MAX_STRING_SIZE		64
17*3d0fad56SMarko Kovacevic 
18*3d0fad56SMarko Kovacevic #define POSITIVE_TEST		0
19*3d0fad56SMarko Kovacevic #define NEGATIVE_TEST		-1
20*3d0fad56SMarko Kovacevic 
21*3d0fad56SMarko Kovacevic #define REQ_FILE_PERFIX		"req"
22*3d0fad56SMarko Kovacevic #define RSP_FILE_PERFIX		"rsp"
23*3d0fad56SMarko Kovacevic #define FAX_FILE_PERFIX		"fax"
24*3d0fad56SMarko Kovacevic 
25*3d0fad56SMarko Kovacevic enum fips_test_algorithms {
26*3d0fad56SMarko Kovacevic 		FIPS_TEST_ALGO_MAX
27*3d0fad56SMarko Kovacevic };
28*3d0fad56SMarko Kovacevic 
29*3d0fad56SMarko Kovacevic enum file_types {
30*3d0fad56SMarko Kovacevic 	FIPS_TYPE_REQ = 1,
31*3d0fad56SMarko Kovacevic 	FIPS_TYPE_FAX,
32*3d0fad56SMarko Kovacevic 	FIPS_TYPE_RSP
33*3d0fad56SMarko Kovacevic };
34*3d0fad56SMarko Kovacevic 
35*3d0fad56SMarko Kovacevic enum fips_test_op {
36*3d0fad56SMarko Kovacevic 	FIPS_TEST_ENC_AUTH_GEN = 1,
37*3d0fad56SMarko Kovacevic 	FIPS_TEST_DEC_AUTH_VERIF,
38*3d0fad56SMarko Kovacevic };
39*3d0fad56SMarko Kovacevic 
40*3d0fad56SMarko Kovacevic #define MAX_LINE_PER_VECTOR            16
41*3d0fad56SMarko Kovacevic 
42*3d0fad56SMarko Kovacevic struct fips_val {
43*3d0fad56SMarko Kovacevic 	uint8_t *val;
44*3d0fad56SMarko Kovacevic 	uint32_t len;
45*3d0fad56SMarko Kovacevic };
46*3d0fad56SMarko Kovacevic 
47*3d0fad56SMarko Kovacevic struct fips_test_vector {
48*3d0fad56SMarko Kovacevic 	union {
49*3d0fad56SMarko Kovacevic 		struct {
50*3d0fad56SMarko Kovacevic 			struct fips_val key;
51*3d0fad56SMarko Kovacevic 			struct fips_val digest;
52*3d0fad56SMarko Kovacevic 			struct fips_val auth_aad;
53*3d0fad56SMarko Kovacevic 			struct fips_val aad;
54*3d0fad56SMarko Kovacevic 		} cipher_auth;
55*3d0fad56SMarko Kovacevic 		struct {
56*3d0fad56SMarko Kovacevic 			struct fips_val key;
57*3d0fad56SMarko Kovacevic 			struct fips_val digest;
58*3d0fad56SMarko Kovacevic 			struct fips_val aad;
59*3d0fad56SMarko Kovacevic 		} aead;
60*3d0fad56SMarko Kovacevic 	};
61*3d0fad56SMarko Kovacevic 
62*3d0fad56SMarko Kovacevic 	struct fips_val pt;
63*3d0fad56SMarko Kovacevic 	struct fips_val ct;
64*3d0fad56SMarko Kovacevic 	struct fips_val iv;
65*3d0fad56SMarko Kovacevic 
66*3d0fad56SMarko Kovacevic 	enum rte_crypto_op_status status;
67*3d0fad56SMarko Kovacevic };
68*3d0fad56SMarko Kovacevic 
69*3d0fad56SMarko Kovacevic typedef int (*post_prcess_t)(struct fips_val *val);
70*3d0fad56SMarko Kovacevic 
71*3d0fad56SMarko Kovacevic typedef int (*parse_callback_t)(const char *key, char *text,
72*3d0fad56SMarko Kovacevic 		struct fips_val *val);
73*3d0fad56SMarko Kovacevic 
74*3d0fad56SMarko Kovacevic struct fips_test_callback {
75*3d0fad56SMarko Kovacevic 	const char *key;
76*3d0fad56SMarko Kovacevic 	parse_callback_t cb;
77*3d0fad56SMarko Kovacevic 	struct fips_val *val;
78*3d0fad56SMarko Kovacevic };
79*3d0fad56SMarko Kovacevic 
80*3d0fad56SMarko Kovacevic struct fips_test_interim_info {
81*3d0fad56SMarko Kovacevic 	FILE *fp_rd;
82*3d0fad56SMarko Kovacevic 	FILE *fp_wr;
83*3d0fad56SMarko Kovacevic 	enum file_types file_type;
84*3d0fad56SMarko Kovacevic 	enum fips_test_algorithms algo;
85*3d0fad56SMarko Kovacevic 	char *one_line_text;
86*3d0fad56SMarko Kovacevic 	char *vec[MAX_LINE_PER_VECTOR];
87*3d0fad56SMarko Kovacevic 	uint32_t nb_vec_lines;
88*3d0fad56SMarko Kovacevic 	char device_name[MAX_STRING_SIZE];
89*3d0fad56SMarko Kovacevic 
90*3d0fad56SMarko Kovacevic 	enum fips_test_op op;
91*3d0fad56SMarko Kovacevic 
92*3d0fad56SMarko Kovacevic 	const struct fips_test_callback *callbacks;
93*3d0fad56SMarko Kovacevic 	const struct fips_test_callback *interim_callbacks;
94*3d0fad56SMarko Kovacevic 	const struct fips_test_callback *writeback_callbacks;
95*3d0fad56SMarko Kovacevic 
96*3d0fad56SMarko Kovacevic 	post_prcess_t parse_writeback;
97*3d0fad56SMarko Kovacevic 	post_prcess_t kat_check;
98*3d0fad56SMarko Kovacevic };
99*3d0fad56SMarko Kovacevic 
100*3d0fad56SMarko Kovacevic extern struct fips_test_vector vec;
101*3d0fad56SMarko Kovacevic extern struct fips_test_interim_info info;
102*3d0fad56SMarko Kovacevic 
103*3d0fad56SMarko Kovacevic int
104*3d0fad56SMarko Kovacevic fips_test_init(const char *req_file_path, const char *rsp_file_path,
105*3d0fad56SMarko Kovacevic 		const char *device_name);
106*3d0fad56SMarko Kovacevic 
107*3d0fad56SMarko Kovacevic void
108*3d0fad56SMarko Kovacevic fips_test_clear(void);
109*3d0fad56SMarko Kovacevic 
110*3d0fad56SMarko Kovacevic int
111*3d0fad56SMarko Kovacevic fips_test_fetch_one_block(void);
112*3d0fad56SMarko Kovacevic 
113*3d0fad56SMarko Kovacevic int
114*3d0fad56SMarko Kovacevic fips_test_parse_one_case(void);
115*3d0fad56SMarko Kovacevic 
116*3d0fad56SMarko Kovacevic void
117*3d0fad56SMarko Kovacevic fips_test_write_one_case(void);
118*3d0fad56SMarko Kovacevic 
119*3d0fad56SMarko Kovacevic int
120*3d0fad56SMarko Kovacevic parser_read_uint8_hex(uint8_t *value, const char *p);
121*3d0fad56SMarko Kovacevic 
122*3d0fad56SMarko Kovacevic int
123*3d0fad56SMarko Kovacevic parse_uint8_hex_str(const char *key, char *src, struct fips_val *val);
124*3d0fad56SMarko Kovacevic 
125*3d0fad56SMarko Kovacevic int
126*3d0fad56SMarko Kovacevic parse_uint8_known_len_hex_str(const char *key, char *src, struct fips_val *val);
127*3d0fad56SMarko Kovacevic 
128*3d0fad56SMarko Kovacevic int
129*3d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
130*3d0fad56SMarko Kovacevic 
131*3d0fad56SMarko Kovacevic int
132*3d0fad56SMarko Kovacevic parser_read_uint32_bit_val(const char *key, char *src, struct fips_val *val);
133*3d0fad56SMarko Kovacevic 
134*3d0fad56SMarko Kovacevic int
135*3d0fad56SMarko Kovacevic parser_read_uint32(uint32_t *value, char *p);
136*3d0fad56SMarko Kovacevic 
137*3d0fad56SMarko Kovacevic int
138*3d0fad56SMarko Kovacevic parser_read_uint32_val(const char *key, char *src, struct fips_val *val);
139*3d0fad56SMarko Kovacevic 
140*3d0fad56SMarko Kovacevic int
141*3d0fad56SMarko Kovacevic writeback_hex_str(const char *key, char *dst, struct fips_val *val);
142*3d0fad56SMarko Kovacevic 
143*3d0fad56SMarko Kovacevic void
144*3d0fad56SMarko Kovacevic parse_write_hex_str(struct fips_val *src);
145*3d0fad56SMarko Kovacevic 
146*3d0fad56SMarko Kovacevic int
147*3d0fad56SMarko Kovacevic update_info_vec(uint32_t count);
148*3d0fad56SMarko Kovacevic 
149*3d0fad56SMarko Kovacevic #endif
150