xref: /dpdk/app/test/test_cryptodev_security_ipsec.h (revision cd928003d8a3d58e6bb29b448d094113a8e4b2e2)
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