TrustCore SDK NanoCrypto API reference  version 7.0
sha3.h
Go to the documentation of this file.
1 /*
2  * sha3.h
3  *
4  * Header for sha3 operations.
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
24 #ifndef __SHA3_HEADER__
25 #define __SHA3_HEADER__
26 
27 #include "../cap/capdecl.h"
28 
29 #ifdef __ENABLE_MOCANA_CRYPTO_INTERFACE__
30 #include "../crypto_interface/crypto_interface_sha3_priv.h"
31 #endif
32 
33 #include "../common/moptions.h"
34 #include "../common/mtypes.h"
35 #include "../common/mocana.h"
36 #include "../crypto/hw_accel.h"
37 #include "../crypto/crypto.h"
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
44 #define SHA3_512_RESULT_SIZE (64)
45 #define SHA3_512_BLOCK_SIZE (72)
46 
48 #define SHA3_384_RESULT_SIZE (48)
49 #define SHA3_384_BLOCK_SIZE (104)
50 
52 #define SHA3_256_RESULT_SIZE (32)
53 #define SHA3_256_BLOCK_SIZE (136)
54 
56 #define SHA3_224_RESULT_SIZE (28)
57 #define SHA3_224_BLOCK_SIZE (144)
58 
59 #define MOCANA_SHA3_MODE_SHA3_224 0
60 #define MOCANA_SHA3_MODE_SHA3_256 1
61 #define MOCANA_SHA3_MODE_SHA3_384 2
62 #define MOCANA_SHA3_MODE_SHA3_512 3
63 #define MOCANA_SHA3_MODE_SHAKE128 4
64 #define MOCANA_SHA3_MODE_SHAKE256 5
65 
66 typedef struct SHA3_CTX
67 {
68  MocSymCtx pMocSymCtx;
69  ubyte4 enabled;
70  ubyte4 hashId;
71 
72  ubyte4 mode;
73  ubyte pBuffer[168]; /* Big enough for every mode, shake128's block size */
74  ubyte4 position;
75  ubyte8 pState[5][5]; /* 1600 bit cube */
76  byteBoolean initialized;
77 
78 } SHA3_CTX;
79 
80 
93 MOC_EXTERN MSTATUS SHA3_allocDigest(MOC_HASH(hwAccelDescr hwAccelCtx) BulkCtx *pSha3_ctx);
94 
95 
115 MOC_EXTERN MSTATUS SHA3_initDigest(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pSha3_ctx, ubyte4 mode);
116 
117 
132 MOC_EXTERN MSTATUS SHA3_updateDigest(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pSha3_ctx, ubyte *pMessage, ubyte4 messageLen);
133 
134 
151 MOC_EXTERN MSTATUS SHA3_finalDigest(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pSha3_ctx, ubyte *pResult, ubyte4 desiredResultLen);
152 
153 
165 MOC_EXTERN MSTATUS SHA3_freeDigest(MOC_HASH(hwAccelDescr hwAccelCtx) BulkCtx *pSha3_ctx);
166 
167 
194 MOC_EXTERN MSTATUS SHA3_completeDigest(MOC_HASH(hwAccelDescr hwAccelCtx) ubyte4 mode, ubyte *pMessage, ubyte4 messageLen, ubyte *pResult, ubyte4 desiredResultLen);
195 
196 
207 MOC_EXTERN MSTATUS SHA3_cloneCtx(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pDest, SHA3_CTX *pSrc);
208 
209 #ifdef __cplusplus
210 }
211 #endif
212 
213 #endif /* __SHA3_HEADER__ */
MOC_EXTERN MSTATUS SHA3_finalDigest(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pSha3_ctx, ubyte *pResult, ubyte4 desiredResultLen)
Finalizes a SHA3_CTX context and outputs the resulting output.
MOC_EXTERN MSTATUS SHA3_cloneCtx(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pDest, SHA3_CTX *pSrc)
Makes a clone of a previously allocated SHA3_CTX.
MOC_EXTERN MSTATUS SHA3_freeDigest(MOC_HASH(hwAccelDescr hwAccelCtx) BulkCtx *pSha3_ctx)
Zeroes and frees the SHA3_CTX context data structure.
MOC_EXTERN MSTATUS SHA3_completeDigest(MOC_HASH(hwAccelDescr hwAccelCtx) ubyte4 mode, ubyte *pMessage, ubyte4 messageLen, ubyte *pResult, ubyte4 desiredResultLen)
A one-shot context free computation of a SHA3 hash or extenable output function.
MOC_EXTERN MSTATUS SHA3_initDigest(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pSha3_ctx, ubyte4 mode)
Initialize the SHA3_CTX context data structure.
MOC_EXTERN MSTATUS SHA3_allocDigest(MOC_HASH(hwAccelDescr hwAccelCtx) BulkCtx *pSha3_ctx)
Allocates the SHA3_CTX context data structure.
MOC_EXTERN MSTATUS SHA3_updateDigest(MOC_HASH(hwAccelDescr hwAccelCtx) SHA3_CTX *pSha3_ctx, ubyte *pMessage, ubyte4 messageLen)
Updates a previously initialized SHA3_CTX context with data.