All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] examples/fips_validation: add parsing for xts
@ 2022-06-28  7:58 Gowrishankar Muthukrishnan
  2022-06-28 11:57 ` David Marchand
  2022-06-28 13:12 ` [PATCH v2] " Gowrishankar Muthukrishnan
  0 siblings, 2 replies; 14+ messages in thread
From: Gowrishankar Muthukrishnan @ 2022-06-28  7:58 UTC (permalink / raw)
  To: dev
  Cc: Fan Zhang, Brian Dooley, Anoob Joseph, Archana Muniganti,
	Jerin Jacob, Gowrishankar Muthukrishnan

Added function to parse algorithm for AES XTS test.

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
 examples/fips_validation/fips_validation.c    |   4 +-
 examples/fips_validation/fips_validation.h    |  17 ++-
 .../fips_validation/fips_validation_xts.c     | 126 ++++++++++++++++++
 examples/fips_validation/main.c               |   5 +
 4 files changed, 150 insertions(+), 2 deletions(-)

diff --git a/examples/fips_validation/fips_validation.c b/examples/fips_validation/fips_validation.c
index 324abccb14..f181363ef7 100644
--- a/examples/fips_validation/fips_validation.c
+++ b/examples/fips_validation/fips_validation.c
@@ -463,7 +463,9 @@ fips_test_parse_one_json_vector_set(void)
 	else if (strstr(algo_str, "CMAC"))
 		info.algo = FIPS_TEST_ALGO_AES_CMAC;
 	else if (strstr(algo_str, "AES-CBC"))
-		info.algo = FIPS_TEST_ALGO_AES;
+		info.algo = FIPS_TEST_ALGO_AES_CBC;
+	else if (strstr(algo_str, "AES-XTS"))
+		info.algo = FIPS_TEST_ALGO_AES_XTS;
 	else
 		return -EINVAL;
 
diff --git a/examples/fips_validation/fips_validation.h b/examples/fips_validation/fips_validation.h
index 69d738b718..8ae849c46f 100644
--- a/examples/fips_validation/fips_validation.h
+++ b/examples/fips_validation/fips_validation.h
@@ -34,13 +34,14 @@
 
 enum fips_test_algorithms {
 		FIPS_TEST_ALGO_AES = 0,
+		FIPS_TEST_ALGO_AES_CBC,
 		FIPS_TEST_ALGO_AES_GCM,
 		FIPS_TEST_ALGO_AES_CMAC,
 		FIPS_TEST_ALGO_AES_CCM,
+		FIPS_TEST_ALGO_AES_XTS,
 		FIPS_TEST_ALGO_HMAC,
 		FIPS_TEST_ALGO_TDES,
 		FIPS_TEST_ALGO_SHA,
-		FIPS_TEST_ALGO_AES_XTS,
 		FIPS_TEST_ALGO_MAX
 };
 
@@ -170,7 +171,17 @@ struct gcm_interim_data {
 	uint8_t gen_iv;
 };
 
+
 #ifdef USE_JANSSON
+enum xts_tweak_modes {
+  XTS_TWEAK_MODE_HEX = 0,
+  XTS_TWEAK_MODE_NUMBER
+};
+
+struct xts_interim_data {
+	enum xts_tweak_modes tweak_mode;
+};
+
 struct fips_test_json_info {
 	/* Information used for reading from json */
 	json_t *json_root;
@@ -207,6 +218,7 @@ struct fips_test_interim_info {
 		struct ccm_interim_data ccm_data;
 		struct sha_interim_data sha_data;
 		struct gcm_interim_data gcm_data;
+		struct xts_interim_data xts_data;
 	} interim_info;
 
 	enum fips_test_op op;
@@ -266,6 +278,9 @@ parse_test_cmac_json_init(void);
 
 int
 parse_test_aes_json_init(void);
+
+int
+parse_test_xts_json_init(void);
 #endif /* USE_JANSSON */
 
 int
diff --git a/examples/fips_validation/fips_validation_xts.c b/examples/fips_validation/fips_validation_xts.c
index 5bb1966f6c..2de852c1fc 100644
--- a/examples/fips_validation/fips_validation_xts.c
+++ b/examples/fips_validation/fips_validation_xts.c
@@ -24,6 +24,22 @@
 #define OP_ENC_STR	"ENCRYPT"
 #define OP_DEC_STR	"DECRYPT"
 
+#define ALGO_JSON_STR		"algorithm"
+#define TESTTYPE_JSON_STR	"testType"
+#define DIR_JSON_STR		"direction"
+#define KEYLEN_JSON_STR		"keyLen"
+#define TWEAKMODE_JSON_STR	"tweakMode"
+
+#define KEY_JSON_STR		"key"
+#define DATAUNITLEN_JSON_STR	"dataUnitLen"
+#define PAYLOADLEN_JSON_STR	"payloadLen"
+#define TWEAKVALUE_JSON_STR	"tweakValue"
+#define PT_JSON_STR	"pt"
+#define CT_JSON_STR	"ct"
+
+#define OP_ENC_JSON_STR	"encrypt"
+#define OP_DEC_JSON_STR	"decrypt"
+
 static int
 parse_interim_xts_enc_dec(const char *key,
 		__rte_unused char *text,
@@ -62,6 +78,116 @@ struct fips_test_callback xts_writeback_callbacks[] = {
 		{NULL, NULL, NULL} /**< end pointer */
 };
 
+#ifdef RTE_HAS_JANSSON
+static int
+parser_xts_read_keylen(const char *key, char *src, struct fips_val *val)
+{
+	int ret;
+
+	ret = parser_read_uint32_bit_val(key, src, val);
+	if (ret < 0)
+		return ret;
+
+	val->len *= 2;
+	return 0;
+}
+
+struct fips_test_callback xts_dec_json_vectors[] = {
+		{KEY_JSON_STR, parse_uint8_known_len_hex_str, &vec.cipher_auth.key},
+		{TWEAKVALUE_JSON_STR, parse_uint8_hex_str, &vec.iv},
+		{CT_JSON_STR, parse_uint8_hex_str, &vec.ct},
+		{NULL, NULL, NULL} /**< end pointer */
+};
+
+struct fips_test_callback xts_interim_json_vectors[] = {
+		{KEYLEN_JSON_STR, parser_xts_read_keylen, &vec.cipher_auth.key},
+		{NULL, NULL, NULL} /**< end pointer */
+};
+
+struct fips_test_callback xts_enc_json_vectors[] = {
+		{KEY_JSON_STR, parse_uint8_known_len_hex_str, &vec.cipher_auth.key},
+		{TWEAKVALUE_JSON_STR, parse_uint8_hex_str, &vec.iv},
+		{PT_JSON_STR, parse_uint8_hex_str, &vec.pt},
+		{NULL, NULL, NULL} /**< end pointer */
+};
+
+static int
+parse_test_xts_json_writeback(struct fips_val *val)
+{
+	struct fips_val tmp_val;
+	json_t *tcId;
+
+	tcId = json_object_get(json_info.json_test_case, "tcId");
+
+	json_info.json_write_case = json_object();
+	json_object_set(json_info.json_write_case, "tcId", tcId);
+
+	if (info.op == FIPS_TEST_ENC_AUTH_GEN) {
+		json_t *ct;
+
+		tmp_val.val = val->val;
+		tmp_val.len = vec.pt.len;
+
+		writeback_hex_str("", info.one_line_text, &tmp_val);
+		ct = json_string(info.one_line_text);
+		json_object_set_new(json_info.json_write_case, CT_JSON_STR, ct);
+
+		tmp_val.val = val->val + vec.pt.len;
+		tmp_val.len = val->len - vec.pt.len;
+
+		writeback_hex_str("", info.one_line_text, &tmp_val);
+	} else {
+		if (vec.status == RTE_CRYPTO_OP_STATUS_SUCCESS) {
+			tmp_val.val = val->val;
+			tmp_val.len = vec.ct.len;
+
+			writeback_hex_str("", info.one_line_text, &tmp_val);
+			json_object_set_new(json_info.json_write_case, PT_JSON_STR,
+								json_string(info.one_line_text));
+		} else {
+			json_object_set_new(json_info.json_write_case, "testPassed", json_false());
+		}
+	}
+
+	return 0;
+}
+
+int
+parse_test_xts_json_init(void)
+{
+	if (json_info.json_test_group) {
+		json_t *direction_obj, *tweakmode_obj;
+		const char *direction_str, *tweakmode_str;
+
+		direction_obj = json_object_get(json_info.json_test_group, DIR_JSON_STR);
+		direction_str = json_string_value(direction_obj);
+
+		if (strcmp(direction_str, OP_ENC_JSON_STR) == 0) {
+			info.op = FIPS_TEST_ENC_AUTH_GEN;
+			info.callbacks = xts_enc_json_vectors;
+
+		} else if (strcmp(direction_str, OP_DEC_JSON_STR) == 0) {
+			info.op = FIPS_TEST_DEC_AUTH_VERIF;
+			info.callbacks = xts_dec_json_vectors;
+		} else {
+			return -EINVAL;
+		}
+
+		tweakmode_obj = json_object_get(json_info.json_test_group, TWEAKMODE_JSON_STR);
+		tweakmode_str = json_string_value(tweakmode_obj);
+		if (strcmp(tweakmode_str, "hex") == 0)
+			info.interim_info.xts_data.tweak_mode = XTS_TWEAK_MODE_HEX;
+		else
+			info.interim_info.xts_data.tweak_mode = XTS_TWEAK_MODE_NUMBER;
+
+		info.interim_callbacks = xts_interim_json_vectors;
+	}
+
+	info.parse_writeback = parse_test_xts_json_writeback;
+	return 0;
+}
+#endif /* RTE_HAS_JANSSON */
+
 static int
 parse_test_xts_writeback(struct fips_val *val)
 {
diff --git a/examples/fips_validation/main.c b/examples/fips_validation/main.c
index ceabea788e..7ccb5f52f4 100644
--- a/examples/fips_validation/main.c
+++ b/examples/fips_validation/main.c
@@ -1781,6 +1781,7 @@ static int
 init_test_ops(void)
 {
 	switch (info.algo) {
+	case FIPS_TEST_ALGO_AES_CBC:
 	case FIPS_TEST_ALGO_AES:
 		test_ops.prepare_op = prepare_cipher_op;
 		test_ops.prepare_xform  = prepare_aes_xform;
@@ -1988,6 +1989,10 @@ fips_test_one_test_group(void)
 	case FIPS_TEST_ALGO_AES_CMAC:
 		ret = parse_test_cmac_json_init();
 		break;
+	case FIPS_TEST_ALGO_AES_XTS:
+		ret = parse_test_xts_json_init();
+		break;
+	case FIPS_TEST_ALGO_AES_CBC:
 	case FIPS_TEST_ALGO_AES:
 		ret = parse_test_aes_json_init();
 		break;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-06-30  4:23 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-28  7:58 [PATCH v1] examples/fips_validation: add parsing for xts Gowrishankar Muthukrishnan
2022-06-28 11:57 ` David Marchand
2022-06-29  9:14   ` [EXT] " Gowrishankar Muthukrishnan
2022-06-28 13:12 ` [PATCH v2] " Gowrishankar Muthukrishnan
2022-06-29  8:07   ` Zhang, Roy Fan
2022-06-29  9:52   ` [PATCH v3 0/3] example/fips_validation: add xts and sha json parsing Gowrishankar Muthukrishnan
2022-06-29  9:52     ` [PATCH v3 1/3] examples/fips_validation: add aes_cbc specific enum Gowrishankar Muthukrishnan
2022-06-29  9:52     ` [PATCH v3 2/3] examples/fips_validation: add parsing for xts Gowrishankar Muthukrishnan
2022-06-29  9:52     ` [PATCH v3 3/3] examples/fips_validation: add parsing for sha Gowrishankar Muthukrishnan
2022-06-29 12:35     ` [PATCH v4 0/3] example/fips_validation: add xts and sha json parsing Gowrishankar Muthukrishnan
2022-06-29 12:35       ` [PATCH v4 1/3] examples/fips_validation: add aes_cbc specific enum Gowrishankar Muthukrishnan
2022-06-29 12:35       ` [PATCH v4 2/3] examples/fips_validation: add parsing for xts Gowrishankar Muthukrishnan
2022-06-29 12:35       ` [PATCH v4 3/3] examples/fips_validation: add parsing for sha Gowrishankar Muthukrishnan
2022-06-30  4:22       ` [EXT] [PATCH v4 0/3] example/fips_validation: add xts and sha json parsing Akhil Goyal

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.