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