19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_SHA3
24#include "crypt_types.h"
26#ifdef HITLS_CRYPTO_PROVIDER
27#include "bsl_params.h"
38#define CRYPT_SHA3_224_BLOCKSIZE 144
39#define CRYPT_SHA3_224_DIGESTSIZE 28
42#define CRYPT_SHA3_256_BLOCKSIZE 136
43#define CRYPT_SHA3_256_DIGESTSIZE 32
46#define CRYPT_SHA3_384_BLOCKSIZE 104
47#define CRYPT_SHA3_384_DIGESTSIZE 48
50#define CRYPT_SHA3_512_BLOCKSIZE 72
51#define CRYPT_SHA3_512_DIGESTSIZE 64
54#define CRYPT_SHAKE128_BLOCKSIZE 168
55#define CRYPT_SHAKE128_DIGESTSIZE 0
58#define CRYPT_SHAKE256_BLOCKSIZE 136
59#define CRYPT_SHAKE256_DIGESTSIZE 0
72typedef CRYPT_SHA3_Ctx CRYPT_SHA3_224_Ctx;
74typedef CRYPT_SHA3_Ctx CRYPT_SHA3_256_Ctx;
76typedef CRYPT_SHA3_Ctx CRYPT_SHA3_384_Ctx;
78typedef CRYPT_SHA3_Ctx CRYPT_SHA3_512_Ctx;
80typedef CRYPT_SHA3_Ctx CRYPT_SHAKE128_Ctx;
82typedef CRYPT_SHA3_Ctx CRYPT_SHAKE256_Ctx;
84CRYPT_SHA3_Ctx *CRYPT_SHA3_NewCtx(
void);
85#define CRYPT_SHA3_224_NewCtx CRYPT_SHA3_NewCtx
86#define CRYPT_SHA3_256_NewCtx CRYPT_SHA3_NewCtx
87#define CRYPT_SHA3_384_NewCtx CRYPT_SHA3_NewCtx
88#define CRYPT_SHA3_512_NewCtx CRYPT_SHA3_NewCtx
89#define CRYPT_SHAKE128_NewCtx CRYPT_SHA3_NewCtx
90#define CRYPT_SHAKE256_NewCtx CRYPT_SHA3_NewCtx
92CRYPT_SHA3_Ctx *CRYPT_SHA3_NewCtxEx(
void *libCtx, int32_t algId);
93#define CRYPT_SHA3_224_NewCtxEx CRYPT_SHA3_NewCtxEx
94#define CRYPT_SHA3_256_NewCtxEx CRYPT_SHA3_NewCtxEx
95#define CRYPT_SHA3_384_NewCtxEx CRYPT_SHA3_NewCtxEx
96#define CRYPT_SHA3_512_NewCtxEx CRYPT_SHA3_NewCtxEx
97#define CRYPT_SHAKE128_NewCtxEx CRYPT_SHA3_NewCtxEx
98#define CRYPT_SHAKE256_NewCtxEx CRYPT_SHA3_NewCtxEx
100void CRYPT_SHA3_FreeCtx(CRYPT_SHA3_Ctx *ctx);
101#define CRYPT_SHA3_224_FreeCtx CRYPT_SHA3_FreeCtx
102#define CRYPT_SHA3_256_FreeCtx CRYPT_SHA3_FreeCtx
103#define CRYPT_SHA3_384_FreeCtx CRYPT_SHA3_FreeCtx
104#define CRYPT_SHA3_512_FreeCtx CRYPT_SHA3_FreeCtx
105#define CRYPT_SHAKE128_FreeCtx CRYPT_SHA3_FreeCtx
106#define CRYPT_SHAKE256_FreeCtx CRYPT_SHA3_FreeCtx
109int32_t CRYPT_SHA3_224_Init(CRYPT_SHA3_224_Ctx *ctx);
110int32_t CRYPT_SHA3_224_InitEx(CRYPT_SHA3_224_Ctx *ctx,
void *param);
112int32_t CRYPT_SHA3_256_Init(CRYPT_SHA3_256_Ctx *ctx);
113int32_t CRYPT_SHA3_256_InitEx(CRYPT_SHA3_256_Ctx *ctx,
void *param);
115int32_t CRYPT_SHA3_384_Init(CRYPT_SHA3_384_Ctx *ctx);
116int32_t CRYPT_SHA3_384_InitEx(CRYPT_SHA3_384_Ctx *ctx,
void *param);
118int32_t CRYPT_SHA3_512_Init(CRYPT_SHA3_512_Ctx *ctx);
119int32_t CRYPT_SHA3_512_InitEx(CRYPT_SHA3_512_Ctx *ctx,
void *param);
121int32_t CRYPT_SHAKE128_Init(CRYPT_SHAKE128_Ctx *ctx);
122int32_t CRYPT_SHAKE128_InitEx(CRYPT_SHAKE128_Ctx *ctx,
void *param);
124int32_t CRYPT_SHAKE256_Init(CRYPT_SHAKE256_Ctx *ctx);
125int32_t CRYPT_SHAKE256_InitEx(CRYPT_SHAKE256_Ctx *ctx,
void *param);
128int32_t CRYPT_SHA3_Update(CRYPT_SHA3_Ctx *ctx,
const uint8_t *in, uint32_t len);
129#define CRYPT_SHA3_224_Update CRYPT_SHA3_Update
130#define CRYPT_SHA3_256_Update CRYPT_SHA3_Update
131#define CRYPT_SHA3_384_Update CRYPT_SHA3_Update
132#define CRYPT_SHA3_512_Update CRYPT_SHA3_Update
133#define CRYPT_SHAKE128_Update CRYPT_SHA3_Update
134#define CRYPT_SHAKE256_Update CRYPT_SHA3_Update
137int32_t CRYPT_SHA3_Final(CRYPT_SHA3_Ctx *ctx, uint8_t *out, uint32_t *len);
138#define CRYPT_SHA3_224_Final CRYPT_SHA3_Final
139#define CRYPT_SHA3_256_Final CRYPT_SHA3_Final
140#define CRYPT_SHA3_384_Final CRYPT_SHA3_Final
141#define CRYPT_SHA3_512_Final CRYPT_SHA3_Final
142#define CRYPT_SHAKE128_Final CRYPT_SHA3_Final
143#define CRYPT_SHAKE256_Final CRYPT_SHA3_Final
145int32_t CRYPT_SHA3_Squeeze(CRYPT_SHA3_Ctx *ctx, uint8_t *out, uint32_t len);
146#define CRYPT_SHA3_224_Squeeze NULL
147#define CRYPT_SHA3_256_Squeeze NULL
148#define CRYPT_SHA3_384_Squeeze NULL
149#define CRYPT_SHA3_512_Squeeze NULL
150#define CRYPT_SHAKE128_Squeeze CRYPT_SHA3_Squeeze
151#define CRYPT_SHAKE256_Squeeze CRYPT_SHA3_Squeeze
154int32_t CRYPT_SHA3_Deinit(CRYPT_SHA3_Ctx *ctx);
155#define CRYPT_SHA3_224_Deinit CRYPT_SHA3_Deinit
156#define CRYPT_SHA3_256_Deinit CRYPT_SHA3_Deinit
157#define CRYPT_SHA3_384_Deinit CRYPT_SHA3_Deinit
158#define CRYPT_SHA3_512_Deinit CRYPT_SHA3_Deinit
159#define CRYPT_SHAKE128_Deinit CRYPT_SHA3_Deinit
160#define CRYPT_SHAKE256_Deinit CRYPT_SHA3_Deinit
163int32_t CRYPT_SHA3_CopyCtx(CRYPT_SHA3_Ctx *dst,
const CRYPT_SHA3_Ctx *src);
164#define CRYPT_SHA3_224_CopyCtx CRYPT_SHA3_CopyCtx
165#define CRYPT_SHA3_256_CopyCtx CRYPT_SHA3_CopyCtx
166#define CRYPT_SHA3_384_CopyCtx CRYPT_SHA3_CopyCtx
167#define CRYPT_SHA3_512_CopyCtx CRYPT_SHA3_CopyCtx
168#define CRYPT_SHAKE128_CopyCtx CRYPT_SHA3_CopyCtx
169#define CRYPT_SHAKE256_CopyCtx CRYPT_SHA3_CopyCtx
172CRYPT_SHA3_Ctx *CRYPT_SHA3_DupCtx(
const CRYPT_SHA3_Ctx *src);
173#define CRYPT_SHA3_224_DupCtx CRYPT_SHA3_DupCtx
174#define CRYPT_SHA3_256_DupCtx CRYPT_SHA3_DupCtx
175#define CRYPT_SHA3_384_DupCtx CRYPT_SHA3_DupCtx
176#define CRYPT_SHA3_512_DupCtx CRYPT_SHA3_DupCtx
177#define CRYPT_SHAKE128_DupCtx CRYPT_SHA3_DupCtx
178#define CRYPT_SHAKE256_DupCtx CRYPT_SHA3_DupCtx
180#ifdef HITLS_CRYPTO_PROVIDER
181int32_t CRYPT_SHA3_224_GetParam(CRYPT_SHA3_224_Ctx *ctx, BSL_Param *param);
182int32_t CRYPT_SHA3_256_GetParam(CRYPT_SHA3_256_Ctx *ctx, BSL_Param *param);
183int32_t CRYPT_SHA3_384_GetParam(CRYPT_SHA3_384_Ctx *ctx, BSL_Param *param);
184int32_t CRYPT_SHA3_512_GetParam(CRYPT_SHA3_512_Ctx *ctx, BSL_Param *param);
185int32_t CRYPT_SHAKE128_GetParam(CRYPT_SHAKE128_Ctx *ctx, BSL_Param *param);
186int32_t CRYPT_SHAKE256_GetParam(CRYPT_SHAKE256_Ctx *ctx, BSL_Param *param);
188#define CRYPT_SHA3_224_GetParam NULL
189#define CRYPT_SHA3_256_GetParam NULL
190#define CRYPT_SHA3_384_GetParam NULL
191#define CRYPT_SHA3_512_GetParam NULL
192#define CRYPT_SHAKE128_GetParam NULL
193#define CRYPT_SHAKE256_GetParam NULL