1 /***************************************************************************//** 2 * \file cy_crypto_core_cmac_v2.h 3 * \version 2.120 4 * 5 * \brief 6 * This file provides constants and function prototypes 7 * for the API for the CMAC method in the Crypto block driver. 8 * 9 ******************************************************************************** 10 * \copyright 11 * Copyright (c) (2020-2022), Cypress Semiconductor Corporation (an Infineon company) or 12 * an affiliate of Cypress Semiconductor Corporation. 13 * SPDX-License-Identifier: Apache-2.0 14 * 15 * Licensed under the Apache License, Version 2.0 (the "License"); 16 * you may not use this file except in compliance with the License. 17 * You may obtain a copy of the License at 18 * 19 * http://www.apache.org/licenses/LICENSE-2.0 20 * 21 * Unless required by applicable law or agreed to in writing, software 22 * distributed under the License is distributed on an "AS IS" BASIS, 23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 24 * See the License for the specific language governing permissions and 25 * limitations under the License. 26 *******************************************************************************/ 27 28 29 #if !defined (CY_CRYPTO_CORE_CMAC_V2_H) 30 #define CY_CRYPTO_CORE_CMAC_V2_H 31 32 #include "cy_crypto_common.h" 33 34 #if defined(CY_IP_MXCRYPTO) && defined(CY_CRYPTO_CFG_HW_V2_ENABLE) 35 36 #if defined(__cplusplus) 37 extern "C" { 38 #endif 39 40 #if (CPUSS_CRYPTO_AES == 1) && defined(CY_CRYPTO_CFG_CMAC_C) 41 42 /** \cond INTERNAL */ 43 44 /* The structure to store the AES-CMAC context */ 45 #if (((CY_CPU_CORTEX_M7) && defined (ENABLE_CM7_DATA_CACHE)) || CY_CPU_CORTEX_M55) 46 CY_ALIGN(__SCB_DCACHE_LINE_SIZE) 47 #endif 48 typedef struct 49 { 50 cy_stc_crypto_aes_state_t aesState; 51 uint8_t *k; 52 #if (((CY_CPU_CORTEX_M7) && defined (ENABLE_CM7_DATA_CACHE)) || CY_CPU_CORTEX_M55) 53 CY_ALIGN(__SCB_DCACHE_LINE_SIZE) 54 #endif 55 uint8_t *temp; 56 } cy_stc_crypto_v2_cmac_state_t; 57 58 /* The structure to define used memory buffers */ 59 typedef struct 60 { 61 #if (((CY_CPU_CORTEX_M7) && defined (ENABLE_CM7_DATA_CACHE)) || CY_CPU_CORTEX_M55) 62 CY_ALIGN(32) cy_stc_crypto_aes_buffers_t aesBuffersData; 63 CY_ALIGN(32) uint8_t k[CY_CRYPTO_AES_BLOCK_SIZE]; 64 CY_ALIGN(32) uint8_t temp[CY_CRYPTO_AES_BLOCK_SIZE]; 65 #else 66 uint8_t k[CY_CRYPTO_AES_BLOCK_SIZE]; 67 cy_stc_crypto_aes_buffers_t aesBuffersData; 68 uint8_t temp[CY_CRYPTO_AES_BLOCK_SIZE]; 69 #endif 70 } cy_stc_crypto_v2_cmac_buffers_t; 71 72 /* The function prototypes */ 73 cy_en_crypto_status_t Cy_Crypto_Core_V2_Cmac_Init(CRYPTO_Type *base, cy_stc_crypto_v2_cmac_state_t* cmacState, cy_stc_crypto_v2_cmac_buffers_t* buffer); 74 75 cy_en_crypto_status_t Cy_Crypto_Core_V2_Cmac_Start(CRYPTO_Type *base, cy_stc_crypto_v2_cmac_state_t *cmacState, 76 uint8_t const *aesKey, cy_en_crypto_aes_key_length_t keyLength); 77 78 cy_en_crypto_status_t Cy_Crypto_Core_V2_Cmac_Update(CRYPTO_Type *base, 79 cy_stc_crypto_v2_cmac_state_t *cmacState, 80 uint8_t const *message, 81 uint32_t messageSize); 82 83 cy_en_crypto_status_t Cy_Crypto_Core_V2_Cmac_Finish(CRYPTO_Type *base, cy_stc_crypto_v2_cmac_state_t *cmacState, uint8_t* cmac); 84 85 cy_en_crypto_status_t Cy_Crypto_Core_V2_Cmac_Free(CRYPTO_Type *base, 86 cy_stc_crypto_v2_cmac_state_t *cmacState 87 ); 88 89 cy_en_crypto_status_t Cy_Crypto_Core_V2_Cmac(CRYPTO_Type *base, 90 uint8_t const *message, 91 uint32_t messageSize, 92 uint8_t const *key, 93 cy_en_crypto_aes_key_length_t keyLength, 94 uint8_t *cmac, 95 cy_stc_crypto_aes_state_t *aesState); 96 97 /** \endcond */ 98 99 100 #endif /* (CPUSS_CRYPTO_AES == 1) && defined(CY_CRYPTO_CFG_CMAC_C) */ 101 102 #if defined(__cplusplus) 103 } 104 #endif 105 106 #endif /* defined(CY_IP_MXCRYPTO) && defined(CY_CRYPTO_CFG_HW_V2_ENABLE) */ 107 108 #endif /* #if !defined (CY_CRYPTO_CORE_CMAC_V2_H) */ 109 110 111 /* [] END OF FILE */ 112