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