Allow SHA384 to be compiled in without SHA512

This commit is contained in:
Sean Parkinson
2018-07-20 09:42:01 +10:00
parent 70dfb9af72
commit 9433fcb820
11 changed files with 182 additions and 111 deletions

View File

@ -1079,15 +1079,41 @@ fi
if test "$ENABLED_OPENSSH" = "yes" || test "$ENABLED_WPAS" = "yes" || test "$ENABLED_FORTRESS" = "yes"
then
ENABLED_SHA512="yes"
ENABLED_SHA384="yes"
fi
if test "$ENABLED_SHA512" = "yes" && test "$ENABLED_32BIT" = "no"
then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA512 -DWOLFSSL_SHA384"
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA512"
fi
AM_CONDITIONAL([BUILD_SHA512], [test "x$ENABLED_SHA512" = "xyes"])
# SHA384
AC_ARG_ENABLE([sha384],
[AS_HELP_STRING([--enable-sha384],[Enable wolfSSL SHA-384 support (default: enabled)])],
[ ENABLED_SHA384=$enableval ],
[ ENABLED_SHA384=yes ]
)
# options that don't require sha512
if test "$ENABLED_LEANPSK" = "yes" || test "$ENABLED_LEANTLS" = "yes"
then
ENABLED_SHA384=no
fi
# options that require sha384
if test "$ENABLED_OPENSSH" = "yes" || test "$ENABLED_WPAS" = "yes" || test "$ENABLED_FORTRESS" = "yes"
then
ENABLED_SHA384="yes"
fi
if test "$ENABLED_SHA384" = "yes" && test "$ENABLED_32BIT" = "no"
then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA384"
fi
AM_CONDITIONAL([BUILD_SHA512], [test "x$ENABLED_SHA384" = "xyes"])
# SESSION CERTS
AC_ARG_ENABLE([sessioncerts],
@ -4389,6 +4415,7 @@ echo " * MD5: $ENABLED_MD5"
echo " * RIPEMD: $ENABLED_RIPEMD"
echo " * SHA: $ENABLED_SHA"
echo " * SHA-224: $ENABLED_SHA224"
echo " * SHA-384: $ENABLED_SHA384"
echo " * SHA-512: $ENABLED_SHA512"
echo " * SHA3: $ENABLED_SHA3"
echo " * BLAKE2: $ENABLED_BLAKE2"

View File

@ -88,7 +88,7 @@
#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL)
#include <wolfssl/openssl/ocsp.h>
#endif /* WITH_STUNNEL */
#ifdef WOLFSSL_SHA512
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#include <wolfssl/wolfcrypt/sha512.h>
#endif
#if defined(WOLFCRYPT_HAVE_SRP) && !defined(NO_SHA256) \
@ -13706,13 +13706,13 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
mdlen = WC_SHA256_DIGEST_SIZE;
} else
#endif
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
if (XSTRNCMP(evp_md, "SHA384", 6) == 0) {
type = WC_SHA384;
mdlen = WC_SHA384_DIGEST_SIZE;
} else
#endif
#ifdef WOLFSSL_SHA512
if (XSTRNCMP(evp_md, "SHA512", 6) == 0) {
type = WC_SHA512;
mdlen = WC_SHA512_DIGEST_SIZE;
@ -24830,13 +24830,13 @@ int wolfSSL_HMAC_CTX_copy(WOLFSSL_HMAC_CTX* des, WOLFSSL_HMAC_CTX* src)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
XMEMCPY(&des->hmac.hash.sha384, &src->hmac.hash.sha384,
sizeof(wc_Sha384));
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
XMEMCPY(&des->hmac.hash.sha512, &src->hmac.hash.sha512,
sizeof(wc_Sha512));
@ -24911,12 +24911,12 @@ static int _HMAC_Init(Hmac* hmac, int type, void* heap)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
ret = wc_InitSha384(&hmac->hash.sha384);
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
ret = wc_InitSha512(&hmac->hash.sha512);
break;
@ -29721,7 +29721,7 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
}
#endif /* ! NO_SHA256 */
#if defined(WOLFSSL_SHA384) && defined(WOLFSSL_SHA512)
#ifdef WOLFSSL_SHA384
/* One shot SHA384 hash of message.
*
* d message to hash
@ -29766,7 +29766,7 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
return (unsigned char*)dig;
}
}
#endif /* defined(WOLFSSL_SHA384) && defined(WOLFSSL_SHA512) */
#endif /* WOLFSSL_SHA384 */
#if defined(WOLFSSL_SHA512)

View File

@ -17662,7 +17662,7 @@ static void test_wolfSSL_HMAC(void)
AssertNotNull(HMAC(EVP_sha224(), key, (int)sizeof(key), NULL, 0, hash, &len));
AssertIntEQ(len, (int)WC_SHA224_DIGEST_SIZE);
#endif
#if defined(OPENSSL_EXTRA) && (defined(WOLFSSL_SHA384) && defined(WOLFSSL_SHA512))
#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_SHA384)
len = 0;
AssertNotNull(HMAC(EVP_sha384(), key, (int)sizeof(key), NULL, 0, hash, &len));
AssertIntEQ(len, (int)WC_SHA384_DIGEST_SIZE);
@ -18414,7 +18414,6 @@ static void test_wolfSSL_HMAC_CTX(void)
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
AssertIntEQ((digestSz = test_HMAC_CTX_helper(EVP_sha384(), digest)), 48);
AssertIntEQ(XMEMCMP("\x9E\xCB\x07\x0C\x11\x76\x3F\x23\xC3\x25\x0E\xC4\xB7"
@ -18423,6 +18422,7 @@ static void test_wolfSSL_HMAC_CTX(void)
"\xCD\xFB\xC2\xCC\x9F\x2B\xC5\x41\xAB",
digest, digestSz), 0);
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
AssertIntEQ((digestSz = test_HMAC_CTX_helper(EVP_sha512(), digest)), 64);
AssertIntEQ(XMEMCMP("\xD4\x21\x0C\x8B\x60\x6F\xF4\xBF\x07\x2F\x26\xCC\xAD"
"\xBC\x06\x0B\x34\x78\x8B\x4F\xD6\xC0\x42\xF1\x33\x10"
@ -18518,7 +18518,7 @@ static void test_wolfSSL_SHA(void)
}
#endif
#if defined(WOLFSSL_SHA384) && defined(WOLFSSL_SHA512)
#if defined(WOLFSSL_SHA384)
{
const unsigned char in[] = "abc";
unsigned char expected[] = "\xcb\x00\x75\x3f\x45\xa3\x5e\x8b\xb5\xa0\x3d\x69\x9a\xc6\x50"

View File

@ -92,12 +92,12 @@ enum wc_HashType wc_HashTypeConvert(int hashType)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
eHashType = WC_HASH_TYPE_SHA384;
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
eHashType = WC_HASH_TYPE_SHA512;
break;
@ -343,7 +343,7 @@ int wc_HashGetBlockSize(enum wc_HashType hash_type)
#endif
break;
case WC_HASH_TYPE_SHA384:
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384)
#ifdef WOLFSSL_SHA384
block_size = WC_SHA384_BLOCK_SIZE;
#endif
break;
@ -431,7 +431,7 @@ int wc_Hash(enum wc_HashType hash_type, const byte* data,
#endif
break;
case WC_HASH_TYPE_SHA384:
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384)
#ifdef WOLFSSL_SHA384
ret = wc_Sha384Hash(data, data_len, hash);
#endif
break;
@ -822,42 +822,42 @@ int wc_HashFinal(wc_HashAlg* hash, enum wc_HashType type, byte* out)
return ret;
}
#if defined(WOLFSSL_SHA384)
int wc_Sha384Hash(const byte* data, word32 len, byte* hash)
{
int ret = 0;
#ifdef WOLFSSL_SMALL_STACK
wc_Sha384* sha384;
#else
wc_Sha384 sha384[1];
#endif
#ifdef WOLFSSL_SMALL_STACK
sha384 = (wc_Sha384*)XMALLOC(sizeof(wc_Sha384), NULL,
DYNAMIC_TYPE_TMP_BUFFER);
if (sha384 == NULL)
return MEMORY_E;
#endif
if ((ret = wc_InitSha384(sha384)) != 0) {
WOLFSSL_MSG("InitSha384 failed");
}
else {
if ((ret = wc_Sha384Update(sha384, data, len)) != 0) {
WOLFSSL_MSG("Sha384Update failed");
}
else if ((ret = wc_Sha384Final(sha384, hash)) != 0) {
WOLFSSL_MSG("Sha384Final failed");
}
wc_Sha384Free(sha384);
}
#ifdef WOLFSSL_SMALL_STACK
XFREE(sha384, NULL, DYNAMIC_TYPE_TMP_BUFFER);
#endif
return ret;
}
#endif /* WOLFSSL_SHA384 */
#endif /* WOLFSSL_SHA512 */
#if defined(WOLFSSL_SHA384)
int wc_Sha384Hash(const byte* data, word32 len, byte* hash)
{
int ret = 0;
#ifdef WOLFSSL_SMALL_STACK
wc_Sha384* sha384;
#else
wc_Sha384 sha384[1];
#endif
#ifdef WOLFSSL_SMALL_STACK
sha384 = (wc_Sha384*)XMALLOC(sizeof(wc_Sha384), NULL,
DYNAMIC_TYPE_TMP_BUFFER);
if (sha384 == NULL)
return MEMORY_E;
#endif
if ((ret = wc_InitSha384(sha384)) != 0) {
WOLFSSL_MSG("InitSha384 failed");
}
else {
if ((ret = wc_Sha384Update(sha384, data, len)) != 0) {
WOLFSSL_MSG("Sha384Update failed");
}
else if ((ret = wc_Sha384Final(sha384, hash)) != 0) {
WOLFSSL_MSG("Sha384Final failed");
}
wc_Sha384Free(sha384);
}
#ifdef WOLFSSL_SMALL_STACK
XFREE(sha384, NULL, DYNAMIC_TYPE_TMP_BUFFER);
#endif
return ret;
}
#endif /* WOLFSSL_SHA384 */

View File

@ -157,12 +157,12 @@ int wc_HmacSizeByType(int type)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
ret = WC_SHA384_DIGEST_SIZE;
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
ret = WC_SHA512_DIGEST_SIZE;
break;
@ -230,12 +230,12 @@ int _InitHmac(Hmac* hmac, int type, void* heap)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
ret = wc_InitSha384(&hmac->hash.sha384);
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
ret = wc_InitSha512(&hmac->hash.sha512);
break;
@ -397,7 +397,6 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
hmac_block_size = WC_SHA384_BLOCK_SIZE;
@ -418,6 +417,7 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
}
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
hmac_block_size = WC_SHA512_BLOCK_SIZE;
if (length <= WC_SHA512_BLOCK_SIZE) {
@ -604,13 +604,13 @@ static int HmacKeyInnerHash(Hmac* hmac)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
ret = wc_Sha384Update(&hmac->hash.sha384, (byte*)hmac->ipad,
WC_SHA384_BLOCK_SIZE);
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
ret = wc_Sha512Update(&hmac->hash.sha512, (byte*)hmac->ipad,
WC_SHA512_BLOCK_SIZE);
@ -706,12 +706,12 @@ int wc_HmacUpdate(Hmac* hmac, const byte* msg, word32 length)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
ret = wc_Sha384Update(&hmac->hash.sha384, msg, length);
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
ret = wc_Sha512Update(&hmac->hash.sha512, msg, length);
break;
@ -850,7 +850,6 @@ int wc_HmacFinal(Hmac* hmac, byte* hash)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
ret = wc_Sha384Final(&hmac->hash.sha384, (byte*)hmac->innerHash);
@ -867,6 +866,7 @@ int wc_HmacFinal(Hmac* hmac, byte* hash)
ret = wc_Sha384Final(&hmac->hash.sha384, hash);
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
ret = wc_Sha512Final(&hmac->hash.sha512, (byte*)hmac->innerHash);
if (ret != 0)
@ -1027,12 +1027,12 @@ void wc_HmacFree(Hmac* hmac)
break;
#endif /* !NO_SHA256 */
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_SHA384:
wc_Sha384Free(&hmac->hash.sha384);
break;
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
case WC_SHA512:
wc_Sha512Free(&hmac->hash.sha512);
break;

View File

@ -619,12 +619,12 @@ static int RsaMGF(int type, byte* seed, word32 seedSz, byte* out,
ret = RsaMGF1(WC_HASH_TYPE_SHA256, seed, seedSz, out, outSz, heap);
break;
#endif
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
case WC_MGF1SHA384:
ret = RsaMGF1(WC_HASH_TYPE_SHA384, seed, seedSz, out, outSz, heap);
break;
#endif
#ifdef WOLFSSL_SHA512
case WC_MGF1SHA512:
ret = RsaMGF1(WC_HASH_TYPE_SHA512, seed, seedSz, out, outSz, heap);
break;

View File

@ -26,7 +26,7 @@
#include <wolfssl/wolfcrypt/settings.h>
#ifdef WOLFSSL_SHA512
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#if defined(HAVE_FIPS) && \
defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2)
@ -53,44 +53,47 @@
#if defined(HAVE_FIPS) && \
(!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION < 2))
int wc_InitSha512(wc_Sha512* sha)
{
if (sha == NULL) {
return BAD_FUNC_ARG;
}
#ifdef WOLFSSL_SHA512
return InitSha512_fips(sha);
}
int wc_InitSha512_ex(wc_Sha512* sha, void* heap, int devId)
{
(void)heap;
(void)devId;
if (sha == NULL) {
return BAD_FUNC_ARG;
}
return InitSha512_fips(sha);
}
int wc_Sha512Update(wc_Sha512* sha, const byte* data, word32 len)
{
if (sha == NULL || (data == NULL && len > 0)) {
return BAD_FUNC_ARG;
}
int wc_InitSha512(wc_Sha512* sha)
{
if (sha == NULL) {
return BAD_FUNC_ARG;
}
return Sha512Update_fips(sha, data, len);
}
int wc_Sha512Final(wc_Sha512* sha, byte* out)
{
if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG;
return InitSha512_fips(sha);
}
int wc_InitSha512_ex(wc_Sha512* sha, void* heap, int devId)
{
(void)heap;
(void)devId;
if (sha == NULL) {
return BAD_FUNC_ARG;
}
return InitSha512_fips(sha);
}
int wc_Sha512Update(wc_Sha512* sha, const byte* data, word32 len)
{
if (sha == NULL || (data == NULL && len > 0)) {
return BAD_FUNC_ARG;
}
return Sha512Final_fips(sha, out);
}
void wc_Sha512Free(wc_Sha512* sha)
{
(void)sha;
/* Not supported in FIPS */
}
return Sha512Update_fips(sha, data, len);
}
int wc_Sha512Final(wc_Sha512* sha, byte* out)
{
if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG;
}
return Sha512Final_fips(sha, out);
}
void wc_Sha512Free(wc_Sha512* sha)
{
(void)sha;
/* Not supported in FIPS */
}
#endif
#if defined(WOLFSSL_SHA384) || defined(HAVE_AESGCM)
int wc_InitSha384(wc_Sha384* sha)
@ -186,6 +189,8 @@
/* functions defined in wolfcrypt/src/port/caam/caam_sha.c */
#else
#ifdef WOLFSSL_SHA512
static int InitSha512(wc_Sha512* sha512)
{
if (sha512 == NULL)
@ -207,10 +212,13 @@ static int InitSha512(wc_Sha512* sha512)
return 0;
}
#endif /* WOLFSSL_SHA512 */
/* Hardware Acceleration */
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
#ifdef WOLFSSL_SHA512
/*****
Intel AVX1/AVX2 Macro Control Structure
@ -358,9 +366,13 @@ static int InitSha512(wc_Sha512* sha512)
return ret;
}
#endif /* WOLFSSL_SHA512 */
#else
#define Transform_Sha512(sha512) _Transform_Sha512(sha512)
#ifdef WOLFSSL_SHA512
int wc_InitSha512_ex(wc_Sha512* sha512, void* heap, int devId)
{
int ret = 0;
@ -388,6 +400,8 @@ static int InitSha512(wc_Sha512* sha512)
return ret;
}
#endif /* WOLFSSL_SHA512 */
#endif /* Hardware Acceleration */
static const word64 K512[80] = {
@ -640,6 +654,8 @@ static WC_INLINE int Sha512Update(wc_Sha512* sha512, const byte* data, word32 le
return ret;
}
#ifdef WOLFSSL_SHA512
int wc_Sha512Update(wc_Sha512* sha512, const byte* data, word32 len)
{
if (sha512 == NULL || (data == NULL && len > 0)) {
@ -656,6 +672,9 @@ int wc_Sha512Update(wc_Sha512* sha512, const byte* data, word32 len)
return Sha512Update(sha512, data, len);
}
#endif /* WOLFSSL_SHA512 */
#endif /* WOLFSSL_IMX6_CAAM */
static WC_INLINE int Sha512Final(wc_Sha512* sha512)
@ -725,6 +744,8 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512)
return 0;
}
#ifdef WOLFSSL_SHA512
int wc_Sha512FinalRaw(wc_Sha512* sha512, byte* hash)
{
#ifdef LITTLE_ENDIAN_ORDER
@ -2595,6 +2616,7 @@ static int Transform_Sha512_AVX2_RORX_Len(wc_Sha512* sha512, word32 len)
#endif /* HAVE_INTEL_RORX */
#endif /* HAVE_INTEL_AVX2 */
#endif /* WOLFSSL_SHA512 */
/* -------------------------------------------------------------------------- */
@ -2763,6 +2785,7 @@ void wc_Sha384Free(wc_Sha384* sha384)
#endif /* HAVE_FIPS */
#ifdef WOLFSSL_SHA512
int wc_Sha512GetHash(wc_Sha512* sha512, byte* hash)
{
@ -2799,7 +2822,10 @@ int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst)
return ret;
}
#endif /* WOLFSSL_SHA512 */
#ifdef WOLFSSL_SHA384
int wc_Sha384GetHash(wc_Sha384* sha384, byte* hash)
{
int ret;
@ -2833,6 +2859,7 @@ int wc_Sha384Copy(wc_Sha384* src, wc_Sha384* dst)
return ret;
}
#endif /* WOLFSSL_SHA384 */
#endif /* WOLFSSL_SHA512 */
#endif /* WOLFSSL_SHA512 || WOLFSSL_SHA384 */

View File

@ -84,6 +84,9 @@
#ifdef HAVE_OCSP
#include <wolfssl/ocsp.h>
#endif
#ifdef WOLFSSL_SHA384
#include <wolfssl/wolfcrypt/sha512.h>
#endif
#ifdef WOLFSSL_SHA512
#include <wolfssl/wolfcrypt/sha512.h>
#endif

View File

@ -146,22 +146,24 @@ WOLFSSL_API int wc_Md5Hash(const byte* data, word32 len, byte* hash);
WOLFSSL_API int wc_ShaHash(const byte*, word32, byte*);
#endif
#ifdef WOLFSSL_SHA224
#include <wolfssl/wolfcrypt/sha256.h>
WOLFSSL_API int wc_Sha224Hash(const byte*, word32, byte*);
#endif /* defined(WOLFSSL_SHA224) */
#ifndef NO_SHA256
#include <wolfssl/wolfcrypt/sha256.h>
WOLFSSL_API int wc_Sha256Hash(const byte*, word32, byte*);
#if defined(WOLFSSL_SHA224)
WOLFSSL_API int wc_Sha224Hash(const byte*, word32, byte*);
#endif /* defined(WOLFSSL_SHA224) */
#endif
#ifdef WOLFSSL_SHA384
#include <wolfssl/wolfcrypt/sha512.h>
WOLFSSL_API int wc_Sha384Hash(const byte*, word32, byte*);
#endif /* defined(WOLFSSL_SHA384) */
#ifdef WOLFSSL_SHA512
#include <wolfssl/wolfcrypt/sha512.h>
WOLFSSL_API int wc_Sha512Hash(const byte*, word32, byte*);
#if defined(WOLFSSL_SHA384)
WOLFSSL_API int wc_Sha384Hash(const byte*, word32, byte*);
#endif /* defined(WOLFSSL_SHA384) */
#endif /* WOLFSSL_SHA512 */
#ifdef __cplusplus

View File

@ -119,10 +119,10 @@ typedef union {
#ifndef NO_SHA256
wc_Sha256 sha256;
#endif
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
wc_Sha384 sha384;
#endif
#ifdef WOLFSSL_SHA512
wc_Sha512 sha512;
#endif
#ifdef HAVE_BLAKE2

View File

@ -29,7 +29,7 @@
#include <wolfssl/wolfcrypt/types.h>
#ifdef WOLFSSL_SHA512
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#if defined(HAVE_FIPS) && \
defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2)
@ -38,11 +38,13 @@
#if defined(HAVE_FIPS) && \
(!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION < 2))
#define wc_Sha512 Sha512
#define WC_SHA512 SHA512
#define WC_SHA512_BLOCK_SIZE SHA512_BLOCK_SIZE
#define WC_SHA512_DIGEST_SIZE SHA512_DIGEST_SIZE
#define WC_SHA512_PAD_SIZE SHA512_PAD_SIZE
#ifdef WOLFSSL_SHA512
#define wc_Sha512 Sha512
#define WC_SHA512 SHA512
#define WC_SHA512_BLOCK_SIZE SHA512_BLOCK_SIZE
#define WC_SHA512_DIGEST_SIZE SHA512_DIGEST_SIZE
#define WC_SHA512_PAD_SIZE SHA512_PAD_SIZE
#endif /* WOLFSSL_SHA512 */
#ifdef WOLFSSL_SHA384
#define wc_Sha384 Sha384
#define WC_SHA384 SHA384
@ -79,6 +81,8 @@
#define SHA512_NOINLINE
#endif
#ifdef WOLFSSL_SHA512
#if !defined(NO_OLD_SHA_NAMES)
#define SHA512 WC_SHA512
#endif
@ -90,9 +94,13 @@
#define SHA512_PAD_SIZE WC_SHA512_PAD_SIZE
#endif
#endif /* WOLFSSL_SHA512 */
/* in bytes */
enum {
#ifdef WOLFSSL_SHA512
WC_SHA512 = WC_HASH_TYPE_SHA512,
#endif
WC_SHA512_BLOCK_SIZE = 128,
WC_SHA512_DIGEST_SIZE = 64,
WC_SHA512_PAD_SIZE = 112
@ -124,6 +132,8 @@ typedef struct wc_Sha512 {
#endif /* HAVE_FIPS */
#ifdef WOLFSSL_SHA512
WOLFSSL_API int wc_InitSha512(wc_Sha512*);
WOLFSSL_API int wc_InitSha512_ex(wc_Sha512*, void*, int);
WOLFSSL_API int wc_Sha512Update(wc_Sha512*, const byte*, word32);
@ -134,6 +144,8 @@ WOLFSSL_API void wc_Sha512Free(wc_Sha512*);
WOLFSSL_API int wc_Sha512GetHash(wc_Sha512*, byte*);
WOLFSSL_API int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst);
#endif /* WOLFSSL_SHA512 */
#if defined(WOLFSSL_SHA384)
/* avoid redefinition of structs */
@ -179,6 +191,6 @@ WOLFSSL_API int wc_Sha384Copy(wc_Sha384* src, wc_Sha384* dst);
} /* extern "C" */
#endif
#endif /* WOLFSSL_SHA512 */
#endif /* WOLFSSL_SHA512 || WOLFSSL_SHA384 */
#endif /* WOLF_CRYPT_SHA512_H */