From: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
To: <dev@dpdk.org>
Cc: Fan Zhang <roy.fan.zhang@intel.com>,
Brian Dooley <brian.dooley@intel.com>,
Anoob Joseph <anoobj@marvell.com>,
"Archana Muniganti" <marchana@marvell.com>,
Jerin Jacob <jerinj@marvell.com>,
Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
Subject: [PATCH v1] examples/fips_validation: add parsing for sha
Date: Tue, 28 Jun 2022 18:44:07 +0530 [thread overview]
Message-ID: <c769c6adfa37f48bd22c7a674dcb913a964234f2.1656421456.git.gmuthukrishn@marvell.com> (raw)
Added function to parse algorithm for SHA test. Verified with SHA 1 and 256
vectors. SHA 384 and 512 has some issues with the way jansson objects are
created, which could be addressed separately.
Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
examples/fips_validation/fips_validation.c | 2 +
examples/fips_validation/fips_validation.h | 10 +
.../fips_validation/fips_validation_sha.c | 188 ++++++++++++++++++
examples/fips_validation/main.c | 37 +++-
4 files changed, 226 insertions(+), 11 deletions(-)
diff --git a/examples/fips_validation/fips_validation.c b/examples/fips_validation/fips_validation.c
index f181363ef7..12b9b03f56 100644
--- a/examples/fips_validation/fips_validation.c
+++ b/examples/fips_validation/fips_validation.c
@@ -466,6 +466,8 @@ fips_test_parse_one_json_vector_set(void)
info.algo = FIPS_TEST_ALGO_AES_CBC;
else if (strstr(algo_str, "AES-XTS"))
info.algo = FIPS_TEST_ALGO_AES_XTS;
+ else if (strstr(algo_str, "SHA"))
+ info.algo = FIPS_TEST_ALGO_SHA;
else
return -EINVAL;
diff --git a/examples/fips_validation/fips_validation.h b/examples/fips_validation/fips_validation.h
index d716b198c6..5c1abcbd91 100644
--- a/examples/fips_validation/fips_validation.h
+++ b/examples/fips_validation/fips_validation.h
@@ -133,6 +133,7 @@ enum fips_ccm_test_types {
enum fips_sha_test_types {
SHA_KAT = 0,
+ SHA_AFT,
SHA_MCT
};
@@ -280,6 +281,15 @@ parse_test_aes_json_init(void);
int
parse_test_xts_json_init(void);
+
+int
+parse_test_sha_json_init(void);
+
+int
+parse_test_sha_json_algorithm(void);
+
+int
+parse_test_sha_json_test_type(void);
#endif /* USE_JANSSON */
int
diff --git a/examples/fips_validation/fips_validation_sha.c b/examples/fips_validation/fips_validation_sha.c
index 34c364c75a..a2928618d7 100644
--- a/examples/fips_validation/fips_validation_sha.c
+++ b/examples/fips_validation/fips_validation_sha.c
@@ -17,6 +17,11 @@
#define SEED_STR "Seed = "
#define MCT_STR "Monte"
+#define ALGO_JSON_STR "algorithm"
+#define TESTTYPE_JSON_STR "testType"
+
+#define PT_JSON_STR "msg"
+
struct plain_hash_size_conversion {
const char *str;
enum rte_crypto_auth_algorithm algo;
@@ -62,6 +67,32 @@ struct fips_test_callback sha_tests_interim_vectors[] = {
{NULL, NULL, NULL} /**< end pointer */
};
+#ifdef USE_JANSSON
+static struct {
+ uint32_t type;
+ const char *desc;
+} sha_test_types[] = {
+ {SHA_MCT, "MCT"},
+ {SHA_AFT, "AFT"},
+};
+
+static struct plain_hash_algorithms {
+ const char *str;
+ enum rte_crypto_auth_algorithm algo;
+} json_algorithms[] = {
+ {"SHA-1", RTE_CRYPTO_AUTH_SHA1},
+ {"SHA2-224", RTE_CRYPTO_AUTH_SHA224},
+ {"SHA2-256", RTE_CRYPTO_AUTH_SHA256},
+ {"SHA2-384", RTE_CRYPTO_AUTH_SHA384},
+ {"SHA2-512", RTE_CRYPTO_AUTH_SHA512},
+};
+
+struct fips_test_callback sha_tests_json_vectors[] = {
+ {PT_JSON_STR, parse_uint8_hex_str, &vec.pt},
+ {NULL, NULL, NULL} /**< end pointer */
+};
+#endif /* USE_JANSSON */
+
static int
parse_test_sha_writeback(struct fips_val *val) // !
{
@@ -108,3 +139,160 @@ parse_test_sha_init(void)
info.kat_check = rsp_test_sha_check;
return 0;
}
+
+#ifdef USE_JANSSON
+static int
+parse_test_sha_json_writeback(struct fips_val *val)
+{
+ struct fips_val val_local;
+ json_t *tcId, *md;
+
+ tcId = json_object_get(json_info.json_test_case, "tcId");
+
+ json_info.json_write_case = json_object();
+ json_object_set_new(json_info.json_write_case, "tcId", tcId);
+
+ val_local.val = val->val + vec.pt.len;
+ val_local.len = vec.cipher_auth.digest.len;
+
+ writeback_hex_str("", info.one_line_text, &val_local);
+ md = json_string(info.one_line_text);
+ json_object_set_new(json_info.json_write_case, "md", md);
+
+ return 0;
+}
+
+static int
+parse_test_sha_mct_json_writeback(struct fips_val *val)
+{
+ json_t *tcId, *msg, *md, *resArr, *res;
+ struct fips_val val_local;
+
+ tcId = json_object_get(json_info.json_test_case, "tcId");
+ if (json_info.json_write_case) {
+ json_t *wcId;
+
+ wcId = json_object_get(json_info.json_write_case, "tcId");
+ if (!json_equal(tcId, wcId)) {
+ json_info.json_write_case = json_object();
+ json_object_set_new(json_info.json_write_case, "tcId", tcId);
+ json_object_set_new(json_info.json_write_case, "resultsArray",
+ json_array());
+ }
+ } else {
+ json_info.json_write_case = json_object();
+ json_object_set_new(json_info.json_write_case, "tcId", tcId);
+ json_object_set_new(json_info.json_write_case, "resultsArray", json_array());
+ }
+
+ resArr = json_object_get(json_info.json_write_case, "resultsArray");
+ if (!json_is_array(resArr))
+ return -EINVAL;
+
+ res = json_object();
+
+ writeback_hex_str("", info.one_line_text, &val[1]);
+ msg = json_string(info.one_line_text);
+ json_object_set_new(res, "msg", msg);
+
+ val_local.val = val[0].val + vec.pt.len;
+ val_local.len = vec.cipher_auth.digest.len;
+
+ writeback_hex_str("", info.one_line_text, &val_local);
+ md = json_string(info.one_line_text);
+ json_object_set_new(res, "md", md);
+
+ json_array_append_new(resArr, res);
+ return 0;
+}
+
+int
+parse_test_sha_json_algorithm(void)
+{
+ json_t *algorithm_object;
+ const char *algorithm_str;
+ uint32_t i;
+
+ algorithm_object = json_object_get(json_info.json_vector_set, "algorithm");
+ algorithm_str = json_string_value(algorithm_object);
+
+ for (i = 0; i < RTE_DIM(json_algorithms); i++) {
+ if (strstr(algorithm_str, json_algorithms[i].str)) {
+ info.interim_info.sha_data.algo = json_algorithms[i].algo;
+ break;
+ }
+ }
+
+ 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);
+ vec.cipher_auth.digest.val = calloc(0, vec.cipher_auth.digest.len * 8);
+ break;
+ }
+ }
+
+ if (i == RTE_DIM(phsc))
+ return -1;
+
+ return 0;
+}
+
+int
+parse_test_sha_json_test_type(void)
+{
+ json_t *type_object;
+ const char *type_str;
+ uint32_t i;
+
+ type_object = json_object_get(json_info.json_test_group, TESTTYPE_JSON_STR);
+ type_str = json_string_value(type_object);
+
+ for (i = 0; i < RTE_DIM(sha_test_types); i++)
+ if (strstr(type_str, sha_test_types[i].desc)) {
+ info.interim_info.aes_data.test_type =
+ sha_test_types[i].type;
+ break;
+ }
+
+ if (i == RTE_DIM(sha_test_types))
+ return -1;
+
+ switch (info.interim_info.sha_data.test_type) {
+ case SHA_MCT:
+ info.parse_writeback = parse_test_sha_mct_json_writeback;
+ break;
+ case SHA_AFT:
+ info.parse_writeback = parse_test_sha_json_writeback;
+ break;
+ default:
+ info.parse_writeback = NULL;
+ }
+
+ if (!info.parse_writeback)
+ return -1;
+
+ return 0;
+}
+
+int
+parse_test_sha_json_init(void)
+{
+ info.op = FIPS_TEST_ENC_AUTH_GEN;
+ info.parse_writeback = parse_test_sha_json_writeback;
+ info.callbacks = sha_tests_json_vectors;
+ info.writeback_callbacks = NULL;
+ info.kat_check = rsp_test_sha_check;
+ info.interim_callbacks = NULL;
+
+ if (parse_test_sha_json_algorithm() < 0)
+ return -1;
+
+ if (parse_test_sha_json_test_type() < 0)
+ return -1;
+
+ return 0;
+}
+#endif /* USE_JANSSON */
diff --git a/examples/fips_validation/main.c b/examples/fips_validation/main.c
index 7ccb5f52f4..41347de199 100644
--- a/examples/fips_validation/main.c
+++ b/examples/fips_validation/main.c
@@ -1693,19 +1693,24 @@ fips_mct_sha_test(void)
#define SHA_EXTERN_ITER 100
#define SHA_INTERN_ITER 1000
#define SHA_MD_BLOCK 3
- struct fips_val val = {NULL, 0}, md[SHA_MD_BLOCK];
+ struct fips_val val[2] = {{NULL, 0},}, md[SHA_MD_BLOCK], msg;
char temp[MAX_DIGEST_SIZE*2];
int ret;
uint32_t i, j;
+ msg.len = SHA_MD_BLOCK * vec.cipher_auth.digest.len;
+ msg.val = calloc(1, msg.len);
+ memcpy(vec.cipher_auth.digest.val, vec.pt.val, vec.cipher_auth.digest.len);
for (i = 0; i < SHA_MD_BLOCK; i++)
md[i].val = rte_malloc(NULL, (MAX_DIGEST_SIZE*2), 0);
rte_free(vec.pt.val);
vec.pt.val = rte_malloc(NULL, (MAX_DIGEST_SIZE*SHA_MD_BLOCK), 0);
- fips_test_write_one_case();
- fprintf(info.fp_wr, "\n");
+ if (info.file_type != FIPS_TYPE_JSON) {
+ fips_test_write_one_case();
+ fprintf(info.fp_wr, "\n");
+ }
for (j = 0; j < SHA_EXTERN_ITER; j++) {
@@ -1719,6 +1724,9 @@ fips_mct_sha_test(void)
vec.cipher_auth.digest.len);
md[2].len = vec.cipher_auth.digest.len;
+ for (i = 0; i < SHA_MD_BLOCK; i++)
+ memcpy(&msg.val[i * md[i].len], md[i].val, md[i].len);
+
for (i = 0; i < (SHA_INTERN_ITER); i++) {
memcpy(vec.pt.val, md[0].val,
@@ -1742,7 +1750,7 @@ fips_mct_sha_test(void)
return ret;
}
- ret = get_writeback_data(&val);
+ ret = get_writeback_data(&val[0]);
if (ret < 0)
return ret;
@@ -1751,7 +1759,7 @@ fips_mct_sha_test(void)
memcpy(md[1].val, md[2].val, md[2].len);
md[1].len = md[2].len;
- memcpy(md[2].val, (val.val + vec.pt.len),
+ memcpy(md[2].val, (val[0].val + vec.pt.len),
vec.cipher_auth.digest.len);
md[2].len = vec.cipher_auth.digest.len;
}
@@ -1759,11 +1767,14 @@ fips_mct_sha_test(void)
memcpy(vec.cipher_auth.digest.val, md[2].val, md[2].len);
vec.cipher_auth.digest.len = md[2].len;
- fprintf(info.fp_wr, "COUNT = %u\n", j);
-
- writeback_hex_str("", temp, &vec.cipher_auth.digest);
-
- fprintf(info.fp_wr, "MD = %s\n\n", temp);
+ if (info.file_type != FIPS_TYPE_JSON) {
+ fprintf(info.fp_wr, "COUNT = %u\n", j);
+ writeback_hex_str("", temp, &vec.cipher_auth.digest);
+ fprintf(info.fp_wr, "MD = %s\n\n", temp);
+ }
+ val[1].val = msg.val;
+ val[1].len = msg.len;
+ info.parse_writeback(val);
}
for (i = 0; i < (SHA_MD_BLOCK); i++)
@@ -1771,7 +1782,8 @@ fips_mct_sha_test(void)
rte_free(vec.pt.val);
- free(val.val);
+ free(val[0].val);
+ free(msg.val);
return 0;
}
@@ -1996,6 +2008,9 @@ fips_test_one_test_group(void)
case FIPS_TEST_ALGO_AES:
ret = parse_test_aes_json_init();
break;
+ case FIPS_TEST_ALGO_SHA:
+ ret = parse_test_sha_json_init();
+ break;
default:
return -EINVAL;
}
--
2.25.1
next reply other threads:[~2022-06-28 13:14 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-28 13:14 Gowrishankar Muthukrishnan [this message]
2022-06-29 8:25 ` [PATCH v1] examples/fips_validation: add parsing for sha Zhang, Roy Fan
2022-06-29 9:38 ` Gowrishankar Muthukrishnan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c769c6adfa37f48bd22c7a674dcb913a964234f2.1656421456.git.gmuthukrishn@marvell.com \
--to=gmuthukrishn@marvell.com \
--cc=anoobj@marvell.com \
--cc=brian.dooley@intel.com \
--cc=dev@dpdk.org \
--cc=jerinj@marvell.com \
--cc=marchana@marvell.com \
--cc=roy.fan.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.