Refactor unqiue hash types to use same internal values (ex WC_MD5 == WC_HASH_TYPE_MD5). Refactor the Sha3 types to use wc_ naming.

This commit is contained in:
David Garske
2018-03-30 10:50:58 -07:00
parent 264496567a
commit c83e63853d
19 changed files with 422 additions and 316 deletions

View File

@@ -4623,7 +4623,7 @@ static int test_wc_InitSha3 (void)
{ {
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) #if defined(WOLFSSL_SHA3)
Sha3 sha3; wc_Sha3 sha3;
#if !defined(WOLFSSL_NOSHA3_224) #if !defined(WOLFSSL_NOSHA3_224)
printf(testingFmt, "wc_InitSha3_224()"); printf(testingFmt, "wc_InitSha3_224()");
@@ -4710,7 +4710,7 @@ static int testing_wc_Sha3_Update (void)
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) #if defined(WOLFSSL_SHA3)
Sha3 sha3; wc_Sha3 sha3;
byte msg[] = "Everybody's working for the weekend."; byte msg[] = "Everybody's working for the weekend.";
byte msg2[] = "Everybody gets Friday off."; byte msg2[] = "Everybody gets Friday off.";
byte msgCmp[] = "\x45\x76\x65\x72\x79\x62\x6f\x64\x79\x27\x73\x20" byte msgCmp[] = "\x45\x76\x65\x72\x79\x62\x6f\x64\x79\x27\x73\x20"
@@ -4908,14 +4908,14 @@ static int test_wc_Sha3_224_Final (void)
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
Sha3 sha3; wc_Sha3 sha3;
const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom" const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom"
"nopnopq"; "nopnopq";
const char* expOut = "\x8a\x24\x10\x8b\x15\x4a\xda\x21\xc9\xfd\x55" const char* expOut = "\x8a\x24\x10\x8b\x15\x4a\xda\x21\xc9\xfd\x55"
"\x74\x49\x44\x79\xba\x5c\x7e\x7a\xb7\x6e\xf2" "\x74\x49\x44\x79\xba\x5c\x7e\x7a\xb7\x6e\xf2"
"\x64\xea\xd0\xfc\xce\x33"; "\x64\xea\xd0\xfc\xce\x33";
byte hash[SHA3_224_DIGEST_SIZE]; byte hash[WC_SHA3_224_DIGEST_SIZE];
byte hashRet[SHA3_224_DIGEST_SIZE]; byte hashRet[WC_SHA3_224_DIGEST_SIZE];
/* Init stack variables. */ /* Init stack variables. */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
@@ -4930,7 +4930,7 @@ static int test_wc_Sha3_224_Final (void)
ret= wc_Sha3_224_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg)); ret= wc_Sha3_224_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg));
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_224_Final(&sha3, hash); ret = wc_Sha3_224_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(expOut, hash, SHA3_224_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(expOut, hash, WC_SHA3_224_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -4967,7 +4967,7 @@ static int test_wc_Sha3_224_Final (void)
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_224_Final(&sha3, hash); ret = wc_Sha3_224_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(hash, hashRet, SHA3_224_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(hash, hashRet, WC_SHA3_224_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -5001,14 +5001,14 @@ static int test_wc_Sha3_256_Final (void)
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
Sha3 sha3; wc_Sha3 sha3;
const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom" const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom"
"nopnopq"; "nopnopq";
const char* expOut = "\x41\xc0\xdb\xa2\xa9\xd6\x24\x08\x49\x10\x03\x76\xa8" const char* expOut = "\x41\xc0\xdb\xa2\xa9\xd6\x24\x08\x49\x10\x03\x76\xa8"
"\x23\x5e\x2c\x82\xe1\xb9\x99\x8a\x99\x9e\x21\xdb\x32" "\x23\x5e\x2c\x82\xe1\xb9\x99\x8a\x99\x9e\x21\xdb\x32"
"\xdd\x97\x49\x6d\x33\x76"; "\xdd\x97\x49\x6d\x33\x76";
byte hash[SHA3_256_DIGEST_SIZE]; byte hash[WC_SHA3_256_DIGEST_SIZE];
byte hashRet[SHA3_256_DIGEST_SIZE]; byte hashRet[WC_SHA3_256_DIGEST_SIZE];
/* Init stack variables. */ /* Init stack variables. */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
@@ -5023,7 +5023,7 @@ static int test_wc_Sha3_256_Final (void)
ret= wc_Sha3_256_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg)); ret= wc_Sha3_256_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg));
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_256_Final(&sha3, hash); ret = wc_Sha3_256_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(expOut, hash, SHA3_256_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(expOut, hash, WC_SHA3_256_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -5057,7 +5057,7 @@ static int test_wc_Sha3_256_Final (void)
} }
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_256_Final(&sha3, hash); ret = wc_Sha3_256_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(hash, hashRet, SHA3_256_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(hash, hashRet, WC_SHA3_256_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -5091,15 +5091,15 @@ static int test_wc_Sha3_384_Final (void)
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
Sha3 sha3; wc_Sha3 sha3;
const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom" const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom"
"nopnopq"; "nopnopq";
const char* expOut = "\x99\x1c\x66\x57\x55\xeb\x3a\x4b\x6b\xbd\xfb\x75\xc7" const char* expOut = "\x99\x1c\x66\x57\x55\xeb\x3a\x4b\x6b\xbd\xfb\x75\xc7"
"\x8a\x49\x2e\x8c\x56\xa2\x2c\x5c\x4d\x7e\x42\x9b\xfd" "\x8a\x49\x2e\x8c\x56\xa2\x2c\x5c\x4d\x7e\x42\x9b\xfd"
"\xbc\x32\xb9\xd4\xad\x5a\xa0\x4a\x1f\x07\x6e\x62\xfe" "\xbc\x32\xb9\xd4\xad\x5a\xa0\x4a\x1f\x07\x6e\x62\xfe"
"\xa1\x9e\xef\x51\xac\xd0\x65\x7c\x22"; "\xa1\x9e\xef\x51\xac\xd0\x65\x7c\x22";
byte hash[SHA3_384_DIGEST_SIZE]; byte hash[WC_SHA3_384_DIGEST_SIZE];
byte hashRet[SHA3_384_DIGEST_SIZE]; byte hashRet[WC_SHA3_384_DIGEST_SIZE];
/* Init stack variables. */ /* Init stack variables. */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
@@ -5114,7 +5114,7 @@ static int test_wc_Sha3_384_Final (void)
ret= wc_Sha3_384_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg)); ret= wc_Sha3_384_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg));
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_384_Final(&sha3, hash); ret = wc_Sha3_384_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(expOut, hash, SHA3_384_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(expOut, hash, WC_SHA3_384_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -5148,7 +5148,7 @@ static int test_wc_Sha3_384_Final (void)
} }
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_384_Final(&sha3, hash); ret = wc_Sha3_384_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(hash, hashRet, SHA3_384_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(hash, hashRet, WC_SHA3_384_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -5183,7 +5183,7 @@ static int test_wc_Sha3_512_Final (void)
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
Sha3 sha3; wc_Sha3 sha3;
const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom" const char* msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnom"
"nopnopq"; "nopnopq";
const char* expOut = "\x04\xa3\x71\xe8\x4e\xcf\xb5\xb8\xb7\x7c\xb4\x86\x10" const char* expOut = "\x04\xa3\x71\xe8\x4e\xcf\xb5\xb8\xb7\x7c\xb4\x86\x10"
@@ -5191,8 +5191,8 @@ static int test_wc_Sha3_512_Final (void)
"\xec\x2f\x1e\x91\x63\x6d\xee\x69\x1f\xbe\x0c\x98\x53" "\xec\x2f\x1e\x91\x63\x6d\xee\x69\x1f\xbe\x0c\x98\x53"
"\x02\xba\x1b\x0d\x8d\xc7\x8c\x08\x63\x46\xb5\x33\xb4" "\x02\xba\x1b\x0d\x8d\xc7\x8c\x08\x63\x46\xb5\x33\xb4"
"\x9c\x03\x0d\x99\xa2\x7d\xaf\x11\x39\xd6\xe7\x5e"; "\x9c\x03\x0d\x99\xa2\x7d\xaf\x11\x39\xd6\xe7\x5e";
byte hash[SHA3_512_DIGEST_SIZE]; byte hash[WC_SHA3_512_DIGEST_SIZE];
byte hashRet[SHA3_512_DIGEST_SIZE]; byte hashRet[WC_SHA3_512_DIGEST_SIZE];
/* Init stack variables. */ /* Init stack variables. */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
@@ -5207,7 +5207,7 @@ static int test_wc_Sha3_512_Final (void)
ret= wc_Sha3_512_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg)); ret= wc_Sha3_512_Update(&sha3, (byte*)msg, (word32)XSTRLEN(msg));
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_512_Final(&sha3, hash); ret = wc_Sha3_512_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(expOut, hash, SHA3_512_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(expOut, hash, WC_SHA3_512_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -5241,7 +5241,7 @@ static int test_wc_Sha3_512_Final (void)
} }
if (ret == 0) { if (ret == 0) {
ret = wc_Sha3_512_Final(&sha3, hash); ret = wc_Sha3_512_Final(&sha3, hash);
if (ret == 0 && XMEMCMP(hash, hashRet, SHA3_512_DIGEST_SIZE) != 0) { if (ret == 0 && XMEMCMP(hash, hashRet, WC_SHA3_512_DIGEST_SIZE) != 0) {
ret = WOLFSSL_FATAL_ERROR; ret = WOLFSSL_FATAL_ERROR;
} }
} }
@@ -5274,11 +5274,11 @@ static int test_wc_Sha3_224_Copy (void)
{ {
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
Sha3 sha3, sha3Cpy; wc_Sha3 sha3, sha3Cpy;
const char* msg = "Everyone gets Friday off."; const char* msg = "Everyone gets Friday off.";
word32 msglen = (word32)XSTRLEN(msg); word32 msglen = (word32)XSTRLEN(msg);
byte hash[SHA3_224_DIGEST_SIZE]; byte hash[WC_SHA3_224_DIGEST_SIZE];
byte hashCpy[SHA3_224_DIGEST_SIZE]; byte hashCpy[WC_SHA3_224_DIGEST_SIZE];
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
XMEMSET(hashCpy, 0, sizeof(hashCpy)); XMEMSET(hashCpy, 0, sizeof(hashCpy));
@@ -5339,11 +5339,11 @@ static int test_wc_Sha3_256_Copy (void)
{ {
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
Sha3 sha3, sha3Cpy; wc_Sha3 sha3, sha3Cpy;
const char* msg = "Everyone gets Friday off."; const char* msg = "Everyone gets Friday off.";
word32 msglen = (word32)XSTRLEN(msg); word32 msglen = (word32)XSTRLEN(msg);
byte hash[SHA3_256_DIGEST_SIZE]; byte hash[WC_SHA3_256_DIGEST_SIZE];
byte hashCpy[SHA3_256_DIGEST_SIZE]; byte hashCpy[WC_SHA3_256_DIGEST_SIZE];
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
XMEMSET(hashCpy, 0, sizeof(hashCpy)); XMEMSET(hashCpy, 0, sizeof(hashCpy));
@@ -5404,11 +5404,11 @@ static int test_wc_Sha3_384_Copy (void)
{ {
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
Sha3 sha3, sha3Cpy; wc_Sha3 sha3, sha3Cpy;
const char* msg = "Everyone gets Friday off."; const char* msg = "Everyone gets Friday off.";
word32 msglen = (word32)XSTRLEN(msg); word32 msglen = (word32)XSTRLEN(msg);
byte hash[SHA3_384_DIGEST_SIZE]; byte hash[WC_SHA3_384_DIGEST_SIZE];
byte hashCpy[SHA3_384_DIGEST_SIZE]; byte hashCpy[WC_SHA3_384_DIGEST_SIZE];
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
XMEMSET(hashCpy, 0, sizeof(hashCpy)); XMEMSET(hashCpy, 0, sizeof(hashCpy));
@@ -5469,11 +5469,11 @@ static int test_wc_Sha3_512_Copy (void)
int ret = 0; int ret = 0;
#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512) #if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
Sha3 sha3, sha3Cpy; wc_Sha3 sha3, sha3Cpy;
const char* msg = "Everyone gets Friday off."; const char* msg = "Everyone gets Friday off.";
word32 msglen = (word32)XSTRLEN(msg); word32 msglen = (word32)XSTRLEN(msg);
byte hash[SHA3_512_DIGEST_SIZE]; byte hash[WC_SHA3_512_DIGEST_SIZE];
byte hashCpy[SHA3_512_DIGEST_SIZE]; byte hashCpy[WC_SHA3_512_DIGEST_SIZE];
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
XMEMSET(hashCpy, 0, sizeof(hashCpy)); XMEMSET(hashCpy, 0, sizeof(hashCpy));

View File

@@ -2944,10 +2944,10 @@ exit:
#ifndef WOLFSSL_NOSHA3_224 #ifndef WOLFSSL_NOSHA3_224
void bench_sha3_224(int doAsync) void bench_sha3_224(int doAsync)
{ {
Sha3 hash[BENCH_MAX_PENDING]; wc_Sha3 hash[BENCH_MAX_PENDING];
double start; double start;
int ret = 0, i, count = 0, times, pending = 0; int ret = 0, i, count = 0, times, pending = 0;
DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, SHA3_224_DIGEST_SIZE, HEAP_HINT); DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_224_DIGEST_SIZE, HEAP_HINT);
/* clear for done cleanup */ /* clear for done cleanup */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
@@ -3024,10 +3024,10 @@ exit:
#ifndef WOLFSSL_NOSHA3_256 #ifndef WOLFSSL_NOSHA3_256
void bench_sha3_256(int doAsync) void bench_sha3_256(int doAsync)
{ {
Sha3 hash[BENCH_MAX_PENDING]; wc_Sha3 hash[BENCH_MAX_PENDING];
double start; double start;
int ret = 0, i, count = 0, times, pending = 0; int ret = 0, i, count = 0, times, pending = 0;
DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, SHA3_256_DIGEST_SIZE, HEAP_HINT); DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_256_DIGEST_SIZE, HEAP_HINT);
/* clear for done cleanup */ /* clear for done cleanup */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
@@ -3104,10 +3104,10 @@ exit:
#ifndef WOLFSSL_NOSHA3_384 #ifndef WOLFSSL_NOSHA3_384
void bench_sha3_384(int doAsync) void bench_sha3_384(int doAsync)
{ {
Sha3 hash[BENCH_MAX_PENDING]; wc_Sha3 hash[BENCH_MAX_PENDING];
double start; double start;
int ret = 0, i, count = 0, times, pending = 0; int ret = 0, i, count = 0, times, pending = 0;
DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, SHA3_384_DIGEST_SIZE, HEAP_HINT); DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_384_DIGEST_SIZE, HEAP_HINT);
/* clear for done cleanup */ /* clear for done cleanup */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));
@@ -3184,10 +3184,10 @@ exit:
#ifndef WOLFSSL_NOSHA3_512 #ifndef WOLFSSL_NOSHA3_512
void bench_sha3_512(int doAsync) void bench_sha3_512(int doAsync)
{ {
Sha3 hash[BENCH_MAX_PENDING]; wc_Sha3 hash[BENCH_MAX_PENDING];
double start; double start;
int ret = 0, i, count = 0, times, pending = 0; int ret = 0, i, count = 0, times, pending = 0;
DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, SHA3_512_DIGEST_SIZE, HEAP_HINT); DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_512_DIGEST_SIZE, HEAP_HINT);
/* clear for done cleanup */ /* clear for done cleanup */
XMEMSET(hash, 0, sizeof(hash)); XMEMSET(hash, 0, sizeof(hash));

View File

@@ -92,6 +92,11 @@ int wc_HashGetOID(enum wc_HashType hash_type)
/* Not Supported */ /* Not Supported */
case WC_HASH_TYPE_MD4: case WC_HASH_TYPE_MD4:
case WC_HASH_TYPE_SHA3_224:
case WC_HASH_TYPE_SHA3_256:
case WC_HASH_TYPE_SHA3_384:
case WC_HASH_TYPE_SHA3_512:
case WC_HASH_TYPE_BLAKE2B:
case WC_HASH_TYPE_NONE: case WC_HASH_TYPE_NONE:
default: default:
oid = BAD_FUNC_ARG; oid = BAD_FUNC_ARG;
@@ -107,45 +112,75 @@ int wc_HashGetDigestSize(enum wc_HashType hash_type)
int dig_size = HASH_TYPE_E; /* Default to hash type error */ int dig_size = HASH_TYPE_E; /* Default to hash type error */
switch(hash_type) switch(hash_type)
{ {
case WC_HASH_TYPE_MD2:
#ifdef WOLFSSL_MD2
dig_size = MD2_DIGEST_SIZE;
#endif
break;
case WC_HASH_TYPE_MD4:
#ifndef NO_MD4
dig_size = MD4_DIGEST_SIZE;
#endif
break;
case WC_HASH_TYPE_MD5: case WC_HASH_TYPE_MD5:
#ifndef NO_MD5 #ifndef NO_MD5
dig_size = WC_MD5_DIGEST_SIZE; dig_size = WC_MD5_DIGEST_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA: case WC_HASH_TYPE_SHA:
#ifndef NO_SHA #ifndef NO_SHA
dig_size = WC_SHA_DIGEST_SIZE; dig_size = WC_SHA_DIGEST_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA224: case WC_HASH_TYPE_SHA224:
#ifdef WOLFSSL_SHA224 #ifdef WOLFSSL_SHA224
dig_size = WC_SHA224_DIGEST_SIZE; dig_size = WC_SHA224_DIGEST_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA256: case WC_HASH_TYPE_SHA256:
#ifndef NO_SHA256 #ifndef NO_SHA256
dig_size = WC_SHA256_DIGEST_SIZE; dig_size = WC_SHA256_DIGEST_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA384: case WC_HASH_TYPE_SHA384:
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384) #if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384)
dig_size = WC_SHA384_DIGEST_SIZE; dig_size = WC_SHA384_DIGEST_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA512: case WC_HASH_TYPE_SHA512:
#ifdef WOLFSSL_SHA512 #ifdef WOLFSSL_SHA512
dig_size = WC_SHA512_DIGEST_SIZE; dig_size = WC_SHA512_DIGEST_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_MD5_SHA: case WC_HASH_TYPE_MD5_SHA: /* Old TLS Specific */
#if !defined(NO_MD5) && !defined(NO_SHA) #if !defined(NO_MD5) && !defined(NO_SHA)
dig_size = WC_MD5_DIGEST_SIZE + WC_SHA_DIGEST_SIZE; dig_size = WC_MD5_DIGEST_SIZE + WC_SHA_DIGEST_SIZE;
#endif #endif
break;
case WC_HASH_TYPE_SHA3_224:
#ifdef WOLFSSL_SHA3
dig_size = WC_SHA3_224_DIGEST_SIZE;
#endif
break;
case WC_HASH_TYPE_SHA3_256:
#ifdef WOLFSSL_SHA3
dig_size = WC_SHA3_256_DIGEST_SIZE;
#endif
break;
case WC_HASH_TYPE_SHA3_384:
#ifdef WOLFSSL_SHA3
dig_size = WC_SHA3_384_DIGEST_SIZE;
#endif
break;
case WC_HASH_TYPE_SHA3_512:
#ifdef WOLFSSL_SHA3
dig_size = WC_SHA3_512_DIGEST_SIZE;
#endif
break; break;
/* Not Supported */ /* Not Supported */
case WC_HASH_TYPE_MD2: case WC_HASH_TYPE_BLAKE2B:
case WC_HASH_TYPE_MD4:
case WC_HASH_TYPE_NONE: case WC_HASH_TYPE_NONE:
default: default:
dig_size = BAD_FUNC_ARG; dig_size = BAD_FUNC_ARG;
@@ -161,41 +196,75 @@ int wc_HashGetBlockSize(enum wc_HashType hash_type)
int block_size = HASH_TYPE_E; /* Default to hash type error */ int block_size = HASH_TYPE_E; /* Default to hash type error */
switch (hash_type) switch (hash_type)
{ {
case WC_HASH_TYPE_MD2:
#ifdef WOLFSSL_MD2
block_size = MD2_BLOCK_SIZE;
#endif
break;
case WC_HASH_TYPE_MD4:
#ifndef NO_MD4
block_size = MD4_BLOCK_SIZE;
#endif
break;
case WC_HASH_TYPE_MD5: case WC_HASH_TYPE_MD5:
#ifndef NO_MD5 #ifndef NO_MD5
block_size = WC_MD5_BLOCK_SIZE; block_size = WC_MD5_BLOCK_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA: case WC_HASH_TYPE_SHA:
#ifndef NO_SHA #ifndef NO_SHA
block_size = WC_SHA_BLOCK_SIZE; block_size = WC_SHA_BLOCK_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA224: case WC_HASH_TYPE_SHA224:
#ifdef WOLFSSL_SHA224 #ifdef WOLFSSL_SHA224
block_size = WC_SHA224_BLOCK_SIZE; block_size = WC_SHA224_BLOCK_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA256: case WC_HASH_TYPE_SHA256:
#ifndef NO_SHA256 #ifndef NO_SHA256
block_size = WC_SHA256_BLOCK_SIZE; block_size = WC_SHA256_BLOCK_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA384: case WC_HASH_TYPE_SHA384:
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384) #if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384)
block_size = WC_SHA384_BLOCK_SIZE; block_size = WC_SHA384_BLOCK_SIZE;
#endif #endif
break; break;
case WC_HASH_TYPE_SHA512: case WC_HASH_TYPE_SHA512:
#ifdef WOLFSSL_SHA512 #ifdef WOLFSSL_SHA512
block_size = WC_SHA512_BLOCK_SIZE; block_size = WC_SHA512_BLOCK_SIZE;
#endif #endif
break;
case WC_HASH_TYPE_MD5_SHA: /* Old TLS Specific */
#if !defined(NO_MD5) && !defined(NO_SHA)
block_size = WC_MD5_BLOCK_SIZE + WC_SHA_BLOCK_SIZE;
#endif
break;
case WC_HASH_TYPE_SHA3_224:
#ifdef WOLFSSL_SHA3
block_size = WC_SHA3_224_BLOCK_SIZE;
#endif
break;
case WC_HASH_TYPE_SHA3_256:
#ifdef WOLFSSL_SHA3
block_size = WC_SHA3_256_BLOCK_SIZE;
#endif
break;
case WC_HASH_TYPE_SHA3_384:
#ifdef WOLFSSL_SHA3
block_size = WC_SHA3_384_BLOCK_SIZE;
#endif
break;
case WC_HASH_TYPE_SHA3_512:
#ifdef WOLFSSL_SHA3
block_size = WC_SHA3_512_BLOCK_SIZE;
#endif
break; break;
/* Not Supported */ /* Not Supported */
case WC_HASH_TYPE_MD5_SHA: case WC_HASH_TYPE_BLAKE2B:
case WC_HASH_TYPE_MD2:
case WC_HASH_TYPE_MD4:
case WC_HASH_TYPE_NONE: case WC_HASH_TYPE_NONE:
default: default:
block_size = BAD_FUNC_ARG; block_size = BAD_FUNC_ARG;
@@ -267,6 +336,11 @@ int wc_Hash(enum wc_HashType hash_type, const byte* data,
/* Not Supported */ /* Not Supported */
case WC_HASH_TYPE_MD2: case WC_HASH_TYPE_MD2:
case WC_HASH_TYPE_MD4: case WC_HASH_TYPE_MD4:
case WC_HASH_TYPE_SHA3_224:
case WC_HASH_TYPE_SHA3_256:
case WC_HASH_TYPE_SHA3_384:
case WC_HASH_TYPE_SHA3_512:
case WC_HASH_TYPE_BLAKE2B:
case WC_HASH_TYPE_NONE: case WC_HASH_TYPE_NONE:
default: default:
ret = BAD_FUNC_ARG; ret = BAD_FUNC_ARG;
@@ -319,6 +393,11 @@ int wc_HashInit(wc_HashAlg* hash, enum wc_HashType type)
case WC_HASH_TYPE_MD5_SHA: case WC_HASH_TYPE_MD5_SHA:
case WC_HASH_TYPE_MD2: case WC_HASH_TYPE_MD2:
case WC_HASH_TYPE_MD4: case WC_HASH_TYPE_MD4:
case WC_HASH_TYPE_SHA3_224:
case WC_HASH_TYPE_SHA3_256:
case WC_HASH_TYPE_SHA3_384:
case WC_HASH_TYPE_SHA3_512:
case WC_HASH_TYPE_BLAKE2B:
case WC_HASH_TYPE_NONE: case WC_HASH_TYPE_NONE:
default: default:
ret = BAD_FUNC_ARG; ret = BAD_FUNC_ARG;
@@ -374,6 +453,11 @@ int wc_HashUpdate(wc_HashAlg* hash, enum wc_HashType type, const byte* data,
case WC_HASH_TYPE_MD5_SHA: case WC_HASH_TYPE_MD5_SHA:
case WC_HASH_TYPE_MD2: case WC_HASH_TYPE_MD2:
case WC_HASH_TYPE_MD4: case WC_HASH_TYPE_MD4:
case WC_HASH_TYPE_SHA3_224:
case WC_HASH_TYPE_SHA3_256:
case WC_HASH_TYPE_SHA3_384:
case WC_HASH_TYPE_SHA3_512:
case WC_HASH_TYPE_BLAKE2B:
case WC_HASH_TYPE_NONE: case WC_HASH_TYPE_NONE:
default: default:
ret = BAD_FUNC_ARG; ret = BAD_FUNC_ARG;
@@ -426,6 +510,11 @@ int wc_HashFinal(wc_HashAlg* hash, enum wc_HashType type, byte* out)
case WC_HASH_TYPE_MD5_SHA: case WC_HASH_TYPE_MD5_SHA:
case WC_HASH_TYPE_MD2: case WC_HASH_TYPE_MD2:
case WC_HASH_TYPE_MD4: case WC_HASH_TYPE_MD4:
case WC_HASH_TYPE_SHA3_224:
case WC_HASH_TYPE_SHA3_256:
case WC_HASH_TYPE_SHA3_384:
case WC_HASH_TYPE_SHA3_512:
case WC_HASH_TYPE_BLAKE2B:
case WC_HASH_TYPE_NONE: case WC_HASH_TYPE_NONE:
default: default:
ret = BAD_FUNC_ARG; ret = BAD_FUNC_ARG;

View File

@@ -450,7 +450,7 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
#ifdef WOLFSSL_SHA3 #ifdef WOLFSSL_SHA3
case WC_SHA3_224: case WC_SHA3_224:
hmac_block_size = WC_SHA3_224_BLOCK_SIZE; hmac_block_size = WC_SHA3_224_BLOCK_SIZE;
if (length <= SHA3_224_DIGEST_SIZE) { if (length <= WC_SHA3_224_DIGEST_SIZE) {
if (key != NULL) { if (key != NULL) {
XMEMCPY(ip, key, length); XMEMCPY(ip, key, length);
} }
@@ -463,12 +463,12 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
if (ret != 0) if (ret != 0)
break; break;
length = SHA3_224_DIGEST_SIZE; length = WC_SHA3_224_DIGEST_SIZE;
} }
break; break;
case WC_SHA3_256: case WC_SHA3_256:
hmac_block_size = WC_SHA3_256_BLOCK_SIZE; hmac_block_size = WC_SHA3_256_BLOCK_SIZE;
if (length <= SHA3_256_DIGEST_SIZE) { if (length <= WC_SHA3_256_DIGEST_SIZE) {
if (key != NULL) { if (key != NULL) {
XMEMCPY(ip, key, length); XMEMCPY(ip, key, length);
} }
@@ -481,12 +481,12 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
if (ret != 0) if (ret != 0)
break; break;
length = SHA3_256_DIGEST_SIZE; length = WC_SHA3_256_DIGEST_SIZE;
} }
break; break;
case WC_SHA3_384: case WC_SHA3_384:
hmac_block_size = WC_SHA3_384_BLOCK_SIZE; hmac_block_size = WC_SHA3_384_BLOCK_SIZE;
if (length <= SHA3_384_DIGEST_SIZE) { if (length <= WC_SHA3_384_DIGEST_SIZE) {
if (key != NULL) { if (key != NULL) {
XMEMCPY(ip, key, length); XMEMCPY(ip, key, length);
} }
@@ -499,12 +499,12 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
if (ret != 0) if (ret != 0)
break; break;
length = SHA3_384_DIGEST_SIZE; length = WC_SHA3_384_DIGEST_SIZE;
} }
break; break;
case WC_SHA3_512: case WC_SHA3_512:
hmac_block_size = WC_SHA3_512_BLOCK_SIZE; hmac_block_size = WC_SHA3_512_BLOCK_SIZE;
if (length <= SHA3_512_DIGEST_SIZE) { if (length <= WC_SHA3_512_DIGEST_SIZE) {
if (key != NULL) { if (key != NULL) {
XMEMCPY(ip, key, length); XMEMCPY(ip, key, length);
} }
@@ -517,7 +517,7 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
if (ret != 0) if (ret != 0)
break; break;
length = SHA3_512_DIGEST_SIZE; length = WC_SHA3_512_DIGEST_SIZE;
} }
break; break;
#endif /* WOLFSSL_SHA3 */ #endif /* WOLFSSL_SHA3 */
@@ -899,7 +899,7 @@ int wc_HmacFinal(Hmac* hmac, byte* hash)
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_224_Update(&hmac->hash.sha3, (byte*)hmac->innerHash, ret = wc_Sha3_224_Update(&hmac->hash.sha3, (byte*)hmac->innerHash,
SHA3_224_DIGEST_SIZE); WC_SHA3_224_DIGEST_SIZE);
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_224_Final(&hmac->hash.sha3, hash); ret = wc_Sha3_224_Final(&hmac->hash.sha3, hash);
@@ -913,7 +913,7 @@ int wc_HmacFinal(Hmac* hmac, byte* hash)
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_256_Update(&hmac->hash.sha3, (byte*)hmac->innerHash, ret = wc_Sha3_256_Update(&hmac->hash.sha3, (byte*)hmac->innerHash,
SHA3_256_DIGEST_SIZE); WC_SHA3_256_DIGEST_SIZE);
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_256_Final(&hmac->hash.sha3, hash); ret = wc_Sha3_256_Final(&hmac->hash.sha3, hash);
@@ -927,7 +927,7 @@ int wc_HmacFinal(Hmac* hmac, byte* hash)
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_384_Update(&hmac->hash.sha3, (byte*)hmac->innerHash, ret = wc_Sha3_384_Update(&hmac->hash.sha3, (byte*)hmac->innerHash,
SHA3_384_DIGEST_SIZE); WC_SHA3_384_DIGEST_SIZE);
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_384_Final(&hmac->hash.sha3, hash); ret = wc_Sha3_384_Final(&hmac->hash.sha3, hash);
@@ -941,7 +941,7 @@ int wc_HmacFinal(Hmac* hmac, byte* hash)
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_512_Update(&hmac->hash.sha3, (byte*)hmac->innerHash, ret = wc_Sha3_512_Update(&hmac->hash.sha3, (byte*)hmac->innerHash,
SHA3_512_DIGEST_SIZE); WC_SHA3_512_DIGEST_SIZE);
if (ret != 0) if (ret != 0)
break; break;
ret = wc_Sha3_512_Final(&hmac->hash.sha3, hash); ret = wc_Sha3_512_Final(&hmac->hash.sha3, hash);

View File

@@ -44,7 +44,7 @@
* heap memory heap hint to use * heap memory heap hint to use
* devId used for async operations (currently not supported here) * devId used for async operations (currently not supported here)
*/ */
int wc_InitSha3_384(Sha3* sha, void* heap, int devId) int wc_InitSha3_384(wc_Sha3* sha, void* heap, int devId)
{ {
XCsuDma_Config* con; XCsuDma_Config* con;
@@ -80,7 +80,7 @@ int wc_InitSha3_384(Sha3* sha, void* heap, int devId)
* data message to update SHA3 state with * data message to update SHA3 state with
* len length of data buffer * len length of data buffer
*/ */
int wc_Sha3_384_Update(Sha3* sha, const byte* data, word32 len) int wc_Sha3_384_Update(wc_Sha3* sha, const byte* data, word32 len)
{ {
if (sha == NULL || (data == NULL && len > 0)) { if (sha == NULL || (data == NULL && len > 0)) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
@@ -96,7 +96,7 @@ int wc_Sha3_384_Update(Sha3* sha, const byte* data, word32 len)
* sha SHA3 structure to get hash * sha SHA3 structure to get hash
* out digest out, expected to be large enough to hold SHA3 digest * out digest out, expected to be large enough to hold SHA3 digest
*/ */
int wc_Sha3_384_Final(Sha3* sha, byte* out) int wc_Sha3_384_Final(wc_Sha3* sha, byte* out)
{ {
if (sha == NULL || out == NULL) { if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
@@ -111,7 +111,7 @@ int wc_Sha3_384_Final(Sha3* sha, byte* out)
* *
* sha SHA3 structure to free * sha SHA3 structure to free
*/ */
void wc_Sha3_384_Free(Sha3* sha) void wc_Sha3_384_Free(wc_Sha3* sha)
{ {
(void)sha; (void)sha;
/* nothing to free yet */ /* nothing to free yet */
@@ -123,9 +123,9 @@ void wc_Sha3_384_Free(Sha3* sha)
* sha SHA3 structure to get hash * sha SHA3 structure to get hash
* out digest out, expected to be large enough to hold SHA3 digest * out digest out, expected to be large enough to hold SHA3 digest
*/ */
int wc_Sha3_384_GetHash(Sha3* sha, byte* out) int wc_Sha3_384_GetHash(wc_Sha3* sha, byte* out)
{ {
Sha3 s; wc_Sha3 s;
if (sha == NULL || out == NULL) { if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
@@ -145,13 +145,13 @@ int wc_Sha3_384_GetHash(Sha3* sha, byte* out)
* src SHA3 structure to make copy of * src SHA3 structure to make copy of
* dst [out]structure to hold copy * dst [out]structure to hold copy
*/ */
int wc_Sha3_384_Copy(Sha3* src, Sha3* dst) int wc_Sha3_384_Copy(wc_Sha3* src, wc_Sha3* dst)
{ {
if (src == NULL || dst== NULL) { if (src == NULL || dst== NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
XMEMCPY((byte*)dst, (byte*)src, sizeof(Sha3)); XMEMCPY((byte*)dst, (byte*)src, sizeof(wc_Sha3));
return 0; return 0;
} }

View File

@@ -34,7 +34,7 @@
/* fips wrapper calls, user can call direct */ /* fips wrapper calls, user can call direct */
#ifdef HAVE_FIPS #ifdef HAVE_FIPS
int wc_InitSha3_224(Sha3* sha, void* heap, int devId) int wc_InitSha3_224(wc_Sha3* sha, void* heap, int devId)
{ {
(void)heap; (void)heap;
(void)devId; (void)devId;
@@ -43,27 +43,27 @@
} }
return InitSha3_224_fips(sha); return InitSha3_224_fips(sha);
} }
int wc_Sha3_224_Update(Sha3* sha, const byte* data, word32 len) int wc_Sha3_224_Update(wc_Sha3* sha, const byte* data, word32 len)
{ {
if (sha == NULL || (data == NULL && len > 0)) { if (sha == NULL || (data == NULL && len > 0)) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_224_Update_fips(sha, data, len); return Sha3_224_Update_fips(sha, data, len);
} }
int wc_Sha3_224_Final(Sha3* sha, byte* out) int wc_Sha3_224_Final(wc_Sha3* sha, byte* out)
{ {
if (sha == NULL || out == NULL) { if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_224_Final_fips(sha, out); return Sha3_224_Final_fips(sha, out);
} }
void wc_Sha3_224_Free(Sha3* sha) void wc_Sha3_224_Free(wc_Sha3* sha)
{ {
(void)sha; (void)sha;
/* Not supported in FIPS */ /* Not supported in FIPS */
} }
int wc_InitSha3_256(Sha3* sha, void* heap, int devId) int wc_InitSha3_256(wc_Sha3* sha, void* heap, int devId)
{ {
(void)heap; (void)heap;
(void)devId; (void)devId;
@@ -72,27 +72,27 @@
} }
return InitSha3_256_fips(sha); return InitSha3_256_fips(sha);
} }
int wc_Sha3_256_Update(Sha3* sha, const byte* data, word32 len) int wc_Sha3_256_Update(wc_Sha3* sha, const byte* data, word32 len)
{ {
if (sha == NULL || (data == NULL && len > 0)) { if (sha == NULL || (data == NULL && len > 0)) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_256_Update_fips(sha, data, len); return Sha3_256_Update_fips(sha, data, len);
} }
int wc_Sha3_256_Final(Sha3* sha, byte* out) int wc_Sha3_256_Final(wc_Sha3* sha, byte* out)
{ {
if (sha == NULL || out == NULL) { if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_256_Final_fips(sha, out); return Sha3_256_Final_fips(sha, out);
} }
void wc_Sha3_256_Free(Sha3* sha) void wc_Sha3_256_Free(wc_Sha3* sha)
{ {
(void)sha; (void)sha;
/* Not supported in FIPS */ /* Not supported in FIPS */
} }
int wc_InitSha3_384(Sha3* sha, void* heap, int devId) int wc_InitSha3_384(wc_Sha3* sha, void* heap, int devId)
{ {
(void)heap; (void)heap;
(void)devId; (void)devId;
@@ -101,27 +101,27 @@
} }
return InitSha3_384_fips(sha); return InitSha3_384_fips(sha);
} }
int wc_Sha3_384_Update(Sha3* sha, const byte* data, word32 len) int wc_Sha3_384_Update(wc_Sha3* sha, const byte* data, word32 len)
{ {
if (sha == NULL || (data == NULL && len > 0)) { if (sha == NULL || (data == NULL && len > 0)) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_384_Update_fips(sha, data, len); return Sha3_384_Update_fips(sha, data, len);
} }
int wc_Sha3_384_Final(Sha3* sha, byte* out) int wc_Sha3_384_Final(wc_Sha3* sha, byte* out)
{ {
if (sha == NULL || out == NULL) { if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_384_Final_fips(sha, out); return Sha3_384_Final_fips(sha, out);
} }
void wc_Sha3_384_Free(Sha3* sha) void wc_Sha3_384_Free(wc_Sha3* sha)
{ {
(void)sha; (void)sha;
/* Not supported in FIPS */ /* Not supported in FIPS */
} }
int wc_InitSha3_512(Sha3* sha, void* heap, int devId) int wc_InitSha3_512(wc_Sha3* sha, void* heap, int devId)
{ {
(void)heap; (void)heap;
(void)devId; (void)devId;
@@ -130,21 +130,21 @@
} }
return InitSha3_512_fips(sha); return InitSha3_512_fips(sha);
} }
int wc_Sha3_512_Update(Sha3* sha, const byte* data, word32 len) int wc_Sha3_512_Update(wc_Sha3* sha, const byte* data, word32 len)
{ {
if (sha == NULL || (data == NULL && len > 0)) { if (sha == NULL || (data == NULL && len > 0)) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_512_Update_fips(sha, data, len); return Sha3_512_Update_fips(sha, data, len);
} }
int wc_Sha3_512_Final(Sha3* sha, byte* out) int wc_Sha3_512_Final(wc_Sha3* sha, byte* out)
{ {
if (sha == NULL || out == NULL) { if (sha == NULL || out == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
return Sha3_512_Final_fips(sha, out); return Sha3_512_Final_fips(sha, out);
} }
void wc_Sha3_512_Free(Sha3* sha) void wc_Sha3_512_Free(wc_Sha3* sha)
{ {
(void)sha; (void)sha;
/* Not supported in FIPS */ /* Not supported in FIPS */
@@ -668,10 +668,10 @@ static word64 Load64BitBigEndian(const byte* a)
/* Initialize the state for a SHA3-224 hash operation. /* Initialize the state for a SHA3-224 hash operation.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* returns 0 on success. * returns 0 on success.
*/ */
static int InitSha3(Sha3* sha3) static int InitSha3(wc_Sha3* sha3)
{ {
int i; int i;
@@ -684,13 +684,13 @@ static int InitSha3(Sha3* sha3)
/* Update the SHA-3 hash state with message data. /* Update the SHA-3 hash state with message data.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* data Message data to be hashed. * data Message data to be hashed.
* len Length of the message data. * len Length of the message data.
* p Number of 64-bit numbers in a block of data to process. * p Number of 64-bit numbers in a block of data to process.
* returns 0 on success. * returns 0 on success.
*/ */
static int Sha3Update(Sha3* sha3, const byte* data, word32 len, byte p) static int Sha3Update(wc_Sha3* sha3, const byte* data, word32 len, byte p)
{ {
byte i; byte i;
byte l; byte l;
@@ -735,13 +735,13 @@ static int Sha3Update(Sha3* sha3, const byte* data, word32 len, byte p)
/* Calculate the SHA-3 hash based on all the message data seen. /* Calculate the SHA-3 hash based on all the message data seen.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. * hash Buffer to hold the hash result.
* p Number of 64-bit numbers in a block of data to process. * p Number of 64-bit numbers in a block of data to process.
* len Number of bytes in output. * len Number of bytes in output.
* returns 0 on success. * returns 0 on success.
*/ */
static int Sha3Final(Sha3* sha3, byte* hash, byte p, byte l) static int Sha3Final(wc_Sha3* sha3, byte* hash, byte p, byte l)
{ {
byte i; byte i;
byte *s8 = (byte *)sha3->s; byte *s8 = (byte *)sha3->s;
@@ -765,12 +765,12 @@ static int Sha3Final(Sha3* sha3, byte* hash, byte p, byte l)
/* Initialize the state for a SHA-3 hash operation. /* Initialize the state for a SHA-3 hash operation.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* heap Heap reference for dynamic memory allocation. (Used in async ops.) * heap Heap reference for dynamic memory allocation. (Used in async ops.)
* devId Device identifier for asynchronous operation. * devId Device identifier for asynchronous operation.
* returns 0 on success. * returns 0 on success.
*/ */
static int wc_InitSha3(Sha3* sha3, void* heap, int devId) static int wc_InitSha3(wc_Sha3* sha3, void* heap, int devId)
{ {
int ret = 0; int ret = 0;
@@ -794,13 +794,13 @@ static int wc_InitSha3(Sha3* sha3, void* heap, int devId)
/* Update the SHA-3 hash state with message data. /* Update the SHA-3 hash state with message data.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* data Message data to be hashed. * data Message data to be hashed.
* len Length of the message data. * len Length of the message data.
* p Number of 64-bit numbers in a block of data to process. * p Number of 64-bit numbers in a block of data to process.
* returns 0 on success. * returns 0 on success.
*/ */
static int wc_Sha3Update(Sha3* sha3, const byte* data, word32 len, byte p) static int wc_Sha3Update(wc_Sha3* sha3, const byte* data, word32 len, byte p)
{ {
int ret = 0; int ret = 0;
@@ -823,13 +823,13 @@ static int wc_Sha3Update(Sha3* sha3, const byte* data, word32 len, byte p)
/* Calculate the SHA-3 hash based on all the message data seen. /* Calculate the SHA-3 hash based on all the message data seen.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. * hash Buffer to hold the hash result.
* p Number of 64-bit numbers in a block of data to process. * p Number of 64-bit numbers in a block of data to process.
* len Number of bytes in output. * len Number of bytes in output.
* returns 0 on success. * returns 0 on success.
*/ */
static int wc_Sha3Final(Sha3* sha3, byte* hash, byte p, byte len) static int wc_Sha3Final(wc_Sha3* sha3, byte* hash, byte p, byte len)
{ {
int ret; int ret;
@@ -856,10 +856,10 @@ static int wc_Sha3Final(Sha3* sha3, byte* hash, byte p, byte len)
/* Dispose of any dynamically allocated data from the SHA3-384 operation. /* Dispose of any dynamically allocated data from the SHA3-384 operation.
* (Required for async ops.) * (Required for async ops.)
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* returns 0 on success. * returns 0 on success.
*/ */
static void wc_Sha3Free(Sha3* sha3) static void wc_Sha3Free(wc_Sha3* sha3)
{ {
(void)sha3; (void)sha3;
@@ -874,18 +874,18 @@ static void wc_Sha3Free(Sha3* sha3)
/* Copy the state of the SHA3 operation. /* Copy the state of the SHA3 operation.
* *
* src Sha3 object holding state top copy. * src wc_Sha3 object holding state top copy.
* dst Sha3 object to copy into. * dst wc_Sha3 object to copy into.
* returns 0 on success. * returns 0 on success.
*/ */
static int wc_Sha3Copy(Sha3* src, Sha3* dst) static int wc_Sha3Copy(wc_Sha3* src, wc_Sha3* dst)
{ {
int ret = 0; int ret = 0;
if (src == NULL || dst == NULL) if (src == NULL || dst == NULL)
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
XMEMCPY(dst, src, sizeof(Sha3)); XMEMCPY(dst, src, sizeof(wc_Sha3));
#ifdef WOLFSSL_ASYNC_CRYPT #ifdef WOLFSSL_ASYNC_CRYPT
ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev); ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev);
@@ -898,16 +898,16 @@ static int wc_Sha3Copy(Sha3* src, Sha3* dst)
* More message data can be added, after this operation, using the current * More message data can be added, after this operation, using the current
* state. * state.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 28 bytes. * hash Buffer to hold the hash result. Must be at least 28 bytes.
* p Number of 64-bit numbers in a block of data to process. * p Number of 64-bit numbers in a block of data to process.
* len Number of bytes in output. * len Number of bytes in output.
* returns 0 on success. * returns 0 on success.
*/ */
static int wc_Sha3GetHash(Sha3* sha3, byte* hash, byte p, byte len) static int wc_Sha3GetHash(wc_Sha3* sha3, byte* hash, byte p, byte len)
{ {
int ret; int ret;
Sha3 tmpSha3; wc_Sha3 tmpSha3;
if (sha3 == NULL || hash == NULL) if (sha3 == NULL || hash == NULL)
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
@@ -922,47 +922,47 @@ static int wc_Sha3GetHash(Sha3* sha3, byte* hash, byte p, byte len)
/* Initialize the state for a SHA3-224 hash operation. /* Initialize the state for a SHA3-224 hash operation.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* heap Heap reference for dynamic memory allocation. (Used in async ops.) * heap Heap reference for dynamic memory allocation. (Used in async ops.)
* devId Device identifier for asynchronous operation. * devId Device identifier for asynchronous operation.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_InitSha3_224(Sha3* sha3, void* heap, int devId) WOLFSSL_API int wc_InitSha3_224(wc_Sha3* sha3, void* heap, int devId)
{ {
return wc_InitSha3(sha3, heap, devId); return wc_InitSha3(sha3, heap, devId);
} }
/* Update the SHA3-224 hash state with message data. /* Update the SHA3-224 hash state with message data.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* data Message data to be hashed. * data Message data to be hashed.
* len Length of the message data. * len Length of the message data.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_224_Update(Sha3* sha3, const byte* data, word32 len) WOLFSSL_API int wc_Sha3_224_Update(wc_Sha3* sha3, const byte* data, word32 len)
{ {
return wc_Sha3Update(sha3, data, len, SHA3_224_COUNT); return wc_Sha3Update(sha3, data, len, WC_SHA3_224_COUNT);
} }
/* Calculate the SHA3-224 hash based on all the message data seen. /* Calculate the SHA3-224 hash based on all the message data seen.
* The state is initialized ready for a new message to hash. * The state is initialized ready for a new message to hash.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 28 bytes. * hash Buffer to hold the hash result. Must be at least 28 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_224_Final(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_224_Final(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3Final(sha3, hash, SHA3_224_COUNT, SHA3_224_DIGEST_SIZE); return wc_Sha3Final(sha3, hash, WC_SHA3_224_COUNT, WC_SHA3_224_DIGEST_SIZE);
} }
/* Dispose of any dynamically allocated data from the SHA3-224 operation. /* Dispose of any dynamically allocated data from the SHA3-224 operation.
* (Required for async ops.) * (Required for async ops.)
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API void wc_Sha3_224_Free(Sha3* sha3) WOLFSSL_API void wc_Sha3_224_Free(wc_Sha3* sha3)
{ {
wc_Sha3Free(sha3); wc_Sha3Free(sha3);
} }
@@ -971,22 +971,22 @@ WOLFSSL_API void wc_Sha3_224_Free(Sha3* sha3)
* More message data can be added, after this operation, using the current * More message data can be added, after this operation, using the current
* state. * state.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 28 bytes. * hash Buffer to hold the hash result. Must be at least 28 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_224_GetHash(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_224_GetHash(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3GetHash(sha3, hash, SHA3_224_COUNT, SHA3_224_DIGEST_SIZE); return wc_Sha3GetHash(sha3, hash, WC_SHA3_224_COUNT, WC_SHA3_224_DIGEST_SIZE);
} }
/* Copy the state of the SHA3-224 operation. /* Copy the state of the SHA3-224 operation.
* *
* src Sha3 object holding state top copy. * src wc_Sha3 object holding state top copy.
* dst Sha3 object to copy into. * dst wc_Sha3 object to copy into.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_224_Copy(Sha3* src, Sha3* dst) WOLFSSL_API int wc_Sha3_224_Copy(wc_Sha3* src, wc_Sha3* dst)
{ {
return wc_Sha3Copy(src, dst); return wc_Sha3Copy(src, dst);
} }
@@ -994,47 +994,47 @@ WOLFSSL_API int wc_Sha3_224_Copy(Sha3* src, Sha3* dst)
/* Initialize the state for a SHA3-256 hash operation. /* Initialize the state for a SHA3-256 hash operation.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* heap Heap reference for dynamic memory allocation. (Used in async ops.) * heap Heap reference for dynamic memory allocation. (Used in async ops.)
* devId Device identifier for asynchronous operation. * devId Device identifier for asynchronous operation.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_InitSha3_256(Sha3* sha3, void* heap, int devId) WOLFSSL_API int wc_InitSha3_256(wc_Sha3* sha3, void* heap, int devId)
{ {
return wc_InitSha3(sha3, heap, devId); return wc_InitSha3(sha3, heap, devId);
} }
/* Update the SHA3-256 hash state with message data. /* Update the SHA3-256 hash state with message data.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* data Message data to be hashed. * data Message data to be hashed.
* len Length of the message data. * len Length of the message data.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_256_Update(Sha3* sha3, const byte* data, word32 len) WOLFSSL_API int wc_Sha3_256_Update(wc_Sha3* sha3, const byte* data, word32 len)
{ {
return wc_Sha3Update(sha3, data, len, SHA3_256_COUNT); return wc_Sha3Update(sha3, data, len, WC_SHA3_256_COUNT);
} }
/* Calculate the SHA3-256 hash based on all the message data seen. /* Calculate the SHA3-256 hash based on all the message data seen.
* The state is initialized ready for a new message to hash. * The state is initialized ready for a new message to hash.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 32 bytes. * hash Buffer to hold the hash result. Must be at least 32 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_256_Final(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_256_Final(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3Final(sha3, hash, SHA3_256_COUNT, SHA3_256_DIGEST_SIZE); return wc_Sha3Final(sha3, hash, WC_SHA3_256_COUNT, WC_SHA3_256_DIGEST_SIZE);
} }
/* Dispose of any dynamically allocated data from the SHA3-256 operation. /* Dispose of any dynamically allocated data from the SHA3-256 operation.
* (Required for async ops.) * (Required for async ops.)
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API void wc_Sha3_256_Free(Sha3* sha3) WOLFSSL_API void wc_Sha3_256_Free(wc_Sha3* sha3)
{ {
wc_Sha3Free(sha3); wc_Sha3Free(sha3);
} }
@@ -1043,22 +1043,22 @@ WOLFSSL_API void wc_Sha3_256_Free(Sha3* sha3)
* More message data can be added, after this operation, using the current * More message data can be added, after this operation, using the current
* state. * state.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 32 bytes. * hash Buffer to hold the hash result. Must be at least 32 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_256_GetHash(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_256_GetHash(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3GetHash(sha3, hash, SHA3_256_COUNT, SHA3_256_DIGEST_SIZE); return wc_Sha3GetHash(sha3, hash, WC_SHA3_256_COUNT, WC_SHA3_256_DIGEST_SIZE);
} }
/* Copy the state of the SHA3-256 operation. /* Copy the state of the SHA3-256 operation.
* *
* src Sha3 object holding state top copy. * src wc_Sha3 object holding state top copy.
* dst Sha3 object to copy into. * dst wc_Sha3 object to copy into.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_256_Copy(Sha3* src, Sha3* dst) WOLFSSL_API int wc_Sha3_256_Copy(wc_Sha3* src, wc_Sha3* dst)
{ {
return wc_Sha3Copy(src, dst); return wc_Sha3Copy(src, dst);
} }
@@ -1066,47 +1066,47 @@ WOLFSSL_API int wc_Sha3_256_Copy(Sha3* src, Sha3* dst)
/* Initialize the state for a SHA3-384 hash operation. /* Initialize the state for a SHA3-384 hash operation.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* heap Heap reference for dynamic memory allocation. (Used in async ops.) * heap Heap reference for dynamic memory allocation. (Used in async ops.)
* devId Device identifier for asynchronous operation. * devId Device identifier for asynchronous operation.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_InitSha3_384(Sha3* sha3, void* heap, int devId) WOLFSSL_API int wc_InitSha3_384(wc_Sha3* sha3, void* heap, int devId)
{ {
return wc_InitSha3(sha3, heap, devId); return wc_InitSha3(sha3, heap, devId);
} }
/* Update the SHA3-384 hash state with message data. /* Update the SHA3-384 hash state with message data.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* data Message data to be hashed. * data Message data to be hashed.
* len Length of the message data. * len Length of the message data.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_384_Update(Sha3* sha3, const byte* data, word32 len) WOLFSSL_API int wc_Sha3_384_Update(wc_Sha3* sha3, const byte* data, word32 len)
{ {
return wc_Sha3Update(sha3, data, len, SHA3_384_COUNT); return wc_Sha3Update(sha3, data, len, WC_SHA3_384_COUNT);
} }
/* Calculate the SHA3-384 hash based on all the message data seen. /* Calculate the SHA3-384 hash based on all the message data seen.
* The state is initialized ready for a new message to hash. * The state is initialized ready for a new message to hash.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 48 bytes. * hash Buffer to hold the hash result. Must be at least 48 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_384_Final(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_384_Final(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3Final(sha3, hash, SHA3_384_COUNT, SHA3_384_DIGEST_SIZE); return wc_Sha3Final(sha3, hash, WC_SHA3_384_COUNT, WC_SHA3_384_DIGEST_SIZE);
} }
/* Dispose of any dynamically allocated data from the SHA3-384 operation. /* Dispose of any dynamically allocated data from the SHA3-384 operation.
* (Required for async ops.) * (Required for async ops.)
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API void wc_Sha3_384_Free(Sha3* sha3) WOLFSSL_API void wc_Sha3_384_Free(wc_Sha3* sha3)
{ {
wc_Sha3Free(sha3); wc_Sha3Free(sha3);
} }
@@ -1115,22 +1115,22 @@ WOLFSSL_API void wc_Sha3_384_Free(Sha3* sha3)
* More message data can be added, after this operation, using the current * More message data can be added, after this operation, using the current
* state. * state.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 48 bytes. * hash Buffer to hold the hash result. Must be at least 48 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_384_GetHash(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_384_GetHash(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3GetHash(sha3, hash, SHA3_384_COUNT, SHA3_384_DIGEST_SIZE); return wc_Sha3GetHash(sha3, hash, WC_SHA3_384_COUNT, WC_SHA3_384_DIGEST_SIZE);
} }
/* Copy the state of the SHA3-384 operation. /* Copy the state of the SHA3-384 operation.
* *
* src Sha3 object holding state top copy. * src wc_Sha3 object holding state top copy.
* dst Sha3 object to copy into. * dst wc_Sha3 object to copy into.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_384_Copy(Sha3* src, Sha3* dst) WOLFSSL_API int wc_Sha3_384_Copy(wc_Sha3* src, wc_Sha3* dst)
{ {
return wc_Sha3Copy(src, dst); return wc_Sha3Copy(src, dst);
} }
@@ -1138,47 +1138,47 @@ WOLFSSL_API int wc_Sha3_384_Copy(Sha3* src, Sha3* dst)
/* Initialize the state for a SHA3-512 hash operation. /* Initialize the state for a SHA3-512 hash operation.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* heap Heap reference for dynamic memory allocation. (Used in async ops.) * heap Heap reference for dynamic memory allocation. (Used in async ops.)
* devId Device identifier for asynchronous operation. * devId Device identifier for asynchronous operation.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_InitSha3_512(Sha3* sha3, void* heap, int devId) WOLFSSL_API int wc_InitSha3_512(wc_Sha3* sha3, void* heap, int devId)
{ {
return wc_InitSha3(sha3, heap, devId); return wc_InitSha3(sha3, heap, devId);
} }
/* Update the SHA3-512 hash state with message data. /* Update the SHA3-512 hash state with message data.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* data Message data to be hashed. * data Message data to be hashed.
* len Length of the message data. * len Length of the message data.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_512_Update(Sha3* sha3, const byte* data, word32 len) WOLFSSL_API int wc_Sha3_512_Update(wc_Sha3* sha3, const byte* data, word32 len)
{ {
return wc_Sha3Update(sha3, data, len, SHA3_512_COUNT); return wc_Sha3Update(sha3, data, len, WC_SHA3_512_COUNT);
} }
/* Calculate the SHA3-512 hash based on all the message data seen. /* Calculate the SHA3-512 hash based on all the message data seen.
* The state is initialized ready for a new message to hash. * The state is initialized ready for a new message to hash.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 64 bytes. * hash Buffer to hold the hash result. Must be at least 64 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_512_Final(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_512_Final(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3Final(sha3, hash, SHA3_512_COUNT, SHA3_512_DIGEST_SIZE); return wc_Sha3Final(sha3, hash, WC_SHA3_512_COUNT, WC_SHA3_512_DIGEST_SIZE);
} }
/* Dispose of any dynamically allocated data from the SHA3-512 operation. /* Dispose of any dynamically allocated data from the SHA3-512 operation.
* (Required for async ops.) * (Required for async ops.)
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API void wc_Sha3_512_Free(Sha3* sha3) WOLFSSL_API void wc_Sha3_512_Free(wc_Sha3* sha3)
{ {
wc_Sha3Free(sha3); wc_Sha3Free(sha3);
} }
@@ -1187,22 +1187,22 @@ WOLFSSL_API void wc_Sha3_512_Free(Sha3* sha3)
* More message data can be added, after this operation, using the current * More message data can be added, after this operation, using the current
* state. * state.
* *
* sha3 Sha3 object holding state. * sha3 wc_Sha3 object holding state.
* hash Buffer to hold the hash result. Must be at least 64 bytes. * hash Buffer to hold the hash result. Must be at least 64 bytes.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_512_GetHash(Sha3* sha3, byte* hash) WOLFSSL_API int wc_Sha3_512_GetHash(wc_Sha3* sha3, byte* hash)
{ {
return wc_Sha3GetHash(sha3, hash, SHA3_512_COUNT, SHA3_512_DIGEST_SIZE); return wc_Sha3GetHash(sha3, hash, WC_SHA3_512_COUNT, WC_SHA3_512_DIGEST_SIZE);
} }
/* Copy the state of the SHA3-512 operation. /* Copy the state of the SHA3-512 operation.
* *
* src Sha3 object holding state top copy. * src wc_Sha3 object holding state top copy.
* dst Sha3 object to copy into. * dst wc_Sha3 object to copy into.
* returns 0 on success. * returns 0 on success.
*/ */
WOLFSSL_API int wc_Sha3_512_Copy(Sha3* src, Sha3* dst) WOLFSSL_API int wc_Sha3_512_Copy(wc_Sha3* src, wc_Sha3* dst)
{ {
return wc_Sha3Copy(src, dst); return wc_Sha3Copy(src, dst);
} }

View File

@@ -2176,9 +2176,9 @@ exit:
#ifndef WOLFSSL_NOSHA3_224 #ifndef WOLFSSL_NOSHA3_224
static int sha3_224_test(void) static int sha3_224_test(void)
{ {
Sha3 sha; wc_Sha3 sha;
byte hash[SHA3_224_DIGEST_SIZE]; byte hash[WC_SHA3_224_DIGEST_SIZE];
byte hashcopy[SHA3_224_DIGEST_SIZE]; byte hashcopy[WC_SHA3_224_DIGEST_SIZE];
testVector a, b, c; testVector a, b, c;
testVector test_sha[3]; testVector test_sha[3];
@@ -2189,19 +2189,19 @@ static int sha3_224_test(void)
a.output = "\x6b\x4e\x03\x42\x36\x67\xdb\xb7\x3b\x6e\x15\x45\x4f\x0e\xb1" a.output = "\x6b\x4e\x03\x42\x36\x67\xdb\xb7\x3b\x6e\x15\x45\x4f\x0e\xb1"
"\xab\xd4\x59\x7f\x9a\x1b\x07\x8e\x3f\x5b\x5a\x6b\xc7"; "\xab\xd4\x59\x7f\x9a\x1b\x07\x8e\x3f\x5b\x5a\x6b\xc7";
a.inLen = XSTRLEN(a.input); a.inLen = XSTRLEN(a.input);
a.outLen = SHA3_224_DIGEST_SIZE; a.outLen = WC_SHA3_224_DIGEST_SIZE;
b.input = "abc"; b.input = "abc";
b.output = "\xe6\x42\x82\x4c\x3f\x8c\xf2\x4a\xd0\x92\x34\xee\x7d\x3c\x76" b.output = "\xe6\x42\x82\x4c\x3f\x8c\xf2\x4a\xd0\x92\x34\xee\x7d\x3c\x76"
"\x6f\xc9\xa3\xa5\x16\x8d\x0c\x94\xad\x73\xb4\x6f\xdf"; "\x6f\xc9\xa3\xa5\x16\x8d\x0c\x94\xad\x73\xb4\x6f\xdf";
b.inLen = XSTRLEN(b.input); b.inLen = XSTRLEN(b.input);
b.outLen = SHA3_224_DIGEST_SIZE; b.outLen = WC_SHA3_224_DIGEST_SIZE;
c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
c.output = "\x8a\x24\x10\x8b\x15\x4a\xda\x21\xc9\xfd\x55\x74\x49\x44\x79" c.output = "\x8a\x24\x10\x8b\x15\x4a\xda\x21\xc9\xfd\x55\x74\x49\x44\x79"
"\xba\x5c\x7e\x7a\xb7\x6e\xf2\x64\xea\xd0\xfc\xce\x33"; "\xba\x5c\x7e\x7a\xb7\x6e\xf2\x64\xea\xd0\xfc\xce\x33";
c.inLen = XSTRLEN(c.input); c.inLen = XSTRLEN(c.input);
c.outLen = SHA3_224_DIGEST_SIZE; c.outLen = WC_SHA3_224_DIGEST_SIZE;
test_sha[0] = a; test_sha[0] = a;
test_sha[1] = b; test_sha[1] = b;
@@ -2223,9 +2223,9 @@ static int sha3_224_test(void)
if (ret != 0) if (ret != 0)
ERROR_OUT(-2030 - i, exit); ERROR_OUT(-2030 - i, exit);
if (XMEMCMP(hash, test_sha[i].output, SHA3_224_DIGEST_SIZE) != 0) if (XMEMCMP(hash, test_sha[i].output, WC_SHA3_224_DIGEST_SIZE) != 0)
ERROR_OUT(-2040 - i, exit); ERROR_OUT(-2040 - i, exit);
if (XMEMCMP(hash, hashcopy, SHA3_224_DIGEST_SIZE) != 0) if (XMEMCMP(hash, hashcopy, WC_SHA3_224_DIGEST_SIZE) != 0)
ERROR_OUT(-2050 - i, exit); ERROR_OUT(-2050 - i, exit);
} }
@@ -2248,7 +2248,7 @@ static int sha3_224_test(void)
ret = wc_Sha3_224_Final(&sha, hash); ret = wc_Sha3_224_Final(&sha, hash);
if (ret != 0) if (ret != 0)
ERROR_OUT(-2061, exit); ERROR_OUT(-2061, exit);
if (XMEMCMP(hash, large_digest, SHA3_224_DIGEST_SIZE) != 0) if (XMEMCMP(hash, large_digest, WC_SHA3_224_DIGEST_SIZE) != 0)
ERROR_OUT(-2062, exit); ERROR_OUT(-2062, exit);
} /* END LARGE HASH TEST */ } /* END LARGE HASH TEST */
@@ -2262,9 +2262,9 @@ exit:
#ifndef WOLFSSL_NOSHA3_256 #ifndef WOLFSSL_NOSHA3_256
static int sha3_256_test(void) static int sha3_256_test(void)
{ {
Sha3 sha; wc_Sha3 sha;
byte hash[SHA3_256_DIGEST_SIZE]; byte hash[WC_SHA3_256_DIGEST_SIZE];
byte hashcopy[SHA3_256_DIGEST_SIZE]; byte hashcopy[WC_SHA3_256_DIGEST_SIZE];
testVector a, b, c; testVector a, b, c;
testVector test_sha[3]; testVector test_sha[3];
@@ -2276,21 +2276,21 @@ static int sha3_256_test(void)
"\x62\xf5\x80\xff\x4d\xe4\x3b\x49\xfa\x82\xd8\x0a\x4b\x80\xf8" "\x62\xf5\x80\xff\x4d\xe4\x3b\x49\xfa\x82\xd8\x0a\x4b\x80\xf8"
"\x43\x4a"; "\x43\x4a";
a.inLen = XSTRLEN(a.input); a.inLen = XSTRLEN(a.input);
a.outLen = SHA3_256_DIGEST_SIZE; a.outLen = WC_SHA3_256_DIGEST_SIZE;
b.input = "abc"; b.input = "abc";
b.output = "\x3a\x98\x5d\xa7\x4f\xe2\x25\xb2\x04\x5c\x17\x2d\x6b\xd3\x90" b.output = "\x3a\x98\x5d\xa7\x4f\xe2\x25\xb2\x04\x5c\x17\x2d\x6b\xd3\x90"
"\xbd\x85\x5f\x08\x6e\x3e\x9d\x52\x5b\x46\xbf\xe2\x45\x11\x43" "\xbd\x85\x5f\x08\x6e\x3e\x9d\x52\x5b\x46\xbf\xe2\x45\x11\x43"
"\x15\x32"; "\x15\x32";
b.inLen = XSTRLEN(b.input); b.inLen = XSTRLEN(b.input);
b.outLen = SHA3_256_DIGEST_SIZE; b.outLen = WC_SHA3_256_DIGEST_SIZE;
c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
c.output = "\x41\xc0\xdb\xa2\xa9\xd6\x24\x08\x49\x10\x03\x76\xa8\x23\x5e" c.output = "\x41\xc0\xdb\xa2\xa9\xd6\x24\x08\x49\x10\x03\x76\xa8\x23\x5e"
"\x2c\x82\xe1\xb9\x99\x8a\x99\x9e\x21\xdb\x32\xdd\x97\x49\x6d" "\x2c\x82\xe1\xb9\x99\x8a\x99\x9e\x21\xdb\x32\xdd\x97\x49\x6d"
"\x33\x76"; "\x33\x76";
c.inLen = XSTRLEN(c.input); c.inLen = XSTRLEN(c.input);
c.outLen = SHA3_256_DIGEST_SIZE; c.outLen = WC_SHA3_256_DIGEST_SIZE;
test_sha[0] = a; test_sha[0] = a;
test_sha[1] = b; test_sha[1] = b;
@@ -2312,9 +2312,9 @@ static int sha3_256_test(void)
if (ret != 0) if (ret != 0)
ERROR_OUT(-2130 - i, exit); ERROR_OUT(-2130 - i, exit);
if (XMEMCMP(hash, test_sha[i].output, SHA3_256_DIGEST_SIZE) != 0) if (XMEMCMP(hash, test_sha[i].output, WC_SHA3_256_DIGEST_SIZE) != 0)
ERROR_OUT(-2140 - i, exit); ERROR_OUT(-2140 - i, exit);
if (XMEMCMP(hash, hashcopy, SHA3_256_DIGEST_SIZE) != 0) if (XMEMCMP(hash, hashcopy, WC_SHA3_256_DIGEST_SIZE) != 0)
ERROR_OUT(-2150 - i, exit); ERROR_OUT(-2150 - i, exit);
} }
@@ -2337,7 +2337,7 @@ static int sha3_256_test(void)
ret = wc_Sha3_256_Final(&sha, hash); ret = wc_Sha3_256_Final(&sha, hash);
if (ret != 0) if (ret != 0)
ERROR_OUT(-2161, exit); ERROR_OUT(-2161, exit);
if (XMEMCMP(hash, large_digest, SHA3_256_DIGEST_SIZE) != 0) if (XMEMCMP(hash, large_digest, WC_SHA3_256_DIGEST_SIZE) != 0)
ERROR_OUT(-2162, exit); ERROR_OUT(-2162, exit);
} /* END LARGE HASH TEST */ } /* END LARGE HASH TEST */
@@ -2351,9 +2351,9 @@ exit:
#ifndef WOLFSSL_NOSHA3_384 #ifndef WOLFSSL_NOSHA3_384
static int sha3_384_test(void) static int sha3_384_test(void)
{ {
Sha3 sha; wc_Sha3 sha;
byte hash[SHA3_384_DIGEST_SIZE]; byte hash[WC_SHA3_384_DIGEST_SIZE];
byte hashcopy[SHA3_384_DIGEST_SIZE]; byte hashcopy[WC_SHA3_384_DIGEST_SIZE];
testVector a, b, c; testVector a, b, c;
testVector test_sha[3]; testVector test_sha[3];
@@ -2366,7 +2366,7 @@ static int sha3_384_test(void)
"\x3a\x2a\xc3\x71\x38\x31\x26\x4a\xdb\x47\xfb\x6b\xd1\xe0\x58" "\x3a\x2a\xc3\x71\x38\x31\x26\x4a\xdb\x47\xfb\x6b\xd1\xe0\x58"
"\xd5\xf0\x04"; "\xd5\xf0\x04";
a.inLen = XSTRLEN(a.input); a.inLen = XSTRLEN(a.input);
a.outLen = SHA3_384_DIGEST_SIZE; a.outLen = WC_SHA3_384_DIGEST_SIZE;
b.input = "abc"; b.input = "abc";
b.output = "\xec\x01\x49\x82\x88\x51\x6f\xc9\x26\x45\x9f\x58\xe2\xc6\xad" b.output = "\xec\x01\x49\x82\x88\x51\x6f\xc9\x26\x45\x9f\x58\xe2\xc6\xad"
@@ -2374,7 +2374,7 @@ static int sha3_384_test(void)
"\xe4\xb2\x98\xd8\x8c\xea\x92\x7a\xc7\xf5\x39\xf1\xed\xf2\x28" "\xe4\xb2\x98\xd8\x8c\xea\x92\x7a\xc7\xf5\x39\xf1\xed\xf2\x28"
"\x37\x6d\x25"; "\x37\x6d\x25";
b.inLen = XSTRLEN(b.input); b.inLen = XSTRLEN(b.input);
b.outLen = SHA3_384_DIGEST_SIZE; b.outLen = WC_SHA3_384_DIGEST_SIZE;
c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
c.output = "\x99\x1c\x66\x57\x55\xeb\x3a\x4b\x6b\xbd\xfb\x75\xc7\x8a\x49" c.output = "\x99\x1c\x66\x57\x55\xeb\x3a\x4b\x6b\xbd\xfb\x75\xc7\x8a\x49"
@@ -2382,7 +2382,7 @@ static int sha3_384_test(void)
"\xad\x5a\xa0\x4a\x1f\x07\x6e\x62\xfe\xa1\x9e\xef\x51\xac\xd0" "\xad\x5a\xa0\x4a\x1f\x07\x6e\x62\xfe\xa1\x9e\xef\x51\xac\xd0"
"\x65\x7c\x22"; "\x65\x7c\x22";
c.inLen = XSTRLEN(c.input); c.inLen = XSTRLEN(c.input);
c.outLen = SHA3_384_DIGEST_SIZE; c.outLen = WC_SHA3_384_DIGEST_SIZE;
test_sha[0] = a; test_sha[0] = a;
test_sha[1] = b; test_sha[1] = b;
@@ -2404,9 +2404,9 @@ static int sha3_384_test(void)
if (ret != 0) if (ret != 0)
ERROR_OUT(-2230 - i, exit); ERROR_OUT(-2230 - i, exit);
if (XMEMCMP(hash, test_sha[i].output, SHA3_384_DIGEST_SIZE) != 0) if (XMEMCMP(hash, test_sha[i].output, WC_SHA3_384_DIGEST_SIZE) != 0)
ERROR_OUT(-2240 - i, exit); ERROR_OUT(-2240 - i, exit);
if (XMEMCMP(hash, hashcopy, SHA3_384_DIGEST_SIZE) != 0) if (XMEMCMP(hash, hashcopy, WC_SHA3_384_DIGEST_SIZE) != 0)
ERROR_OUT(-2250 - i, exit); ERROR_OUT(-2250 - i, exit);
} }
@@ -2430,7 +2430,7 @@ static int sha3_384_test(void)
ret = wc_Sha3_384_Final(&sha, hash); ret = wc_Sha3_384_Final(&sha, hash);
if (ret != 0) if (ret != 0)
ERROR_OUT(-2261, exit); ERROR_OUT(-2261, exit);
if (XMEMCMP(hash, large_digest, SHA3_384_DIGEST_SIZE) != 0) if (XMEMCMP(hash, large_digest, WC_SHA3_384_DIGEST_SIZE) != 0)
ERROR_OUT(-2262, exit); ERROR_OUT(-2262, exit);
} /* END LARGE HASH TEST */ } /* END LARGE HASH TEST */
@@ -2444,9 +2444,9 @@ exit:
#ifndef WOLFSSL_NOSHA3_512 #ifndef WOLFSSL_NOSHA3_512
static int sha3_512_test(void) static int sha3_512_test(void)
{ {
Sha3 sha; wc_Sha3 sha;
byte hash[SHA3_512_DIGEST_SIZE]; byte hash[WC_SHA3_512_DIGEST_SIZE];
byte hashcopy[SHA3_512_DIGEST_SIZE]; byte hashcopy[WC_SHA3_512_DIGEST_SIZE];
testVector a, b, c; testVector a, b, c;
testVector test_sha[3]; testVector test_sha[3];
@@ -2460,7 +2460,7 @@ static int sha3_512_test(void)
"\x3a\xc5\x58\xf5\x00\x19\x9d\x95\xb6\xd3\xe3\x01\x75\x85\x86" "\x3a\xc5\x58\xf5\x00\x19\x9d\x95\xb6\xd3\xe3\x01\x75\x85\x86"
"\x28\x1d\xcd\x26"; "\x28\x1d\xcd\x26";
a.inLen = XSTRLEN(a.input); a.inLen = XSTRLEN(a.input);
a.outLen = SHA3_512_DIGEST_SIZE; a.outLen = WC_SHA3_512_DIGEST_SIZE;
b.input = "abc"; b.input = "abc";
b.output = "\xb7\x51\x85\x0b\x1a\x57\x16\x8a\x56\x93\xcd\x92\x4b\x6b\x09" b.output = "\xb7\x51\x85\x0b\x1a\x57\x16\x8a\x56\x93\xcd\x92\x4b\x6b\x09"
@@ -2469,7 +2469,7 @@ static int sha3_512_test(void)
"\xe3\x93\x40\x57\x34\x0b\x4c\xf4\x08\xd5\xa5\x65\x92\xf8\x27" "\xe3\x93\x40\x57\x34\x0b\x4c\xf4\x08\xd5\xa5\x65\x92\xf8\x27"
"\x4e\xec\x53\xf0"; "\x4e\xec\x53\xf0";
b.inLen = XSTRLEN(b.input); b.inLen = XSTRLEN(b.input);
b.outLen = SHA3_512_DIGEST_SIZE; b.outLen = WC_SHA3_512_DIGEST_SIZE;
c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; c.input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
c.output = "\x04\xa3\x71\xe8\x4e\xcf\xb5\xb8\xb7\x7c\xb4\x86\x10\xfc\xa8" c.output = "\x04\xa3\x71\xe8\x4e\xcf\xb5\xb8\xb7\x7c\xb4\x86\x10\xfc\xa8"
@@ -2478,7 +2478,7 @@ static int sha3_512_test(void)
"\x8c\x08\x63\x46\xb5\x33\xb4\x9c\x03\x0d\x99\xa2\x7d\xaf\x11" "\x8c\x08\x63\x46\xb5\x33\xb4\x9c\x03\x0d\x99\xa2\x7d\xaf\x11"
"\x39\xd6\xe7\x5e"; "\x39\xd6\xe7\x5e";
c.inLen = XSTRLEN(c.input); c.inLen = XSTRLEN(c.input);
c.outLen = SHA3_512_DIGEST_SIZE; c.outLen = WC_SHA3_512_DIGEST_SIZE;
test_sha[0] = a; test_sha[0] = a;
test_sha[1] = b; test_sha[1] = b;
@@ -2500,9 +2500,9 @@ static int sha3_512_test(void)
if (ret != 0) if (ret != 0)
ERROR_OUT(-2330 - i, exit); ERROR_OUT(-2330 - i, exit);
if (XMEMCMP(hash, test_sha[i].output, SHA3_512_DIGEST_SIZE) != 0) if (XMEMCMP(hash, test_sha[i].output, WC_SHA3_512_DIGEST_SIZE) != 0)
ERROR_OUT(-2340 - i, exit); ERROR_OUT(-2340 - i, exit);
if (XMEMCMP(hash, hashcopy, SHA3_512_DIGEST_SIZE) != 0) if (XMEMCMP(hash, hashcopy, WC_SHA3_512_DIGEST_SIZE) != 0)
ERROR_OUT(-2350 - i, exit); ERROR_OUT(-2350 - i, exit);
} }
@@ -2527,7 +2527,7 @@ static int sha3_512_test(void)
ret = wc_Sha3_512_Final(&sha, hash); ret = wc_Sha3_512_Final(&sha, hash);
if (ret != 0) if (ret != 0)
ERROR_OUT(-2361, exit); ERROR_OUT(-2361, exit);
if (XMEMCMP(hash, large_digest, SHA3_512_DIGEST_SIZE) != 0) if (XMEMCMP(hash, large_digest, WC_SHA3_512_DIGEST_SIZE) != 0)
ERROR_OUT(-2362, exit); ERROR_OUT(-2362, exit);
} /* END LARGE HASH TEST */ } /* END LARGE HASH TEST */
@@ -3342,7 +3342,7 @@ int hmac_sha512_test(void)
int hmac_sha3_test(void) int hmac_sha3_test(void)
{ {
Hmac hmac; Hmac hmac;
byte hash[SHA3_512_DIGEST_SIZE]; byte hash[WC_SHA3_512_DIGEST_SIZE];
const char* key[3] = const char* key[3] =
{ {
@@ -3375,8 +3375,8 @@ int hmac_sha3_test(void)
const int hashSz[4] = const int hashSz[4] =
{ {
SHA3_224_DIGEST_SIZE, SHA3_256_DIGEST_SIZE, WC_SHA3_224_DIGEST_SIZE, WC_SHA3_256_DIGEST_SIZE,
SHA3_384_DIGEST_SIZE, SHA3_512_DIGEST_SIZE WC_SHA3_384_DIGEST_SIZE, WC_SHA3_512_DIGEST_SIZE
}; };
const char* output[12] = const char* output[12] =

View File

@@ -46,7 +46,7 @@
/* in bytes, variable digest size up to 512 bits (64 bytes) */ /* in bytes, variable digest size up to 512 bits (64 bytes) */
enum { enum {
BLAKE2B_ID = 7, /* hash type unique */ BLAKE2B_ID = WC_HASH_TYPE_BLAKE2B,
BLAKE2B_256 = 32 /* 256 bit type, SSL default */ BLAKE2B_256 = 32 /* 256 bit type, SSL default */
}; };

View File

@@ -46,6 +46,13 @@
#ifdef WOLFSSL_SHA3 #ifdef WOLFSSL_SHA3
#include <wolfssl/wolfcrypt/sha3.h> #include <wolfssl/wolfcrypt/sha3.h>
#endif #endif
#ifndef NO_MD4
#include <wolfssl/wolfcrypt/md4.h>
#endif
#ifdef WOLFSSL_MD2
#include <wolfssl/wolfcrypt/md2.h>
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@@ -56,20 +63,6 @@
#endif #endif
/* Hash types */
enum wc_HashType {
WC_HASH_TYPE_NONE = 0,
WC_HASH_TYPE_MD2 = 1,
WC_HASH_TYPE_MD4 = 2,
WC_HASH_TYPE_MD5 = 3,
WC_HASH_TYPE_SHA = 4, /* SHA-1 (not old SHA-0) */
WC_HASH_TYPE_SHA224 = 9,
WC_HASH_TYPE_SHA256 = 5,
WC_HASH_TYPE_SHA384 = 6,
WC_HASH_TYPE_SHA512 = 7,
WC_HASH_TYPE_MD5_SHA = 8,
};
typedef union { typedef union {
#ifndef NO_MD5 #ifndef NO_MD5
wc_Md5 md5; wc_Md5 md5;

View File

@@ -58,31 +58,31 @@ enum {
/* If any hash is not enabled, add the ID here. */ /* If any hash is not enabled, add the ID here. */
#ifdef NO_MD5 #ifdef NO_MD5
WC_MD5 = 0, WC_MD5 = WC_HASH_TYPE_MD5+,
#endif #endif
#ifdef NO_SHA #ifdef NO_SHA
WC_SHA = 1, WC_SHA = WC_HASH_TYPE_SHA,
#endif #endif
#ifdef NO_SHA256 #ifdef NO_SHA256
WC_SHA256 = 2, WC_SHA256 = WC_HASH_TYPE_SHA256,
#endif #endif
#ifndef WOLFSSL_SHA512 #ifndef WOLFSSL_SHA512
WC_SHA512 = 4, WC_SHA512 = WC_HASH_TYPE_SHA512,
#endif #endif
#ifndef WOLFSSL_SHA384 #ifndef WOLFSSL_SHA384
WC_SHA384 = 5, WC_SHA384 = WC_HASH_TYPE_SHA384,
#endif #endif
#ifndef HAVE_BLAKE2 #ifndef HAVE_BLAKE2
BLAKE2B_ID = 7, BLAKE2B_ID = WC_HASH_TYPE_BLAKE2B,
#endif #endif
#ifndef WOLFSSL_SHA224 #ifndef WOLFSSL_SHA224
WC_SHA224 = 8, WC_SHA224 = WC_HASH_TYPE_SHA224,
#endif #endif
#ifndef WOLFSSL_SHA3 #ifndef WOLFSSL_SHA3
WC_SHA3_224 = 10, WC_SHA3_224 = WC_HASH_TYPE_SHA3_224,
WC_SHA3_256 = 11, WC_SHA3_256 = WC_HASH_TYPE_SHA3_256,
WC_SHA3_384 = 12, WC_SHA3_384 = WC_HASH_TYPE_SHA3_384,
WC_SHA3_512 = 13, WC_SHA3_512 = WC_HASH_TYPE_SHA3_512,
#endif #endif
}; };
@@ -120,7 +120,7 @@ typedef union {
Blake2b blake2b; Blake2b blake2b;
#endif #endif
#ifdef WOLFSSL_SHA3 #ifdef WOLFSSL_SHA3
Sha3 sha3; wc_Sha3 sha3;
#endif #endif
} Hash; } Hash;

View File

@@ -37,7 +37,7 @@
/* in bytes */ /* in bytes */
enum { enum {
MD2 = 6, /* hash type unique */ MD2 = WC_HASH_TYPE_MD2,
MD2_BLOCK_SIZE = 16, MD2_BLOCK_SIZE = 16,
MD2_DIGEST_SIZE = 16, MD2_DIGEST_SIZE = 16,
MD2_PAD_SIZE = 16, MD2_PAD_SIZE = 16,

View File

@@ -36,7 +36,7 @@
/* in bytes */ /* in bytes */
enum { enum {
MD4 = 9, /* hash type unique */ MD4 = WC_HASH_TYPE_MD4,
MD4_BLOCK_SIZE = 64, MD4_BLOCK_SIZE = 64,
MD4_DIGEST_SIZE = 16, MD4_DIGEST_SIZE = 16,
MD4_PAD_SIZE = 56 MD4_PAD_SIZE = 56

View File

@@ -52,12 +52,13 @@
/* in bytes */ /* in bytes */
enum { enum {
WC_MD5 = 0, /* hash type unique */ WC_MD5 = WC_HASH_TYPE_MD5,
WC_MD5_BLOCK_SIZE = 64, WC_MD5_BLOCK_SIZE = 64,
WC_MD5_DIGEST_SIZE = 16, WC_MD5_DIGEST_SIZE = 16,
WC_MD5_PAD_SIZE = 56 WC_MD5_PAD_SIZE = 56
}; };
#ifdef WOLFSSL_MICROCHIP_PIC32MZ #ifdef WOLFSSL_MICROCHIP_PIC32MZ
#include <wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h> #include <wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h>
#endif #endif

View File

@@ -34,7 +34,7 @@
typedef struct Sha3 { typedef struct Sha3 {
XSecure_Sha3 hw; XSecure_Sha3 hw;
XCsuDma dma; XCsuDma dma;
} Sha3; } wc_Sha3;
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@@ -72,7 +72,7 @@
/* in bytes */ /* in bytes */
enum { enum {
WC_SHA = 1, /* hash type unique */ WC_SHA = WC_HASH_TYPE_SHA,
WC_SHA_BLOCK_SIZE = 64, WC_SHA_BLOCK_SIZE = 64,
WC_SHA_DIGEST_SIZE = 20, WC_SHA_DIGEST_SIZE = 20,
WC_SHA_PAD_SIZE = 56 WC_SHA_PAD_SIZE = 56

View File

@@ -93,12 +93,13 @@
/* in bytes */ /* in bytes */
enum { enum {
WC_SHA256 = 2, /* hash type unique */ WC_SHA256 = WC_HASH_TYPE_SHA256,
WC_SHA256_BLOCK_SIZE = 64, WC_SHA256_BLOCK_SIZE = 64,
WC_SHA256_DIGEST_SIZE = 32, WC_SHA256_DIGEST_SIZE = 32,
WC_SHA256_PAD_SIZE = 56 WC_SHA256_PAD_SIZE = 56
}; };
#ifdef WOLFSSL_TI_HASH #ifdef WOLFSSL_TI_HASH
#include "wolfssl/wolfcrypt/port/ti/ti-hash.h" #include "wolfssl/wolfcrypt/port/ti/ti-hash.h"
#elif defined(WOLFSSL_IMX6_CAAM) #elif defined(WOLFSSL_IMX6_CAAM)
@@ -160,12 +161,13 @@ WOLFSSL_API void wc_Sha256SizeSet(wc_Sha256*, word32);
/* in bytes */ /* in bytes */
enum { enum {
WC_SHA224 = 8, /* hash type unique */ WC_SHA224 = WC_HASH_TYPE_SHA224,
WC_SHA224_BLOCK_SIZE = WC_SHA256_BLOCK_SIZE, WC_SHA224_BLOCK_SIZE = WC_SHA256_BLOCK_SIZE,
WC_SHA224_DIGEST_SIZE = 28, WC_SHA224_DIGEST_SIZE = 28,
WC_SHA224_PAD_SIZE = WC_SHA256_PAD_SIZE WC_SHA224_PAD_SIZE = WC_SHA256_PAD_SIZE
}; };
typedef wc_Sha256 wc_Sha224; typedef wc_Sha256 wc_Sha224;
#endif /* HAVE_FIPS */ #endif /* HAVE_FIPS */

View File

@@ -44,21 +44,21 @@
/* in bytes */ /* in bytes */
enum { enum {
SHA3_224 = 10, /* hash type unique */ WC_SHA3_224 = WC_HASH_TYPE_SHA3_224,
SHA3_224_DIGEST_SIZE = 28, WC_SHA3_224_DIGEST_SIZE = 28,
SHA3_224_COUNT = 18, WC_SHA3_224_COUNT = 18,
SHA3_256 = 11, /* hash type unique */ WC_SHA3_256 = WC_HASH_TYPE_SHA3_256,
SHA3_256_DIGEST_SIZE = 32, WC_SHA3_256_DIGEST_SIZE = 32,
SHA3_256_COUNT = 17, WC_SHA3_256_COUNT = 17,
SHA3_384 = 12, /* hash type unique */ WC_SHA3_384 = WC_HASH_TYPE_SHA3_384,
SHA3_384_DIGEST_SIZE = 48, WC_SHA3_384_DIGEST_SIZE = 48,
SHA3_384_COUNT = 13, WC_SHA3_384_COUNT = 13,
SHA3_512 = 13, /* hash type unique */ WC_SHA3_512 = WC_HASH_TYPE_SHA3_512,
SHA3_512_DIGEST_SIZE = 64, WC_SHA3_512_DIGEST_SIZE = 64,
SHA3_512_COUNT = 9, WC_SHA3_512_COUNT = 9,
/* These values are used for HMAC, not SHA-3 directly. /* These values are used for HMAC, not SHA-3 directly.
* They come from from FIPS PUB 202. */ * They come from from FIPS PUB 202. */
@@ -68,14 +68,17 @@ enum {
WC_SHA3_512_BLOCK_SIZE = 72, WC_SHA3_512_BLOCK_SIZE = 72,
}; };
#define WC_SHA3_224 SHA3_224 #ifndef NO_OLD_WC_NAMES
#define WC_SHA3_224_DIGEST_SIZE SHA3_224_DIGEST_SIZE #define SHA3_224 WC_SHA3_224
#define WC_SHA3_256 SHA3_256 #define SHA3_224_DIGEST_SIZE WC_SHA3_224_DIGEST_SIZE
#define WC_SHA3_256_DIGEST_SIZE SHA3_256_DIGEST_SIZE #define SHA3_256 WC_SHA3_256
#define WC_SHA3_384 SHA3_384 #define SHA3_256_DIGEST_SIZE WC_SHA3_256_DIGEST_SIZE
#define WC_SHA3_384_DIGEST_SIZE SHA3_384_DIGEST_SIZE #define SHA3_384 WC_SHA3_384
#define WC_SHA3_512 SHA3_512 #define SHA3_384_DIGEST_SIZE WC_SHA3_384_DIGEST_SIZE
#define WC_SHA3_512_DIGEST_SIZE SHA3_512_DIGEST_SIZE #define SHA3_512 WC_SHA3_512
#define SHA3_512_DIGEST_SIZE WC_SHA3_512_DIGEST_SIZE
#define Sha3 wc_Sha3
#endif
#ifdef WOLFSSL_XILINX_CRYPT #ifdef WOLFSSL_XILINX_CRYPT
@@ -95,37 +98,37 @@ typedef struct Sha3 {
#ifdef WOLFSSL_ASYNC_CRYPT #ifdef WOLFSSL_ASYNC_CRYPT
WC_ASYNC_DEV asyncDev; WC_ASYNC_DEV asyncDev;
#endif /* WOLFSSL_ASYNC_CRYPT */ #endif /* WOLFSSL_ASYNC_CRYPT */
} Sha3; } wc_Sha3;
#endif #endif
#endif /* HAVE_FIPS */ #endif /* HAVE_FIPS */
WOLFSSL_API int wc_InitSha3_224(Sha3*, void*, int); WOLFSSL_API int wc_InitSha3_224(wc_Sha3*, void*, int);
WOLFSSL_API int wc_Sha3_224_Update(Sha3*, const byte*, word32); WOLFSSL_API int wc_Sha3_224_Update(wc_Sha3*, const byte*, word32);
WOLFSSL_API int wc_Sha3_224_Final(Sha3*, byte*); WOLFSSL_API int wc_Sha3_224_Final(wc_Sha3*, byte*);
WOLFSSL_API void wc_Sha3_224_Free(Sha3*); WOLFSSL_API void wc_Sha3_224_Free(wc_Sha3*);
WOLFSSL_API int wc_Sha3_224_GetHash(Sha3*, byte*); WOLFSSL_API int wc_Sha3_224_GetHash(wc_Sha3*, byte*);
WOLFSSL_API int wc_Sha3_224_Copy(Sha3* src, Sha3* dst); WOLFSSL_API int wc_Sha3_224_Copy(wc_Sha3* src, wc_Sha3* dst);
WOLFSSL_API int wc_InitSha3_256(Sha3*, void*, int); WOLFSSL_API int wc_InitSha3_256(wc_Sha3*, void*, int);
WOLFSSL_API int wc_Sha3_256_Update(Sha3*, const byte*, word32); WOLFSSL_API int wc_Sha3_256_Update(wc_Sha3*, const byte*, word32);
WOLFSSL_API int wc_Sha3_256_Final(Sha3*, byte*); WOLFSSL_API int wc_Sha3_256_Final(wc_Sha3*, byte*);
WOLFSSL_API void wc_Sha3_256_Free(Sha3*); WOLFSSL_API void wc_Sha3_256_Free(wc_Sha3*);
WOLFSSL_API int wc_Sha3_256_GetHash(Sha3*, byte*); WOLFSSL_API int wc_Sha3_256_GetHash(wc_Sha3*, byte*);
WOLFSSL_API int wc_Sha3_256_Copy(Sha3* src, Sha3* dst); WOLFSSL_API int wc_Sha3_256_Copy(wc_Sha3* src, wc_Sha3* dst);
WOLFSSL_API int wc_InitSha3_384(Sha3*, void*, int); WOLFSSL_API int wc_InitSha3_384(wc_Sha3*, void*, int);
WOLFSSL_API int wc_Sha3_384_Update(Sha3*, const byte*, word32); WOLFSSL_API int wc_Sha3_384_Update(wc_Sha3*, const byte*, word32);
WOLFSSL_API int wc_Sha3_384_Final(Sha3*, byte*); WOLFSSL_API int wc_Sha3_384_Final(wc_Sha3*, byte*);
WOLFSSL_API void wc_Sha3_384_Free(Sha3*); WOLFSSL_API void wc_Sha3_384_Free(wc_Sha3*);
WOLFSSL_API int wc_Sha3_384_GetHash(Sha3*, byte*); WOLFSSL_API int wc_Sha3_384_GetHash(wc_Sha3*, byte*);
WOLFSSL_API int wc_Sha3_384_Copy(Sha3* src, Sha3* dst); WOLFSSL_API int wc_Sha3_384_Copy(wc_Sha3* src, wc_Sha3* dst);
WOLFSSL_API int wc_InitSha3_512(Sha3*, void*, int); WOLFSSL_API int wc_InitSha3_512(wc_Sha3*, void*, int);
WOLFSSL_API int wc_Sha3_512_Update(Sha3*, const byte*, word32); WOLFSSL_API int wc_Sha3_512_Update(wc_Sha3*, const byte*, word32);
WOLFSSL_API int wc_Sha3_512_Final(Sha3*, byte*); WOLFSSL_API int wc_Sha3_512_Final(wc_Sha3*, byte*);
WOLFSSL_API void wc_Sha3_512_Free(Sha3*); WOLFSSL_API void wc_Sha3_512_Free(wc_Sha3*);
WOLFSSL_API int wc_Sha3_512_GetHash(Sha3*, byte*); WOLFSSL_API int wc_Sha3_512_GetHash(wc_Sha3*, byte*);
WOLFSSL_API int wc_Sha3_512_Copy(Sha3* src, Sha3* dst); WOLFSSL_API int wc_Sha3_512_Copy(wc_Sha3* src, wc_Sha3* dst);
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@@ -81,7 +81,7 @@
/* in bytes */ /* in bytes */
enum { enum {
WC_SHA512 = 4, /* hash type unique */ WC_SHA512 = WC_HASH_TYPE_SHA512,
WC_SHA512_BLOCK_SIZE = 128, WC_SHA512_BLOCK_SIZE = 128,
WC_SHA512_DIGEST_SIZE = 64, WC_SHA512_DIGEST_SIZE = 64,
WC_SHA512_PAD_SIZE = 112 WC_SHA512_PAD_SIZE = 112
@@ -133,12 +133,13 @@ WOLFSSL_API int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst);
/* in bytes */ /* in bytes */
enum { enum {
WC_SHA384 = 5, /* hash type unique */ WC_SHA384 = WC_HASH_TYPE_SHA384,
WC_SHA384_BLOCK_SIZE = WC_SHA512_BLOCK_SIZE, WC_SHA384_BLOCK_SIZE = WC_SHA512_BLOCK_SIZE,
WC_SHA384_DIGEST_SIZE = 48, WC_SHA384_DIGEST_SIZE = 48,
WC_SHA384_PAD_SIZE = WC_SHA512_PAD_SIZE WC_SHA384_PAD_SIZE = WC_SHA512_PAD_SIZE
}; };
typedef wc_Sha512 wc_Sha384; typedef wc_Sha512 wc_Sha384;
#endif /* HAVE_FIPS */ #endif /* HAVE_FIPS */

View File

@@ -483,7 +483,24 @@
MIN_STACK_BUFFER = 8 MIN_STACK_BUFFER = 8
}; };
/* hash types */
enum wc_HashType {
WC_HASH_TYPE_NONE = 0,
WC_HASH_TYPE_MD2 = 1,
WC_HASH_TYPE_MD4 = 2,
WC_HASH_TYPE_MD5 = 3,
WC_HASH_TYPE_SHA = 4, /* SHA-1 (not old SHA-0) */
WC_HASH_TYPE_SHA224 = 5,
WC_HASH_TYPE_SHA256 = 6,
WC_HASH_TYPE_SHA384 = 7,
WC_HASH_TYPE_SHA512 = 8,
WC_HASH_TYPE_MD5_SHA = 9,
WC_HASH_TYPE_SHA3_224 = 10,
WC_HASH_TYPE_SHA3_256 = 11,
WC_HASH_TYPE_SHA3_384 = 12,
WC_HASH_TYPE_SHA3_512 = 13,
WC_HASH_TYPE_BLAKE2B = 14,
};
/* settings detection for compile vs runtime math incompatibilities */ /* settings detection for compile vs runtime math incompatibilities */
enum { enum {