Ignore:
Timestamp:
Feb 7, 2019, 8:36:33 AM (5 years ago)
Author:
coas-nagasima
Message:

wolfsslを3.15.7にバージョンアップ

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_tinet_ecnl_rx/trunk/wolfssl-3.12.2/wolfcrypt/src/md5.c

    r337 r372  
    4747
    4848
    49 static INLINE void AddLength(wc_Md5* md5, word32 len);
    50 
    5149/* Hardware Acceleration */
    5250#if defined(STM32_HASH)
    5351
    54     /*
    55      * STM32F2/F4/F7 hardware MD5 support through the HASH_* API's from the
    56      * Standard Peripheral Library or CubeMX (See note in README).
    57      */
    58 
     52    /* Supports CubeMX HAL or Standard Peripheral Library */
    5953        #define HAVE_MD5_CUST_API
    60 
    61     /* STM32 register size, bytes */
    62     #ifdef WOLFSSL_STM32_CUBEMX
    63         #define MD5_REG_SIZE  WC_MD5_BLOCK_SIZE
    64     #else
    65         #define MD5_REG_SIZE  4
    66         /* STM32 struct notes:
    67          * md5->buffer  = first 4 bytes used to hold partial block if needed
    68          * md5->buffLen = num bytes currently stored in md5->buffer
    69          * md5->loLen   = num bytes that have been written to STM32 FIFO
    70          */
    71     #endif
    72     #define MD5_HW_TIMEOUT 0xFF
    7354
    7455    int wc_InitMd5_ex(wc_Md5* md5, void* heap, int devId)
    7556    {
    76         if (md5 == NULL)
     57        if (md5 == NULL) {
    7758            return BAD_FUNC_ARG;
    78 
     59        }
     60
     61        (void)devId;
    7962        (void)heap;
    80         (void)devId;
    81 
    82         md5->heap = heap;
    83         XMEMSET(md5->buffer, 0, sizeof(md5->buffer));
    84         md5->buffLen = 0;
    85         md5->loLen = 0;
    86         md5->hiLen = 0;
    87 
    88         /* initialize HASH peripheral */
    89     #ifdef WOLFSSL_STM32_CUBEMX
    90         HAL_HASH_DeInit(&md5->hashHandle);
    91         md5->hashHandle.Init.DataType = HASH_DATATYPE_8B;
    92         if (HAL_HASH_Init(&md5->hashHandle) != HAL_OK) {
    93             return ASYNC_INIT_E;
    94         }
    95         /* reset the hash control register */
    96         /* required because Cube MX is not clearing algo bits */
    97         HASH->CR &= ~HASH_CR_ALGO;
    98     #else
    99                 HASH_DeInit();
    100 
    101         /* reset the control register */
    102         HASH->CR &= ~ (HASH_CR_ALGO | HASH_CR_DATATYPE | HASH_CR_MODE);
    103 
    104                 /* configure algo used, algo mode, datatype */
    105                 HASH->CR |= (HASH_AlgoSelection_MD5 | HASH_AlgoMode_HASH
    106                                    | HASH_DataType_8b);
    107 
    108                 /* reset HASH processor */
    109                 HASH->CR |= HASH_CR_INIT;
    110     #endif
     63
     64        wc_Stm32_Hash_Init(&md5->stmCtx);
    11165
    11266        return 0;
     
    11569    int wc_Md5Update(wc_Md5* md5, const byte* data, word32 len)
    11670    {
    117         int ret = 0;
    118         byte* local;
     71        int ret;
    11972
    12073        if (md5 == NULL || (data == NULL && len > 0)) {
     
    12275        }
    12376
    124         /* do block size increments */
    125         local = (byte*)md5->buffer;
    126 
    127         /* check that internal buffLen is valid */
    128         if (md5->buffLen >= MD5_REG_SIZE)
    129             return BUFFER_E;
    130 
    131         while (len) {
    132             word32 add = min(len, MD5_REG_SIZE - md5->buffLen);
    133             XMEMCPY(&local[md5->buffLen], data, add);
    134 
    135             md5->buffLen += add;
    136             data         += add;
    137             len          -= add;
    138 
    139             if (md5->buffLen == MD5_REG_SIZE) {
    140             #ifdef WOLFSSL_STM32_CUBEMX
    141                 if (HAL_HASH_MD5_Accumulate(
    142                         &md5->hashHandle, local, MD5_REG_SIZE) != HAL_OK) {
    143                     ret = ASYNC_OP_E;
    144                 }
    145             #else
    146                 HASH_DataIn(*(uint32_t*)local);
    147             #endif
    148 
    149                 AddLength(md5, MD5_REG_SIZE);
    150                 md5->buffLen = 0;
    151             }
     77        ret = wolfSSL_CryptHwMutexLock();
     78        if (ret == 0) {
     79            ret = wc_Stm32_Hash_Update(&md5->stmCtx, HASH_AlgoSelection_MD5,
     80                data, len);
     81            wolfSSL_CryptHwMutexUnLock();
    15282        }
    15383        return ret;
     
    15686    int wc_Md5Final(wc_Md5* md5, byte* hash)
    15787    {
    158         int ret = 0;
    159 
    160         if (md5 == NULL || hash == NULL)
     88        int ret;
     89
     90        if (md5 == NULL || hash == NULL) {
    16191            return BAD_FUNC_ARG;
    162 
    163     #ifdef WOLFSSL_STM32_CUBEMX
    164         if (HAL_HASH_MD5_Start(&md5->hashHandle,
    165                 (byte*)md5->buffer, md5->buffLen,
    166                 (byte*)md5->digest, MD5_HW_TIMEOUT) != HAL_OK) {
    167             ret = ASYNC_OP_E;
    168         }
    169     #else
    170         __IO uint16_t nbvalidbitsdata = 0;
    171 
    172         /* finish reading any trailing bytes into FIFO */
    173         if (md5->buffLen > 0) {
    174                         HASH_DataIn(*(uint32_t*)md5->buffer);
    175             AddLength(md5, md5->buffLen);
    176         }
    177 
    178         /* calculate number of valid bits in last word of input data */
    179         nbvalidbitsdata = 8 * (md5->loLen % MD5_REG_SIZE);
    180 
    181         /* configure number of valid bits in last word of the data */
    182         HASH_SetLastWordValidBitsNbr(nbvalidbitsdata);
    183 
    184         /* start HASH processor */
    185         HASH_StartDigest();
    186 
    187         /* wait until Busy flag == RESET */
    188         while (HASH_GetFlagStatus(HASH_FLAG_BUSY) != RESET) {}
    189 
    190         /* read message digest */
    191         md5->digest[0] = HASH->HR[0];
    192         md5->digest[1] = HASH->HR[1];
    193         md5->digest[2] = HASH->HR[2];
    194         md5->digest[3] = HASH->HR[3];
    195 
    196         ByteReverseWords(md5->digest, md5->digest, WC_MD5_DIGEST_SIZE);
    197     #endif /* WOLFSSL_STM32_CUBEMX */
    198 
    199         XMEMCPY(hash, md5->digest, WC_MD5_DIGEST_SIZE);
     92        }
     93
     94        ret = wolfSSL_CryptHwMutexLock();
     95        if (ret == 0) {
     96            ret = wc_Stm32_Hash_Final(&md5->stmCtx, HASH_AlgoSelection_MD5,
     97                hash, WC_MD5_DIGEST_SIZE);
     98            wolfSSL_CryptHwMutexUnLock();
     99        }
    200100
    201101        (void)wc_InitMd5(md5);  /* reset state */
     
    226126    #define HAVE_MD5_CUST_API
    227127
     128#elif defined(WOLFSSL_IMX6_CAAM) && !defined(NO_IMX6_CAAM_HASH)
     129    /* functions implemented in wolfcrypt/src/port/caam/caam_sha.c */
     130    #define HAVE_MD5_CUST_API
    228131#else
    229132    #define NEED_SOFT_MD5
     
    330233#endif /* NEED_SOFT_MD5 */
    331234
    332 #if !defined(HAVE_MD5_CUST_API) || defined(STM32_HASH)
    333 static INLINE void AddLength(wc_Md5* md5, word32 len)
     235#ifndef HAVE_MD5_CUST_API
     236
     237static WC_INLINE void AddLength(wc_Md5* md5, word32 len)
    334238{
    335239    word32 tmp = md5->loLen;
     
    338242    }
    339243}
    340 #endif
    341 
    342 #ifndef HAVE_MD5_CUST_API
     244
    343245static int _InitMd5(wc_Md5* md5)
    344246{
     
    498400    wolfAsync_DevCtxFree(&md5->asyncDev, WOLFSSL_ASYNC_MARKER_MD5);
    499401#endif /* WOLFSSL_ASYNC_CRYPT */
     402
     403#ifdef WOLFSSL_PIC32MZ_HASH
     404    wc_Md5Pic32Free(md5);
     405#endif
    500406}
    501407
Note: See TracChangeset for help on using the changeset viewer.