From: Lukasz Krakowiak <lukaszx.krakowiak@intel.com>
To: pablo.de.lara.guarch@intel.com
Cc: dev@dpdk.org, stable@dpdk.org,
Lukasz Krakowiak <lukaszx.krakowiak@intel.com>
Subject: [dpdk-dev] [PATCH] test: add snow3g test cases when digest is encrypted
Date: Wed, 13 Feb 2019 02:43:03 -0600 [thread overview]
Message-ID: <20190213084303.4431-1-lukaszx.krakowiak@intel.com> (raw)
Add test case for encryption, dectryption for snow3g when digest
is encrypted
Change-Id: I75bb535fa46ae23104f17d9c51278eca2c76e021
Signed-off-by: Lukasz Krakowiak <lukaszx.krakowiak@intel.com>
---
test/test/test_cryptodev.c | 91 ++++++++++--
.../test/test_cryptodev_snow3g_test_vectors.h | 132 +++++++++++++++++-
2 files changed, 210 insertions(+), 13 deletions(-)
diff --git a/test/test/test_cryptodev.c b/test/test/test_cryptodev.c
index 32f1893bc..d8acfc7d1 100644
--- a/test/test/test_cryptodev.c
+++ b/test/test/test_cryptodev.c
@@ -2833,8 +2833,8 @@ create_wireless_algo_auth_cipher_operation(unsigned int auth_tag_len,
sym_op->m_src = ut_params->ibuf;
/* digest */
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, auth_tag_len);
+ sym_op->auth.digest.data = (uint8_t *) rte_pktmbuf_mtod_offset(
+ ut_params->ibuf, uint8_t *, data_pad_len);
TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
"no room to append auth tag");
@@ -2844,10 +2844,6 @@ create_wireless_algo_auth_cipher_operation(unsigned int auth_tag_len,
memset(sym_op->auth.digest.data, 0, auth_tag_len);
- debug_hexdump(stdout, "digest:",
- sym_op->auth.digest.data,
- auth_tag_len);
-
/* Copy cipher and auth IVs at the end of the crypto operation */
uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
IV_OFFSET);
@@ -4052,7 +4048,7 @@ static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
tdata->cipher_iv.len,
tdata->validCipherLenInBits.len,
- 0);
+ tdata->cipher.offset_bits);
if (retval < 0)
return retval;
@@ -4360,11 +4356,12 @@ test_snow3g_auth_cipher(const struct snow3g_test_data *tdata)
tdata->digest.len,
tdata->cipher_iv.data, tdata->cipher_iv.len,
tdata->auth_iv.data, tdata->auth_iv.len,
- plaintext_pad_len,
+ tdata->digest.offset_bytes == 0 ?
+ plaintext_pad_len : tdata->digest.offset_bytes,
tdata->validCipherLenInBits.len,
- 0,
+ tdata->cipher.offset_bits,
tdata->validAuthLenInBits.len,
- 0);
+ tdata->auth.offset_bits);
if (retval < 0)
return retval;
@@ -4379,7 +4376,10 @@ test_snow3g_auth_cipher(const struct snow3g_test_data *tdata)
ciphertext = plaintext;
ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len;
+ + (tdata->digest.offset_bytes == 0 ?
+ plaintext_pad_len : tdata->digest.offset_bytes);
+
+ debug_hexdump(stdout, "digest:", ut_params->digest, tdata->digest.len);
debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
/* Validate obuf */
@@ -4973,6 +4973,61 @@ test_snow3g_decryption_test_case_5(void)
{
return test_snow3g_decryption(&snow3g_test_case_5);
}
+
+/*
+ * Function prepares snow3g_hash_test_data from snow3g_test_data.
+ * Pattern digest from snow3g_test_data must be allocated as
+ * 4 last bytes in plaintext.
+ */
+static void
+snow3g_hash_test_vector_setup(const struct snow3g_test_data *pattern,
+ struct snow3g_hash_test_data *output)
+{
+ if ((pattern != NULL) && (output != NULL)) {
+ output->key.len = pattern->key.len;
+
+ memcpy(output->key.data,
+ pattern->key.data, pattern->key.len);
+
+ output->auth_iv.len = pattern->auth_iv.len;
+
+ memcpy(output->auth_iv.data,
+ pattern->auth_iv.data, pattern->auth_iv.len);
+
+ output->plaintext.len = pattern->plaintext.len;
+
+ memcpy(output->plaintext.data,
+ pattern->plaintext.data, pattern->plaintext.len >> 3);
+
+ output->digest.len = pattern->digest.len;
+
+ memcpy(output->digest.data,
+ &pattern->plaintext.data[pattern->digest.offset_bytes],
+ pattern->digest.len);
+
+ output->validAuthLenInBits.len =
+ pattern->validAuthLenInBits.len;
+ }
+}
+
+/*
+ * Test case verify computed cipher and digest from snow3g_test_case_7 data.
+ */
+static int
+test_snow3g_decryption_with_digest_test_case_1(void)
+{
+ struct snow3g_hash_test_data snow3g_hash_data;
+
+ /*
+ * Function prepare data for hash veryfication test case.
+ * Digest is allocated in 4 last bytes in plaintext, pattern.
+ */
+ snow3g_hash_test_vector_setup(&snow3g_test_case_7, &snow3g_hash_data);
+
+ return test_snow3g_decryption(&snow3g_test_case_7) &
+ test_snow3g_authentication_verify(&snow3g_hash_data);
+}
+
static int
test_snow3g_cipher_auth_test_case_1(void)
{
@@ -4985,6 +5040,12 @@ test_snow3g_auth_cipher_test_case_1(void)
return test_snow3g_auth_cipher(&snow3g_test_case_6);
}
+static int
+test_snow3g_auth_cipher_with_digest_test_case_1(void)
+{
+ return test_snow3g_auth_cipher(&snow3g_test_case_7);
+}
+
static int
test_kasumi_auth_cipher_test_case_1(void)
{
@@ -9138,6 +9199,8 @@ static struct unit_test_suite cryptodev_qat_testsuite = {
test_snow3g_decryption_test_case_4),
TEST_CASE_ST(ut_setup, ut_teardown,
test_snow3g_decryption_test_case_5),
+ TEST_CASE_ST(ut_setup, ut_teardown,
+ test_snow3g_decryption_with_digest_test_case_1),
TEST_CASE_ST(ut_setup, ut_teardown,
test_snow3g_hash_generate_test_case_1),
TEST_CASE_ST(ut_setup, ut_teardown,
@@ -9154,6 +9217,8 @@ static struct unit_test_suite cryptodev_qat_testsuite = {
test_snow3g_cipher_auth_test_case_1),
TEST_CASE_ST(ut_setup, ut_teardown,
test_snow3g_auth_cipher_test_case_1),
+ TEST_CASE_ST(ut_setup, ut_teardown,
+ test_snow3g_auth_cipher_with_digest_test_case_1),
/** ZUC encrypt only (EEA3) */
TEST_CASE_ST(ut_setup, ut_teardown,
@@ -9872,6 +9937,8 @@ static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
test_snow3g_encryption_test_case_4),
TEST_CASE_ST(ut_setup, ut_teardown,
test_snow3g_encryption_test_case_5),
+ TEST_CASE_ST(ut_setup, ut_teardown,
+ test_snow3g_auth_cipher_with_digest_test_case_1),
TEST_CASE_ST(ut_setup, ut_teardown,
test_snow3g_encryption_test_case_1_oop),
@@ -9894,6 +9961,8 @@ static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
test_snow3g_decryption_test_case_4),
TEST_CASE_ST(ut_setup, ut_teardown,
test_snow3g_decryption_test_case_5),
+ TEST_CASE_ST(ut_setup, ut_teardown,
+ test_snow3g_decryption_with_digest_test_case_1),
TEST_CASE_ST(ut_setup, ut_teardown,
test_snow3g_hash_generate_test_case_1),
TEST_CASE_ST(ut_setup, ut_teardown,
diff --git a/test/test/test_cryptodev_snow3g_test_vectors.h b/test/test/test_cryptodev_snow3g_test_vectors.h
index cb9dc4b35..3e55ac1f9 100644
--- a/test/test/test_cryptodev_snow3g_test_vectors.h
+++ b/test/test/test_cryptodev_snow3g_test_vectors.h
@@ -45,8 +45,19 @@ struct snow3g_test_data {
struct {
uint8_t data[64];
- unsigned len;
+ unsigned int len; /* length must be in Bytes */
+ unsigned int offset_bytes; /* offset must be in Bytes */
} digest;
+
+ struct {
+ unsigned int len_bits; /* length must be in Bits */
+ unsigned int offset_bits;
+ } cipher;
+
+ struct {
+ unsigned int len_bits; /* length must be in Bits */
+ unsigned int offset_bits;
+ } auth;
};
struct snow3g_test_data snow3g_test_case_1 = {
.key = {
@@ -99,6 +110,9 @@ struct snow3g_test_data snow3g_test_case_1 = {
},
.len = 800
},
+ .cipher = {
+ .offset_bits = 0
+ },
.validDataLenInBits = {
.len = 798
},
@@ -155,6 +169,9 @@ struct snow3g_test_data snow3g_test_case_2 = {
},
.len = 512
},
+ .cipher = {
+ .offset_bits = 0
+ },
.validDataLenInBits = {
.len = 510
},
@@ -199,6 +216,9 @@ struct snow3g_test_data snow3g_test_case_3 = {
},
.len = 120
},
+ .cipher = {
+ .offset_bits = 0
+ },
.validDataLenInBits = {
.len = 120
},
@@ -254,6 +274,9 @@ struct snow3g_test_data snow3g_test_case_4 = {
},
.len = 256
},
+ .cipher = {
+ .offset_bits = 0
+ },
.validDataLenInBits = {
.len = 253
},
@@ -314,6 +337,9 @@ struct snow3g_test_data snow3g_test_case_5 = {
},
.len = 840
},
+ .cipher = {
+ .offset_bits = 0
+ },
.validDataLenInBits = {
.len = 837
},
@@ -365,9 +391,18 @@ struct snow3g_test_data snow3g_test_case_6 = {
},
.len = 384
},
+ .cipher = {
+ .len_bits = 384,
+ .offset_bits = 0
+ },
+ .auth = {
+ .len_bits = 384,
+ .offset_bits = 0
+ },
.digest = {
.data = {0x38, 0xB5, 0x54, 0xC0 },
- .len = 4
+ .len = 4,
+ .offset_bytes = 0
},
.validDataLenInBits = {
.len = 384
@@ -380,4 +415,97 @@ struct snow3g_test_data snow3g_test_case_6 = {
},
};
+
+struct snow3g_test_data snow3g_test_case_7 = {
+ .key = {
+ .data = {
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
+
+ },
+ .len = 16
+ },
+ .cipher_iv = {
+ .data = {
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
+ },
+ .len = 16
+ },
+ .auth_iv = {
+ .data = {
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ .len = 16
+ },
+ .plaintext = {
+ .data = {
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0xF1, 0x9E, 0x2B, 0x6F,
+ },
+ .len = 128 << 3
+ },
+ .ciphertext = {
+ .data = {
+ 0x5A, 0x5A, 0xE4, 0xAD, 0x29, 0xA2, 0x6A, 0xA6,
+ 0x20, 0x1D, 0xCD, 0x08, 0x50, 0xD6, 0xE6, 0x47,
+ 0xBC, 0x88, 0x08, 0x01, 0x17, 0xFA, 0x47, 0x5B,
+ 0x90, 0x40, 0xBA, 0x0C, 0xB5, 0x58, 0xF3, 0x0C,
+ 0xA0, 0xD4, 0x98, 0x83, 0x1B, 0xCE, 0x54, 0xE3,
+ 0x29, 0x00, 0x3C, 0xA4, 0xAD, 0x74, 0xEE, 0x05,
+ 0xA3, 0x6C, 0xD4, 0xAC, 0xC6, 0x30, 0x33, 0xC9,
+ 0x37, 0x57, 0x41, 0x9B, 0xD4, 0x73, 0xB9, 0x77,
+ 0x70, 0x8B, 0x63, 0xDD, 0x22, 0xB8, 0xE1, 0x85,
+ 0xB2, 0x92, 0x7C, 0x37, 0xD3, 0x2E, 0xD9, 0xF4,
+ 0x4A, 0x69, 0x25, 0x30, 0xE3, 0x5B, 0x8B, 0xF6,
+ 0x0F, 0xDE, 0x0B, 0x92, 0xD5, 0x25, 0x52, 0x6D,
+ 0x26, 0xEB, 0x2F, 0x8A, 0x3B, 0x8B, 0x38, 0xE2,
+ 0x48, 0xD3, 0x4A, 0x98, 0xF7, 0x3A, 0xC2, 0x46,
+ 0x69, 0x8D, 0x73, 0x3E, 0x57, 0x88, 0x2C, 0x80,
+ 0xF0, 0xF2, 0x75, 0xB8, 0x7D, 0x27, 0xC6, 0xDA,
+
+ },
+ .len = 128 << 3
+ },
+ .cipher = {
+ .len_bits = 126 << 3,
+ .offset_bits = 2 << 3
+ },
+ .auth = {
+ .len_bits = 124 << 3,
+ .offset_bits = 0
+ },
+ .digest = {
+ .data = {
+ 0x7D, 0x27, 0xC6, 0xDA
+ },
+ .len = 4,
+ .offset_bytes = 124
+ },
+ .validDataLenInBits = {
+ .len = 128 << 3
+ },
+ .validCipherLenInBits = {
+ .len = 126 << 3
+ },
+ .validAuthLenInBits = {
+ .len = 124 << 3
+ },
+};
+
#endif /* TEST_CRYPTODEV_SNOW3G_TEST_VECTORS_H_ */
--
2.19.2
next reply other threads:[~2019-02-13 9:00 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-13 8:43 Lukasz Krakowiak [this message]
2019-02-13 10:20 ` Lukasz Krakowiak
2019-02-27 10:18 ` [dpdk-dev] [PATCH v2] " Lukasz Krakowiak
2019-03-01 17:36 ` Kusztal, ArkadiuszX
2019-03-22 14:51 ` Akhil Goyal
2019-03-22 14:51 ` Akhil Goyal
2019-03-25 10:47 ` [dpdk-dev] [PATCH v3] " Lukasz Krakowiak
2019-03-25 10:47 ` Lukasz Krakowiak
2019-03-28 13:09 ` Trahe, Fiona
2019-03-28 13:09 ` Trahe, Fiona
2019-03-28 13:10 ` Trahe, Fiona
2019-03-28 13:10 ` Trahe, Fiona
2019-03-29 14:28 ` Akhil Goyal
2019-03-29 14:28 ` Akhil Goyal
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=20190213084303.4431-1-lukaszx.krakowiak@intel.com \
--to=lukaszx.krakowiak@intel.com \
--cc=dev@dpdk.org \
--cc=pablo.de.lara.guarch@intel.com \
--cc=stable@dpdk.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).