1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(C) 2021 Marvell. 3 */ 4 5 #ifndef _TEST_CRYPTODEV_SECURITY_IPSEC_H_ 6 #define _TEST_CRYPTODEV_SECURITY_IPSEC_H_ 7 8 #include <rte_cryptodev.h> 9 #include <rte_security.h> 10 11 #define IPSEC_TEST_PACKETS_MAX 32 12 13 struct ipsec_test_data { 14 struct { 15 uint8_t data[32]; 16 } key; 17 18 struct { 19 uint8_t data[1024]; 20 unsigned int len; 21 } input_text; 22 23 struct { 24 uint8_t data[1024]; 25 unsigned int len; 26 } output_text; 27 28 struct { 29 uint8_t data[4]; 30 unsigned int len; 31 } salt; 32 33 struct { 34 uint8_t data[16]; 35 } iv; 36 37 struct rte_security_ipsec_xform ipsec_xform; 38 39 bool aead; 40 41 union { 42 struct { 43 struct rte_crypto_sym_xform cipher; 44 struct rte_crypto_sym_xform auth; 45 } chain; 46 struct rte_crypto_sym_xform aead; 47 } xform; 48 }; 49 50 struct ipsec_test_flags { 51 bool display_alg; 52 bool sa_expiry_pkts_soft; 53 bool sa_expiry_pkts_hard; 54 bool icv_corrupt; 55 bool iv_gen; 56 uint32_t tunnel_hdr_verify; 57 bool udp_encap; 58 }; 59 60 struct crypto_param { 61 enum rte_crypto_sym_xform_type type; 62 union { 63 enum rte_crypto_cipher_algorithm cipher; 64 enum rte_crypto_auth_algorithm auth; 65 enum rte_crypto_aead_algorithm aead; 66 } alg; 67 uint16_t key_length; 68 }; 69 70 static const struct crypto_param aead_list[] = { 71 { 72 .type = RTE_CRYPTO_SYM_XFORM_AEAD, 73 .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 74 .key_length = 16, 75 }, 76 { 77 .type = RTE_CRYPTO_SYM_XFORM_AEAD, 78 .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 79 .key_length = 24, 80 }, 81 { 82 .type = RTE_CRYPTO_SYM_XFORM_AEAD, 83 .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 84 .key_length = 32 85 }, 86 }; 87 88 int test_ipsec_sec_caps_verify(struct rte_security_ipsec_xform *ipsec_xform, 89 const struct rte_security_capability *sec_cap, 90 bool silent); 91 92 int test_ipsec_crypto_caps_aead_verify( 93 const struct rte_security_capability *sec_cap, 94 struct rte_crypto_sym_xform *aead); 95 96 void test_ipsec_td_in_from_out(const struct ipsec_test_data *td_out, 97 struct ipsec_test_data *td_in); 98 99 void test_ipsec_td_prepare(const struct crypto_param *param1, 100 const struct crypto_param *param2, 101 const struct ipsec_test_flags *flags, 102 struct ipsec_test_data *td_array, 103 int nb_td); 104 105 void test_ipsec_td_update(struct ipsec_test_data td_inb[], 106 const struct ipsec_test_data td_outb[], 107 int nb_td, 108 const struct ipsec_test_flags *flags); 109 110 void test_ipsec_display_alg(const struct crypto_param *param1, 111 const struct crypto_param *param2); 112 113 int test_ipsec_post_process(struct rte_mbuf *m, 114 const struct ipsec_test_data *td, 115 struct ipsec_test_data *res_d, bool silent, 116 const struct ipsec_test_flags *flags); 117 118 int test_ipsec_status_check(struct rte_crypto_op *op, 119 const struct ipsec_test_flags *flags, 120 enum rte_security_ipsec_sa_direction dir, 121 int pkt_num); 122 123 #endif 124