From 2d54b9ce12d9783064c537a96b7fcf5eb95abc4a Mon Sep 17 00:00:00 2001 From: Akhil Goyal Date: Tue, 1 Oct 2019 00:57:44 +0530 Subject: [PATCH] test/crypto: add PDCP U-Plane decap cases This patch add test cases for user plane PDCP 5/7/12/15/18 bit SN test cases for decapsulation of cipher only and 12/18 bit for cipher + integrity for all algo combinations. Test vectors are reused from the encap cases by swapping the input and output data. The case are added to DPAA_SEC and DPAA2_SEC testsuite. Signed-off-by: Akhil Goyal Signed-off-by: Vakul Garg Signed-off-by: Hemant Agrawal Acked-by: Nipun Gupta --- app/test/test_cryptodev.c | 30 +++ app/test/test_cryptodev_security_pdcp.c | 173 ++++++++++++++++++ .../test_cryptodev_security_pdcp_test_func.h | 3 + 3 files changed, 206 insertions(+) diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index 4666317aae..afc296bf99 100644 --- a/app/test/test_cryptodev.c +++ b/app/test/test_cryptodev.c @@ -7252,6 +7252,30 @@ test_pdcp_proto_cplane_decap(int i) pdcp_test_data_in_len[i]); } +int +test_pdcp_proto_uplane_decap(int i) +{ + return test_pdcp_proto(i, 0, + RTE_CRYPTO_CIPHER_OP_DECRYPT, + RTE_CRYPTO_AUTH_OP_VERIFY, + pdcp_test_data_out[i], + pdcp_test_data_in_len[i], + pdcp_test_data_in[i], + pdcp_test_data_in_len[i]); +} + +int +test_pdcp_proto_uplane_decap_with_int(int i) +{ + return test_pdcp_proto(i, 0, + RTE_CRYPTO_CIPHER_OP_DECRYPT, + RTE_CRYPTO_AUTH_OP_VERIFY, + pdcp_test_data_out[i], + pdcp_test_data_in_len[i] + 4, + pdcp_test_data_in[i], + pdcp_test_data_in_len[i]); +} + #endif static int @@ -11675,6 +11699,9 @@ static struct unit_test_suite cryptodev_dpaa_sec_testsuite = { TEST_CASE_ST(ut_setup, ut_teardown, test_PDCP_PROTO_uplane_encap_all), + + TEST_CASE_ST(ut_setup, ut_teardown, + test_PDCP_PROTO_uplane_decap_all), #endif /** AES GCM Authenticated Encryption */ TEST_CASE_ST(ut_setup, ut_teardown, @@ -11790,6 +11817,9 @@ static struct unit_test_suite cryptodev_dpaa2_sec_testsuite = { TEST_CASE_ST(ut_setup, ut_teardown, test_PDCP_PROTO_uplane_encap_all), + + TEST_CASE_ST(ut_setup, ut_teardown, + test_PDCP_PROTO_uplane_decap_all), #endif /** AES GCM Authenticated Encryption */ TEST_CASE_ST(ut_setup, ut_teardown, diff --git a/app/test/test_cryptodev_security_pdcp.c b/app/test/test_cryptodev_security_pdcp.c index e1ba2bf6ed..30f3eb892c 100644 --- a/app/test/test_cryptodev_security_pdcp.c +++ b/app/test/test_cryptodev_security_pdcp.c @@ -99,6 +99,33 @@ static int uplane_encap_no_integrity(uint32_t sn_size, uint8_t dir, return test_pdcp_proto_uplane_encap(i); } +static int +uplane_decap_no_integrity(uint32_t sn_size, uint8_t dir, + enum enc_alg_off enc_alg_off) +{ + int i = PDCP_UPLANE_OFFSET + ((dir == 0) ? UPLINK : DOWNLINK) + + enc_alg_off; + + switch (sn_size) { + case 7: + i += SHORT_SEQ_NUM_OFFSET; + break; + case 15: + i += FIFTEEN_BIT_SEQ_NUM_OFFSET; + break; + case 12: + i += LONG_SEQ_NUM_OFFSET; + break; + case 18: + i += EIGHTEEN_BIT_SEQ_NUM_OFFSET; + break; + default: + printf("\nInvalid SN: %u\n", sn_size); + } + + return test_pdcp_proto_uplane_decap(i); +} + static int uplane_encap_with_integrity(uint32_t sn_size, uint8_t dir, enum enc_alg_off enc_alg_off, @@ -124,6 +151,31 @@ uplane_encap_with_integrity(uint32_t sn_size, uint8_t dir, return test_pdcp_proto_uplane_encap_with_int(i); } +static int +uplane_decap_with_integrity(uint32_t sn_size, uint8_t dir, + enum enc_alg_off enc_alg_off, + enum auth_alg_off auth_alg_off) +{ + int i = 0; + + switch (sn_size) { + case 12: + i = PDCP_UPLANE_12BIT_OFFSET + enc_alg_off + + auth_alg_off + ((dir == 0) ? + UPLINK : DOWNLINK); + break; + case 18: + i = PDCP_UPLANE_18BIT_OFFSET + enc_alg_off + + auth_alg_off + ((dir == 0) ? + UPLINK : DOWNLINK); + break; + default: + printf("\nInvalid SN: %u\n", sn_size); + } + + return test_pdcp_proto_uplane_decap_with_int(i); +} + #define TEST_PDCP_COUNT(func) do { \ if (func == TEST_SUCCESS) { \ printf("\t%d)", n++); \ @@ -415,3 +467,124 @@ test_PDCP_PROTO_uplane_encap_all(void) return n - i; }; + +int +test_PDCP_PROTO_uplane_decap_all(void) +{ + int i = 0, n = 0; + + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, NULL_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, NULL_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, NULL_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, NULL_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, NULL_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, NULL_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, NULL_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, NULL_ENC)); + + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, SNOW_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, SNOW_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, SNOW_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, SNOW_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, SNOW_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, SNOW_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, SNOW_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, SNOW_ENC)); + + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, AES_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, AES_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, AES_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, AES_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, AES_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, AES_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, AES_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, AES_ENC)); + + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, ZUC_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, ZUC_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, ZUC_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, ZUC_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, ZUC_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, ZUC_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, ZUC_ENC)); + TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, ZUC_ENC)); + + /* u-plane 12-bit with integrity */ + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, ZUC_AUTH)); + + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, ZUC_AUTH)); + + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, ZUC_AUTH)); + + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, ZUC_AUTH)); + + /* u-plane 18-bit with integrity */ + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, ZUC_AUTH)); + + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, ZUC_AUTH)); + + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, ZUC_AUTH)); + + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, NULL_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, SNOW_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, AES_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, ZUC_AUTH)); + TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, ZUC_AUTH)); + + if (n - i) + printf("## %s: %d passed out of %d\n", __func__, i, n); + + return n - i; +}; diff --git a/app/test/test_cryptodev_security_pdcp_test_func.h b/app/test/test_cryptodev_security_pdcp_test_func.h index 473cdaecc0..f3dc93e2f1 100644 --- a/app/test/test_cryptodev_security_pdcp_test_func.h +++ b/app/test/test_cryptodev_security_pdcp_test_func.h @@ -37,9 +37,12 @@ int test_pdcp_proto_cplane_encap(int i); int test_pdcp_proto_uplane_encap(int i); int test_pdcp_proto_uplane_encap_with_int(int i); int test_pdcp_proto_cplane_decap(int i); +int test_pdcp_proto_uplane_decap(int i); +int test_pdcp_proto_uplane_decap_with_int(int i); int test_PDCP_PROTO_cplane_encap_all(void); int test_PDCP_PROTO_cplane_decap_all(void); int test_PDCP_PROTO_uplane_encap_all(void); +int test_PDCP_PROTO_uplane_decap_all(void); #endif /* SECURITY_PDCP_TEST_FUNC_H_ */ -- 2.20.1