1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang  * Copyright(c) 2016-2017 Intel Corporation
3*4418919fSjohnjiang  */
4*4418919fSjohnjiang 
5*4418919fSjohnjiang #ifndef TEST_CRYPTODEV_BLOCKCIPHER_H_
6*4418919fSjohnjiang #define TEST_CRYPTODEV_BLOCKCIPHER_H_
7*4418919fSjohnjiang 
8*4418919fSjohnjiang #ifndef BLOCKCIPHER_TEST_MSG_LEN
9*4418919fSjohnjiang #define BLOCKCIPHER_TEST_MSG_LEN		256
10*4418919fSjohnjiang #endif
11*4418919fSjohnjiang 
12*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_ENCRYPT		0x01
13*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_DECRYPT		0x02
14*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_AUTH_GEN	0x04
15*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_AUTH_VERIFY	0x08
16*4418919fSjohnjiang 
17*4418919fSjohnjiang #define BLOCKCIPHER_TEST_FEATURE_OOP			0x01
18*4418919fSjohnjiang #define BLOCKCIPHER_TEST_FEATURE_SESSIONLESS	0x02
19*4418919fSjohnjiang #define BLOCKCIPHER_TEST_FEATURE_STOPPER	0x04 /* stop upon failing */
20*4418919fSjohnjiang #define BLOCKCIPHER_TEST_FEATURE_SG		0x08 /* Scatter Gather */
21*4418919fSjohnjiang 
22*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_CIPHER	(BLOCKCIPHER_TEST_OP_ENCRYPT | \
23*4418919fSjohnjiang 					BLOCKCIPHER_TEST_OP_DECRYPT)
24*4418919fSjohnjiang 
25*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_AUTH	(BLOCKCIPHER_TEST_OP_AUTH_GEN | \
26*4418919fSjohnjiang 					BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
27*4418919fSjohnjiang 
28*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN	(BLOCKCIPHER_TEST_OP_ENCRYPT | \
29*4418919fSjohnjiang 					BLOCKCIPHER_TEST_OP_AUTH_GEN)
30*4418919fSjohnjiang 
31*4418919fSjohnjiang #define BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC	(BLOCKCIPHER_TEST_OP_DECRYPT | \
32*4418919fSjohnjiang 					BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
33*4418919fSjohnjiang 
34*4418919fSjohnjiang enum blockcipher_test_type {
35*4418919fSjohnjiang 	BLKCIPHER_AES_CHAIN_TYPE,	/* use aes_chain_test_cases[] */
36*4418919fSjohnjiang 	BLKCIPHER_AES_CIPHERONLY_TYPE,	/* use aes_cipheronly_test_cases[] */
37*4418919fSjohnjiang 	BLKCIPHER_AES_DOCSIS_TYPE,	/* use aes_docsis_test_cases[] */
38*4418919fSjohnjiang 	BLKCIPHER_3DES_CHAIN_TYPE,	/* use triple_des_chain_test_cases[] */
39*4418919fSjohnjiang 	BLKCIPHER_3DES_CIPHERONLY_TYPE,	/* triple_des_cipheronly_test_cases[] */
40*4418919fSjohnjiang 	BLKCIPHER_AUTHONLY_TYPE,	/* use hash_test_cases[] */
41*4418919fSjohnjiang 	BLKCIPHER_DES_CIPHERONLY_TYPE,	/* use des_cipheronly_test_cases[] */
42*4418919fSjohnjiang 	BLKCIPHER_DES_DOCSIS_TYPE	/* use des_docsis_test_cases[] */
43*4418919fSjohnjiang };
44*4418919fSjohnjiang 
45*4418919fSjohnjiang struct blockcipher_test_case {
46*4418919fSjohnjiang 	const char *test_descr; /* test description */
47*4418919fSjohnjiang 	const struct blockcipher_test_data *test_data;
48*4418919fSjohnjiang 	uint8_t op_mask; /* operation mask */
49*4418919fSjohnjiang 	uint8_t feature_mask;
50*4418919fSjohnjiang };
51*4418919fSjohnjiang 
52*4418919fSjohnjiang struct blockcipher_test_data {
53*4418919fSjohnjiang 	enum rte_crypto_cipher_algorithm crypto_algo;
54*4418919fSjohnjiang 
55*4418919fSjohnjiang 	struct {
56*4418919fSjohnjiang 		uint8_t data[64];
57*4418919fSjohnjiang 		unsigned int len;
58*4418919fSjohnjiang 	} cipher_key;
59*4418919fSjohnjiang 
60*4418919fSjohnjiang 	struct {
61*4418919fSjohnjiang 		uint8_t data[64] __rte_aligned(16);
62*4418919fSjohnjiang 		unsigned int len;
63*4418919fSjohnjiang 	} iv;
64*4418919fSjohnjiang 
65*4418919fSjohnjiang 	struct {
66*4418919fSjohnjiang 		const uint8_t *data;
67*4418919fSjohnjiang 		unsigned int len;
68*4418919fSjohnjiang 	} plaintext;
69*4418919fSjohnjiang 
70*4418919fSjohnjiang 	struct {
71*4418919fSjohnjiang 		const uint8_t *data;
72*4418919fSjohnjiang 		unsigned int len;
73*4418919fSjohnjiang 	} ciphertext;
74*4418919fSjohnjiang 
75*4418919fSjohnjiang 	enum rte_crypto_auth_algorithm auth_algo;
76*4418919fSjohnjiang 
77*4418919fSjohnjiang 	struct {
78*4418919fSjohnjiang 		uint8_t data[128];
79*4418919fSjohnjiang 		unsigned int len;
80*4418919fSjohnjiang 	} auth_key;
81*4418919fSjohnjiang 
82*4418919fSjohnjiang 	struct {
83*4418919fSjohnjiang 		uint8_t data[128];
84*4418919fSjohnjiang 		unsigned int len;		/* for qat */
85*4418919fSjohnjiang 		unsigned int truncated_len;	/* for mb */
86*4418919fSjohnjiang 	} digest;
87*4418919fSjohnjiang 
88*4418919fSjohnjiang 	unsigned int cipher_offset;
89*4418919fSjohnjiang 	unsigned int auth_offset;
90*4418919fSjohnjiang };
91*4418919fSjohnjiang 
92*4418919fSjohnjiang int
93*4418919fSjohnjiang test_blockcipher_all_tests(struct rte_mempool *mbuf_pool,
94*4418919fSjohnjiang 	struct rte_mempool *op_mpool,
95*4418919fSjohnjiang 	struct rte_mempool *sess_mpool,
96*4418919fSjohnjiang 	struct rte_mempool *sess_priv_mpool,
97*4418919fSjohnjiang 	uint8_t dev_id,
98*4418919fSjohnjiang 	enum blockcipher_test_type test_type);
99*4418919fSjohnjiang 
100*4418919fSjohnjiang #endif /* TEST_CRYPTODEV_BLOCKCIPHER_H_ */
101