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