Merge pull request #8075 from night1rider/MAX-HW-SHA-FIX

Fixing CB needing HAVE_AES_ECB and SHA struct issue for MAX32666/5 port
This commit is contained in:
Daniel Pouzzner
2024-10-16 17:17:01 -05:00
committed by GitHub
6 changed files with 38 additions and 65 deletions

View File

@ -2917,7 +2917,7 @@ static WARN_UNUSED_RESULT int wc_AesEncrypt(
outBlock, (unsigned int)keySize); outBlock, (unsigned int)keySize);
} }
#endif #endif
#ifdef MAX3266X_CB /* Can do a basic ECB block */ #if defined(MAX3266X_CB) && defined(HAVE_AES_ECB) /* Can do a basic ECB block */
#ifndef WOLF_CRYPTO_CB_FIND #ifndef WOLF_CRYPTO_CB_FIND
if (aes->devId != INVALID_DEVID) if (aes->devId != INVALID_DEVID)
#endif #endif
@ -3668,7 +3668,7 @@ static WARN_UNUSED_RESULT int wc_AesDecrypt(
} }
#endif #endif
#ifdef MAX3266X_CB /* Can do a basic ECB block */ #if defined(MAX3266X_CB) && defined(HAVE_AES_ECB) /* Can do a basic ECB block */
#ifndef WOLF_CRYPTO_CB_FIND #ifndef WOLF_CRYPTO_CB_FIND
if (aes->devId != INVALID_DEVID) if (aes->devId != INVALID_DEVID)
#endif #endif

View File

@ -789,35 +789,35 @@ WOLFSSL_API int wc_InitSha_ex(wc_Sha* sha, void* heap, int devId)
} }
(void)heap; (void)heap;
(void)devId; (void)devId;
return wc_MXC_TPU_SHA_Init((wc_MXC_Sha *)sha); return wc_MXC_TPU_SHA_Init(&(sha->mxcCtx));
} }
WOLFSSL_API int wc_ShaUpdate(wc_Sha* sha, const unsigned char* data, WOLFSSL_API int wc_ShaUpdate(wc_Sha* sha, const unsigned char* data,
unsigned int len) unsigned int len)
{ {
return wc_MXC_TPU_SHA_Update(sha, data, len); return wc_MXC_TPU_SHA_Update(&(sha->mxcCtx), data, len);
} }
WOLFSSL_API int wc_ShaFinal(wc_Sha* sha, unsigned char* hash) WOLFSSL_API int wc_ShaFinal(wc_Sha* sha, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_Final((wc_MXC_Sha *)sha, hash, return wc_MXC_TPU_SHA_Final(&(sha->mxcCtx), hash,
MXC_TPU_HASH_SHA1); MXC_TPU_HASH_SHA1);
} }
WOLFSSL_API int wc_ShaGetHash(wc_Sha* sha, unsigned char* hash) WOLFSSL_API int wc_ShaGetHash(wc_Sha* sha, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_GetHash((wc_MXC_Sha *)sha, hash, return wc_MXC_TPU_SHA_GetHash(&(sha->mxcCtx), hash,
MXC_TPU_HASH_SHA1); MXC_TPU_HASH_SHA1);
} }
WOLFSSL_API int wc_ShaCopy(wc_Sha* src, wc_Sha* dst) WOLFSSL_API int wc_ShaCopy(wc_Sha* src, wc_Sha* dst)
{ {
return wc_MXC_TPU_SHA_Copy((wc_MXC_Sha *)src, (wc_MXC_Sha *)dst); return wc_MXC_TPU_SHA_Copy(&(src->mxcCtx), &(dst->mxcCtx));
} }
WOLFSSL_API void wc_ShaFree(wc_Sha* sha) WOLFSSL_API void wc_ShaFree(wc_Sha* sha)
{ {
wc_MXC_TPU_SHA_Free((wc_MXC_Sha *)sha); wc_MXC_TPU_SHA_Free(&(sha->mxcCtx));
return; return;
} }
@ -832,7 +832,7 @@ WOLFSSL_API int wc_InitSha224_ex(wc_Sha224* sha224, void* heap, int devId)
} }
(void)heap; (void)heap;
(void)devId; (void)devId;
return wc_MXC_TPU_SHA_Init((wc_MXC_Sha *)sha224); return wc_MXC_TPU_SHA_Init(&(sha224->mxcCtx));
} }
WOLFSSL_API int wc_InitSha224(wc_Sha224* sha224) WOLFSSL_API int wc_InitSha224(wc_Sha224* sha224)
@ -843,29 +843,29 @@ WOLFSSL_API int wc_InitSha224(wc_Sha224* sha224)
WOLFSSL_API int wc_Sha224Update(wc_Sha224* sha224, const unsigned char* data, WOLFSSL_API int wc_Sha224Update(wc_Sha224* sha224, const unsigned char* data,
unsigned int len) unsigned int len)
{ {
return wc_MXC_TPU_SHA_Update(sha224, data, len); return wc_MXC_TPU_SHA_Update(&(sha224->mxcCtx), data, len);
} }
WOLFSSL_API int wc_Sha224Final(wc_Sha224* sha224, unsigned char* hash) WOLFSSL_API int wc_Sha224Final(wc_Sha224* sha224, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_Final((wc_MXC_Sha *)sha224, hash, return wc_MXC_TPU_SHA_Final(&(sha224->mxcCtx), hash,
MXC_TPU_HASH_SHA224); MXC_TPU_HASH_SHA224);
} }
WOLFSSL_API int wc_Sha224GetHash(wc_Sha224* sha224, unsigned char* hash) WOLFSSL_API int wc_Sha224GetHash(wc_Sha224* sha224, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_GetHash((wc_MXC_Sha *)sha224, hash, return wc_MXC_TPU_SHA_GetHash(&(sha224->mxcCtx), hash,
MXC_TPU_HASH_SHA224); MXC_TPU_HASH_SHA224);
} }
WOLFSSL_API int wc_Sha224Copy(wc_Sha224* src, wc_Sha224* dst) WOLFSSL_API int wc_Sha224Copy(wc_Sha224* src, wc_Sha224* dst)
{ {
return wc_MXC_TPU_SHA_Copy((wc_MXC_Sha *)src, (wc_MXC_Sha *)dst); return wc_MXC_TPU_SHA_Copy(&(src->mxcCtx), &(dst->mxcCtx));
} }
WOLFSSL_API void wc_Sha224Free(wc_Sha224* sha224) WOLFSSL_API void wc_Sha224Free(wc_Sha224* sha224)
{ {
wc_MXC_TPU_SHA_Free((wc_MXC_Sha *)sha224); wc_MXC_TPU_SHA_Free(&(sha224->mxcCtx));
return; return;
} }
@ -880,7 +880,7 @@ WOLFSSL_API int wc_InitSha256_ex(wc_Sha256* sha256, void* heap, int devId)
} }
(void)heap; (void)heap;
(void)devId; (void)devId;
return wc_MXC_TPU_SHA_Init((wc_MXC_Sha *)sha256); return wc_MXC_TPU_SHA_Init(&(sha256->mxcCtx));
} }
WOLFSSL_API int wc_InitSha256(wc_Sha256* sha256) WOLFSSL_API int wc_InitSha256(wc_Sha256* sha256)
@ -891,29 +891,29 @@ WOLFSSL_API int wc_InitSha256(wc_Sha256* sha256)
WOLFSSL_API int wc_Sha256Update(wc_Sha256* sha256, const unsigned char* data, WOLFSSL_API int wc_Sha256Update(wc_Sha256* sha256, const unsigned char* data,
unsigned int len) unsigned int len)
{ {
return wc_MXC_TPU_SHA_Update(sha256, data, len); return wc_MXC_TPU_SHA_Update(&(sha256->mxcCtx), data, len);
} }
WOLFSSL_API int wc_Sha256Final(wc_Sha256* sha256, unsigned char* hash) WOLFSSL_API int wc_Sha256Final(wc_Sha256* sha256, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_Final((wc_MXC_Sha *)sha256, hash, return wc_MXC_TPU_SHA_Final(&(sha256->mxcCtx), hash,
MXC_TPU_HASH_SHA256); MXC_TPU_HASH_SHA256);
} }
WOLFSSL_API int wc_Sha256GetHash(wc_Sha256* sha256, unsigned char* hash) WOLFSSL_API int wc_Sha256GetHash(wc_Sha256* sha256, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_GetHash((wc_MXC_Sha *)sha256, hash, return wc_MXC_TPU_SHA_GetHash(&(sha256->mxcCtx), hash,
MXC_TPU_HASH_SHA256); MXC_TPU_HASH_SHA256);
} }
WOLFSSL_API int wc_Sha256Copy(wc_Sha256* src, wc_Sha256* dst) WOLFSSL_API int wc_Sha256Copy(wc_Sha256* src, wc_Sha256* dst)
{ {
return wc_MXC_TPU_SHA_Copy((wc_MXC_Sha *)src, (wc_MXC_Sha *)dst); return wc_MXC_TPU_SHA_Copy(&(src->mxcCtx), &(dst->mxcCtx));
} }
WOLFSSL_API void wc_Sha256Free(wc_Sha256* sha256) WOLFSSL_API void wc_Sha256Free(wc_Sha256* sha256)
{ {
wc_MXC_TPU_SHA_Free((wc_MXC_Sha *)sha256); wc_MXC_TPU_SHA_Free(&(sha256->mxcCtx));
return; return;
} }
@ -928,7 +928,7 @@ WOLFSSL_API int wc_InitSha384_ex(wc_Sha384* sha384, void* heap, int devId)
} }
(void)heap; (void)heap;
(void)devId; (void)devId;
return wc_MXC_TPU_SHA_Init((wc_MXC_Sha *)sha384); return wc_MXC_TPU_SHA_Init(&(sha384->mxcCtx));
} }
WOLFSSL_API int wc_InitSha384(wc_Sha384* sha384) WOLFSSL_API int wc_InitSha384(wc_Sha384* sha384)
@ -939,29 +939,29 @@ WOLFSSL_API int wc_InitSha384(wc_Sha384* sha384)
WOLFSSL_API int wc_Sha384Update(wc_Sha384* sha384, const unsigned char* data, WOLFSSL_API int wc_Sha384Update(wc_Sha384* sha384, const unsigned char* data,
unsigned int len) unsigned int len)
{ {
return wc_MXC_TPU_SHA_Update(sha384, data, len); return wc_MXC_TPU_SHA_Update(&(sha384->mxcCtx), data, len);
} }
WOLFSSL_API int wc_Sha384Final(wc_Sha384* sha384, unsigned char* hash) WOLFSSL_API int wc_Sha384Final(wc_Sha384* sha384, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_Final((wc_MXC_Sha *)sha384, hash, return wc_MXC_TPU_SHA_Final(&(sha384->mxcCtx), hash,
MXC_TPU_HASH_SHA384); MXC_TPU_HASH_SHA384);
} }
WOLFSSL_API int wc_Sha384GetHash(wc_Sha384* sha384, unsigned char* hash) WOLFSSL_API int wc_Sha384GetHash(wc_Sha384* sha384, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_GetHash((wc_MXC_Sha *)sha384, hash, return wc_MXC_TPU_SHA_GetHash(&(sha384->mxcCtx), hash,
MXC_TPU_HASH_SHA384); MXC_TPU_HASH_SHA384);
} }
WOLFSSL_API int wc_Sha384Copy(wc_Sha384* src, wc_Sha384* dst) WOLFSSL_API int wc_Sha384Copy(wc_Sha384* src, wc_Sha384* dst)
{ {
return wc_MXC_TPU_SHA_Copy((wc_MXC_Sha *)src, (wc_MXC_Sha *)dst); return wc_MXC_TPU_SHA_Copy(&(src->mxcCtx), &(dst->mxcCtx));
} }
WOLFSSL_API void wc_Sha384Free(wc_Sha384* sha384) WOLFSSL_API void wc_Sha384Free(wc_Sha384* sha384)
{ {
wc_MXC_TPU_SHA_Free((wc_MXC_Sha *)sha384); wc_MXC_TPU_SHA_Free(&(sha384->mxcCtx));
return; return;
} }
@ -976,7 +976,7 @@ WOLFSSL_API int wc_InitSha512_ex(wc_Sha512* sha512, void* heap, int devId)
} }
(void)heap; (void)heap;
(void)devId; (void)devId;
return wc_MXC_TPU_SHA_Init((wc_MXC_Sha *)sha512); return wc_MXC_TPU_SHA_Init(&(sha512->mxcCtx));
} }
WOLFSSL_API int wc_InitSha512(wc_Sha512* sha512) WOLFSSL_API int wc_InitSha512(wc_Sha512* sha512)
@ -987,29 +987,29 @@ WOLFSSL_API int wc_InitSha512(wc_Sha512* sha512)
WOLFSSL_API int wc_Sha512Update(wc_Sha512* sha512, const unsigned char* data, WOLFSSL_API int wc_Sha512Update(wc_Sha512* sha512, const unsigned char* data,
unsigned int len) unsigned int len)
{ {
return wc_MXC_TPU_SHA_Update(sha512, data, len); return wc_MXC_TPU_SHA_Update(&(sha512->mxcCtx), data, len);
} }
WOLFSSL_API int wc_Sha512Final(wc_Sha512* sha512, unsigned char* hash) WOLFSSL_API int wc_Sha512Final(wc_Sha512* sha512, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_Final((wc_MXC_Sha *)sha512, hash, return wc_MXC_TPU_SHA_Final(&(sha512->mxcCtx), hash,
MXC_TPU_HASH_SHA512); MXC_TPU_HASH_SHA512);
} }
WOLFSSL_API int wc_Sha512GetHash(wc_Sha512* sha512, unsigned char* hash) WOLFSSL_API int wc_Sha512GetHash(wc_Sha512* sha512, unsigned char* hash)
{ {
return wc_MXC_TPU_SHA_GetHash((wc_MXC_Sha *)sha512, hash, return wc_MXC_TPU_SHA_GetHash(&(sha512->mxcCtx), hash,
MXC_TPU_HASH_SHA512); MXC_TPU_HASH_SHA512);
} }
WOLFSSL_API int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst) WOLFSSL_API int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst)
{ {
return wc_MXC_TPU_SHA_Copy((wc_MXC_Sha *)src, (wc_MXC_Sha *)dst); return wc_MXC_TPU_SHA_Copy(&(src->mxcCtx), &(dst->mxcCtx));
} }
WOLFSSL_API void wc_Sha512Free(wc_Sha512* sha512) WOLFSSL_API void wc_Sha512Free(wc_Sha512* sha512)
{ {
wc_MXC_TPU_SHA_Free((wc_MXC_Sha *)sha512); wc_MXC_TPU_SHA_Free(&(sha512->mxcCtx));
return; return;
} }

View File

@ -236,21 +236,16 @@
#if defined(MAX3266X_SHA) || defined(MAX3266X_SHA_CB) #if defined(MAX3266X_SHA) || defined(MAX3266X_SHA_CB)
/* Need to update this struct accordingly if other SHA Structs change */
/* This is a generic struct to use so only this is needed */
typedef struct { typedef struct {
unsigned char *msg; unsigned char *msg;
unsigned int used; unsigned int used;
unsigned int size; unsigned int size;
#ifdef WOLFSSL_HASH_FLAGS
unsigned int flags; /* enum wc_HashFlags in hash.h */
#endif
} wc_MXC_Sha; } wc_MXC_Sha;
#if !defined(NO_SHA) #if !defined(NO_SHA)
#ifndef MAX3266X_SHA_CB
typedef wc_MXC_Sha wc_Sha;
#define WC_SHA_TYPE_DEFINED
#endif /* !MAX3266X_SHA_CB */
/* Define the SHA digest for an empty string */ /* Define the SHA digest for an empty string */
/* as a constant byte array */ /* as a constant byte array */
static const unsigned char MXC_EMPTY_DIGEST_SHA1[20] = { static const unsigned char MXC_EMPTY_DIGEST_SHA1[20] = {
@ -260,11 +255,6 @@
#endif /* NO_SHA */ #endif /* NO_SHA */
#if defined(WOLFSSL_SHA224) #if defined(WOLFSSL_SHA224)
#ifndef MAX3266X_SHA_CB
typedef wc_MXC_Sha wc_Sha224;
#define WC_SHA224_TYPE_DEFINED
#endif /* !MAX3266X_SHA_CB */
/* Define the SHA-224 digest for an empty string */ /* Define the SHA-224 digest for an empty string */
/* as a constant byte array */ /* as a constant byte array */
static const unsigned char MXC_EMPTY_DIGEST_SHA224[28] = { static const unsigned char MXC_EMPTY_DIGEST_SHA224[28] = {
@ -275,11 +265,6 @@
#endif /* WOLFSSL_SHA224 */ #endif /* WOLFSSL_SHA224 */
#if !defined(NO_SHA256) #if !defined(NO_SHA256)
#ifndef MAX3266X_SHA_CB
typedef wc_MXC_Sha wc_Sha256;
#define WC_SHA256_TYPE_DEFINED
#endif /* !MAX3266X_SHA_CB */
/* Define the SHA-256 digest for an empty string */ /* Define the SHA-256 digest for an empty string */
/* as a constant byte array */ /* as a constant byte array */
static const unsigned char MXC_EMPTY_DIGEST_SHA256[32] = { static const unsigned char MXC_EMPTY_DIGEST_SHA256[32] = {
@ -290,11 +275,6 @@
#endif /* NO_SHA256 */ #endif /* NO_SHA256 */
#if defined(WOLFSSL_SHA384) #if defined(WOLFSSL_SHA384)
#ifndef MAX3266X_SHA_CB
typedef wc_MXC_Sha wc_Sha384;
#define WC_SHA384_TYPE_DEFINED
#endif /* !MAX3266X_SHA_CB */
/* Define the SHA-384 digest for an empty string */ /* Define the SHA-384 digest for an empty string */
/* as a constant byte array */ /* as a constant byte array */
static const unsigned char MXC_EMPTY_DIGEST_SHA384[48] = { static const unsigned char MXC_EMPTY_DIGEST_SHA384[48] = {
@ -307,13 +287,6 @@
#endif /* WOLFSSL_SHA384 */ #endif /* WOLFSSL_SHA384 */
#if defined(WOLFSSL_SHA512) #if defined(WOLFSSL_SHA512)
#ifndef MAX3266X_SHA_CB
typedef wc_MXC_Sha wc_Sha512;
typedef wc_MXC_Sha wc_Sha512_224;
typedef wc_MXC_Sha wc_Sha512_256;
#define WC_SHA512_TYPE_DEFINED
#endif /* !MAX3266X_SHA_CB */
/* Does not support these SHA512 Macros */ /* Does not support these SHA512 Macros */
#ifndef WOLFSSL_NOSHA512_224 #ifndef WOLFSSL_NOSHA512_224
#warning "MAX3266X Port does not support SHA-512/224" #warning "MAX3266X Port does not support SHA-512/224"

View File

@ -163,7 +163,7 @@ struct wc_Sha {
int devId; int devId;
void* devCtx; /* generic crypto callback context */ void* devCtx; /* generic crypto callback context */
#endif #endif
#ifdef MAX3266X_SHA_CB #if defined(MAX3266X_SHA_CB) || defined(MAX3266X_SHA)
wc_MXC_Sha mxcCtx; wc_MXC_Sha mxcCtx;
#endif #endif
#ifdef WOLFSSL_IMXRT1170_CAAM #ifdef WOLFSSL_IMXRT1170_CAAM

View File

@ -213,7 +213,7 @@ struct wc_Sha256 {
#ifdef WOLFSSL_DEVCRYPTO_HASH #ifdef WOLFSSL_DEVCRYPTO_HASH
WC_CRYPTODEV ctx; WC_CRYPTODEV ctx;
#endif #endif
#ifdef MAX3266X_SHA_CB #if defined(MAX3266X_SHA_CB) || defined(MAX3266X_SHA)
wc_MXC_Sha mxcCtx; wc_MXC_Sha mxcCtx;
#endif #endif
#if defined(WOLFSSL_DEVCRYPTO_HASH) || defined(WOLFSSL_HASH_KEEP) #if defined(WOLFSSL_DEVCRYPTO_HASH) || defined(WOLFSSL_HASH_KEEP)

View File

@ -189,7 +189,7 @@ struct wc_Sha512 {
int devId; int devId;
void* devCtx; /* generic crypto callback context */ void* devCtx; /* generic crypto callback context */
#endif #endif
#ifdef MAX3266X_SHA_CB #if defined(MAX3266X_SHA_CB) || defined(MAX3266X_SHA)
wc_MXC_Sha mxcCtx; wc_MXC_Sha mxcCtx;
#endif #endif
#ifdef WOLFSSL_HASH_FLAGS #ifdef WOLFSSL_HASH_FLAGS