1474f1202SAnoob Joseph /* SPDX-License-Identifier: BSD-3-Clause 2474f1202SAnoob Joseph * Copyright(C) 2021 Marvell. 3474f1202SAnoob Joseph */ 4474f1202SAnoob Joseph 5474f1202SAnoob Joseph #ifndef _TEST_CRYPTODEV_SECURITY_IPSEC_H_ 6474f1202SAnoob Joseph #define _TEST_CRYPTODEV_SECURITY_IPSEC_H_ 7474f1202SAnoob Joseph 8474f1202SAnoob Joseph #include <rte_cryptodev.h> 9474f1202SAnoob Joseph #include <rte_security.h> 10474f1202SAnoob Joseph 116622d9c9SAnoob Joseph #define IPSEC_TEST_PACKETS_MAX 32 126622d9c9SAnoob Joseph 13474f1202SAnoob Joseph struct ipsec_test_data { 14474f1202SAnoob Joseph struct { 15474f1202SAnoob Joseph uint8_t data[32]; 16474f1202SAnoob Joseph } key; 17474f1202SAnoob Joseph 18474f1202SAnoob Joseph struct { 19474f1202SAnoob Joseph uint8_t data[1024]; 20474f1202SAnoob Joseph unsigned int len; 21474f1202SAnoob Joseph } input_text; 22474f1202SAnoob Joseph 23474f1202SAnoob Joseph struct { 24474f1202SAnoob Joseph uint8_t data[1024]; 25474f1202SAnoob Joseph unsigned int len; 26474f1202SAnoob Joseph } output_text; 27474f1202SAnoob Joseph 28474f1202SAnoob Joseph struct { 29474f1202SAnoob Joseph uint8_t data[4]; 30474f1202SAnoob Joseph unsigned int len; 31474f1202SAnoob Joseph } salt; 32474f1202SAnoob Joseph 33474f1202SAnoob Joseph struct { 34474f1202SAnoob Joseph uint8_t data[16]; 35474f1202SAnoob Joseph } iv; 36474f1202SAnoob Joseph 37474f1202SAnoob Joseph struct rte_security_ipsec_xform ipsec_xform; 38474f1202SAnoob Joseph 39474f1202SAnoob Joseph bool aead; 40474f1202SAnoob Joseph 41474f1202SAnoob Joseph union { 42474f1202SAnoob Joseph struct { 43474f1202SAnoob Joseph struct rte_crypto_sym_xform cipher; 44474f1202SAnoob Joseph struct rte_crypto_sym_xform auth; 45474f1202SAnoob Joseph } chain; 46474f1202SAnoob Joseph struct rte_crypto_sym_xform aead; 47474f1202SAnoob Joseph } xform; 48474f1202SAnoob Joseph }; 49474f1202SAnoob Joseph 506622d9c9SAnoob Joseph struct ipsec_test_flags { 516622d9c9SAnoob Joseph bool display_alg; 520f453190STejasree Kondoj bool icv_corrupt; 53*cd928003STejasree Kondoj bool iv_gen; 546622d9c9SAnoob Joseph }; 556622d9c9SAnoob Joseph 566622d9c9SAnoob Joseph struct crypto_param { 576622d9c9SAnoob Joseph enum rte_crypto_sym_xform_type type; 586622d9c9SAnoob Joseph union { 596622d9c9SAnoob Joseph enum rte_crypto_cipher_algorithm cipher; 606622d9c9SAnoob Joseph enum rte_crypto_auth_algorithm auth; 616622d9c9SAnoob Joseph enum rte_crypto_aead_algorithm aead; 626622d9c9SAnoob Joseph } alg; 636622d9c9SAnoob Joseph uint16_t key_length; 646622d9c9SAnoob Joseph }; 656622d9c9SAnoob Joseph 666622d9c9SAnoob Joseph static const struct crypto_param aead_list[] = { 676622d9c9SAnoob Joseph { 686622d9c9SAnoob Joseph .type = RTE_CRYPTO_SYM_XFORM_AEAD, 696622d9c9SAnoob Joseph .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 706622d9c9SAnoob Joseph .key_length = 16, 716622d9c9SAnoob Joseph }, 726622d9c9SAnoob Joseph { 736622d9c9SAnoob Joseph .type = RTE_CRYPTO_SYM_XFORM_AEAD, 746622d9c9SAnoob Joseph .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 756622d9c9SAnoob Joseph .key_length = 24, 766622d9c9SAnoob Joseph }, 776622d9c9SAnoob Joseph { 786622d9c9SAnoob Joseph .type = RTE_CRYPTO_SYM_XFORM_AEAD, 796622d9c9SAnoob Joseph .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 806622d9c9SAnoob Joseph .key_length = 32 816622d9c9SAnoob Joseph }, 826622d9c9SAnoob Joseph }; 836622d9c9SAnoob Joseph 84474f1202SAnoob Joseph int test_ipsec_sec_caps_verify(struct rte_security_ipsec_xform *ipsec_xform, 85474f1202SAnoob Joseph const struct rte_security_capability *sec_cap, 86474f1202SAnoob Joseph bool silent); 87474f1202SAnoob Joseph 88474f1202SAnoob Joseph int test_ipsec_crypto_caps_aead_verify( 89474f1202SAnoob Joseph const struct rte_security_capability *sec_cap, 90474f1202SAnoob Joseph struct rte_crypto_sym_xform *aead); 91474f1202SAnoob Joseph 92474f1202SAnoob Joseph void test_ipsec_td_in_from_out(const struct ipsec_test_data *td_out, 93474f1202SAnoob Joseph struct ipsec_test_data *td_in); 94474f1202SAnoob Joseph 956622d9c9SAnoob Joseph void test_ipsec_td_prepare(const struct crypto_param *param1, 966622d9c9SAnoob Joseph const struct crypto_param *param2, 976622d9c9SAnoob Joseph const struct ipsec_test_flags *flags, 986622d9c9SAnoob Joseph struct ipsec_test_data *td_array, 996622d9c9SAnoob Joseph int nb_td); 1006622d9c9SAnoob Joseph 1016622d9c9SAnoob Joseph void test_ipsec_td_update(struct ipsec_test_data td_inb[], 1026622d9c9SAnoob Joseph const struct ipsec_test_data td_outb[], 1036622d9c9SAnoob Joseph int nb_td, 1046622d9c9SAnoob Joseph const struct ipsec_test_flags *flags); 1056622d9c9SAnoob Joseph 1066622d9c9SAnoob Joseph void test_ipsec_display_alg(const struct crypto_param *param1, 1076622d9c9SAnoob Joseph const struct crypto_param *param2); 1086622d9c9SAnoob Joseph 109474f1202SAnoob Joseph int test_ipsec_post_process(struct rte_mbuf *m, 110474f1202SAnoob Joseph const struct ipsec_test_data *td, 1116622d9c9SAnoob Joseph struct ipsec_test_data *res_d, bool silent, 1126622d9c9SAnoob Joseph const struct ipsec_test_flags *flags); 113474f1202SAnoob Joseph 114474f1202SAnoob Joseph int test_ipsec_status_check(struct rte_crypto_op *op, 1156622d9c9SAnoob Joseph const struct ipsec_test_flags *flags, 116474f1202SAnoob Joseph enum rte_security_ipsec_sa_direction dir); 117474f1202SAnoob Joseph 118474f1202SAnoob Joseph #endif 119