1 /* 2 * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #define CC_PAL_LOG_CUR_COMPONENT CC_LOG_MASK_CC_API 8 9 #include "cc_pal_types.h" 10 #include "cc_pal_mem.h" 11 #include "cc_pal_abort.h" 12 #include "cc_hash_defs.h" 13 #include "hash_driver_ext_dma.h" 14 #include "mbedtls_hash_ext_dma.h" 15 #include "cc_common.h" 16 #include "cc_common_math.h" 17 #include "cc_sym_error.h" 18 #include "cc_pal_perf.h" 19 #include "cc_pal_compiler.h" 20 #include "mbedtls_ext_dma_error.h" 21 Driver2ExtDmaHashErr(drvError_t drvRc)22static int Driver2ExtDmaHashErr(drvError_t drvRc) 23 { 24 switch (drvRc) { 25 case HASH_DRV_OK: 26 return 0; 27 case HASH_DRV_ILLEGAL_OPERATION_MODE_ERROR: 28 return EXT_DMA_HASH_ILLEGAL_OPERATION_MODE_ERROR; 29 default: 30 return CC_FATAL_ERROR; 31 } 32 } 33 34 mbedtls_hash_ext_dma_init(CCHashOperationMode_t operationMode,uint32_t dataSize)35int mbedtls_hash_ext_dma_init(CCHashOperationMode_t operationMode, uint32_t dataSize) 36 { 37 drvError_t drvRc = HASH_DRV_OK; 38 int error = CC_OK; 39 hashMode_t mode; 40 41 /* check Hash mode */ 42 switch (operationMode) { 43 case CC_HASH_SHA1_mode: 44 mode = HASH_SHA1; 45 break; 46 case CC_HASH_SHA224_mode: 47 mode = HASH_SHA224; 48 break; 49 case CC_HASH_SHA256_mode: 50 mode = HASH_SHA256; 51 break; 52 default: 53 error = EXT_DMA_HASH_ILLEGAL_OPERATION_MODE_ERROR; 54 goto endInit; 55 } 56 57 if (dataSize > CPU_DIN_MAX_SIZE){ 58 error = EXT_DMA_ILLEGAL_INPUT_SIZE_ERROR; 59 goto endInit; 60 } 61 drvRc = InitHashExtDma(mode, dataSize); 62 error = Driver2ExtDmaHashErr(drvRc); 63 64 endInit: 65 return error; 66 } 67 68 69 mbedtls_hash_ext_dma_finish(CCHashOperationMode_t operationMode,uint32_t digestBufferSize,uint32_t * digestBuffer)70int mbedtls_hash_ext_dma_finish(CCHashOperationMode_t operationMode, uint32_t digestBufferSize, uint32_t *digestBuffer) 71 { 72 CCError_t error = CC_OK; 73 drvError_t rc = HASH_DRV_OK; 74 hashMode_t mode; 75 76 if ( digestBuffer == NULL ) { 77 error = EXT_DMA_HASH_INVALID_RESULT_BUFFER_POINTER_ERROR; 78 goto endFinish; 79 } 80 if (digestBufferSize != CC_HASH_SHA1_DIGEST_SIZE_IN_BYTES && 81 digestBufferSize != CC_HASH_SHA224_DIGEST_SIZE_IN_BYTES && 82 digestBufferSize != CC_HASH_SHA256_DIGEST_SIZE_IN_BYTES) { 83 error = EXT_DMA_HASH_ILLEGAL_PARAMS_ERROR; 84 goto endFinish; 85 } 86 /* check Hash mode */ 87 switch (operationMode) { 88 case CC_HASH_SHA1_mode: 89 mode = HASH_SHA1; 90 break; 91 case CC_HASH_SHA224_mode: 92 mode = HASH_SHA224; 93 break; 94 case CC_HASH_SHA256_mode: 95 mode = HASH_SHA256; 96 break; 97 default: 98 error = EXT_DMA_HASH_ILLEGAL_OPERATION_MODE_ERROR; 99 goto endFinish; 100 } 101 102 error = FinishHashExtDma(mode, digestBuffer); 103 error = Driver2ExtDmaHashErr(error); 104 return error; 105 106 endFinish: 107 rc = terminateHashExtDma(); 108 if (rc != 0) { 109 CC_PalAbort("Failed to terminateAesExtDma \n"); 110 } 111 return error; 112 } 113