TrustCore SDK NanoCrypto API reference  version 7.0
hmac.h
Go to the documentation of this file.
1 /*
2  * hmac.h
3  *
4  * Hash Message Authentication Code
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
19 /*------------------------------------------------------------------*/
20 
21 #ifndef __HMAC_H__
22 #define __HMAC_H__
23 
24 #include "../cap/capdecl.h"
25 
26 #if (defined(__ENABLE_MOCANA_CRYPTO_INTERFACE__))
27 #include "../crypto_interface/crypto_interface_hmac_priv.h"
28 #endif
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 #if defined(__ENABLE_MOCANA_SHA3__)
35 #define HMAC_BLOCK_SIZE (144) /* Maximum Hash Block Size = SHA3_224_BLOCK_SIZE */
36 #else
37 #if defined( __DISABLE_MOCANA_SHA512__) && defined(__DISABLE_MOCANA_SHA384__)
38 #define HMAC_BLOCK_SIZE (64) /* Maximum Hash Block Size = MD5_BLOCK_SIZE = SHA1_BLOCK_SIZE = SHA256_BLOCK_SIZE */
39 #else
40 #define HMAC_BLOCK_SIZE (128) /* Maximum Hash Block Size = SHA512_BLOCK_SIZE */
41 #endif
42 #endif /* __ENABLE_MOCANA_SHA3__ */
43 
44 /*------------------------------------------------------------------*/
45 
105 MOC_EXTERN MSTATUS
106 HMAC_MD5(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* key, sbyte4 keyLen, const ubyte* text,
107  sbyte4 textLen, const ubyte* textOpt, sbyte4 textOptLen, ubyte result[MD5_DIGESTSIZE]);
108 
170 MOC_EXTERN MSTATUS
171 HMAC_SHA1(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* key, sbyte4 keyLen,
172  const ubyte* text, sbyte4 textLen,
173  const ubyte* textOpt, sbyte4 textOptLen, ubyte result[SHA_HASH_RESULT_SIZE]);
174 
175 #ifndef __DISABLE_MOCANA_SHA256__
176 
237 MOC_EXTERN MSTATUS
238 HMAC_SHA256(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* key, sbyte4 keyLen,
239  const ubyte* text, sbyte4 textLen,
240  const ubyte* textOpt, sbyte4 textOptLen, ubyte result[SHA256_RESULT_SIZE]);
241 
242 #endif /* ifndef __DISABLE_MOCANA_SHA256__ */
243 
244 #ifndef __DISABLE_MOCANA_SHA512__
245 
306 MOC_EXTERN MSTATUS
307 HMAC_SHA512(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* key, sbyte4 keyLen,
308  const ubyte* text, sbyte4 textLen,
309  const ubyte* textOpt, sbyte4 textOptLen, ubyte result[SHA512_RESULT_SIZE]);
310 
311 #endif /* ifndef __DISABLE_MOCANA_SHA512__ */
312 
371 MOC_EXTERN MSTATUS
372 HMAC_SHA1Ex(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* key, sbyte4 keyLen,
373  const ubyte* texts[], sbyte4 textLens[],
374  sbyte4 numTexts, ubyte result[SHA_HASH_RESULT_SIZE]);
375 
434 MOC_EXTERN MSTATUS HMAC_MD5_quick(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* pKey, sbyte4 keyLen,
435  const ubyte* pText, sbyte4 textLen, ubyte* pResult /* MD5_DIGESTSIZE */);
436 
496 MOC_EXTERN MSTATUS HMAC_SHA1_quick(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* pKey, sbyte4 keyLen,
497  const ubyte* pText, sbyte4 textLen, ubyte* pResult /* SHA_HASH_RESULT_SIZE */);
498 
499 
500 /*------------------------------------------------------------------*/
501 
502 /* HMAC context. */
503 struct HMAC_CTX
504 {
505  const BulkHashAlgo* pBHAlgo; /* external pointer, not a copy */
506  BulkCtx hashCtxt;
507 
508  ubyte4 keyLen;
509  ubyte key[HMAC_BLOCK_SIZE];
510  ubyte kpad[HMAC_BLOCK_SIZE];
511 
512  MocSymCtx pMocSymCtx;
513  ubyte enabled;
514 
515 };
516 
517 typedef struct HMAC_CTX HMAC_CTX;
518 typedef struct HMAC_CTX _moc_HMAC_CTX; /* Needed for openssl crypto engine */
519 
520 /*------------------------------------------------------------------*/
521 
574 MOC_EXTERN MSTATUS HmacCreate(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX **pctx, const BulkHashAlgo *pBHAlgo);
575 
620 MOC_EXTERN MSTATUS HmacKey(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx, const ubyte *key, ubyte4 keyLen);
621 
663 MOC_EXTERN MSTATUS HmacReset(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx);
664 
710 MOC_EXTERN MSTATUS HmacUpdate(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx, const ubyte *data, ubyte4 dataLen);
711 
764 MOC_EXTERN MSTATUS HmacFinal(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx, ubyte *result);
765 
809 MOC_EXTERN MSTATUS HmacDelete(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX **pctx);
810 
879 MOC_EXTERN MSTATUS HmacQuick(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* pKey, sbyte4 keyLen,
880  const ubyte* pText, sbyte4 textLen,
881  ubyte* pResult, const BulkHashAlgo *pBHAlgo);
882 
951 MOC_EXTERN MSTATUS HmacQuicker(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* pKey, sbyte4 keyLen,
952  const ubyte* pText, sbyte4 textLen,
953  ubyte* pResult, const BulkHashAlgo *pBHAlgo,
954  HMAC_CTX *ctx);
955 
1027 MOC_EXTERN MSTATUS HmacQuickEx(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* pKey, sbyte4 keyLen,
1028  const ubyte* pText, sbyte4 textLen,
1029  const ubyte* pOptText, ubyte4 optTextLen,
1030  ubyte* pResult, const BulkHashAlgo *pBHAlgo);
1031 
1104 MOC_EXTERN MSTATUS HmacQuickerEx(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* pKey, sbyte4 keyLen,
1105  const ubyte* pText, sbyte4 textLen,
1106  const ubyte* pOptText, ubyte4 optTextLen,
1107  ubyte* pResult, const BulkHashAlgo *pBHAlgo,
1108  HMAC_CTX *ctx);
1109 
1181 MOC_EXTERN MSTATUS HmacQuickerInline(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* pKey, sbyte4 keyLen,
1182  const ubyte* pText, sbyte4 textLen,
1183  ubyte* pResult, const BulkHashAlgo *pBHAlgo,
1184  BulkCtx context);
1185 
1262 MOC_EXTERN MSTATUS HmacQuickerInlineEx(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte* key, sbyte4 keyLen,
1263  const ubyte* text, sbyte4 textLen,
1264  const ubyte* textOpt, sbyte4 textOptLen,
1265  ubyte* pResult, const BulkHashAlgo *pBHAlgo,
1266  BulkCtx context);
1267 
1268 #ifdef __cplusplus
1269 }
1270 #endif
1271 
1272 #endif
MOC_EXTERN MSTATUS HMAC_MD5_quick(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *pKey, sbyte4 keyLen, const ubyte *pText, sbyte4 textLen, ubyte *pResult)
Calculate HMAC-MD5 (with a single function call).
Structure to hold function pointers to hashing or extenable output methods.
Definition: crypto.h:133
MOC_EXTERN MSTATUS HmacReset(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx)
Reset HMAC context.
MOC_EXTERN MSTATUS HmacQuick(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *pKey, sbyte4 keyLen, const ubyte *pText, sbyte4 textLen, ubyte *pResult, const BulkHashAlgo *pBHAlgo)
Calculate HMAC (with a single function call).
MOC_EXTERN MSTATUS HMAC_SHA1Ex(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *key, sbyte4 keyLen, const ubyte *texts[], sbyte4 textLens[], sbyte4 numTexts, ubyte result[SHA_HASH_RESULT_SIZE])
Calculate (in a single call) the HMAC-SHA1 of multiple input buffers.
MOC_EXTERN MSTATUS HmacQuickEx(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *pKey, sbyte4 keyLen, const ubyte *pText, sbyte4 textLen, const ubyte *pOptText, ubyte4 optTextLen, ubyte *pResult, const BulkHashAlgo *pBHAlgo)
Calculate HMAC (with a single function call) for a message with extended data.
MOC_EXTERN MSTATUS HmacQuickerEx(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *pKey, sbyte4 keyLen, const ubyte *pText, sbyte4 textLen, const ubyte *pOptText, ubyte4 optTextLen, ubyte *pResult, const BulkHashAlgo *pBHAlgo, HMAC_CTX *ctx)
Calculate HMAC using an existing context (with a single function call) for a message with extended da...
MOC_EXTERN MSTATUS HMAC_SHA512(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *key, sbyte4 keyLen, const ubyte *text, sbyte4 textLen, const ubyte *textOpt, sbyte4 textOptLen, ubyte result[SHA512_RESULT_SIZE])
Calculate (in a single call) the HMAC-SHA512.
MOC_EXTERN MSTATUS HmacCreate(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX **pctx, const BulkHashAlgo *pBHAlgo)
Create HMAC context.
MOC_EXTERN MSTATUS HmacQuickerInline(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *pKey, sbyte4 keyLen, const ubyte *pText, sbyte4 textLen, ubyte *pResult, const BulkHashAlgo *pBHAlgo, BulkCtx context)
Calculate HMAC using an existing hash context (with a single function call).
MOC_EXTERN MSTATUS HMAC_SHA1_quick(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *pKey, sbyte4 keyLen, const ubyte *pText, sbyte4 textLen, ubyte *pResult)
Calculate HMAC-SHA1 (with a single function call).
MOC_EXTERN MSTATUS HmacDelete(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX **pctx)
Delete (free) HMAC context.
MOC_EXTERN MSTATUS HmacFinal(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx, ubyte *result)
Get final HMAC value.
MOC_EXTERN MSTATUS HmacUpdate(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx, const ubyte *data, ubyte4 dataLen)
Update intermediate HMAC value.
MOC_EXTERN MSTATUS HmacQuickerInlineEx(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *key, sbyte4 keyLen, const ubyte *text, sbyte4 textLen, const ubyte *textOpt, sbyte4 textOptLen, ubyte *pResult, const BulkHashAlgo *pBHAlgo, BulkCtx context)
Calculate HMAC with extended data using an existing hash context (with a single function call)...
MOC_EXTERN MSTATUS HMAC_SHA256(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *key, sbyte4 keyLen, const ubyte *text, sbyte4 textLen, const ubyte *textOpt, sbyte4 textOptLen, ubyte result[SHA256_RESULT_SIZE])
Calculate (in a single call) the HMAC-SHA256.
MOC_EXTERN MSTATUS HmacKey(MOC_HASH(hwAccelDescr hwAccelCtx) HMAC_CTX *ctx, const ubyte *key, ubyte4 keyLen)
Insert and process HMAC context's key.
MOC_EXTERN MSTATUS HmacQuicker(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *pKey, sbyte4 keyLen, const ubyte *pText, sbyte4 textLen, ubyte *pResult, const BulkHashAlgo *pBHAlgo, HMAC_CTX *ctx)
Calculate HMAC using an existing context (with a single function call).
MOC_EXTERN MSTATUS HMAC_MD5(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *key, sbyte4 keyLen, const ubyte *text, sbyte4 textLen, const ubyte *textOpt, sbyte4 textOptLen, ubyte result[MD5_DIGESTSIZE])
Calculate (in a single call) the HMAC-MD5.
MOC_EXTERN MSTATUS HMAC_SHA1(MOC_HASH(hwAccelDescr hwAccelCtx) const ubyte *key, sbyte4 keyLen, const ubyte *text, sbyte4 textLen, const ubyte *textOpt, sbyte4 textOptLen, ubyte result[SHA_HASH_RESULT_SIZE])
Calculate (in a single call) the HMAC-SHA1.