1f4797baeSDamian Nowak /* SPDX-License-Identifier: BSD-3-Clause 2f4797baeSDamian Nowak * Copyright(c) 2019 Intel Corporation 3f4797baeSDamian Nowak */ 4f4797baeSDamian Nowak 5f4797baeSDamian Nowak #include <string.h> 6f4797baeSDamian Nowak #include <time.h> 7f4797baeSDamian Nowak #include <stdio.h> 88bc8ba43SGowrishankar Muthukrishnan #include <stdlib.h> 9f4797baeSDamian Nowak 10f4797baeSDamian Nowak #include <rte_cryptodev.h> 11f4797baeSDamian Nowak 12f4797baeSDamian Nowak #include "fips_validation.h" 13f4797baeSDamian Nowak 14f4797baeSDamian Nowak #define ALGO_PREFIX "[L = " 15f4797baeSDamian Nowak #define MSGLEN_STR "Len = " 16f4797baeSDamian Nowak #define MSG_STR "Msg = " 17f4797baeSDamian Nowak #define MD_STR "MD = " 18f4797baeSDamian Nowak #define SEED_STR "Seed = " 19f4797baeSDamian Nowak #define MCT_STR "Monte" 20f4797baeSDamian Nowak 21d5c24714SGowrishankar Muthukrishnan #define ALGO_JSON_STR "algorithm" 22d5c24714SGowrishankar Muthukrishnan #define TESTTYPE_JSON_STR "testType" 23d5c24714SGowrishankar Muthukrishnan 24d5c24714SGowrishankar Muthukrishnan #define PT_JSON_STR "msg" 25*225f04fbSGowrishankar Muthukrishnan #define OUTLEN_JSON_STR "outLen" 26*225f04fbSGowrishankar Muthukrishnan #define MINOUTLEN_JSON_STR "minOutLen" 27*225f04fbSGowrishankar Muthukrishnan #define MAXOUTLEN_JSON_STR "maxOutLen" 28d5c24714SGowrishankar Muthukrishnan 29f4797baeSDamian Nowak struct plain_hash_size_conversion { 30f4797baeSDamian Nowak const char *str; 31f4797baeSDamian Nowak enum rte_crypto_auth_algorithm algo; 32f4797baeSDamian Nowak } phsc[] = { 33f4797baeSDamian Nowak {"20", RTE_CRYPTO_AUTH_SHA1}, 34f4797baeSDamian Nowak {"28", RTE_CRYPTO_AUTH_SHA224}, 35f4797baeSDamian Nowak {"32", RTE_CRYPTO_AUTH_SHA256}, 36f4797baeSDamian Nowak {"48", RTE_CRYPTO_AUTH_SHA384}, 37f4797baeSDamian Nowak {"64", RTE_CRYPTO_AUTH_SHA512}, 381ea7940eSGowrishankar Muthukrishnan {"28", RTE_CRYPTO_AUTH_SHA3_224}, 391ea7940eSGowrishankar Muthukrishnan {"32", RTE_CRYPTO_AUTH_SHA3_256}, 401ea7940eSGowrishankar Muthukrishnan {"48", RTE_CRYPTO_AUTH_SHA3_384}, 411ea7940eSGowrishankar Muthukrishnan {"64", RTE_CRYPTO_AUTH_SHA3_512}, 42*225f04fbSGowrishankar Muthukrishnan {"16", RTE_CRYPTO_AUTH_SHAKE_128}, 43*225f04fbSGowrishankar Muthukrishnan {"32", RTE_CRYPTO_AUTH_SHAKE_256}, 44f4797baeSDamian Nowak }; 45f4797baeSDamian Nowak 468bc8ba43SGowrishankar Muthukrishnan int 478bc8ba43SGowrishankar Muthukrishnan parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo) 488bc8ba43SGowrishankar Muthukrishnan { 498bc8ba43SGowrishankar Muthukrishnan int ret = -EINVAL; 508bc8ba43SGowrishankar Muthukrishnan uint8_t i; 518bc8ba43SGowrishankar Muthukrishnan 528bc8ba43SGowrishankar Muthukrishnan for (i = 0; i < RTE_DIM(phsc); i++) { 538bc8ba43SGowrishankar Muthukrishnan if (phsc[i].algo == algo) { 548bc8ba43SGowrishankar Muthukrishnan ret = atoi(phsc[i].str); 558bc8ba43SGowrishankar Muthukrishnan break; 568bc8ba43SGowrishankar Muthukrishnan } 578bc8ba43SGowrishankar Muthukrishnan } 588bc8ba43SGowrishankar Muthukrishnan 598bc8ba43SGowrishankar Muthukrishnan return ret; 608bc8ba43SGowrishankar Muthukrishnan } 618bc8ba43SGowrishankar Muthukrishnan 62f4797baeSDamian Nowak static int 63f2fc83b4SThomas Monjalon parse_interim_algo(__rte_unused const char *key, 64f4797baeSDamian Nowak char *text, 65f2fc83b4SThomas Monjalon __rte_unused struct fips_val *val) 66f4797baeSDamian Nowak { 67f4797baeSDamian Nowak uint32_t i; 68f4797baeSDamian Nowak 69f4797baeSDamian Nowak for (i = 0; i < RTE_DIM(phsc); i++) { 70f4797baeSDamian Nowak if (strstr(text, phsc[i].str)) { 71f4797baeSDamian Nowak info.interim_info.sha_data.algo = phsc[i].algo; 72f4797baeSDamian Nowak parser_read_uint32_val(ALGO_PREFIX, 73f4797baeSDamian Nowak text, &vec.cipher_auth.digest); 74f4797baeSDamian Nowak break; 75f4797baeSDamian Nowak } 76f4797baeSDamian Nowak } 77f4797baeSDamian Nowak 78f4797baeSDamian Nowak if (i == RTE_DIM(phsc)) 79f4797baeSDamian Nowak return -1; 80f4797baeSDamian Nowak 81f4797baeSDamian Nowak return 0; 82f4797baeSDamian Nowak } 83f4797baeSDamian Nowak 84f4797baeSDamian Nowak struct fips_test_callback sha_tests_vectors[] = { 85f4797baeSDamian Nowak {MSGLEN_STR, parser_read_uint32_bit_val, &vec.pt}, 86f4797baeSDamian Nowak {MSG_STR, parse_uint8_known_len_hex_str, &vec.pt}, 87f4797baeSDamian Nowak {SEED_STR, parse_uint8_hex_str, &vec.cipher_auth.digest}, 88f4797baeSDamian Nowak {NULL, NULL, NULL} /**< end pointer */ 89f4797baeSDamian Nowak }; 90f4797baeSDamian Nowak 91f4797baeSDamian Nowak struct fips_test_callback sha_tests_interim_vectors[] = { 92f4797baeSDamian Nowak {ALGO_PREFIX, parse_interim_algo, NULL}, 93f4797baeSDamian Nowak {NULL, NULL, NULL} /**< end pointer */ 94f4797baeSDamian Nowak }; 95f4797baeSDamian Nowak 96d5c24714SGowrishankar Muthukrishnan #ifdef USE_JANSSON 97*225f04fbSGowrishankar Muthukrishnan static int 98*225f04fbSGowrishankar Muthukrishnan parse_interim_str(const char *key, char *src, struct fips_val *val) 99*225f04fbSGowrishankar Muthukrishnan { 100*225f04fbSGowrishankar Muthukrishnan RTE_SET_USED(val); 101*225f04fbSGowrishankar Muthukrishnan 102*225f04fbSGowrishankar Muthukrishnan if (strcmp(key, MINOUTLEN_JSON_STR) == 0) 103*225f04fbSGowrishankar Muthukrishnan info.interim_info.sha_data.min_outlen = atoi(src) / 8; 104*225f04fbSGowrishankar Muthukrishnan else if (strcmp(key, MAXOUTLEN_JSON_STR) == 0) 105*225f04fbSGowrishankar Muthukrishnan vec.cipher_auth.digest.len = atoi(src) / 8; 106*225f04fbSGowrishankar Muthukrishnan 107*225f04fbSGowrishankar Muthukrishnan return 0; 108*225f04fbSGowrishankar Muthukrishnan } 109*225f04fbSGowrishankar Muthukrishnan 110d5c24714SGowrishankar Muthukrishnan static struct { 111d5c24714SGowrishankar Muthukrishnan uint32_t type; 112d5c24714SGowrishankar Muthukrishnan const char *desc; 113d5c24714SGowrishankar Muthukrishnan } sha_test_types[] = { 114d5c24714SGowrishankar Muthukrishnan {SHA_MCT, "MCT"}, 115d5c24714SGowrishankar Muthukrishnan {SHA_AFT, "AFT"}, 116*225f04fbSGowrishankar Muthukrishnan {SHAKE_VOT, "VOT"}, 117d5c24714SGowrishankar Muthukrishnan }; 118d5c24714SGowrishankar Muthukrishnan 119d5c24714SGowrishankar Muthukrishnan static struct plain_hash_algorithms { 120d5c24714SGowrishankar Muthukrishnan const char *str; 121d5c24714SGowrishankar Muthukrishnan enum rte_crypto_auth_algorithm algo; 1221ea7940eSGowrishankar Muthukrishnan uint8_t md_blocks; 123d5c24714SGowrishankar Muthukrishnan } json_algorithms[] = { 1241ea7940eSGowrishankar Muthukrishnan {"SHA-1", RTE_CRYPTO_AUTH_SHA1, 3}, 1251ea7940eSGowrishankar Muthukrishnan {"SHA2-224", RTE_CRYPTO_AUTH_SHA224, 3}, 1261ea7940eSGowrishankar Muthukrishnan {"SHA2-256", RTE_CRYPTO_AUTH_SHA256, 3}, 1271ea7940eSGowrishankar Muthukrishnan {"SHA2-384", RTE_CRYPTO_AUTH_SHA384, 3}, 1281ea7940eSGowrishankar Muthukrishnan {"SHA2-512", RTE_CRYPTO_AUTH_SHA512, 3}, 1291ea7940eSGowrishankar Muthukrishnan {"SHA3-224", RTE_CRYPTO_AUTH_SHA3_224, 1}, 1301ea7940eSGowrishankar Muthukrishnan {"SHA3-256", RTE_CRYPTO_AUTH_SHA3_256, 1}, 1311ea7940eSGowrishankar Muthukrishnan {"SHA3-384", RTE_CRYPTO_AUTH_SHA3_384, 1}, 1321ea7940eSGowrishankar Muthukrishnan {"SHA3-512", RTE_CRYPTO_AUTH_SHA3_512, 1}, 133*225f04fbSGowrishankar Muthukrishnan {"SHAKE-128", RTE_CRYPTO_AUTH_SHAKE_128, 1}, 134*225f04fbSGowrishankar Muthukrishnan {"SHAKE-256", RTE_CRYPTO_AUTH_SHAKE_256, 1}, 135d5c24714SGowrishankar Muthukrishnan }; 136d5c24714SGowrishankar Muthukrishnan 137d5c24714SGowrishankar Muthukrishnan struct fips_test_callback sha_tests_json_vectors[] = { 138d5c24714SGowrishankar Muthukrishnan {PT_JSON_STR, parse_uint8_hex_str, &vec.pt}, 139*225f04fbSGowrishankar Muthukrishnan {OUTLEN_JSON_STR, parser_read_uint32_bit_val, &vec.cipher_auth.digest}, 140*225f04fbSGowrishankar Muthukrishnan {NULL, NULL, NULL} /**< end pointer */ 141*225f04fbSGowrishankar Muthukrishnan }; 142*225f04fbSGowrishankar Muthukrishnan 143*225f04fbSGowrishankar Muthukrishnan struct fips_test_callback sha_tests_interim_json_vectors[] = { 144*225f04fbSGowrishankar Muthukrishnan {MINOUTLEN_JSON_STR, parse_interim_str, NULL}, 145*225f04fbSGowrishankar Muthukrishnan {MAXOUTLEN_JSON_STR, parse_interim_str, NULL}, 146d5c24714SGowrishankar Muthukrishnan {NULL, NULL, NULL} /**< end pointer */ 147d5c24714SGowrishankar Muthukrishnan }; 148d5c24714SGowrishankar Muthukrishnan #endif /* USE_JANSSON */ 149d5c24714SGowrishankar Muthukrishnan 150f4797baeSDamian Nowak static int 151f4797baeSDamian Nowak parse_test_sha_writeback(struct fips_val *val) // ! 152f4797baeSDamian Nowak { 153f4797baeSDamian Nowak struct fips_val val_local; 154f4797baeSDamian Nowak 155f4797baeSDamian Nowak fprintf(info.fp_wr, "%s", MD_STR); 156f4797baeSDamian Nowak 157f4797baeSDamian Nowak val_local.val = val->val + vec.pt.len; 158f4797baeSDamian Nowak val_local.len = vec.cipher_auth.digest.len; 159f4797baeSDamian Nowak 160f4797baeSDamian Nowak parse_write_hex_str(&val_local); 161f4797baeSDamian Nowak return 0; 162f4797baeSDamian Nowak } 163f4797baeSDamian Nowak 164f4797baeSDamian Nowak static int 165f4797baeSDamian Nowak rsp_test_sha_check(struct fips_val *val) 166f4797baeSDamian Nowak { 167f4797baeSDamian Nowak if (memcmp(val->val + vec.pt.len, vec.cipher_auth.digest.val, 168f4797baeSDamian Nowak vec.cipher_auth.digest.len) == 0) 169f4797baeSDamian Nowak fprintf(info.fp_wr, "Success\n"); 170f4797baeSDamian Nowak else 171f4797baeSDamian Nowak fprintf(info.fp_wr, "Failed\n"); 172f4797baeSDamian Nowak 173f4797baeSDamian Nowak return 0; 174f4797baeSDamian Nowak } 175f4797baeSDamian Nowak 176f4797baeSDamian Nowak int 177f4797baeSDamian Nowak parse_test_sha_init(void) 178f4797baeSDamian Nowak { 179f4797baeSDamian Nowak uint32_t i; 180f4797baeSDamian Nowak 181f4797baeSDamian Nowak info.interim_info.sha_data.test_type = SHA_KAT; 182f4797baeSDamian Nowak for (i = 0; i < info.nb_vec_lines; i++) { 183f4797baeSDamian Nowak char *line = info.vec[i]; 184f4797baeSDamian Nowak if (strstr(line, MCT_STR)) 185f4797baeSDamian Nowak info.interim_info.sha_data.test_type = SHA_MCT; 186f4797baeSDamian Nowak } 187f4797baeSDamian Nowak 188f4797baeSDamian Nowak info.op = FIPS_TEST_ENC_AUTH_GEN; 189f4797baeSDamian Nowak info.parse_writeback = parse_test_sha_writeback; 190f4797baeSDamian Nowak info.callbacks = sha_tests_vectors; 191f4797baeSDamian Nowak info.interim_callbacks = sha_tests_interim_vectors; 192f4797baeSDamian Nowak info.writeback_callbacks = NULL; 193f4797baeSDamian Nowak info.kat_check = rsp_test_sha_check; 194f4797baeSDamian Nowak return 0; 195f4797baeSDamian Nowak } 196d5c24714SGowrishankar Muthukrishnan 197d5c24714SGowrishankar Muthukrishnan #ifdef USE_JANSSON 198d5c24714SGowrishankar Muthukrishnan static int 199d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_writeback(struct fips_val *val) 200d5c24714SGowrishankar Muthukrishnan { 201d5c24714SGowrishankar Muthukrishnan struct fips_val val_local; 202d5c24714SGowrishankar Muthukrishnan json_t *tcId, *md; 203d5c24714SGowrishankar Muthukrishnan 204d5c24714SGowrishankar Muthukrishnan tcId = json_object_get(json_info.json_test_case, "tcId"); 205d5c24714SGowrishankar Muthukrishnan 206d5c24714SGowrishankar Muthukrishnan json_info.json_write_case = json_object(); 207d5c24714SGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "tcId", tcId); 208d5c24714SGowrishankar Muthukrishnan 209d5c24714SGowrishankar Muthukrishnan val_local.val = val->val + vec.pt.len; 210d5c24714SGowrishankar Muthukrishnan val_local.len = vec.cipher_auth.digest.len; 211d5c24714SGowrishankar Muthukrishnan 212d5c24714SGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &val_local); 213d5c24714SGowrishankar Muthukrishnan md = json_string(info.one_line_text); 214d5c24714SGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "md", md); 215d5c24714SGowrishankar Muthukrishnan 216*225f04fbSGowrishankar Muthukrishnan if (info.interim_info.sha_data.algo == RTE_CRYPTO_AUTH_SHAKE_128 || 217*225f04fbSGowrishankar Muthukrishnan info.interim_info.sha_data.algo == RTE_CRYPTO_AUTH_SHAKE_256) 218*225f04fbSGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "outLen", 219*225f04fbSGowrishankar Muthukrishnan json_integer(vec.cipher_auth.digest.len * 8)); 220*225f04fbSGowrishankar Muthukrishnan 221d5c24714SGowrishankar Muthukrishnan return 0; 222d5c24714SGowrishankar Muthukrishnan } 223d5c24714SGowrishankar Muthukrishnan 224d5c24714SGowrishankar Muthukrishnan static int 225d5c24714SGowrishankar Muthukrishnan parse_test_sha_mct_json_writeback(struct fips_val *val) 226d5c24714SGowrishankar Muthukrishnan { 227fc78f69dSGowrishankar Muthukrishnan json_t *tcId, *md, *resArr, *res; 228d5c24714SGowrishankar Muthukrishnan struct fips_val val_local; 229*225f04fbSGowrishankar Muthukrishnan bool is_shake = false; 230*225f04fbSGowrishankar Muthukrishnan 231*225f04fbSGowrishankar Muthukrishnan if (info.interim_info.sha_data.algo == RTE_CRYPTO_AUTH_SHAKE_128 || 232*225f04fbSGowrishankar Muthukrishnan info.interim_info.sha_data.algo == RTE_CRYPTO_AUTH_SHAKE_256) 233*225f04fbSGowrishankar Muthukrishnan is_shake = true; 234d5c24714SGowrishankar Muthukrishnan 235d5c24714SGowrishankar Muthukrishnan tcId = json_object_get(json_info.json_test_case, "tcId"); 236d5c24714SGowrishankar Muthukrishnan if (json_info.json_write_case) { 237d5c24714SGowrishankar Muthukrishnan json_t *wcId; 238d5c24714SGowrishankar Muthukrishnan 239d5c24714SGowrishankar Muthukrishnan wcId = json_object_get(json_info.json_write_case, "tcId"); 240d5c24714SGowrishankar Muthukrishnan if (!json_equal(tcId, wcId)) { 241d5c24714SGowrishankar Muthukrishnan json_info.json_write_case = json_object(); 242d5c24714SGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "tcId", tcId); 243d5c24714SGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "resultsArray", 244d5c24714SGowrishankar Muthukrishnan json_array()); 245*225f04fbSGowrishankar Muthukrishnan if (is_shake) 246*225f04fbSGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "outLen", 247*225f04fbSGowrishankar Muthukrishnan json_integer(0)); 248d5c24714SGowrishankar Muthukrishnan } 249d5c24714SGowrishankar Muthukrishnan } else { 250d5c24714SGowrishankar Muthukrishnan json_info.json_write_case = json_object(); 251d5c24714SGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "tcId", tcId); 252d5c24714SGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "resultsArray", json_array()); 253*225f04fbSGowrishankar Muthukrishnan if (is_shake) 254*225f04fbSGowrishankar Muthukrishnan json_object_set_new(json_info.json_write_case, "outLen", 255*225f04fbSGowrishankar Muthukrishnan json_integer(0)); 256d5c24714SGowrishankar Muthukrishnan } 257d5c24714SGowrishankar Muthukrishnan 258d5c24714SGowrishankar Muthukrishnan resArr = json_object_get(json_info.json_write_case, "resultsArray"); 259d5c24714SGowrishankar Muthukrishnan if (!json_is_array(resArr)) 260d5c24714SGowrishankar Muthukrishnan return -EINVAL; 261d5c24714SGowrishankar Muthukrishnan 262d5c24714SGowrishankar Muthukrishnan res = json_object(); 263d5c24714SGowrishankar Muthukrishnan 264fc78f69dSGowrishankar Muthukrishnan val_local.val = val->val + vec.pt.len; 265d5c24714SGowrishankar Muthukrishnan val_local.len = vec.cipher_auth.digest.len; 266d5c24714SGowrishankar Muthukrishnan 267d5c24714SGowrishankar Muthukrishnan writeback_hex_str("", info.one_line_text, &val_local); 268d5c24714SGowrishankar Muthukrishnan md = json_string(info.one_line_text); 269d5c24714SGowrishankar Muthukrishnan json_object_set_new(res, "md", md); 270d5c24714SGowrishankar Muthukrishnan 271*225f04fbSGowrishankar Muthukrishnan if (is_shake) 272*225f04fbSGowrishankar Muthukrishnan json_object_set_new(res, "outLen", json_integer(vec.cipher_auth.digest.len * 8)); 273*225f04fbSGowrishankar Muthukrishnan 274d5c24714SGowrishankar Muthukrishnan json_array_append_new(resArr, res); 275d5c24714SGowrishankar Muthukrishnan return 0; 276d5c24714SGowrishankar Muthukrishnan } 277d5c24714SGowrishankar Muthukrishnan 278d5c24714SGowrishankar Muthukrishnan int 279d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_algorithm(void) 280d5c24714SGowrishankar Muthukrishnan { 281d5c24714SGowrishankar Muthukrishnan json_t *algorithm_object; 282d5c24714SGowrishankar Muthukrishnan const char *algorithm_str; 283d5c24714SGowrishankar Muthukrishnan uint32_t i; 2848bc8ba43SGowrishankar Muthukrishnan int sz; 285d5c24714SGowrishankar Muthukrishnan 286d5c24714SGowrishankar Muthukrishnan algorithm_object = json_object_get(json_info.json_vector_set, "algorithm"); 287d5c24714SGowrishankar Muthukrishnan algorithm_str = json_string_value(algorithm_object); 288d5c24714SGowrishankar Muthukrishnan 289d5c24714SGowrishankar Muthukrishnan for (i = 0; i < RTE_DIM(json_algorithms); i++) { 290d5c24714SGowrishankar Muthukrishnan if (strstr(algorithm_str, json_algorithms[i].str)) { 291d5c24714SGowrishankar Muthukrishnan info.interim_info.sha_data.algo = json_algorithms[i].algo; 2921ea7940eSGowrishankar Muthukrishnan info.interim_info.sha_data.md_blocks = json_algorithms[i].md_blocks; 293d5c24714SGowrishankar Muthukrishnan break; 294d5c24714SGowrishankar Muthukrishnan } 295d5c24714SGowrishankar Muthukrishnan } 296d5c24714SGowrishankar Muthukrishnan 297d5c24714SGowrishankar Muthukrishnan if (i == RTE_DIM(json_algorithms)) 298d5c24714SGowrishankar Muthukrishnan return -1; 299d5c24714SGowrishankar Muthukrishnan 300*225f04fbSGowrishankar Muthukrishnan if (info.interim_info.sha_data.test_type == SHAKE_VOT) { 301*225f04fbSGowrishankar Muthukrishnan sz = vec.cipher_auth.digest.len; 302*225f04fbSGowrishankar Muthukrishnan } else { 3038bc8ba43SGowrishankar Muthukrishnan sz = parse_test_sha_hash_size(info.interim_info.sha_data.algo); 304*225f04fbSGowrishankar Muthukrishnan vec.cipher_auth.digest.len = sz; 305*225f04fbSGowrishankar Muthukrishnan } 306*225f04fbSGowrishankar Muthukrishnan 3078bc8ba43SGowrishankar Muthukrishnan if (sz < 0) 3088bc8ba43SGowrishankar Muthukrishnan return -1; 3098bc8ba43SGowrishankar Muthukrishnan 310d5c24714SGowrishankar Muthukrishnan free(vec.cipher_auth.digest.val); 3118bc8ba43SGowrishankar Muthukrishnan vec.cipher_auth.digest.val = calloc(1, sz); 312d5c24714SGowrishankar Muthukrishnan if (vec.cipher_auth.digest.val == NULL) 313d5c24714SGowrishankar Muthukrishnan return -1; 314d5c24714SGowrishankar Muthukrishnan 315d5c24714SGowrishankar Muthukrishnan return 0; 316d5c24714SGowrishankar Muthukrishnan } 317d5c24714SGowrishankar Muthukrishnan 318d5c24714SGowrishankar Muthukrishnan int 319d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_test_type(void) 320d5c24714SGowrishankar Muthukrishnan { 321d5c24714SGowrishankar Muthukrishnan json_t *type_object; 322d5c24714SGowrishankar Muthukrishnan const char *type_str; 323d5c24714SGowrishankar Muthukrishnan uint32_t i; 324d5c24714SGowrishankar Muthukrishnan 325d5c24714SGowrishankar Muthukrishnan type_object = json_object_get(json_info.json_test_group, TESTTYPE_JSON_STR); 326d5c24714SGowrishankar Muthukrishnan type_str = json_string_value(type_object); 327d5c24714SGowrishankar Muthukrishnan 328d5c24714SGowrishankar Muthukrishnan for (i = 0; i < RTE_DIM(sha_test_types); i++) 329d5c24714SGowrishankar Muthukrishnan if (strstr(type_str, sha_test_types[i].desc)) { 3306ea24fc7SGowrishankar Muthukrishnan info.interim_info.sha_data.test_type = 331d5c24714SGowrishankar Muthukrishnan sha_test_types[i].type; 332d5c24714SGowrishankar Muthukrishnan break; 333d5c24714SGowrishankar Muthukrishnan } 334d5c24714SGowrishankar Muthukrishnan 335d5c24714SGowrishankar Muthukrishnan if (i == RTE_DIM(sha_test_types)) 336d5c24714SGowrishankar Muthukrishnan return -1; 337d5c24714SGowrishankar Muthukrishnan 338d5c24714SGowrishankar Muthukrishnan switch (info.interim_info.sha_data.test_type) { 339d5c24714SGowrishankar Muthukrishnan case SHA_MCT: 340d5c24714SGowrishankar Muthukrishnan info.parse_writeback = parse_test_sha_mct_json_writeback; 341d5c24714SGowrishankar Muthukrishnan break; 342d5c24714SGowrishankar Muthukrishnan case SHA_AFT: 343*225f04fbSGowrishankar Muthukrishnan case SHAKE_VOT: 344d5c24714SGowrishankar Muthukrishnan info.parse_writeback = parse_test_sha_json_writeback; 345d5c24714SGowrishankar Muthukrishnan break; 346d5c24714SGowrishankar Muthukrishnan default: 347d5c24714SGowrishankar Muthukrishnan info.parse_writeback = NULL; 348d5c24714SGowrishankar Muthukrishnan } 349d5c24714SGowrishankar Muthukrishnan 350d5c24714SGowrishankar Muthukrishnan if (!info.parse_writeback) 351d5c24714SGowrishankar Muthukrishnan return -1; 352d5c24714SGowrishankar Muthukrishnan 353d5c24714SGowrishankar Muthukrishnan return 0; 354d5c24714SGowrishankar Muthukrishnan } 355d5c24714SGowrishankar Muthukrishnan 356d5c24714SGowrishankar Muthukrishnan int 357d5c24714SGowrishankar Muthukrishnan parse_test_sha_json_init(void) 358d5c24714SGowrishankar Muthukrishnan { 359d5c24714SGowrishankar Muthukrishnan info.op = FIPS_TEST_ENC_AUTH_GEN; 360d5c24714SGowrishankar Muthukrishnan info.parse_writeback = parse_test_sha_json_writeback; 361d5c24714SGowrishankar Muthukrishnan info.callbacks = sha_tests_json_vectors; 362d5c24714SGowrishankar Muthukrishnan info.writeback_callbacks = NULL; 363d5c24714SGowrishankar Muthukrishnan info.kat_check = rsp_test_sha_check; 364*225f04fbSGowrishankar Muthukrishnan info.interim_callbacks = sha_tests_interim_json_vectors; 365d5c24714SGowrishankar Muthukrishnan 366d5c24714SGowrishankar Muthukrishnan if (parse_test_sha_json_test_type() < 0) 367d5c24714SGowrishankar Muthukrishnan return -1; 368d5c24714SGowrishankar Muthukrishnan 369*225f04fbSGowrishankar Muthukrishnan if (parse_test_sha_json_algorithm() < 0) 370*225f04fbSGowrishankar Muthukrishnan return -1; 371*225f04fbSGowrishankar Muthukrishnan 372d5c24714SGowrishankar Muthukrishnan return 0; 373d5c24714SGowrishankar Muthukrishnan } 374d5c24714SGowrishankar Muthukrishnan #endif /* USE_JANSSON */ 375