API参考
载入中...
搜索中...
未找到
crypt_sha2.h
1/*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16#ifndef CRYPT_SHA2_H
17#define CRYPT_SHA2_H
18
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_SHA2
21
22#include <stdint.h>
23#include <stdlib.h>
24#include "crypt_types.h"
25#include "bsl_params.h"
26
27#ifdef __cplusplus
28extern "C" {
29#endif /* __cpluscplus */
30
32
33#ifdef HITLS_CRYPTO_SHA224
34#define CRYPT_SHA2_224_BLOCKSIZE 64
35#define CRYPT_SHA2_224_DIGESTSIZE 28
36#endif // HITLS_CRYPTO_SHA224
37
38#ifdef HITLS_CRYPTO_SHA256
39#define CRYPT_SHA2_256_BLOCKSIZE 64
40#define CRYPT_SHA2_256_DIGESTSIZE 32
41#define CRYPT_SHA256_STATE_SIZE 8
42#endif // HITLS_CRYPTO_SHA256
43
44#ifdef HITLS_CRYPTO_SHA384
45#define CRYPT_SHA2_384_BLOCKSIZE 128
46#define CRYPT_SHA2_384_DIGESTSIZE 48
47#endif // HITLS_CRYPTO_SHA384
48
49#ifdef HITLS_CRYPTO_SHA512
50#define CRYPT_SHA2_512_BLOCKSIZE 128
51#define CRYPT_SHA2_512_DIGESTSIZE 64
52#endif // HITLS_CRYPTO_SHA512
53
54#ifdef HITLS_CRYPTO_SHA256
55/* SHA2 256 ctx */
56typedef struct CryptSha256Ctx {
57 uint32_t h[CRYPT_SHA256_STATE_SIZE]; /* 256 bits for SHA256 state */
58 uint32_t block[CRYPT_SHA2_256_BLOCKSIZE / sizeof(uint32_t)]; /* 512 bits block cache */
59 uint32_t lNum, hNum; /* input bits counter, max 2^64 bits */
60 uint32_t blocklen; /* block length */
61 uint32_t outlen; /* digest output length */
62 uint32_t errorCode; /* error Code */
63} CRYPT_SHA2_256_Ctx;
64#endif
65
66#ifdef HITLS_CRYPTO_SHA224
67/* SHA2 224 ctx */
68typedef struct CryptSha256Ctx CRYPT_SHA2_224_Ctx;
69#endif
70
71#ifdef HITLS_CRYPTO_SHA512
72/* SHA2 512 ctx */
73typedef struct CryptSha2512Ctx {
74 uint64_t h[CRYPT_SHA2_512_DIGESTSIZE / sizeof(uint64_t)];
75 uint8_t block[CRYPT_SHA2_512_BLOCKSIZE];
76 uint64_t lNum, hNum;
77 uint32_t num, mdlen;
78 uint32_t errorCode; /* error Code */
79} CRYPT_SHA2_512_Ctx;
80#endif
81
82#ifdef HITLS_CRYPTO_SHA384
83/* SHA2 384 ctx */
84typedef struct CryptSha2512Ctx CRYPT_SHA2_384_Ctx;
85#endif
86
87#define CRYPT_SHA2_224_Squeeze NULL
88#define CRYPT_SHA2_256_Squeeze NULL
89#define CRYPT_SHA2_384_Squeeze NULL
90#define CRYPT_SHA2_512_Squeeze NULL
91
92#ifdef HITLS_CRYPTO_SHA224
93
94#define CRYPT_SHA2_224_NewCtx CRYPT_SHA2_256_NewCtx
95#define CRYPT_SHA2_224_NewCtxEx CRYPT_SHA2_256_NewCtxEx
96#define CRYPT_SHA2_224_FreeCtx CRYPT_SHA2_256_FreeCtx
97#define CRYPT_SHA2_224_Deinit CRYPT_SHA2_256_Deinit
98#define CRYPT_SHA2_224_CopyCtx CRYPT_SHA2_256_CopyCtx
99#define CRYPT_SHA2_224_DupCtx CRYPT_SHA2_256_DupCtx
100#define CRYPT_SHA2_224_Update CRYPT_SHA2_256_Update
101#define CRYPT_SHA2_224_Final CRYPT_SHA2_256_Final
102
126int32_t CRYPT_SHA2_224_Init(CRYPT_SHA2_224_Ctx *ctx);
127
138int32_t CRYPT_SHA2_224_InitEx(CRYPT_SHA2_224_Ctx *ctx, void *param);
139
140#ifdef HITLS_CRYPTO_PROVIDER
151int32_t CRYPT_SHA2_224_GetParam(CRYPT_SHA2_224_Ctx *ctx, BSL_Param *param);
152#else
153#define CRYPT_SHA2_224_GetParam NULL
154#endif
155
156#endif // HITLS_CRYPTO_SHA224
157
158#ifdef HITLS_CRYPTO_SHA256
159
167CRYPT_SHA2_256_Ctx *CRYPT_SHA2_256_NewCtx(void);
168
179CRYPT_SHA2_256_Ctx *CRYPT_SHA2_256_NewCtxEx(void *libCtx, int32_t algId);
180
187void CRYPT_SHA2_256_FreeCtx(CRYPT_SHA2_256_Ctx *ctx);
188
214int32_t CRYPT_SHA2_256_Init(CRYPT_SHA2_256_Ctx *ctx);
215
226int32_t CRYPT_SHA2_256_InitEx(CRYPT_SHA2_256_Ctx *ctx, void *param);
227
254int32_t CRYPT_SHA2_256_Update(CRYPT_SHA2_256_Ctx *ctx, const uint8_t *data, uint32_t nbytes);
255
283int32_t CRYPT_SHA2_256_Final(CRYPT_SHA2_256_Ctx *ctx, uint8_t *digest, uint32_t *outlen);
284
285typedef struct {
286 uint32_t num;
287 CRYPT_SHA2_256_Ctx *ctxs;
288} CRYPT_SHA2_256_MB_Ctx;
289
302CRYPT_SHA2_256_MB_Ctx *CRYPT_SHA256_MBNewCtx(uint32_t num);
303
310void CRYPT_SHA256_MBFreeCtx(CRYPT_SHA2_256_MB_Ctx *ctx);
311
325int32_t CRYPT_SHA256_MBInit(CRYPT_SHA2_256_MB_Ctx *ctx);
326
347int32_t CRYPT_SHA256_MBUpdate(CRYPT_SHA2_256_MB_Ctx *ctx, const uint8_t *data[], uint32_t nbytes[], uint32_t num);
348
367int32_t CRYPT_SHA256_MBFinal(CRYPT_SHA2_256_MB_Ctx *ctx, uint8_t *digest[], uint32_t *outlen, uint32_t num);
368
382void CRYPT_SHA256x2_Compress(uint32_t state1[CRYPT_SHA256_STATE_SIZE], uint32_t state2[CRYPT_SHA256_STATE_SIZE],
383 const uint8_t *block1, const uint8_t *block2, uint32_t nblocks);
384
404int32_t CRYPT_SHA256_MB(const uint8_t *data[], uint32_t nbytes, uint8_t *digest[], uint32_t *outlen, uint32_t num);
405
427int32_t CRYPT_SHA256x2(uint32_t state1[CRYPT_SHA256_STATE_SIZE], uint32_t state2[CRYPT_SHA256_STATE_SIZE],
428 const uint8_t *data1, const uint8_t *data2, uint32_t nbytes,
429 uint8_t dgst1[CRYPT_SHA2_256_DIGESTSIZE], uint8_t dgst2[CRYPT_SHA2_256_DIGESTSIZE]);
430
441int32_t CRYPT_SHA2_256_Deinit(CRYPT_SHA2_256_Ctx *ctx);
442
449int32_t CRYPT_SHA2_256_CopyCtx(CRYPT_SHA2_256_Ctx *dst, const CRYPT_SHA2_256_Ctx *src);
450
456CRYPT_SHA2_256_Ctx *CRYPT_SHA2_256_DupCtx(const CRYPT_SHA2_256_Ctx *src);
457
458#ifdef HITLS_CRYPTO_PROVIDER
469int32_t CRYPT_SHA2_256_GetParam(CRYPT_SHA2_256_Ctx *ctx, BSL_Param *param);
470#else
471#define CRYPT_SHA2_256_GetParam NULL
472#endif
473#endif // HITLS_CRYPTO_SHA256
474
475#ifdef HITLS_CRYPTO_SHA384
476
477#define CRYPT_SHA2_384_NewCtx CRYPT_SHA2_512_NewCtx
478#define CRYPT_SHA2_384_NewCtxEx CRYPT_SHA2_512_NewCtxEx
479#define CRYPT_SHA2_384_FreeCtx CRYPT_SHA2_512_FreeCtx
480#define CRYPT_SHA2_384_Deinit CRYPT_SHA2_512_Deinit
481#define CRYPT_SHA2_384_CopyCtx CRYPT_SHA2_512_CopyCtx
482#define CRYPT_SHA2_384_DupCtx CRYPT_SHA2_512_DupCtx
483#define CRYPT_SHA2_384_Update CRYPT_SHA2_512_Update
484#define CRYPT_SHA2_384_Final CRYPT_SHA2_512_Final
485
508int32_t CRYPT_SHA2_384_Init(CRYPT_SHA2_384_Ctx *ctx);
509
520int32_t CRYPT_SHA2_384_InitEx(CRYPT_SHA2_384_Ctx *ctx, void *param);
521
522#ifdef HITLS_CRYPTO_PROVIDER
533int32_t CRYPT_SHA2_384_GetParam(CRYPT_SHA2_384_Ctx *ctx, BSL_Param *param);
534#else
535#define CRYPT_SHA2_384_GetParam NULL
536#endif
537
538#endif // HITLS_CRYPTO_SHA384
539
540#ifdef HITLS_CRYPTO_SHA512
541
549CRYPT_SHA2_512_Ctx *CRYPT_SHA2_512_NewCtx(void);
550
561CRYPT_SHA2_512_Ctx *CRYPT_SHA2_512_NewCtxEx(void *libCtx, int32_t algId);
562
569void CRYPT_SHA2_512_FreeCtx(CRYPT_SHA2_512_Ctx *ctx);
570
593int32_t CRYPT_SHA2_512_Init(CRYPT_SHA2_512_Ctx *ctx);
594
605int32_t CRYPT_SHA2_512_InitEx(CRYPT_SHA2_512_Ctx *ctx, void *param);
606
631int32_t CRYPT_SHA2_512_Update(CRYPT_SHA2_512_Ctx *ctx, const uint8_t *data, uint32_t nbytes);
632
657int32_t CRYPT_SHA2_512_Final(CRYPT_SHA2_512_Ctx *ctx, uint8_t *digest, uint32_t *len);
658
669int32_t CRYPT_SHA2_512_Deinit(CRYPT_SHA2_512_Ctx *ctx);
670
677int32_t CRYPT_SHA2_512_CopyCtx(CRYPT_SHA2_512_Ctx *dst, const CRYPT_SHA2_512_Ctx *src);
678
684CRYPT_SHA2_512_Ctx *CRYPT_SHA2_512_DupCtx(const CRYPT_SHA2_512_Ctx *src);
685
686#ifdef HITLS_CRYPTO_PROVIDER
697int32_t CRYPT_SHA2_512_GetParam(CRYPT_SHA2_512_Ctx *ctx, BSL_Param *param);
698#else
699#define CRYPT_SHA2_512_GetParam NULL
700#endif
701#endif // HITLS_CRYPTO_SHA512
702
703#ifdef __cplusplus
704}
705#endif
706
707#endif // HITLS_CRYPTO_SHA2
708
709#endif // CRYPT_SHA2_H