xref: /dpdk/drivers/crypto/ccp/ccp_crypto.h (revision 27595cd83053b2d39634a159d6709b3ce3cdf3b0)
129610e41SRavi Kumar /*   SPDX-License-Identifier: BSD-3-Clause
229610e41SRavi Kumar  *   Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved.
329610e41SRavi Kumar  */
429610e41SRavi Kumar 
529610e41SRavi Kumar #ifndef _CCP_CRYPTO_H_
629610e41SRavi Kumar #define _CCP_CRYPTO_H_
729610e41SRavi Kumar 
829610e41SRavi Kumar #include <limits.h>
929610e41SRavi Kumar #include <stdbool.h>
1029610e41SRavi Kumar #include <stdint.h>
1129610e41SRavi Kumar #include <string.h>
1229610e41SRavi Kumar 
1329610e41SRavi Kumar #include <rte_atomic.h>
1429610e41SRavi Kumar #include <rte_byteorder.h>
1529610e41SRavi Kumar #include <rte_io.h>
1629610e41SRavi Kumar #include <rte_pci.h>
1729610e41SRavi Kumar #include <rte_spinlock.h>
1829610e41SRavi Kumar #include <rte_crypto_sym.h>
1929610e41SRavi Kumar #include <rte_cryptodev.h>
2029610e41SRavi Kumar 
2129610e41SRavi Kumar #include "ccp_dev.h"
2229610e41SRavi Kumar 
23d9a9e561SRavi Kumar #define AES_BLOCK_SIZE 16
24d9a9e561SRavi Kumar #define CMAC_PAD_VALUE 0x80
25d9a9e561SRavi Kumar #define CTR_NONCE_SIZE 4
26d9a9e561SRavi Kumar #define CTR_IV_SIZE 8
2729610e41SRavi Kumar #define CCP_SHA3_CTX_SIZE 200
28d9a9e561SRavi Kumar 
29d9a9e561SRavi Kumar /**Macro helpers for CCP command creation*/
30d9a9e561SRavi Kumar #define	CCP_AES_SIZE(p)		((p)->aes.size)
31d9a9e561SRavi Kumar #define	CCP_AES_ENCRYPT(p)	((p)->aes.encrypt)
32d9a9e561SRavi Kumar #define	CCP_AES_MODE(p)		((p)->aes.mode)
33d9a9e561SRavi Kumar #define	CCP_AES_TYPE(p)		((p)->aes.type)
34c05adb06SRavi Kumar #define	CCP_DES_ENCRYPT(p)	((p)->des.encrypt)
35c05adb06SRavi Kumar #define	CCP_DES_MODE(p)		((p)->des.mode)
36c05adb06SRavi Kumar #define	CCP_DES_TYPE(p)		((p)->des.type)
370c6a81efSRavi Kumar #define	CCP_SHA_TYPE(p)		((p)->sha.type)
38d9a9e561SRavi Kumar #define	CCP_PT_BYTESWAP(p)	((p)->pt.byteswap)
39d9a9e561SRavi Kumar #define	CCP_PT_BITWISE(p)	((p)->pt.bitwise)
40d9a9e561SRavi Kumar 
410c6a81efSRavi Kumar /* HMAC */
420c6a81efSRavi Kumar #define HMAC_IPAD_VALUE 0x36
430c6a81efSRavi Kumar #define HMAC_OPAD_VALUE 0x5c
440c6a81efSRavi Kumar 
45e0d88a39SRavi Kumar /* MD5 */
460c6a81efSRavi Kumar #define MD5_DIGEST_SIZE         16
470c6a81efSRavi Kumar #define MD5_BLOCK_SIZE          64
480c6a81efSRavi Kumar 
490c6a81efSRavi Kumar /* SHA */
500c6a81efSRavi Kumar #define SHA_COMMON_DIGEST_SIZE	32
510c6a81efSRavi Kumar #define SHA1_DIGEST_SIZE        20
520c6a81efSRavi Kumar #define SHA1_BLOCK_SIZE         64
530c6a81efSRavi Kumar 
54ca40ea24SRavi Kumar #define SHA224_DIGEST_SIZE      28
55ca40ea24SRavi Kumar #define SHA224_BLOCK_SIZE       64
561df800f8SRavi Kumar #define SHA3_224_BLOCK_SIZE     144
57ca40ea24SRavi Kumar 
58ca40ea24SRavi Kumar #define SHA256_DIGEST_SIZE      32
59ca40ea24SRavi Kumar #define SHA256_BLOCK_SIZE       64
601df800f8SRavi Kumar #define SHA3_256_BLOCK_SIZE     136
61ca40ea24SRavi Kumar 
62ca40ea24SRavi Kumar #define SHA384_DIGEST_SIZE      48
63ca40ea24SRavi Kumar #define SHA384_BLOCK_SIZE       128
641df800f8SRavi Kumar #define SHA3_384_BLOCK_SIZE	104
65ca40ea24SRavi Kumar 
66ca40ea24SRavi Kumar #define SHA512_DIGEST_SIZE      64
67ca40ea24SRavi Kumar #define SHA512_BLOCK_SIZE       128
681df800f8SRavi Kumar #define SHA3_512_BLOCK_SIZE     72
69ca40ea24SRavi Kumar 
706c561b03SRavi Kumar /* Maximum length for digest */
716c561b03SRavi Kumar #define DIGEST_LENGTH_MAX	64
726c561b03SRavi Kumar 
737be78d02SJosh Soref /* SHA LSB initialization values */
740c6a81efSRavi Kumar 
750c6a81efSRavi Kumar #define SHA1_H0		0x67452301UL
760c6a81efSRavi Kumar #define SHA1_H1		0xefcdab89UL
770c6a81efSRavi Kumar #define SHA1_H2		0x98badcfeUL
780c6a81efSRavi Kumar #define SHA1_H3		0x10325476UL
790c6a81efSRavi Kumar #define SHA1_H4		0xc3d2e1f0UL
800c6a81efSRavi Kumar 
81ca40ea24SRavi Kumar #define SHA224_H0	0xc1059ed8UL
82ca40ea24SRavi Kumar #define SHA224_H1	0x367cd507UL
83ca40ea24SRavi Kumar #define SHA224_H2	0x3070dd17UL
84ca40ea24SRavi Kumar #define SHA224_H3	0xf70e5939UL
85ca40ea24SRavi Kumar #define SHA224_H4	0xffc00b31UL
86ca40ea24SRavi Kumar #define SHA224_H5	0x68581511UL
87ca40ea24SRavi Kumar #define SHA224_H6	0x64f98fa7UL
88ca40ea24SRavi Kumar #define SHA224_H7	0xbefa4fa4UL
89ca40ea24SRavi Kumar 
90ca40ea24SRavi Kumar #define SHA256_H0	0x6a09e667UL
91ca40ea24SRavi Kumar #define SHA256_H1	0xbb67ae85UL
92ca40ea24SRavi Kumar #define SHA256_H2	0x3c6ef372UL
93ca40ea24SRavi Kumar #define SHA256_H3	0xa54ff53aUL
94ca40ea24SRavi Kumar #define SHA256_H4	0x510e527fUL
95ca40ea24SRavi Kumar #define SHA256_H5	0x9b05688cUL
96ca40ea24SRavi Kumar #define SHA256_H6	0x1f83d9abUL
97ca40ea24SRavi Kumar #define SHA256_H7	0x5be0cd19UL
98ca40ea24SRavi Kumar 
99ca40ea24SRavi Kumar #define SHA384_H0	0xcbbb9d5dc1059ed8ULL
100ca40ea24SRavi Kumar #define SHA384_H1	0x629a292a367cd507ULL
101ca40ea24SRavi Kumar #define SHA384_H2	0x9159015a3070dd17ULL
102ca40ea24SRavi Kumar #define SHA384_H3	0x152fecd8f70e5939ULL
103ca40ea24SRavi Kumar #define SHA384_H4	0x67332667ffc00b31ULL
104ca40ea24SRavi Kumar #define SHA384_H5	0x8eb44a8768581511ULL
105ca40ea24SRavi Kumar #define SHA384_H6	0xdb0c2e0d64f98fa7ULL
106ca40ea24SRavi Kumar #define SHA384_H7	0x47b5481dbefa4fa4ULL
107ca40ea24SRavi Kumar 
108ca40ea24SRavi Kumar #define SHA512_H0	0x6a09e667f3bcc908ULL
109ca40ea24SRavi Kumar #define SHA512_H1	0xbb67ae8584caa73bULL
110ca40ea24SRavi Kumar #define SHA512_H2	0x3c6ef372fe94f82bULL
111ca40ea24SRavi Kumar #define SHA512_H3	0xa54ff53a5f1d36f1ULL
112ca40ea24SRavi Kumar #define SHA512_H4	0x510e527fade682d1ULL
113ca40ea24SRavi Kumar #define SHA512_H5	0x9b05688c2b3e6c1fULL
114ca40ea24SRavi Kumar #define SHA512_H6	0x1f83d9abfb41bd6bULL
115ca40ea24SRavi Kumar #define SHA512_H7	0x5be0cd19137e2179ULL
116ca40ea24SRavi Kumar 
11729610e41SRavi Kumar /**
11829610e41SRavi Kumar  * CCP supported AES modes
11929610e41SRavi Kumar  */
12029610e41SRavi Kumar enum ccp_aes_mode {
12129610e41SRavi Kumar 	CCP_AES_MODE_ECB = 0,
12229610e41SRavi Kumar 	CCP_AES_MODE_CBC,
12329610e41SRavi Kumar 	CCP_AES_MODE_OFB,
12429610e41SRavi Kumar 	CCP_AES_MODE_CFB,
12529610e41SRavi Kumar 	CCP_AES_MODE_CTR,
12629610e41SRavi Kumar 	CCP_AES_MODE_CMAC,
12729610e41SRavi Kumar 	CCP_AES_MODE_GHASH,
12829610e41SRavi Kumar 	CCP_AES_MODE_GCTR,
12929610e41SRavi Kumar 	CCP_AES_MODE__LAST,
13029610e41SRavi Kumar };
13129610e41SRavi Kumar 
13229610e41SRavi Kumar /**
13329610e41SRavi Kumar  * CCP AES GHASH mode
13429610e41SRavi Kumar  */
13529610e41SRavi Kumar enum ccp_aes_ghash_mode {
13629610e41SRavi Kumar 	CCP_AES_MODE_GHASH_AAD = 0,
13729610e41SRavi Kumar 	CCP_AES_MODE_GHASH_FINAL
13829610e41SRavi Kumar };
13929610e41SRavi Kumar 
14029610e41SRavi Kumar /**
14129610e41SRavi Kumar  * CCP supported AES types
14229610e41SRavi Kumar  */
14329610e41SRavi Kumar enum ccp_aes_type {
14429610e41SRavi Kumar 	CCP_AES_TYPE_128 = 0,
14529610e41SRavi Kumar 	CCP_AES_TYPE_192,
14629610e41SRavi Kumar 	CCP_AES_TYPE_256,
14729610e41SRavi Kumar 	CCP_AES_TYPE__LAST,
14829610e41SRavi Kumar };
14929610e41SRavi Kumar 
15029610e41SRavi Kumar /***** 3DES engine *****/
15129610e41SRavi Kumar 
15229610e41SRavi Kumar /**
15329610e41SRavi Kumar  * CCP supported DES/3DES modes
15429610e41SRavi Kumar  */
15529610e41SRavi Kumar enum ccp_des_mode {
15629610e41SRavi Kumar 	CCP_DES_MODE_ECB = 0, /* Not supported */
15729610e41SRavi Kumar 	CCP_DES_MODE_CBC,
15829610e41SRavi Kumar 	CCP_DES_MODE_CFB,
15929610e41SRavi Kumar };
16029610e41SRavi Kumar 
16129610e41SRavi Kumar /**
16229610e41SRavi Kumar  * CCP supported DES types
16329610e41SRavi Kumar  */
16429610e41SRavi Kumar enum ccp_des_type {
16529610e41SRavi Kumar 	CCP_DES_TYPE_128 = 0,	/* 112 + 16 parity */
16629610e41SRavi Kumar 	CCP_DES_TYPE_192,	/* 168 + 24 parity */
16729610e41SRavi Kumar 	CCP_DES_TYPE__LAST,
16829610e41SRavi Kumar };
16929610e41SRavi Kumar 
17029610e41SRavi Kumar /***** SHA engine *****/
17129610e41SRavi Kumar 
17229610e41SRavi Kumar /**
17329610e41SRavi Kumar  * ccp_sha_type - type of SHA operation
17429610e41SRavi Kumar  *
17529610e41SRavi Kumar  * @CCP_SHA_TYPE_1: SHA-1 operation
17629610e41SRavi Kumar  * @CCP_SHA_TYPE_224: SHA-224 operation
17729610e41SRavi Kumar  * @CCP_SHA_TYPE_256: SHA-256 operation
17829610e41SRavi Kumar  */
17929610e41SRavi Kumar enum ccp_sha_type {
18029610e41SRavi Kumar 	CCP_SHA_TYPE_1 = 1,
18129610e41SRavi Kumar 	CCP_SHA_TYPE_224,
18229610e41SRavi Kumar 	CCP_SHA_TYPE_256,
18329610e41SRavi Kumar 	CCP_SHA_TYPE_384,
18429610e41SRavi Kumar 	CCP_SHA_TYPE_512,
18529610e41SRavi Kumar 	CCP_SHA_TYPE_RSVD1,
18629610e41SRavi Kumar 	CCP_SHA_TYPE_RSVD2,
18729610e41SRavi Kumar 	CCP_SHA3_TYPE_224,
18829610e41SRavi Kumar 	CCP_SHA3_TYPE_256,
18929610e41SRavi Kumar 	CCP_SHA3_TYPE_384,
19029610e41SRavi Kumar 	CCP_SHA3_TYPE_512,
19129610e41SRavi Kumar 	CCP_SHA_TYPE__LAST,
19229610e41SRavi Kumar };
19329610e41SRavi Kumar 
19429610e41SRavi Kumar /**
19529610e41SRavi Kumar  * CCP supported cipher algorithms
19629610e41SRavi Kumar  */
19729610e41SRavi Kumar enum ccp_cipher_algo {
19829610e41SRavi Kumar 	CCP_CIPHER_ALGO_AES_CBC = 0,
19929610e41SRavi Kumar 	CCP_CIPHER_ALGO_AES_ECB,
20029610e41SRavi Kumar 	CCP_CIPHER_ALGO_AES_CTR,
20129610e41SRavi Kumar 	CCP_CIPHER_ALGO_AES_GCM,
20229610e41SRavi Kumar 	CCP_CIPHER_ALGO_3DES_CBC,
20329610e41SRavi Kumar };
20429610e41SRavi Kumar 
20529610e41SRavi Kumar /**
20629610e41SRavi Kumar  * CCP cipher operation type
20729610e41SRavi Kumar  */
20829610e41SRavi Kumar enum ccp_cipher_dir {
20929610e41SRavi Kumar 	CCP_CIPHER_DIR_DECRYPT = 0,
21029610e41SRavi Kumar 	CCP_CIPHER_DIR_ENCRYPT = 1,
21129610e41SRavi Kumar };
21229610e41SRavi Kumar 
21329610e41SRavi Kumar /**
21429610e41SRavi Kumar  * CCP supported hash algorithms
21529610e41SRavi Kumar  */
21629610e41SRavi Kumar enum ccp_hash_algo {
21729610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA1 = 0,
21829610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA1_HMAC,
21929610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA224,
22029610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA224_HMAC,
22129610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_224,
22229610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_224_HMAC,
22329610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA256,
22429610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA256_HMAC,
22529610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_256,
22629610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_256_HMAC,
22729610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA384,
22829610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA384_HMAC,
22929610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_384,
23029610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_384_HMAC,
23129610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA512,
23229610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA512_HMAC,
23329610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_512,
23429610e41SRavi Kumar 	CCP_AUTH_ALGO_SHA3_512_HMAC,
23529610e41SRavi Kumar 	CCP_AUTH_ALGO_AES_CMAC,
23629610e41SRavi Kumar 	CCP_AUTH_ALGO_AES_GCM,
23729610e41SRavi Kumar 	CCP_AUTH_ALGO_MD5_HMAC,
23829610e41SRavi Kumar };
23929610e41SRavi Kumar 
24029610e41SRavi Kumar /**
24129610e41SRavi Kumar  * CCP hash operation type
24229610e41SRavi Kumar  */
24329610e41SRavi Kumar enum ccp_hash_op {
24429610e41SRavi Kumar 	CCP_AUTH_OP_GENERATE = 0,
24529610e41SRavi Kumar 	CCP_AUTH_OP_VERIFY = 1,
24629610e41SRavi Kumar };
24729610e41SRavi Kumar 
24829610e41SRavi Kumar /* CCP crypto private session structure */
249*27595cd8STyler Retzlaff struct __rte_cache_aligned ccp_session {
250e0d88a39SRavi Kumar 	bool auth_opt;
25129610e41SRavi Kumar 	enum ccp_cmd_order cmd_id;
25229610e41SRavi Kumar 	/**< chain order mode */
25329610e41SRavi Kumar 	struct {
25429610e41SRavi Kumar 		uint16_t length;
25529610e41SRavi Kumar 		uint16_t offset;
25629610e41SRavi Kumar 	} iv;
25729610e41SRavi Kumar 	/**< IV parameters */
25829610e41SRavi Kumar 	struct {
25929610e41SRavi Kumar 		enum ccp_cipher_algo  algo;
26029610e41SRavi Kumar 		enum ccp_engine  engine;
26129610e41SRavi Kumar 		union {
26229610e41SRavi Kumar 			enum ccp_aes_mode aes_mode;
26329610e41SRavi Kumar 			enum ccp_des_mode des_mode;
26429610e41SRavi Kumar 		} um;
26529610e41SRavi Kumar 		union {
26629610e41SRavi Kumar 			enum ccp_aes_type aes_type;
26729610e41SRavi Kumar 			enum ccp_des_type des_type;
26829610e41SRavi Kumar 		} ut;
26929610e41SRavi Kumar 		enum ccp_cipher_dir dir;
27029610e41SRavi Kumar 		uint64_t key_length;
27129610e41SRavi Kumar 		/**< max cipher key size 256 bits */
27229610e41SRavi Kumar 		uint8_t key[32];
27329610e41SRavi Kumar 		/**ccp key format*/
27429610e41SRavi Kumar 		uint8_t key_ccp[32];
27529610e41SRavi Kumar 		phys_addr_t key_phys;
27629610e41SRavi Kumar 		/**AES-ctr nonce(4) iv(8) ctr*/
27729610e41SRavi Kumar 		uint8_t nonce[32];
27829610e41SRavi Kumar 		phys_addr_t nonce_phys;
27929610e41SRavi Kumar 	} cipher;
28029610e41SRavi Kumar 	/**< Cipher Parameters */
28129610e41SRavi Kumar 
28229610e41SRavi Kumar 	struct {
28329610e41SRavi Kumar 		enum ccp_hash_algo algo;
28429610e41SRavi Kumar 		enum ccp_engine  engine;
28529610e41SRavi Kumar 		union {
28629610e41SRavi Kumar 			enum ccp_aes_mode aes_mode;
28729610e41SRavi Kumar 		} um;
28829610e41SRavi Kumar 		union {
28929610e41SRavi Kumar 			enum ccp_sha_type sha_type;
29029610e41SRavi Kumar 			enum ccp_aes_type aes_type;
29129610e41SRavi Kumar 		} ut;
29229610e41SRavi Kumar 		enum ccp_hash_op op;
29329610e41SRavi Kumar 		uint64_t key_length;
29429610e41SRavi Kumar 		/**< max hash key size 144 bytes (struct capabilties) */
29529610e41SRavi Kumar 		uint8_t key[144];
29629610e41SRavi Kumar 		/**< max be key size of AES is 32*/
29729610e41SRavi Kumar 		uint8_t key_ccp[32];
29829610e41SRavi Kumar 		phys_addr_t key_phys;
29929610e41SRavi Kumar 		uint64_t digest_length;
30029610e41SRavi Kumar 		void *ctx;
30129610e41SRavi Kumar 		int ctx_len;
30229610e41SRavi Kumar 		int offset;
30329610e41SRavi Kumar 		int block_size;
30429610e41SRavi Kumar 		/**< Buffer to store  Software generated precomute values*/
30529610e41SRavi Kumar 		/**< For HMAC H(ipad ^ key) and H(opad ^ key) */
30629610e41SRavi Kumar 		/**< For CMAC K1 IV and K2 IV*/
30729610e41SRavi Kumar 		uint8_t pre_compute[2 * CCP_SHA3_CTX_SIZE];
30829610e41SRavi Kumar 		/**< SHA3 initial ctx all zeros*/
30929610e41SRavi Kumar 		uint8_t sha3_ctx[200];
31029610e41SRavi Kumar 		int aad_length;
31129610e41SRavi Kumar 	} auth;
31229610e41SRavi Kumar 	/**< Authentication Parameters */
31329610e41SRavi Kumar 	enum rte_crypto_aead_algorithm aead_algo;
31429610e41SRavi Kumar 	/**< AEAD Algorithm */
31529610e41SRavi Kumar 
31629610e41SRavi Kumar 	uint32_t reserved;
317*27595cd8STyler Retzlaff };
31829610e41SRavi Kumar 
31929610e41SRavi Kumar extern uint8_t ccp_cryptodev_driver_id;
32029610e41SRavi Kumar 
32129610e41SRavi Kumar struct ccp_qp;
322e0d88a39SRavi Kumar struct ccp_private;
32329610e41SRavi Kumar 
32429610e41SRavi Kumar /**
32529610e41SRavi Kumar  * Set and validate CCP crypto session parameters
32629610e41SRavi Kumar  *
32729610e41SRavi Kumar  * @param sess ccp private session
32829610e41SRavi Kumar  * @param xform crypto xform for this session
32929610e41SRavi Kumar  * @return 0 on success otherwise -1
33029610e41SRavi Kumar  */
33129610e41SRavi Kumar int ccp_set_session_parameters(struct ccp_session *sess,
332e0d88a39SRavi Kumar 			       const struct rte_crypto_sym_xform *xform,
333e0d88a39SRavi Kumar 			       struct ccp_private *internals);
33429610e41SRavi Kumar 
33570f0f8a8SRavi Kumar /**
33670f0f8a8SRavi Kumar  * Find count of slots
33770f0f8a8SRavi Kumar  *
33870f0f8a8SRavi Kumar  * @param session CCP private session
33970f0f8a8SRavi Kumar  * @return count of free slots available
34070f0f8a8SRavi Kumar  */
34170f0f8a8SRavi Kumar int ccp_compute_slot_count(struct ccp_session *session);
34270f0f8a8SRavi Kumar 
34370f0f8a8SRavi Kumar /**
34470f0f8a8SRavi Kumar  * process crypto ops to be enqueued
34570f0f8a8SRavi Kumar  *
34670f0f8a8SRavi Kumar  * @param qp CCP crypto queue-pair
34770f0f8a8SRavi Kumar  * @param op crypto ops table
34870f0f8a8SRavi Kumar  * @param cmd_q CCP cmd queue
34970f0f8a8SRavi Kumar  * @param nb_ops No. of ops to be submitted
35070f0f8a8SRavi Kumar  * @return 0 on success otherwise -1
35170f0f8a8SRavi Kumar  */
3526c561b03SRavi Kumar int process_ops_to_enqueue(struct ccp_qp *qp,
35370f0f8a8SRavi Kumar 			   struct rte_crypto_op **op,
35470f0f8a8SRavi Kumar 			   struct ccp_queue *cmd_q,
35570f0f8a8SRavi Kumar 			   uint16_t nb_ops,
35672775857SAmaranath Somalapuram 			   uint16_t total_nb_ops,
35772775857SAmaranath Somalapuram 			   int slots_req,
35872775857SAmaranath Somalapuram 			   uint16_t b_idx);
35970f0f8a8SRavi Kumar 
36070f0f8a8SRavi Kumar /**
36170f0f8a8SRavi Kumar  * process crypto ops to be dequeued
36270f0f8a8SRavi Kumar  *
36370f0f8a8SRavi Kumar  * @param qp CCP crypto queue-pair
36470f0f8a8SRavi Kumar  * @param op crypto ops table
36570f0f8a8SRavi Kumar  * @param nb_ops requested no. of ops
36670f0f8a8SRavi Kumar  * @return 0 on success otherwise -1
36770f0f8a8SRavi Kumar  */
36870f0f8a8SRavi Kumar int process_ops_to_dequeue(struct ccp_qp *qp,
36970f0f8a8SRavi Kumar 			   struct rte_crypto_op **op,
37072775857SAmaranath Somalapuram 			   uint16_t nb_ops,
37172775857SAmaranath Somalapuram 			   uint16_t *total_nb_ops);
37270f0f8a8SRavi Kumar 
3731df800f8SRavi Kumar 
3741df800f8SRavi Kumar /**
3751df800f8SRavi Kumar  * Apis for SHA3 partial hash generation
3761df800f8SRavi Kumar  * @param data_in buffer pointer on which phash is applied
3771df800f8SRavi Kumar  * @param data_out phash result in ccp be format is written
3781df800f8SRavi Kumar  */
3791df800f8SRavi Kumar int partial_hash_sha3_224(uint8_t *data_in,
3801df800f8SRavi Kumar 			  uint8_t *data_out);
3811df800f8SRavi Kumar 
3821df800f8SRavi Kumar int partial_hash_sha3_256(uint8_t *data_in,
3831df800f8SRavi Kumar 			  uint8_t *data_out);
3841df800f8SRavi Kumar 
3851df800f8SRavi Kumar int partial_hash_sha3_384(uint8_t *data_in,
3861df800f8SRavi Kumar 			  uint8_t *data_out);
3871df800f8SRavi Kumar 
3881df800f8SRavi Kumar int partial_hash_sha3_512(uint8_t *data_in,
3891df800f8SRavi Kumar 			  uint8_t *data_out);
3901df800f8SRavi Kumar 
39129610e41SRavi Kumar #endif /* _CCP_CRYPTO_H_ */
392