mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 11:17:29 +02:00
Fix for issue with wc_HashAlg
being a union.
This commit is contained in:
@ -711,42 +711,44 @@ int wc_HashInit_ex(wc_HashAlg* hash, enum wc_HashType type, void* heap,
|
|||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
hash->isAllocated = 0;
|
hash->isAllocated = 0;
|
||||||
|
hash->type = type;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WC_HASH_TYPE_MD5:
|
case WC_HASH_TYPE_MD5:
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_InitMd5_ex(&hash->md5, heap, devId);
|
ret = wc_InitMd5_ex(&hash->alg.md5, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA:
|
case WC_HASH_TYPE_SHA:
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_InitSha_ex(&hash->sha, heap, devId);
|
ret = wc_InitSha_ex(&hash->alg.sha, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA224:
|
case WC_HASH_TYPE_SHA224:
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
ret = wc_InitSha224_ex(&hash->sha224, heap, devId);
|
ret = wc_InitSha224_ex(&hash->alg.sha224, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA256:
|
case WC_HASH_TYPE_SHA256:
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
ret = wc_InitSha256_ex(&hash->sha256, heap, devId);
|
ret = wc_InitSha256_ex(&hash->alg.sha256, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA384:
|
case WC_HASH_TYPE_SHA384:
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
ret = wc_InitSha384_ex(&hash->sha384, heap, devId);
|
ret = wc_InitSha384_ex(&hash->alg.sha384, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA512:
|
case WC_HASH_TYPE_SHA512:
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
ret = wc_InitSha512_ex(&hash->sha512, heap, devId);
|
ret = wc_InitSha512_ex(&hash->alg.sha512, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
#ifndef WOLFSSL_NOSHA512_224
|
#ifndef WOLFSSL_NOSHA512_224
|
||||||
case WC_HASH_TYPE_SHA512_224:
|
case WC_HASH_TYPE_SHA512_224:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
||||||
ret = wc_InitSha512_224_ex(&hash->sha512, heap, devId);
|
ret = wc_InitSha512_224_ex(&hash->alg.sha512, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
break;
|
break;
|
||||||
@ -755,35 +757,35 @@ int wc_HashInit_ex(wc_HashAlg* hash, enum wc_HashType type, void* heap,
|
|||||||
case WC_HASH_TYPE_SHA512_256:
|
case WC_HASH_TYPE_SHA512_256:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
||||||
ret = wc_InitSha512_256_ex(&hash->sha512, heap, devId);
|
ret = wc_InitSha512_256_ex(&hash->alg.sha512, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA3_224:
|
case WC_HASH_TYPE_SHA3_224:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
||||||
ret = wc_InitSha3_224(&hash->sha3, heap, devId);
|
ret = wc_InitSha3_224(&hash->alg.sha3, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_256:
|
case WC_HASH_TYPE_SHA3_256:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
||||||
ret = wc_InitSha3_256(&hash->sha3, heap, devId);
|
ret = wc_InitSha3_256(&hash->alg.sha3, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_384:
|
case WC_HASH_TYPE_SHA3_384:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
||||||
ret = wc_InitSha3_384(&hash->sha3, heap, devId);
|
ret = wc_InitSha3_384(&hash->alg.sha3, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_512:
|
case WC_HASH_TYPE_SHA3_512:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
||||||
ret = wc_InitSha3_512(&hash->sha3, heap, devId);
|
ret = wc_InitSha3_512(&hash->alg.sha3, heap, devId);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SM3
|
#ifdef WOLFSSL_SM3
|
||||||
case WC_HASH_TYPE_SM3:
|
case WC_HASH_TYPE_SM3:
|
||||||
ret = wc_InitSm3(&hash->sm3, heap, devId);
|
ret = wc_InitSm3(&hash->alg.sm3, heap, devId);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -823,42 +825,49 @@ int wc_HashUpdate(wc_HashAlg* hash, enum wc_HashType type, const byte* data,
|
|||||||
if (hash == NULL || (data == NULL && dataSz > 0))
|
if (hash == NULL || (data == NULL && dataSz > 0))
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
#ifdef DEBUG_WOLFSSL
|
||||||
|
if (hash->type != type) {
|
||||||
|
WOLFSSL_MSG("Hash update type mismatch!");
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WC_HASH_TYPE_MD5:
|
case WC_HASH_TYPE_MD5:
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_Md5Update(&hash->md5, data, dataSz);
|
ret = wc_Md5Update(&hash->alg.md5, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA:
|
case WC_HASH_TYPE_SHA:
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_ShaUpdate(&hash->sha, data, dataSz);
|
ret = wc_ShaUpdate(&hash->alg.sha, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA224:
|
case WC_HASH_TYPE_SHA224:
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
ret = wc_Sha224Update(&hash->sha224, data, dataSz);
|
ret = wc_Sha224Update(&hash->alg.sha224, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA256:
|
case WC_HASH_TYPE_SHA256:
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
ret = wc_Sha256Update(&hash->sha256, data, dataSz);
|
ret = wc_Sha256Update(&hash->alg.sha256, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA384:
|
case WC_HASH_TYPE_SHA384:
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
ret = wc_Sha384Update(&hash->sha384, data, dataSz);
|
ret = wc_Sha384Update(&hash->alg.sha384, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA512:
|
case WC_HASH_TYPE_SHA512:
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
ret = wc_Sha512Update(&hash->sha512, data, dataSz);
|
ret = wc_Sha512Update(&hash->alg.sha512, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
#ifndef WOLFSSL_NOSHA512_224
|
#ifndef WOLFSSL_NOSHA512_224
|
||||||
case WC_HASH_TYPE_SHA512_224:
|
case WC_HASH_TYPE_SHA512_224:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
||||||
ret = wc_Sha512_224Update(&hash->sha512, data, dataSz);
|
ret = wc_Sha512_224Update(&hash->alg.sha512, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
break;
|
break;
|
||||||
@ -867,35 +876,35 @@ int wc_HashUpdate(wc_HashAlg* hash, enum wc_HashType type, const byte* data,
|
|||||||
case WC_HASH_TYPE_SHA512_256:
|
case WC_HASH_TYPE_SHA512_256:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
||||||
ret = wc_Sha512_256Update(&hash->sha512, data, dataSz);
|
ret = wc_Sha512_256Update(&hash->alg.sha512, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA3_224:
|
case WC_HASH_TYPE_SHA3_224:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
||||||
ret = wc_Sha3_224_Update(&hash->sha3, data, dataSz);
|
ret = wc_Sha3_224_Update(&hash->alg.sha3, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_256:
|
case WC_HASH_TYPE_SHA3_256:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
||||||
ret = wc_Sha3_256_Update(&hash->sha3, data, dataSz);
|
ret = wc_Sha3_256_Update(&hash->alg.sha3, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_384:
|
case WC_HASH_TYPE_SHA3_384:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
||||||
ret = wc_Sha3_384_Update(&hash->sha3, data, dataSz);
|
ret = wc_Sha3_384_Update(&hash->alg.sha3, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_512:
|
case WC_HASH_TYPE_SHA3_512:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
||||||
ret = wc_Sha3_512_Update(&hash->sha3, data, dataSz);
|
ret = wc_Sha3_512_Update(&hash->alg.sha3, data, dataSz);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SM3
|
#ifdef WOLFSSL_SM3
|
||||||
case WC_HASH_TYPE_SM3:
|
case WC_HASH_TYPE_SM3:
|
||||||
ret = wc_Sm3Update(&hash->sm3, data, dataSz);
|
ret = wc_Sm3Update(&hash->alg.sm3, data, dataSz);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -926,42 +935,49 @@ int wc_HashFinal(wc_HashAlg* hash, enum wc_HashType type, byte* out)
|
|||||||
if (hash == NULL || out == NULL)
|
if (hash == NULL || out == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
#ifdef DEBUG_WOLFSSL
|
||||||
|
if (hash->type != type) {
|
||||||
|
WOLFSSL_MSG("Hash final type mismatch!");
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WC_HASH_TYPE_MD5:
|
case WC_HASH_TYPE_MD5:
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_Md5Final(&hash->md5, out);
|
ret = wc_Md5Final(&hash->alg.md5, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA:
|
case WC_HASH_TYPE_SHA:
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_ShaFinal(&hash->sha, out);
|
ret = wc_ShaFinal(&hash->alg.sha, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA224:
|
case WC_HASH_TYPE_SHA224:
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
ret = wc_Sha224Final(&hash->sha224, out);
|
ret = wc_Sha224Final(&hash->alg.sha224, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA256:
|
case WC_HASH_TYPE_SHA256:
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
ret = wc_Sha256Final(&hash->sha256, out);
|
ret = wc_Sha256Final(&hash->alg.sha256, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA384:
|
case WC_HASH_TYPE_SHA384:
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
ret = wc_Sha384Final(&hash->sha384, out);
|
ret = wc_Sha384Final(&hash->alg.sha384, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA512:
|
case WC_HASH_TYPE_SHA512:
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
ret = wc_Sha512Final(&hash->sha512, out);
|
ret = wc_Sha512Final(&hash->alg.sha512, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
#ifndef WOLFSSL_NOSHA512_224
|
#ifndef WOLFSSL_NOSHA512_224
|
||||||
case WC_HASH_TYPE_SHA512_224:
|
case WC_HASH_TYPE_SHA512_224:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
||||||
ret = wc_Sha512_224Final(&hash->sha512, out);
|
ret = wc_Sha512_224Final(&hash->alg.sha512, out);
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
break;
|
break;
|
||||||
@ -970,35 +986,35 @@ int wc_HashFinal(wc_HashAlg* hash, enum wc_HashType type, byte* out)
|
|||||||
case WC_HASH_TYPE_SHA512_256:
|
case WC_HASH_TYPE_SHA512_256:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
||||||
ret = wc_Sha512_256Final(&hash->sha512, out);
|
ret = wc_Sha512_256Final(&hash->alg.sha512, out);
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA3_224:
|
case WC_HASH_TYPE_SHA3_224:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
||||||
ret = wc_Sha3_224_Final(&hash->sha3, out);
|
ret = wc_Sha3_224_Final(&hash->alg.sha3, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_256:
|
case WC_HASH_TYPE_SHA3_256:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
||||||
ret = wc_Sha3_256_Final(&hash->sha3, out);
|
ret = wc_Sha3_256_Final(&hash->alg.sha3, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_384:
|
case WC_HASH_TYPE_SHA3_384:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
||||||
ret = wc_Sha3_384_Final(&hash->sha3, out);
|
ret = wc_Sha3_384_Final(&hash->alg.sha3, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_512:
|
case WC_HASH_TYPE_SHA3_512:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
||||||
ret = wc_Sha3_512_Final(&hash->sha3, out);
|
ret = wc_Sha3_512_Final(&hash->alg.sha3, out);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SM3
|
#ifdef WOLFSSL_SM3
|
||||||
case WC_HASH_TYPE_SM3:
|
case WC_HASH_TYPE_SM3:
|
||||||
ret = wc_Sm3Final(&hash->sm3, out);
|
ret = wc_Sm3Final(&hash->alg.sm3, out);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1031,48 +1047,55 @@ int wc_HashFree(wc_HashAlg* hash, enum wc_HashType type)
|
|||||||
if (hash == NULL)
|
if (hash == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
#ifdef DEBUG_WOLFSSL
|
||||||
|
if (hash->type != type) {
|
||||||
|
WOLFSSL_MSG("Hash free type mismatch!");
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
isAllocated = hash->isAllocated;
|
isAllocated = hash->isAllocated;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WC_HASH_TYPE_MD5:
|
case WC_HASH_TYPE_MD5:
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
heap = hash->md5.heap;
|
heap = hash->alg.md5.heap;
|
||||||
wc_Md5Free(&hash->md5);
|
wc_Md5Free(&hash->alg.md5);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA:
|
case WC_HASH_TYPE_SHA:
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
heap = hash->sha.heap;
|
heap = hash->alg.sha.heap;
|
||||||
wc_ShaFree(&hash->sha);
|
wc_ShaFree(&hash->alg.sha);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA224:
|
case WC_HASH_TYPE_SHA224:
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
heap = hash->sha224.heap;
|
heap = hash->alg.sha224.heap;
|
||||||
wc_Sha224Free(&hash->sha224);
|
wc_Sha224Free(&hash->alg.sha224);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA256:
|
case WC_HASH_TYPE_SHA256:
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
heap = hash->sha256.heap;
|
heap = hash->alg.sha256.heap;
|
||||||
wc_Sha256Free(&hash->sha256);
|
wc_Sha256Free(&hash->alg.sha256);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA384:
|
case WC_HASH_TYPE_SHA384:
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
heap = hash->sha384.heap;
|
heap = hash->alg.sha384.heap;
|
||||||
wc_Sha384Free(&hash->sha384);
|
wc_Sha384Free(&hash->alg.sha384);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA512:
|
case WC_HASH_TYPE_SHA512:
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
heap = hash->sha512.heap;
|
heap = hash->alg.sha512.heap;
|
||||||
wc_Sha512Free(&hash->sha512);
|
wc_Sha512Free(&hash->alg.sha512);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
@ -1080,7 +1103,7 @@ int wc_HashFree(wc_HashAlg* hash, enum wc_HashType type)
|
|||||||
case WC_HASH_TYPE_SHA512_224:
|
case WC_HASH_TYPE_SHA512_224:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
|
||||||
wc_Sha512_224Free(&hash->sha512);
|
wc_Sha512_224Free(&hash->alg.sha512);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
@ -1090,7 +1113,7 @@ int wc_HashFree(wc_HashAlg* hash, enum wc_HashType type)
|
|||||||
case WC_HASH_TYPE_SHA512_256:
|
case WC_HASH_TYPE_SHA512_256:
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
#if defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
|
||||||
wc_Sha512_256Free(&hash->sha512);
|
wc_Sha512_256Free(&hash->alg.sha512);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
#endif /* !HAVE_FIPS && !HAVE_SELFTEST */
|
||||||
@ -1098,34 +1121,34 @@ int wc_HashFree(wc_HashAlg* hash, enum wc_HashType type)
|
|||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA3_224:
|
case WC_HASH_TYPE_SHA3_224:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
|
||||||
heap = hash->sha3.heap;
|
heap = hash->alg.sha3.heap;
|
||||||
wc_Sha3_224_Free(&hash->sha3);
|
wc_Sha3_224_Free(&hash->alg.sha3);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_256:
|
case WC_HASH_TYPE_SHA3_256:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
|
||||||
wc_Sha3_256_Free(&hash->sha3);
|
wc_Sha3_256_Free(&hash->alg.sha3);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_384:
|
case WC_HASH_TYPE_SHA3_384:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
|
||||||
wc_Sha3_384_Free(&hash->sha3);
|
wc_Sha3_384_Free(&hash->alg.sha3);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA3_512:
|
case WC_HASH_TYPE_SHA3_512:
|
||||||
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
|
||||||
wc_Sha3_512_Free(&hash->sha3);
|
wc_Sha3_512_Free(&hash->alg.sha3);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SM3
|
#ifdef WOLFSSL_SM3
|
||||||
case WC_HASH_TYPE_SM3:
|
case WC_HASH_TYPE_SM3:
|
||||||
heap = hash->sm3.heap;
|
heap = hash->alg.sm3.heap;
|
||||||
wc_Sm3Free(&hash->sm3);
|
wc_Sm3Free(&hash->alg.sm3);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
@ -1165,27 +1188,27 @@ int wc_HashSetFlags(wc_HashAlg* hash, enum wc_HashType type, word32 flags)
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case WC_HASH_TYPE_MD5:
|
case WC_HASH_TYPE_MD5:
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_Md5SetFlags(&hash->md5, flags);
|
ret = wc_Md5SetFlags(&hash->alg.md5, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA:
|
case WC_HASH_TYPE_SHA:
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_ShaSetFlags(&hash->sha, flags);
|
ret = wc_ShaSetFlags(&hash->alg.sha, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA224:
|
case WC_HASH_TYPE_SHA224:
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
ret = wc_Sha224SetFlags(&hash->sha224, flags);
|
ret = wc_Sha224SetFlags(&hash->alg.sha224, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA256:
|
case WC_HASH_TYPE_SHA256:
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
ret = wc_Sha256SetFlags(&hash->sha256, flags);
|
ret = wc_Sha256SetFlags(&hash->alg.sha256, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA384:
|
case WC_HASH_TYPE_SHA384:
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
ret = wc_Sha384SetFlags(&hash->sha384, flags);
|
ret = wc_Sha384SetFlags(&hash->alg.sha384, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA512:
|
case WC_HASH_TYPE_SHA512:
|
||||||
@ -1196,7 +1219,7 @@ int wc_HashSetFlags(wc_HashAlg* hash, enum wc_HashType type, word32 flags)
|
|||||||
case WC_HASH_TYPE_SHA512_256:
|
case WC_HASH_TYPE_SHA512_256:
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
ret = wc_Sha512SetFlags(&hash->sha512, flags);
|
ret = wc_Sha512SetFlags(&hash->alg.sha512, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1205,13 +1228,13 @@ int wc_HashSetFlags(wc_HashAlg* hash, enum wc_HashType type, word32 flags)
|
|||||||
case WC_HASH_TYPE_SHA3_384:
|
case WC_HASH_TYPE_SHA3_384:
|
||||||
case WC_HASH_TYPE_SHA3_512:
|
case WC_HASH_TYPE_SHA3_512:
|
||||||
#ifdef WOLFSSL_SHA3
|
#ifdef WOLFSSL_SHA3
|
||||||
ret = wc_Sha3_SetFlags(&hash->sha3, flags);
|
ret = wc_Sha3_SetFlags(&hash->alg.sha3, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SM3
|
#ifdef WOLFSSL_SM3
|
||||||
case WC_HASH_TYPE_SM3:
|
case WC_HASH_TYPE_SM3:
|
||||||
ret = wc_Sm3SetFlags(&hash->sm3, flags);
|
ret = wc_Sm3SetFlags(&hash->alg.sm3, flags);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1244,27 +1267,27 @@ int wc_HashGetFlags(wc_HashAlg* hash, enum wc_HashType type, word32* flags)
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case WC_HASH_TYPE_MD5:
|
case WC_HASH_TYPE_MD5:
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_Md5GetFlags(&hash->md5, flags);
|
ret = wc_Md5GetFlags(&hash->alg.md5, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA:
|
case WC_HASH_TYPE_SHA:
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_ShaGetFlags(&hash->sha, flags);
|
ret = wc_ShaGetFlags(&hash->alg.sha, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA224:
|
case WC_HASH_TYPE_SHA224:
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
ret = wc_Sha224GetFlags(&hash->sha224, flags);
|
ret = wc_Sha224GetFlags(&hash->alg.sha224, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA256:
|
case WC_HASH_TYPE_SHA256:
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
ret = wc_Sha256GetFlags(&hash->sha256, flags);
|
ret = wc_Sha256GetFlags(&hash->alg.sha256, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA384:
|
case WC_HASH_TYPE_SHA384:
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
ret = wc_Sha384GetFlags(&hash->sha384, flags);
|
ret = wc_Sha384GetFlags(&hash->alg.sha384, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case WC_HASH_TYPE_SHA512:
|
case WC_HASH_TYPE_SHA512:
|
||||||
@ -1275,7 +1298,7 @@ int wc_HashGetFlags(wc_HashAlg* hash, enum wc_HashType type, word32* flags)
|
|||||||
case WC_HASH_TYPE_SHA512_256:
|
case WC_HASH_TYPE_SHA512_256:
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
ret = wc_Sha512GetFlags(&hash->sha512, flags);
|
ret = wc_Sha512GetFlags(&hash->alg.sha512, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1284,13 +1307,13 @@ int wc_HashGetFlags(wc_HashAlg* hash, enum wc_HashType type, word32* flags)
|
|||||||
case WC_HASH_TYPE_SHA3_384:
|
case WC_HASH_TYPE_SHA3_384:
|
||||||
case WC_HASH_TYPE_SHA3_512:
|
case WC_HASH_TYPE_SHA3_512:
|
||||||
#ifdef WOLFSSL_SHA3
|
#ifdef WOLFSSL_SHA3
|
||||||
ret = wc_Sha3_GetFlags(&hash->sha3, flags);
|
ret = wc_Sha3_GetFlags(&hash->alg.sha3, flags);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SM3
|
#ifdef WOLFSSL_SM3
|
||||||
case WC_HASH_TYPE_SM3:
|
case WC_HASH_TYPE_SM3:
|
||||||
ret = wc_Sm3GetFlags(&hash->sm3, flags);
|
ret = wc_Sm3GetFlags(&hash->alg.sm3, flags);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -93,32 +93,38 @@ enum wc_HashFlags {
|
|||||||
WOLF_ENUM_DUMMY_LAST_ELEMENT(WC_HASH)
|
WOLF_ENUM_DUMMY_LAST_ELEMENT(WC_HASH)
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef NO_HASH_WRAPPER
|
/* hash union */
|
||||||
typedef union {
|
typedef union {
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
wc_Md5 md5;
|
wc_Md5 md5;
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
wc_Sha sha;
|
wc_Sha sha;
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
wc_Sha224 sha224;
|
wc_Sha224 sha224;
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
wc_Sha256 sha256;
|
wc_Sha256 sha256;
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
wc_Sha384 sha384;
|
wc_Sha384 sha384;
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
wc_Sha512 sha512;
|
wc_Sha512 sha512;
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SHA3
|
#ifdef WOLFSSL_SHA3
|
||||||
wc_Sha3 sha3;
|
wc_Sha3 sha3;
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SM3
|
#ifdef WOLFSSL_SM3
|
||||||
wc_Sm3 sm3;
|
wc_Sm3 sm3;
|
||||||
#endif
|
#endif
|
||||||
|
} wc_Hashes;
|
||||||
|
|
||||||
|
#ifndef NO_HASH_WRAPPER
|
||||||
|
typedef struct {
|
||||||
|
wc_Hashes alg;
|
||||||
|
enum wc_HashType type; /* sanity check */
|
||||||
unsigned int isAllocated:1; /* flag indicates if structure was allocated */
|
unsigned int isAllocated:1; /* flag indicates if structure was allocated */
|
||||||
} wc_HashAlg;
|
} wc_HashAlg;
|
||||||
#endif /* !NO_HASH_WRAPPER */
|
#endif /* !NO_HASH_WRAPPER */
|
||||||
|
@ -119,34 +119,7 @@ enum {
|
|||||||
#error "You have to have some kind of hash if you want to use HMAC."
|
#error "You have to have some kind of hash if you want to use HMAC."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef wc_Hashes wc_HmacHash;
|
||||||
/* hmac hash union */
|
|
||||||
typedef union {
|
|
||||||
#ifndef NO_MD5
|
|
||||||
wc_Md5 md5;
|
|
||||||
#endif
|
|
||||||
#ifndef NO_SHA
|
|
||||||
wc_Sha sha;
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA224
|
|
||||||
wc_Sha224 sha224;
|
|
||||||
#endif
|
|
||||||
#ifndef NO_SHA256
|
|
||||||
wc_Sha256 sha256;
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA384
|
|
||||||
wc_Sha384 sha384;
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA512
|
|
||||||
wc_Sha512 sha512;
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA3
|
|
||||||
wc_Sha3 sha3;
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SM3
|
|
||||||
wc_Sm3 sm3;
|
|
||||||
#endif
|
|
||||||
} wc_HmacHash;
|
|
||||||
|
|
||||||
/* Hmac digest */
|
/* Hmac digest */
|
||||||
struct Hmac {
|
struct Hmac {
|
||||||
|
Reference in New Issue
Block a user