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