examples/fips_validation: fix SHA hash size calculation

Added function to calculate hash size for a given SHA hash algorithm.

Fixes: d5c247145c ("examples/fips_validation: add parsing for SHA")
Cc: stable@dpdk.org

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
Acked-by: Brian Dooley <brian.dooley@intel.com>
This commit is contained in:
Gowrishankar Muthukrishnan 2022-09-27 12:56:08 +05:30 committed by Akhil Goyal
parent 0bd998fb4b
commit 8bc8ba4373
2 changed files with 28 additions and 16 deletions

View File

@ -374,4 +374,6 @@ int prepare_gcm_xform(struct rte_crypto_sym_xform *xform);
int prepare_gmac_xform(struct rte_crypto_sym_xform *xform);
int parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo);
#endif

View File

@ -5,6 +5,7 @@
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <rte_cryptodev.h>
@ -33,6 +34,22 @@ struct plain_hash_size_conversion {
{"64", RTE_CRYPTO_AUTH_SHA512},
};
int
parse_test_sha_hash_size(enum rte_crypto_auth_algorithm algo)
{
int ret = -EINVAL;
uint8_t i;
for (i = 0; i < RTE_DIM(phsc); i++) {
if (phsc[i].algo == algo) {
ret = atoi(phsc[i].str);
break;
}
}
return ret;
}
static int
parse_interim_algo(__rte_unused const char *key,
char *text,
@ -212,6 +229,7 @@ parse_test_sha_json_algorithm(void)
json_t *algorithm_object;
const char *algorithm_str;
uint32_t i;
int sz;
algorithm_object = json_object_get(json_info.json_vector_set, "algorithm");
algorithm_str = json_string_value(algorithm_object);
@ -226,23 +244,15 @@ parse_test_sha_json_algorithm(void)
if (i == RTE_DIM(json_algorithms))
return -1;
for (i = 0; i < RTE_DIM(phsc); i++) {
if (info.interim_info.sha_data.algo == phsc[i].algo) {
vec.cipher_auth.digest.len = atoi(phsc[i].str);
free(vec.cipher_auth.digest.val);
vec.cipher_auth.digest.val = calloc(1, vec.cipher_auth.digest.len);
if (vec.cipher_auth.digest.val == NULL)
return -1;
break;
}
}
if (i == RTE_DIM(phsc)) {
free(vec.cipher_auth.digest.val);
vec.cipher_auth.digest.val = NULL;
sz = parse_test_sha_hash_size(info.interim_info.sha_data.algo);
if (sz < 0)
return -1;
free(vec.cipher_auth.digest.val);
vec.cipher_auth.digest.len = sz;
vec.cipher_auth.digest.val = calloc(1, sz);
if (vec.cipher_auth.digest.val == NULL)
return -1;
}
return 0;
}