Ignore:
Timestamp:
Jun 22, 2021, 9:00:19 PM (3 years ago)
Author:
coas-nagasima
Message:

WolfSSLとAzure IoT SDKを更新

Location:
azure_iot_hub_f767zi/trunk/wolfssl-4.7.0
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfcrypt/src/sha256.c

    r457 r464  
    2020 */
    2121
     22/* For more info on the algorithm, see https://tools.ietf.org/html/rfc6234 */
     23/*
     24
     25DESCRIPTION
     26This library provides the interface to SHA-256 secure hash algorithms.
     27SHA-256 performs processing on message blocks to produce a final hash digest
     28output. It can be used to hash a message, M, having a length of L bits,
     29where 0 <= L < 2^64.
     30
     31*/
    2232#ifdef HAVE_CONFIG_H
    2333    #include <config.h>
     
    120130#elif defined(WOLFSSL_CRYPTOCELL)
    121131    /* wc_port.c includes wolfcrypt/src/port/arm/cryptoCellHash.c */
     132
     133#elif defined(WOLFSSL_IMXRT_DCP)
     134
     135#elif defined(WOLFSSL_PSOC6_CRYPTO)
     136
     137
    122138#else
    123139
     
    165181    !defined(WOLFSSL_AFALG_HASH) && !defined(WOLFSSL_DEVCRYPTO_HASH) && \
    166182    (!defined(WOLFSSL_ESP32WROOM32_CRYPT) || defined(NO_WOLFSSL_ESP32WROOM32_CRYPT_HASH)) && \
    167     (!defined(WOLFSSL_RENESAS_TSIP_CRYPT) || defined(NO_WOLFSSL_RENESAS_TSIP_HASH))
     183    (!defined(WOLFSSL_RENESAS_TSIP_CRYPT) || defined(NO_WOLFSSL_RENESAS_TSIP_HASH)) && \
     184    !defined(WOLFSSL_PSOC6_CRYPTO) && !defined(WOLFSSL_IMXRT_DCP) && !defined(WOLFSSL_SILABS_SE_ACCEL)
     185
    168186
    169187static int InitSha256(wc_Sha256* sha256)
     
    197215
    198216/* Hardware Acceleration */
    199 #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     217#if defined(USE_INTEL_SPEEDUP) && (defined(HAVE_INTEL_AVX1) || \
     218                                                       defined(HAVE_INTEL_AVX2))
    200219
    201220    /* in case intel instructions aren't available, plus we need the K[] global */
     
    295314    static int transform_check = 0;
    296315    static word32 intel_flags;
    297 
    298     #define XTRANSFORM(S, D)         (*Transform_Sha256_p)((S),(D))
    299     #define XTRANSFORM_LEN(S, D, L)  (*Transform_Sha256_Len_p)((S),(D),(L))
     316    static int Transform_Sha256_is_vectorized = 0;
     317
     318    static WC_INLINE int inline_XTRANSFORM(wc_Sha256* S, const byte* D) {
     319        int ret;
     320        if (Transform_Sha256_is_vectorized)
     321            SAVE_VECTOR_REGISTERS();
     322        ret = (*Transform_Sha256_p)(S, D);
     323        if (Transform_Sha256_is_vectorized)
     324            RESTORE_VECTOR_REGISTERS();
     325        return ret;
     326    }
     327#define XTRANSFORM(...) inline_XTRANSFORM(__VA_ARGS__)
     328
     329    static WC_INLINE int inline_XTRANSFORM_LEN(wc_Sha256* S, const byte* D, word32 L) {
     330        int ret;
     331        if (Transform_Sha256_is_vectorized)
     332            SAVE_VECTOR_REGISTERS();
     333        ret = (*Transform_Sha256_Len_p)(S, D, L);
     334        if (Transform_Sha256_is_vectorized)
     335            RESTORE_VECTOR_REGISTERS();
     336        return ret;
     337    }
     338#define XTRANSFORM_LEN(...) inline_XTRANSFORM_LEN(__VA_ARGS__)
    300339
    301340    static void Sha256_SetTransform(void)
     
    313352                Transform_Sha256_p = Transform_Sha256_AVX2_RORX;
    314353                Transform_Sha256_Len_p = Transform_Sha256_AVX2_RORX_Len;
     354                Transform_Sha256_is_vectorized = 1;
    315355            }
    316356            else
     
    320360                Transform_Sha256_p = Transform_Sha256_AVX2;
    321361                Transform_Sha256_Len_p = Transform_Sha256_AVX2_Len;
     362                Transform_Sha256_is_vectorized = 1;
    322363            }
    323364        #ifdef HAVE_INTEL_RORX
     
    325366                Transform_Sha256_p = Transform_Sha256_AVX1_RORX;
    326367                Transform_Sha256_Len_p = Transform_Sha256_AVX1_RORX_Len;
     368                Transform_Sha256_is_vectorized = 1;
    327369            }
    328370        #endif
     
    334376            Transform_Sha256_p = Transform_Sha256_AVX1;
    335377            Transform_Sha256_Len_p = Transform_Sha256_AVX1_Len;
     378            Transform_Sha256_is_vectorized = 1;
    336379        }
    337380        else
     
    340383            Transform_Sha256_p = Transform_Sha256;
    341384            Transform_Sha256_Len_p = NULL;
     385            Transform_Sha256_is_vectorized = 0;
    342386        }
    343387
     
    354398    #ifdef WOLF_CRYPTO_CB
    355399        sha256->devId = devId;
     400    #endif
     401    #ifdef WOLFSSL_SMALL_STACK_CACHE
     402        sha256->W = NULL;
    356403    #endif
    357404
     
    415462        cau_sha256_initialize_output(sha256->digest);
    416463    #else
    417         MMCAU_SHA256_InitializeOutput((uint32_t*)sha256->digest);
     464        MMCAU_SHA256_InitializeOutput((word32*)sha256->digest);
    418465    #endif
    419466        wolfSSL_CryptHwMutexUnLock();
     
    495542        (void)heap;
    496543
     544        XMEMSET(sha256, 0, sizeof(wc_Sha256));
    497545        wc_Stm32_Hash_Init(&sha256->stmCtx);
    498546        return 0;
     
    664712    /* implemented in wolfcrypt/src/port/Renesas/renesas_tsip_sha.c */
    665713
     714#elif defined(WOLFSSL_PSOC6_CRYPTO)
     715
     716    /* implemented in wolfcrypt/src/port/cypress/psoc6_crypto.c */
     717
     718#elif defined(WOLFSSL_IMXRT_DCP)
     719    #include <wolfssl/wolfcrypt/port/nxp/dcp_port.h>
     720    /* implemented in wolfcrypt/src/port/nxp/dcp_port.c */
     721
     722#elif defined(WOLFSSL_SILABS_SE_ACCEL)
     723    /* implemented in wolfcrypt/src/port/silabs/silabs_hash.c */
     724
    666725#else
    667726    #define NEED_SOFT_SHA256
     
    678737        sha256->devCtx = NULL;
    679738    #endif
     739    #ifdef WOLFSSL_SMALL_STACK_CACHE
     740        sha256->W = NULL;
     741    #endif
    680742
    681743        ret = InitSha256(sha256);
    682744        if (ret != 0)
    683745            return ret;
    684 
    685     #ifdef WOLFSSL_SMALL_STACK_CACHE
    686         sha256->W = NULL;
    687     #endif
    688746
    689747    #if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA256)
     
    700758#ifdef NEED_SOFT_SHA256
    701759
    702     static const ALIGN32 word32 K[64] = {
     760    static const FLASH_QUALIFIER ALIGN32 word32 K[64] = {
    703761        0x428A2F98L, 0x71374491L, 0xB5C0FBCFL, 0xE9B5DBA5L, 0x3956C25BL,
    704762        0x59F111F1L, 0x923F82A4L, 0xAB1C5ED5L, 0xD807AA98L, 0x12835B01L,
     
    929987            if (sha256->buffLen == WC_SHA256_BLOCK_SIZE) {
    930988            #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
    931                 #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     989                #if defined(USE_INTEL_SPEEDUP) && \
     990                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    932991                if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
    933992                #endif
     
    9611020        /* process blocks */
    9621021    #ifdef XTRANSFORM_LEN
    963         #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     1022        #if defined(USE_INTEL_SPEEDUP) && \
     1023                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    9641024        if (Transform_Sha256_Len_p != NULL)
    9651025        #endif
     
    9761036            }
    9771037        }
    978         #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     1038        #if defined(USE_INTEL_SPEEDUP) && \
     1039                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    9791040        else
    9801041        #endif
    9811042    #endif /* XTRANSFORM_LEN */
    982     #if !defined(XTRANSFORM_LEN) || defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     1043    #if !defined(XTRANSFORM_LEN) || (defined(USE_INTEL_SPEEDUP) && \
     1044                         (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))
    9831045        {
    9841046            while (len >= WC_SHA256_BLOCK_SIZE) {
     
    9881050                /* Little Endian requires byte swap, so can't use data directly */
    9891051            #if defined(WC_HASH_DATA_ALIGNMENT) && !defined(LITTLE_ENDIAN_ORDER) && \
    990                 !defined(HAVE_INTEL_AVX1) && !defined(HAVE_INTEL_AVX2)
     1052                !(defined(USE_INTEL_SPEEDUP) && \
     1053                         (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))
    9911054                if (((size_t)data % WC_HASH_DATA_ALIGNMENT) == 0) {
    9921055                    local32 = (word32*)data;
     
    10021065
    10031066            #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
    1004                 #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     1067                #if defined(USE_INTEL_SPEEDUP) && \
     1068                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    10051069                if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
    10061070                #endif
     
    10311095
    10321096        /* save remainder */
    1033         if (len > 0) {
     1097        if (ret == 0 && len > 0) {
    10341098            XMEMCPY(local, data, len);
    10351099            sha256->buffLen = len;
     
    10891153
    10901154        #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
    1091             #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     1155            #if defined(USE_INTEL_SPEEDUP) && \
     1156                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    10921157            if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
    10931158            #endif
     
    11261191        /* store lengths */
    11271192    #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
    1128         #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     1193        #if defined(USE_INTEL_SPEEDUP) && \
     1194                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    11291195        if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
    11301196        #endif
     
    11391205                sizeof(word32));
    11401206
    1141     #if defined(FREESCALE_MMCAU_SHA) || defined(HAVE_INTEL_AVX1) || \
    1142         defined(HAVE_INTEL_AVX2)
     1207    #if defined(FREESCALE_MMCAU_SHA) || (defined(USE_INTEL_SPEEDUP) && \
     1208                         (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))
    11431209        /* Kinetis requires only these bytes reversed */
    1144         #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
     1210        #if defined(USE_INTEL_SPEEDUP) && \
     1211                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    11451212        if (IS_INTEL_AVX1(intel_flags) || IS_INTEL_AVX2(intel_flags))
    11461213        #endif
     
    12451312        (void)heap;
    12461313
     1314        XMEMSET(sha224, 0, sizeof(wc_Sha224));
    12471315        wc_Stm32_Hash_Init(&sha224->stmCtx);
    12481316        return 0;
     
    12941362#elif defined(WOLFSSL_DEVCRYPTO_HASH)
    12951363    /* implemented in wolfcrypt/src/port/devcrypto/devcrypt_hash.c */
     1364
     1365#elif defined(WOLFSSL_SILABS_SE_ACCEL)
     1366    /* implemented in wolfcrypt/src/port/silabs/silabs_hash.c */
    12961367
    12971368#else
     
    13211392        sha224->hiLen   = 0;
    13221393
    1323     #if defined(HAVE_INTEL_AVX1)|| defined(HAVE_INTEL_AVX2)
     1394    #if defined(USE_INTEL_SPEEDUP) && \
     1395                          (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
    13241396        /* choose best Transform function under this runtime environment */
    13251397        Sha256_SetTransform();
     
    13431415
    13441416        sha224->heap = heap;
     1417    #ifdef WOLFSSL_SMALL_STACK_CACHE
     1418        sha224->W = NULL;
     1419    #endif
    13451420
    13461421        ret = InitSha224(sha224);
    13471422        if (ret != 0)
    13481423            return ret;
    1349 
    1350     #ifdef WOLFSSL_SMALL_STACK_CACHE
    1351         sha224->W = NULL;
    1352     #endif
    13531424
    13541425    #if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA224)
     
    14861557    }
    14871558#endif
     1559#ifdef WOLFSSL_IMXRT_DCP
     1560    DCPSha256Free(sha256);
     1561#endif
    14881562}
    14891563
     
    15211595    #endif
    15221596
     1597    #ifdef WOLFSSL_SILABS_SE_ACCEL
     1598        dst->silabsCtx.hash_ctx.cmd_ctx = &(dst->silabsCtx.cmd_ctx);
     1599        dst->silabsCtx.hash_ctx.hash_type_ctx = &(dst->silabsCtx.hash_type_ctx);
     1600    #endif
     1601
    15231602    #ifdef WOLFSSL_ASYNC_CRYPT
    15241603        ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev);
     
    15601639
    15611640    /* implemented in wolfcrypt/src/port/Renesas/renesas_tsip_sha.c */
     1641#elif defined(WOLFSSL_PSOC6_CRYPTO)
     1642    /* implemented in wolfcrypt/src/port/cypress/psoc6_crypto.c */
     1643#elif defined(WOLFSSL_IMXRT_DCP)
     1644    /* implemented in wolfcrypt/src/port/nxp/dcp_port.c */
    15621645#else
    15631646
     
    16041687#endif
    16051688
     1689#ifdef WOLFSSL_SILABS_SE_ACCEL
     1690    dst->silabsCtx.hash_ctx.cmd_ctx = &(dst->silabsCtx.cmd_ctx);
     1691    dst->silabsCtx.hash_ctx.hash_type_ctx = &(dst->silabsCtx.hash_type_ctx);
     1692#endif
     1693
    16061694#ifdef WOLFSSL_ASYNC_CRYPT
    16071695    ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev);
Note: See TracChangeset for help on using the changeset viewer.