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 bool udp_ports_verify; 59 bool ip_csum; 60 bool l4_csum; 61 }; 62 63 struct crypto_param { 64 enum rte_crypto_sym_xform_type type; 65 union { 66 enum rte_crypto_cipher_algorithm cipher; 67 enum rte_crypto_auth_algorithm auth; 68 enum rte_crypto_aead_algorithm aead; 69 } alg; 70 uint16_t key_length; 71 }; 72 73 static const struct crypto_param aead_list[] = { 74 { 75 .type = RTE_CRYPTO_SYM_XFORM_AEAD, 76 .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 77 .key_length = 16, 78 }, 79 { 80 .type = RTE_CRYPTO_SYM_XFORM_AEAD, 81 .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 82 .key_length = 24, 83 }, 84 { 85 .type = RTE_CRYPTO_SYM_XFORM_AEAD, 86 .alg.aead = RTE_CRYPTO_AEAD_AES_GCM, 87 .key_length = 32 88 }, 89 }; 90 91 int test_ipsec_sec_caps_verify(struct rte_security_ipsec_xform *ipsec_xform, 92 const struct rte_security_capability *sec_cap, 93 bool silent); 94 95 int test_ipsec_crypto_caps_aead_verify( 96 const struct rte_security_capability *sec_cap, 97 struct rte_crypto_sym_xform *aead); 98 99 void test_ipsec_td_in_from_out(const struct ipsec_test_data *td_out, 100 struct ipsec_test_data *td_in); 101 102 void test_ipsec_td_prepare(const struct crypto_param *param1, 103 const struct crypto_param *param2, 104 const struct ipsec_test_flags *flags, 105 struct ipsec_test_data *td_array, 106 int nb_td); 107 108 void test_ipsec_td_update(struct ipsec_test_data td_inb[], 109 const struct ipsec_test_data td_outb[], 110 int nb_td, 111 const struct ipsec_test_flags *flags); 112 113 void test_ipsec_display_alg(const struct crypto_param *param1, 114 const struct crypto_param *param2); 115 116 int test_ipsec_post_process(struct rte_mbuf *m, 117 const struct ipsec_test_data *td, 118 struct ipsec_test_data *res_d, bool silent, 119 const struct ipsec_test_flags *flags); 120 121 int test_ipsec_status_check(struct rte_crypto_op *op, 122 const struct ipsec_test_flags *flags, 123 enum rte_security_ipsec_sa_direction dir, 124 int pkt_num); 125 126 #endif 127