178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski 
478ee8d1cSJulian Grajkowski /**
578ee8d1cSJulian Grajkowski  *****************************************************************************
678ee8d1cSJulian Grajkowski  * @file lac_sym_auth_enc.h
778ee8d1cSJulian Grajkowski  *
878ee8d1cSJulian Grajkowski  * @defgroup LacAuthEnc Authenticated Encryption
978ee8d1cSJulian Grajkowski  *
1078ee8d1cSJulian Grajkowski  * @ingroup LacSym
1178ee8d1cSJulian Grajkowski  *
1278ee8d1cSJulian Grajkowski  * @description
1378ee8d1cSJulian Grajkowski  *  Authenticated encryption specific functionality.
1478ee8d1cSJulian Grajkowski  *  For CCM related code NIST SP 800-38C is followed.
1578ee8d1cSJulian Grajkowski  *  For GCM related code NIST SP 800-38D is followed.
1678ee8d1cSJulian Grajkowski  *
1778ee8d1cSJulian Grajkowski  ***************************************************************************/
1878ee8d1cSJulian Grajkowski #ifndef LAC_SYM_AUTH_ENC_H_
1978ee8d1cSJulian Grajkowski #define LAC_SYM_AUTH_ENC_H_
2078ee8d1cSJulian Grajkowski 
2178ee8d1cSJulian Grajkowski /* This define for CCM describes constant sum of n and q */
2278ee8d1cSJulian Grajkowski #define LAC_ALG_CHAIN_CCM_NQ_CONST 15
2378ee8d1cSJulian Grajkowski 
2478ee8d1cSJulian Grajkowski /* These defines for CCM describe maximum and minimum
2578ee8d1cSJulian Grajkowski  * length of nonce in bytes*/
2678ee8d1cSJulian Grajkowski #define LAC_ALG_CHAIN_CCM_N_LEN_IN_BYTES_MAX 13
2778ee8d1cSJulian Grajkowski #define LAC_ALG_CHAIN_CCM_N_LEN_IN_BYTES_MIN 7
2878ee8d1cSJulian Grajkowski 
2978ee8d1cSJulian Grajkowski /**
3078ee8d1cSJulian Grajkowski  * @ingroup LacAuthEnc
3178ee8d1cSJulian Grajkowski  * This function applies any necessary padding to additional authentication data
3278ee8d1cSJulian Grajkowski  * pointed by pAdditionalAuthData field of pOpData as described in
3378ee8d1cSJulian Grajkowski  * NIST SP 800-38D
3478ee8d1cSJulian Grajkowski  *
3578ee8d1cSJulian Grajkowski  * @param[in] pSessionDesc              Pointer to the session descriptor
3678ee8d1cSJulian Grajkowski  * @param[in,out] pAdditionalAuthData   Pointer to AAD
3778ee8d1cSJulian Grajkowski  *
3878ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS          Operation finished successfully
3978ee8d1cSJulian Grajkowski  *
4078ee8d1cSJulian Grajkowski  * @pre pAdditionalAuthData has been param checked
4178ee8d1cSJulian Grajkowski  *
4278ee8d1cSJulian Grajkowski  */
4378ee8d1cSJulian Grajkowski void LacSymAlgChain_PrepareGCMData(lac_session_desc_t *pSessionDesc,
4478ee8d1cSJulian Grajkowski 				   Cpa8U *pAdditionalAuthData);
4578ee8d1cSJulian Grajkowski 
4678ee8d1cSJulian Grajkowski /**
4778ee8d1cSJulian Grajkowski  * @ingroup LacAuthEnc
4878ee8d1cSJulian Grajkowski  * This function prepares param checks iv and aad for CCM
4978ee8d1cSJulian Grajkowski  *
5078ee8d1cSJulian Grajkowski  * @param[in,out] pAdditionalAuthData   Pointer to AAD
5178ee8d1cSJulian Grajkowski  * @param[in,out] pIv                   Pointer to IV
5278ee8d1cSJulian Grajkowski  * @param[in] messageLenToCipherInBytes Size of the message to cipher
5378ee8d1cSJulian Grajkowski  * @param[in] ivLenInBytes              Size of the IV
5478ee8d1cSJulian Grajkowski  *
5578ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS          Operation finished successfully
5678ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_INVALID_PARAM    Invalid parameter passed
5778ee8d1cSJulian Grajkowski  *
5878ee8d1cSJulian Grajkowski  */
5978ee8d1cSJulian Grajkowski CpaStatus LacSymAlgChain_CheckCCMData(Cpa8U *pAdditionalAuthData,
6078ee8d1cSJulian Grajkowski 				      Cpa8U *pIv,
6178ee8d1cSJulian Grajkowski 				      Cpa32U messageLenToCipherInBytes,
6278ee8d1cSJulian Grajkowski 				      Cpa32U ivLenInBytes);
6378ee8d1cSJulian Grajkowski 
6478ee8d1cSJulian Grajkowski /**
6578ee8d1cSJulian Grajkowski  * @ingroup LacAuthEnc
6678ee8d1cSJulian Grajkowski  * This function prepares Ctr0 and B0-Bn blocks for CCM algorithm as described
6778ee8d1cSJulian Grajkowski  * in NIST SP 800-38C. Ctr0 block is placed in pIv field of pOpData and B0-BN
6878ee8d1cSJulian Grajkowski  * blocks are placed in pAdditionalAuthData.
6978ee8d1cSJulian Grajkowski  *
7078ee8d1cSJulian Grajkowski  * @param[in] pSessionDesc              Pointer to the session descriptor
7178ee8d1cSJulian Grajkowski  * @param[in,out] pAdditionalAuthData   Pointer to AAD
7278ee8d1cSJulian Grajkowski  * @param[in,out] pIv                   Pointer to IV
7378ee8d1cSJulian Grajkowski  * @param[in] messageLenToCipherInBytes Size of the message to cipher
7478ee8d1cSJulian Grajkowski  * @param[in] ivLenInBytes              Size of the IV
7578ee8d1cSJulian Grajkowski  *
7678ee8d1cSJulian Grajkowski  * @retval none
7778ee8d1cSJulian Grajkowski  *
7878ee8d1cSJulian Grajkowski  * @pre parameters have been checked using LacSymAlgChain_CheckCCMData()
7978ee8d1cSJulian Grajkowski  */
8078ee8d1cSJulian Grajkowski void LacSymAlgChain_PrepareCCMData(lac_session_desc_t *pSessionDesc,
8178ee8d1cSJulian Grajkowski 				   Cpa8U *pAdditionalAuthData,
8278ee8d1cSJulian Grajkowski 				   Cpa8U *pIv,
8378ee8d1cSJulian Grajkowski 				   Cpa32U messageLenToCipherInBytes,
8478ee8d1cSJulian Grajkowski 				   Cpa32U ivLenInBytes);
8578ee8d1cSJulian Grajkowski 
8678ee8d1cSJulian Grajkowski #endif /* LAC_SYM_AUTH_ENC_H_ */
87