#ifndef WOLFSSL_SHA3_H_
#define WOLFSSL_SHA3_H_
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/wolfcrypt/types.h>
#include <wolfssl/wolfcrypt/sha3.h>
#ifdef WOLFSSL_PREFIX
#include "prefix_sha.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
struct WOLFSSL_SHA3_CTX {
#ifdef WOLFSSL_SHA3
ALIGN16 void* holder[sizeof(wc_Sha3)];
#else
ALIGN16 void* holder[(424 + WC_ASYNC_DEV_SIZE) / sizeof(void*)];
#endif
};
#ifndef WOLFSSL_NOSHA3_224
typedef struct WOLFSSL_SHA3_CTX WOLFSSL_SHA3_224_CTX;
WOLFSSL_API int wolfSSL_SHA3_224_Init(WOLFSSL_SHA3_224_CTX* sha);
WOLFSSL_API int wolfSSL_SHA3_224_Update(WOLFSSL_SHA3_224_CTX* sha, const void* input,
unsigned long sz);
WOLFSSL_API int wolfSSL_SHA3_224_Final(unsigned char* output,
WOLFSSL_SHA3_224_CTX* sha);
enum {
SHA3_224_DIGEST_LENGTH = 28
};
typedef WOLFSSL_SHA3_224_CTX SHA3_224_CTX;
#define SHA3_224_Init wolfSSL_SHA3_224_Init
#define SHA3_224_Update wolfSSL_SHA3_224_Update
#define SHA3_224_Final wolfSSL_SHA3_224_Final
#if defined(NO_OLD_WC_NAMES) && !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
#define SHA3_224 wolfSSL_SHA3_224
#endif
#endif
#ifndef WOLFSSL_NOSHA3_256
typedef struct WOLFSSL_SHA3_CTX WOLFSSL_SHA3_256_CTX;
WOLFSSL_API int wolfSSL_SHA3_256_Init(WOLFSSL_SHA3_256_CTX* sha);
WOLFSSL_API int wolfSSL_SHA3_256_Update(WOLFSSL_SHA3_256_CTX* sha,
const void* input, unsigned long sz);
WOLFSSL_API int wolfSSL_SHA3_256_Final(unsigned char* output,
WOLFSSL_SHA3_256_CTX* sha);
enum {
SHA3_256_DIGEST_LENGTH = 32
};
typedef WOLFSSL_SHA3_256_CTX SHA3_256_CTX;
#define SHA3_256_Init wolfSSL_SHA3_256_Init
#define SHA3_256_Update wolfSSL_SHA3_256_Update
#define SHA3_256_Final wolfSSL_SHA3_256_Final
#if defined(NO_OLD_WC_NAMES) && !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
#define SHA3_256 wolfSSL_SHA3_256
#endif
#endif
typedef struct WOLFSSL_SHA3_CTX WOLFSSL_SHA3_384_CTX;
WOLFSSL_API int wolfSSL_SHA3_384_Init(WOLFSSL_SHA3_384_CTX* sha);
WOLFSSL_API int wolfSSL_SHA3_384_Update(WOLFSSL_SHA3_384_CTX* sha,
const void* input, unsigned long sz);
WOLFSSL_API int wolfSSL_SHA3_384_Final(unsigned char* output,
WOLFSSL_SHA3_384_CTX* sha);
enum {
SHA3_384_DIGEST_LENGTH = 48
};
typedef WOLFSSL_SHA3_384_CTX SHA3_384_CTX;
#define SHA3_384_Init wolfSSL_SHA3_384_Init
#define SHA3_384_Update wolfSSL_SHA3_384_Update
#define SHA3_384_Final wolfSSL_SHA3_384_Final
#if defined(NO_OLD_WC_NAMES) && !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
#define SHA3_384 wolfSSL_SHA3_384
#endif
#ifndef WOLFSSL_NOSHA3_512
typedef struct WOLFSSL_SHA3_CTX WOLFSSL_SHA3_512_CTX;
WOLFSSL_API int wolfSSL_SHA3_512_Init(WOLFSSL_SHA3_512_CTX* sha);
WOLFSSL_API int wolfSSL_SHA3_512_Update(WOLFSSL_SHA3_512_CTX* sha,
const void* input, unsigned long sz);
WOLFSSL_API int wolfSSL_SHA3_512_Final(unsigned char* output,
WOLFSSL_SHA3_512_CTX* sha);
enum {
SHA3_512_DIGEST_LENGTH = 64
};
typedef WOLFSSL_SHA3_512_CTX SHA3_512_CTX;
#define SHA3_512_Init wolfSSL_SHA3_512_Init
#define SHA3_512_Update wolfSSL_SHA3_512_Update
#define SHA3_512_Final wolfSSL_SHA3_512_Final
#if defined(NO_OLD_WC_NAMES) && !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
#define SHA3_512 wolfSSL_SHA3_512
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif