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 #include <sys/stat.h> 6*3d0fad56SMarko Kovacevic #include <getopt.h> 7*3d0fad56SMarko Kovacevic #include <dirent.h> 8*3d0fad56SMarko Kovacevic 9*3d0fad56SMarko Kovacevic #include <rte_cryptodev.h> 10*3d0fad56SMarko Kovacevic #include <rte_cryptodev_pmd.h> 11*3d0fad56SMarko Kovacevic #include <rte_mempool.h> 12*3d0fad56SMarko Kovacevic #include <rte_mbuf.h> 13*3d0fad56SMarko Kovacevic #include <rte_string_fns.h> 14*3d0fad56SMarko Kovacevic 15*3d0fad56SMarko Kovacevic #include "fips_validation.h" 16*3d0fad56SMarko Kovacevic 17*3d0fad56SMarko Kovacevic #define REQ_FILE_PATH_KEYWORD "req-file" 18*3d0fad56SMarko Kovacevic #define RSP_FILE_PATH_KEYWORD "rsp-file" 19*3d0fad56SMarko Kovacevic #define FOLDER_KEYWORD "path-is-folder" 20*3d0fad56SMarko Kovacevic #define CRYPTODEV_KEYWORD "cryptodev" 21*3d0fad56SMarko Kovacevic #define CRYPTODEV_ID_KEYWORD "cryptodev-id" 22*3d0fad56SMarko Kovacevic 23*3d0fad56SMarko Kovacevic struct fips_test_vector vec; 24*3d0fad56SMarko Kovacevic struct fips_test_interim_info info; 25*3d0fad56SMarko Kovacevic 26*3d0fad56SMarko Kovacevic struct cryptodev_fips_validate_env { 27*3d0fad56SMarko Kovacevic const char *req_path; 28*3d0fad56SMarko Kovacevic const char *rsp_path; 29*3d0fad56SMarko Kovacevic uint32_t is_path_folder; 30*3d0fad56SMarko Kovacevic uint32_t dev_id; 31*3d0fad56SMarko Kovacevic struct rte_mempool *mpool; 32*3d0fad56SMarko Kovacevic struct rte_mempool *op_pool; 33*3d0fad56SMarko Kovacevic struct rte_mbuf *mbuf; 34*3d0fad56SMarko Kovacevic struct rte_crypto_op *op; 35*3d0fad56SMarko Kovacevic struct rte_cryptodev_sym_session *sess; 36*3d0fad56SMarko Kovacevic } env; 37*3d0fad56SMarko Kovacevic 38*3d0fad56SMarko Kovacevic static int 39*3d0fad56SMarko Kovacevic cryptodev_fips_validate_app_int(void) 40*3d0fad56SMarko Kovacevic { 41*3d0fad56SMarko Kovacevic struct rte_cryptodev_config conf = {rte_socket_id(), 1}; 42*3d0fad56SMarko Kovacevic struct rte_cryptodev_qp_conf qp_conf = {128}; 43*3d0fad56SMarko Kovacevic int ret; 44*3d0fad56SMarko Kovacevic 45*3d0fad56SMarko Kovacevic ret = rte_cryptodev_configure(env.dev_id, &conf); 46*3d0fad56SMarko Kovacevic if (ret < 0) 47*3d0fad56SMarko Kovacevic return ret; 48*3d0fad56SMarko Kovacevic 49*3d0fad56SMarko Kovacevic env.mpool = rte_pktmbuf_pool_create("FIPS_MEMPOOL", 128, 0, 0, 50*3d0fad56SMarko Kovacevic UINT16_MAX, rte_socket_id()); 51*3d0fad56SMarko Kovacevic if (!env.mpool) 52*3d0fad56SMarko Kovacevic return ret; 53*3d0fad56SMarko Kovacevic 54*3d0fad56SMarko Kovacevic ret = rte_cryptodev_queue_pair_setup(env.dev_id, 0, &qp_conf, 55*3d0fad56SMarko Kovacevic rte_socket_id(), env.mpool); 56*3d0fad56SMarko Kovacevic if (ret < 0) 57*3d0fad56SMarko Kovacevic return ret; 58*3d0fad56SMarko Kovacevic 59*3d0fad56SMarko Kovacevic ret = -ENOMEM; 60*3d0fad56SMarko Kovacevic 61*3d0fad56SMarko Kovacevic env.op_pool = rte_crypto_op_pool_create( 62*3d0fad56SMarko Kovacevic "FIPS_OP_POOL", 63*3d0fad56SMarko Kovacevic RTE_CRYPTO_OP_TYPE_SYMMETRIC, 64*3d0fad56SMarko Kovacevic 1, 0, 65*3d0fad56SMarko Kovacevic 16, 66*3d0fad56SMarko Kovacevic rte_socket_id()); 67*3d0fad56SMarko Kovacevic if (!env.op_pool) 68*3d0fad56SMarko Kovacevic goto error_exit; 69*3d0fad56SMarko Kovacevic 70*3d0fad56SMarko Kovacevic env.mbuf = rte_pktmbuf_alloc(env.mpool); 71*3d0fad56SMarko Kovacevic if (!env.mbuf) 72*3d0fad56SMarko Kovacevic goto error_exit; 73*3d0fad56SMarko Kovacevic 74*3d0fad56SMarko Kovacevic env.op = rte_crypto_op_alloc(env.op_pool, RTE_CRYPTO_OP_TYPE_SYMMETRIC); 75*3d0fad56SMarko Kovacevic if (!env.op) 76*3d0fad56SMarko Kovacevic goto error_exit; 77*3d0fad56SMarko Kovacevic 78*3d0fad56SMarko Kovacevic return 0; 79*3d0fad56SMarko Kovacevic 80*3d0fad56SMarko Kovacevic error_exit: 81*3d0fad56SMarko Kovacevic rte_mempool_free(env.mpool); 82*3d0fad56SMarko Kovacevic if (env.op_pool) 83*3d0fad56SMarko Kovacevic rte_mempool_free(env.op_pool); 84*3d0fad56SMarko Kovacevic 85*3d0fad56SMarko Kovacevic return ret; 86*3d0fad56SMarko Kovacevic } 87*3d0fad56SMarko Kovacevic 88*3d0fad56SMarko Kovacevic static void 89*3d0fad56SMarko Kovacevic cryptodev_fips_validate_app_uninit(void) 90*3d0fad56SMarko Kovacevic { 91*3d0fad56SMarko Kovacevic rte_pktmbuf_free(env.mbuf); 92*3d0fad56SMarko Kovacevic rte_crypto_op_free(env.op); 93*3d0fad56SMarko Kovacevic rte_cryptodev_sym_session_clear(env.dev_id, env.sess); 94*3d0fad56SMarko Kovacevic rte_cryptodev_sym_session_free(env.sess); 95*3d0fad56SMarko Kovacevic rte_mempool_free(env.mpool); 96*3d0fad56SMarko Kovacevic rte_mempool_free(env.op_pool); 97*3d0fad56SMarko Kovacevic } 98*3d0fad56SMarko Kovacevic 99*3d0fad56SMarko Kovacevic static int 100*3d0fad56SMarko Kovacevic fips_test_one_file(void); 101*3d0fad56SMarko Kovacevic 102*3d0fad56SMarko Kovacevic static int 103*3d0fad56SMarko Kovacevic parse_cryptodev_arg(char *arg) 104*3d0fad56SMarko Kovacevic { 105*3d0fad56SMarko Kovacevic int id = rte_cryptodev_get_dev_id(arg); 106*3d0fad56SMarko Kovacevic 107*3d0fad56SMarko Kovacevic if (id < 0) { 108*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: invalid cryptodev name %s\n", 109*3d0fad56SMarko Kovacevic id, arg); 110*3d0fad56SMarko Kovacevic return id; 111*3d0fad56SMarko Kovacevic } 112*3d0fad56SMarko Kovacevic 113*3d0fad56SMarko Kovacevic env.dev_id = (uint32_t)id; 114*3d0fad56SMarko Kovacevic 115*3d0fad56SMarko Kovacevic return 0; 116*3d0fad56SMarko Kovacevic } 117*3d0fad56SMarko Kovacevic 118*3d0fad56SMarko Kovacevic static int 119*3d0fad56SMarko Kovacevic parse_cryptodev_id_arg(char *arg) 120*3d0fad56SMarko Kovacevic { 121*3d0fad56SMarko Kovacevic uint32_t cryptodev_id; 122*3d0fad56SMarko Kovacevic 123*3d0fad56SMarko Kovacevic if (parser_read_uint32(&cryptodev_id, arg) < 0) { 124*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: invalid cryptodev id %s\n", 125*3d0fad56SMarko Kovacevic -EINVAL, arg); 126*3d0fad56SMarko Kovacevic return -1; 127*3d0fad56SMarko Kovacevic } 128*3d0fad56SMarko Kovacevic 129*3d0fad56SMarko Kovacevic 130*3d0fad56SMarko Kovacevic if (!rte_cryptodev_pmd_is_valid_dev(cryptodev_id)) { 131*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: invalid cryptodev id %s\n", 132*3d0fad56SMarko Kovacevic cryptodev_id, arg); 133*3d0fad56SMarko Kovacevic return -1; 134*3d0fad56SMarko Kovacevic } 135*3d0fad56SMarko Kovacevic 136*3d0fad56SMarko Kovacevic env.dev_id = (uint32_t)cryptodev_id; 137*3d0fad56SMarko Kovacevic 138*3d0fad56SMarko Kovacevic return 0; 139*3d0fad56SMarko Kovacevic } 140*3d0fad56SMarko Kovacevic 141*3d0fad56SMarko Kovacevic static void 142*3d0fad56SMarko Kovacevic cryptodev_fips_validate_usage(const char *prgname) 143*3d0fad56SMarko Kovacevic { 144*3d0fad56SMarko Kovacevic printf("%s [EAL options] --\n" 145*3d0fad56SMarko Kovacevic " --%s: REQUEST-FILE-PATH\n" 146*3d0fad56SMarko Kovacevic " --%s: RESPONSE-FILE-PATH\n" 147*3d0fad56SMarko Kovacevic " --%s: indicating both paths are folders\n" 148*3d0fad56SMarko Kovacevic " --%s: CRYPTODEV-NAME\n" 149*3d0fad56SMarko Kovacevic " --%s: CRYPTODEV-ID-NAME\n", 150*3d0fad56SMarko Kovacevic prgname, REQ_FILE_PATH_KEYWORD, RSP_FILE_PATH_KEYWORD, 151*3d0fad56SMarko Kovacevic FOLDER_KEYWORD, CRYPTODEV_KEYWORD, CRYPTODEV_ID_KEYWORD); 152*3d0fad56SMarko Kovacevic } 153*3d0fad56SMarko Kovacevic 154*3d0fad56SMarko Kovacevic static int 155*3d0fad56SMarko Kovacevic cryptodev_fips_validate_parse_args(int argc, char **argv) 156*3d0fad56SMarko Kovacevic { 157*3d0fad56SMarko Kovacevic int opt, ret; 158*3d0fad56SMarko Kovacevic char *prgname = argv[0]; 159*3d0fad56SMarko Kovacevic char **argvopt; 160*3d0fad56SMarko Kovacevic int option_index; 161*3d0fad56SMarko Kovacevic struct option lgopts[] = { 162*3d0fad56SMarko Kovacevic {REQ_FILE_PATH_KEYWORD, required_argument, 0, 0}, 163*3d0fad56SMarko Kovacevic {RSP_FILE_PATH_KEYWORD, required_argument, 0, 0}, 164*3d0fad56SMarko Kovacevic {FOLDER_KEYWORD, no_argument, 0, 0}, 165*3d0fad56SMarko Kovacevic {CRYPTODEV_KEYWORD, required_argument, 0, 0}, 166*3d0fad56SMarko Kovacevic {CRYPTODEV_ID_KEYWORD, required_argument, 0, 0}, 167*3d0fad56SMarko Kovacevic {NULL, 0, 0, 0} 168*3d0fad56SMarko Kovacevic }; 169*3d0fad56SMarko Kovacevic 170*3d0fad56SMarko Kovacevic argvopt = argv; 171*3d0fad56SMarko Kovacevic 172*3d0fad56SMarko Kovacevic while ((opt = getopt_long(argc, argvopt, "s:", 173*3d0fad56SMarko Kovacevic lgopts, &option_index)) != EOF) { 174*3d0fad56SMarko Kovacevic 175*3d0fad56SMarko Kovacevic switch (opt) { 176*3d0fad56SMarko Kovacevic case 0: 177*3d0fad56SMarko Kovacevic if (strcmp(lgopts[option_index].name, 178*3d0fad56SMarko Kovacevic REQ_FILE_PATH_KEYWORD) == 0) 179*3d0fad56SMarko Kovacevic env.req_path = optarg; 180*3d0fad56SMarko Kovacevic else if (strcmp(lgopts[option_index].name, 181*3d0fad56SMarko Kovacevic RSP_FILE_PATH_KEYWORD) == 0) 182*3d0fad56SMarko Kovacevic env.rsp_path = optarg; 183*3d0fad56SMarko Kovacevic else if (strcmp(lgopts[option_index].name, 184*3d0fad56SMarko Kovacevic FOLDER_KEYWORD) == 0) 185*3d0fad56SMarko Kovacevic env.is_path_folder = 1; 186*3d0fad56SMarko Kovacevic else if (strcmp(lgopts[option_index].name, 187*3d0fad56SMarko Kovacevic CRYPTODEV_KEYWORD) == 0) { 188*3d0fad56SMarko Kovacevic ret = parse_cryptodev_arg(optarg); 189*3d0fad56SMarko Kovacevic if (ret < 0) { 190*3d0fad56SMarko Kovacevic cryptodev_fips_validate_usage(prgname); 191*3d0fad56SMarko Kovacevic return -EINVAL; 192*3d0fad56SMarko Kovacevic } 193*3d0fad56SMarko Kovacevic } else if (strcmp(lgopts[option_index].name, 194*3d0fad56SMarko Kovacevic CRYPTODEV_ID_KEYWORD) == 0) { 195*3d0fad56SMarko Kovacevic ret = parse_cryptodev_id_arg(optarg); 196*3d0fad56SMarko Kovacevic if (ret < 0) { 197*3d0fad56SMarko Kovacevic cryptodev_fips_validate_usage(prgname); 198*3d0fad56SMarko Kovacevic return -EINVAL; 199*3d0fad56SMarko Kovacevic } 200*3d0fad56SMarko Kovacevic } else { 201*3d0fad56SMarko Kovacevic cryptodev_fips_validate_usage(prgname); 202*3d0fad56SMarko Kovacevic return -EINVAL; 203*3d0fad56SMarko Kovacevic } 204*3d0fad56SMarko Kovacevic break; 205*3d0fad56SMarko Kovacevic default: 206*3d0fad56SMarko Kovacevic return -1; 207*3d0fad56SMarko Kovacevic } 208*3d0fad56SMarko Kovacevic } 209*3d0fad56SMarko Kovacevic 210*3d0fad56SMarko Kovacevic if (env.req_path == NULL || env.rsp_path == NULL || 211*3d0fad56SMarko Kovacevic env.dev_id == UINT32_MAX) { 212*3d0fad56SMarko Kovacevic cryptodev_fips_validate_usage(prgname); 213*3d0fad56SMarko Kovacevic return -EINVAL; 214*3d0fad56SMarko Kovacevic } 215*3d0fad56SMarko Kovacevic 216*3d0fad56SMarko Kovacevic return 0; 217*3d0fad56SMarko Kovacevic } 218*3d0fad56SMarko Kovacevic 219*3d0fad56SMarko Kovacevic int 220*3d0fad56SMarko Kovacevic main(int argc, char *argv[]) 221*3d0fad56SMarko Kovacevic { 222*3d0fad56SMarko Kovacevic int ret; 223*3d0fad56SMarko Kovacevic 224*3d0fad56SMarko Kovacevic ret = rte_eal_init(argc, argv); 225*3d0fad56SMarko Kovacevic if (ret < 0) { 226*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Failed init\n", ret); 227*3d0fad56SMarko Kovacevic return -1; 228*3d0fad56SMarko Kovacevic } 229*3d0fad56SMarko Kovacevic 230*3d0fad56SMarko Kovacevic argc -= ret; 231*3d0fad56SMarko Kovacevic argv += ret; 232*3d0fad56SMarko Kovacevic 233*3d0fad56SMarko Kovacevic ret = cryptodev_fips_validate_parse_args(argc, argv); 234*3d0fad56SMarko Kovacevic if (ret < 0) 235*3d0fad56SMarko Kovacevic rte_exit(EXIT_FAILURE, "Failed to parse arguments!\n"); 236*3d0fad56SMarko Kovacevic 237*3d0fad56SMarko Kovacevic ret = cryptodev_fips_validate_app_int(); 238*3d0fad56SMarko Kovacevic if (ret < 0) { 239*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Failed init\n", ret); 240*3d0fad56SMarko Kovacevic return -1; 241*3d0fad56SMarko Kovacevic } 242*3d0fad56SMarko Kovacevic 243*3d0fad56SMarko Kovacevic if (!env.is_path_folder) { 244*3d0fad56SMarko Kovacevic printf("Processing file %s... ", env.req_path); 245*3d0fad56SMarko Kovacevic 246*3d0fad56SMarko Kovacevic ret = fips_test_init(env.req_path, env.rsp_path, 247*3d0fad56SMarko Kovacevic rte_cryptodev_name_get(env.dev_id)); 248*3d0fad56SMarko Kovacevic if (ret < 0) { 249*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Failed test %s\n", 250*3d0fad56SMarko Kovacevic ret, env.req_path); 251*3d0fad56SMarko Kovacevic goto exit; 252*3d0fad56SMarko Kovacevic } 253*3d0fad56SMarko Kovacevic 254*3d0fad56SMarko Kovacevic 255*3d0fad56SMarko Kovacevic ret = fips_test_one_file(); 256*3d0fad56SMarko Kovacevic if (ret < 0) { 257*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Failed test %s\n", 258*3d0fad56SMarko Kovacevic ret, env.req_path); 259*3d0fad56SMarko Kovacevic goto exit; 260*3d0fad56SMarko Kovacevic } 261*3d0fad56SMarko Kovacevic 262*3d0fad56SMarko Kovacevic printf("Done\n"); 263*3d0fad56SMarko Kovacevic 264*3d0fad56SMarko Kovacevic } else { 265*3d0fad56SMarko Kovacevic struct dirent *dir; 266*3d0fad56SMarko Kovacevic DIR *d_req, *d_rsp; 267*3d0fad56SMarko Kovacevic char req_path[1024]; 268*3d0fad56SMarko Kovacevic char rsp_path[1024]; 269*3d0fad56SMarko Kovacevic 270*3d0fad56SMarko Kovacevic d_req = opendir(env.req_path); 271*3d0fad56SMarko Kovacevic if (!d_req) { 272*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Path %s not exist\n", 273*3d0fad56SMarko Kovacevic -EINVAL, env.req_path); 274*3d0fad56SMarko Kovacevic goto exit; 275*3d0fad56SMarko Kovacevic } 276*3d0fad56SMarko Kovacevic 277*3d0fad56SMarko Kovacevic d_rsp = opendir(env.rsp_path); 278*3d0fad56SMarko Kovacevic if (!d_rsp) { 279*3d0fad56SMarko Kovacevic ret = mkdir(env.rsp_path, 0700); 280*3d0fad56SMarko Kovacevic if (ret == 0) 281*3d0fad56SMarko Kovacevic d_rsp = opendir(env.rsp_path); 282*3d0fad56SMarko Kovacevic else { 283*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Invalid %s\n", 284*3d0fad56SMarko Kovacevic -EINVAL, env.rsp_path); 285*3d0fad56SMarko Kovacevic goto exit; 286*3d0fad56SMarko Kovacevic } 287*3d0fad56SMarko Kovacevic } 288*3d0fad56SMarko Kovacevic closedir(d_rsp); 289*3d0fad56SMarko Kovacevic 290*3d0fad56SMarko Kovacevic while ((dir = readdir(d_req)) != NULL) { 291*3d0fad56SMarko Kovacevic if (strstr(dir->d_name, "req") == NULL) 292*3d0fad56SMarko Kovacevic continue; 293*3d0fad56SMarko Kovacevic 294*3d0fad56SMarko Kovacevic snprintf(req_path, 1023, "%s/%s", env.req_path, 295*3d0fad56SMarko Kovacevic dir->d_name); 296*3d0fad56SMarko Kovacevic snprintf(rsp_path, 1023, "%s/%s", env.rsp_path, 297*3d0fad56SMarko Kovacevic dir->d_name); 298*3d0fad56SMarko Kovacevic strlcpy(strstr(rsp_path, "req"), "rsp", 4); 299*3d0fad56SMarko Kovacevic 300*3d0fad56SMarko Kovacevic printf("Processing file %s... ", req_path); 301*3d0fad56SMarko Kovacevic 302*3d0fad56SMarko Kovacevic ret = fips_test_init(req_path, rsp_path, 303*3d0fad56SMarko Kovacevic rte_cryptodev_name_get(env.dev_id)); 304*3d0fad56SMarko Kovacevic if (ret < 0) { 305*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Failed test %s\n", 306*3d0fad56SMarko Kovacevic ret, req_path); 307*3d0fad56SMarko Kovacevic break; 308*3d0fad56SMarko Kovacevic } 309*3d0fad56SMarko Kovacevic 310*3d0fad56SMarko Kovacevic ret = fips_test_one_file(); 311*3d0fad56SMarko Kovacevic if (ret < 0) { 312*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Failed test %s\n", 313*3d0fad56SMarko Kovacevic ret, req_path); 314*3d0fad56SMarko Kovacevic break; 315*3d0fad56SMarko Kovacevic } 316*3d0fad56SMarko Kovacevic 317*3d0fad56SMarko Kovacevic printf("Done\n"); 318*3d0fad56SMarko Kovacevic } 319*3d0fad56SMarko Kovacevic 320*3d0fad56SMarko Kovacevic closedir(d_req); 321*3d0fad56SMarko Kovacevic } 322*3d0fad56SMarko Kovacevic 323*3d0fad56SMarko Kovacevic 324*3d0fad56SMarko Kovacevic exit: 325*3d0fad56SMarko Kovacevic fips_test_clear(); 326*3d0fad56SMarko Kovacevic cryptodev_fips_validate_app_uninit(); 327*3d0fad56SMarko Kovacevic 328*3d0fad56SMarko Kovacevic return ret; 329*3d0fad56SMarko Kovacevic 330*3d0fad56SMarko Kovacevic } 331*3d0fad56SMarko Kovacevic 332*3d0fad56SMarko Kovacevic static void 333*3d0fad56SMarko Kovacevic print_test_block(void) 334*3d0fad56SMarko Kovacevic { 335*3d0fad56SMarko Kovacevic uint32_t i; 336*3d0fad56SMarko Kovacevic 337*3d0fad56SMarko Kovacevic for (i = 0; i < info.nb_vec_lines; i++) 338*3d0fad56SMarko Kovacevic printf("%s\n", info.vec[i]); 339*3d0fad56SMarko Kovacevic 340*3d0fad56SMarko Kovacevic printf("\n"); 341*3d0fad56SMarko Kovacevic } 342*3d0fad56SMarko Kovacevic 343*3d0fad56SMarko Kovacevic static int 344*3d0fad56SMarko Kovacevic fips_test_one_file(void) 345*3d0fad56SMarko Kovacevic { 346*3d0fad56SMarko Kovacevic int fetch_ret = 0, ret; 347*3d0fad56SMarko Kovacevic 348*3d0fad56SMarko Kovacevic while (fetch_ret == 0) { 349*3d0fad56SMarko Kovacevic fetch_ret = fips_test_fetch_one_block(); 350*3d0fad56SMarko Kovacevic if (fetch_ret < 0) { 351*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Fetch block\n", 352*3d0fad56SMarko Kovacevic fetch_ret); 353*3d0fad56SMarko Kovacevic ret = fetch_ret; 354*3d0fad56SMarko Kovacevic goto error_one_case; 355*3d0fad56SMarko Kovacevic } 356*3d0fad56SMarko Kovacevic 357*3d0fad56SMarko Kovacevic if (info.nb_vec_lines == 0) { 358*3d0fad56SMarko Kovacevic if (fetch_ret == -EOF) 359*3d0fad56SMarko Kovacevic break; 360*3d0fad56SMarko Kovacevic 361*3d0fad56SMarko Kovacevic fprintf(info.fp_wr, "\n"); 362*3d0fad56SMarko Kovacevic continue; 363*3d0fad56SMarko Kovacevic } 364*3d0fad56SMarko Kovacevic 365*3d0fad56SMarko Kovacevic ret = fips_test_parse_one_case(); 366*3d0fad56SMarko Kovacevic switch (ret) { 367*3d0fad56SMarko Kovacevic case 0: 368*3d0fad56SMarko Kovacevic if (ret == 0) 369*3d0fad56SMarko Kovacevic break; 370*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: test block\n", 371*3d0fad56SMarko Kovacevic ret); 372*3d0fad56SMarko Kovacevic goto error_one_case; 373*3d0fad56SMarko Kovacevic case 1: 374*3d0fad56SMarko Kovacevic break; 375*3d0fad56SMarko Kovacevic default: 376*3d0fad56SMarko Kovacevic RTE_LOG(ERR, USER1, "Error %i: Parse block\n", 377*3d0fad56SMarko Kovacevic ret); 378*3d0fad56SMarko Kovacevic goto error_one_case; 379*3d0fad56SMarko Kovacevic } 380*3d0fad56SMarko Kovacevic 381*3d0fad56SMarko Kovacevic continue; 382*3d0fad56SMarko Kovacevic error_one_case: 383*3d0fad56SMarko Kovacevic print_test_block(); 384*3d0fad56SMarko Kovacevic } 385*3d0fad56SMarko Kovacevic 386*3d0fad56SMarko Kovacevic fips_test_clear(); 387*3d0fad56SMarko Kovacevic 388*3d0fad56SMarko Kovacevic } 389