| | |
| | | /* |
| | | * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and |
| | | * Copyright (c) 2019-2025 Beijing Hanwei Innovation Technology Ltd. Co. and |
| | | * its subsidiaries and affiliates (collectly called MKSEMI). |
| | | * |
| | | * All rights reserved. |
| | |
| | | #include "mk_trace.h" |
| | | #include "string.h" |
| | | |
| | | #if defined(__ICCARM__) && defined(XIP_EN) |
| | | #if defined(__ICCARM__) |
| | | #pragma default_function_attributes = __ramfunc |
| | | #endif |
| | | |
| | |
| | | .dma_in_ch = DMA_CH2, |
| | | .dma_out_ch = DMA_CH3, |
| | | .config = |
| | | { |
| | | .key = {0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf}, |
| | | .int_en = false, |
| | | .dma_en = true, |
| | | .din_burst_size = 1, |
| | | .dout_burst_size = 1, |
| | | }, |
| | | { |
| | | .key = {0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf}, |
| | | .int_en = false, |
| | | .dma_en = true, |
| | | .din_burst_size = 1, |
| | | .dout_burst_size = 1, |
| | | }, |
| | | }, |
| | | }; |
| | | |
| | | #define MACTAG_IS_VALID(x) \ |
| | | ((((aes_handle[x].base->CTRL1) & (AES_CTRL1_MODE(AES_MODE_CCM) | AES_CTRL1_DIR(AES_DIR_DECRYPT))) == \ |
| | | (AES_CTRL1_MODE(AES_MODE_CCM) | AES_CTRL1_DIR(AES_DIR_DECRYPT))) \ |
| | | ? (((aes_handle[x].base->STATUS) & AES_STATUS_MIC_VALID_MSK) ? (AES_MIN_VALID) : (AES_MIN_INVALID)) \ |
| | | : (AES_MIN_INVALID)) |
| | | ? (((aes_handle[x].base->STATUS) & AES_STATUS_MIC_VALID_MSK) ? (AES_MIC_VALID) : (AES_MIC_INVALID)) \ |
| | | : (AES_MIC_INVALID)) |
| | | |
| | | int aes_open(enum AES_DEV_T id, struct AES_CFG_T *config) |
| | | { |
| | |
| | | // update state |
| | | switch (aes_handle[id].state) |
| | | { |
| | | case AES_STATE_READY: |
| | | aes_handle[id].state = AES_STATE_BUSY; |
| | | break; |
| | | case AES_STATE_BUSY: |
| | | int_unlock(lock); |
| | | return DRV_BUSY; |
| | | case AES_STATE_BREAK: |
| | | case AES_STATE_CONFLICT: |
| | | case AES_STATE_RESET: |
| | | case AES_STATE_TIMEOUT: |
| | | case AES_STATE_ERROR: |
| | | int_unlock(lock); |
| | | return DRV_ERROR; |
| | | case AES_STATE_READY: |
| | | aes_handle[id].state = AES_STATE_BUSY; |
| | | break; |
| | | case AES_STATE_BUSY: |
| | | int_unlock(lock); |
| | | return DRV_BUSY; |
| | | case AES_STATE_BREAK: |
| | | case AES_STATE_CONFLICT: |
| | | case AES_STATE_RESET: |
| | | case AES_STATE_TIMEOUT: |
| | | case AES_STATE_ERROR: |
| | | int_unlock(lock); |
| | | return DRV_ERROR; |
| | | } |
| | | |
| | | aes_handle[id].input = input; |
| | |
| | | #if 0 |
| | | switch (ret) |
| | | { |
| | | case MK_AES_CCM_ERROR_MAC_SIZE: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "MAC size ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_NONCE_SIZE: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Nonce size ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_INPUT_BUF_NOT_ENOUGH: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Insufficient input buffer space ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_OUTPUT_BUF_NOT_ENOUGH: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Insufficient output buffer space ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_ADATA_LEN_NOT_SUPPORT: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Length of authentication data shall be limited to 65517 bytes\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_MAC_SIZE: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "MAC size ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_NONCE_SIZE: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Nonce size ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_INPUT_BUF_NOT_ENOUGH: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Insufficient input buffer space ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_OUTPUT_BUF_NOT_ENOUGH: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Insufficient output buffer space ERR\r\n"); |
| | | break; |
| | | case MK_AES_CCM_ERROR_ADATA_LEN_NOT_SUPPORT: |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Length of authentication data shall be limited to 65517 bytes\r\n"); |
| | | break; |
| | | } |
| | | #else |
| | | if (ret) |
| | |
| | | return ret; |
| | | } |
| | | |
| | | enum AES_MIN_CHE_T aes_ccm_dec_mic_isvalid(enum AES_DEV_T id) |
| | | enum AES_MIC_STATUS_T aes_ccm_dec_mic_isvalid(enum AES_DEV_T id) |
| | | { |
| | | return aes_handle[id].is_valid; |
| | | } |