TrustCore SDK NanoCrypto API reference  version 7.0
aes_xcbc_mac_96.h
Go to the documentation of this file.
1 /*
2  * aes_xcbc_mac_96.h
3  *
4  * AES-XCBC-MAC-96 and derived Implementation ( RFC 3566, RFC 3664, RFC 4434)
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
20 /*------------------------------------------------------------------*/
21 
22 #ifndef __AES_XCBC_MAC_96_HEADER__
23 #define __AES_XCBC_MAC_96_HEADER__
24 
25 #include "../cap/capdecl.h"
26 
27 #if defined(__ENABLE_MOCANA_CRYPTO_INTERFACE__)
28 #include "../crypto_interface/crypto_interface_aes_xcbc_mac_96_priv.h"
29 #endif
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #define AES_XCBC_MAC_96_RESULT_SIZE (12) /* 96 bits */
36 #define AES_XCBC_PRF_128_RESULT_SIZE (AES_BLOCK_SIZE) /* 128 bits */
37 
38 typedef struct AES_XCBC_MAC_96_Ctx
39 {
40  aesCipherContext *pKeyAesCtx; /* key K */
41  aesCipherContext *pAesCtx; /* key K1, K2 or K3 */
42  ubyte currBlock[AES_BLOCK_SIZE];
43  /* bytes received -- we delay the processing until more bytes are
44  received or final is called */
45  ubyte pending[AES_BLOCK_SIZE] ;
46  /* length of bytes received above <= AES_BLOCK_SIZE */
47  ubyte pendingLen;
48  MocSymCtx pMocSymCtx;
49  ubyte enabled;
50 
51 } AES_XCBC_MAC_96_Ctx, AES_XCBC_PRF_128_Ctx;
52 
53 
54 /*------------------------------------------------------------------*/
55 
56 /* AES CMAC -- cf RFC 3566 for explanations of parameters. */
57 
73 MOC_EXTERN MSTATUS AES_XCBC_MAC_96_init(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte keyMaterial[AES_BLOCK_SIZE],
74  AES_XCBC_MAC_96_Ctx* pCtx);
87 MOC_EXTERN MSTATUS AES_XCBC_MAC_96_update(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte* data, sbyte4 dataLength,
88  AES_XCBC_MAC_96_Ctx* pCtx);
89 
102 MOC_EXTERN MSTATUS AES_XCBC_MAC_96_final( MOC_SYM(hwAccelDescr hwAccelCtx) ubyte cmac[AES_XCBC_MAC_96_RESULT_SIZE],
103  AES_XCBC_MAC_96_Ctx* pCtx);
104 
116 MOC_EXTERN MSTATUS AES_XCBC_MAC_96_reset(MOC_SYM(hwAccelDescr hwAccelCtx) AES_XCBC_MAC_96_Ctx* pCtx);
117 
118 /* AES CMAC -- cf RFC 4434 */
119 
134 MOC_EXTERN MSTATUS AES_XCBC_PRF_128_init(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte keyMaterial[/*keyLength*/],
135  sbyte4 keyLength,
136  AES_XCBC_PRF_128_Ctx* pCtx);
137 
151 MOC_EXTERN MSTATUS AES_XCBC_PRF_128_update(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte* data, sbyte4 dataLength,
152  AES_XCBC_PRF_128_Ctx* pCtx);
153 #define AES_XCBC_PRF_128_update AES_XCBC_MAC_96_update
154 
167 MOC_EXTERN MSTATUS AES_XCBC_PRF_128_final( MOC_SYM(hwAccelDescr hwAccelCtx) ubyte cmac[AES_XCBC_PRF_128_RESULT_SIZE],
168  AES_XCBC_PRF_128_Ctx* pCtx);
169 
182 MOC_EXTERN MSTATUS AES_XCBC_PRF_128_reset(MOC_SYM(hwAccelDescr hwAccelCtx) AES_XCBC_PRF_128_Ctx* pCtx);
183 #define AES_XCBC_PRF_128_reset AES_XCBC_MAC_96_reset
184 
196 MOC_EXTERN MSTATUS AES_XCBC_clear (MOC_SYM(hwAccelDescr hwAccelCtx) AES_XCBC_MAC_96_Ctx *pCtx);
197 
198 #ifdef __cplusplus
199 }
200 #endif
201 
202 #endif /* __AES_XCBC_MAC_96_HEADER__ */
203 
MOC_EXTERN MSTATUS AES_XCBC_PRF_128_reset(MOC_SYM(hwAccelDescr hwAccelCtx) AES_XCBC_PRF_128_Ctx *pCtx)
Resets an AES_XCBC_PRF_128_Ctx context.
MOC_EXTERN MSTATUS AES_XCBC_PRF_128_update(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte *data, sbyte4 dataLength, AES_XCBC_PRF_128_Ctx *pCtx)
Updates the state of an AES_XCBC_PRF_128_Ctx context with data.
MOC_EXTERN MSTATUS AES_XCBC_MAC_96_reset(MOC_SYM(hwAccelDescr hwAccelCtx) AES_XCBC_MAC_96_Ctx *pCtx)
Resets an AES_XCBC_MAC_96_Ctx context.
MOC_EXTERN MSTATUS AES_XCBC_clear(MOC_SYM(hwAccelDescr hwAccelCtx) AES_XCBC_MAC_96_Ctx *pCtx)
Clears a AES_XCBC_MAC_96_Ctx or AES_XCBC_PRF_128_Ctx context.
MOC_EXTERN MSTATUS AES_XCBC_MAC_96_update(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte *data, sbyte4 dataLength, AES_XCBC_MAC_96_Ctx *pCtx)
Updates the state of an AES_XCBC_MAC_96_Ctx context with data.
MOC_EXTERN MSTATUS AES_XCBC_MAC_96_final(MOC_SYM(hwAccelDescr hwAccelCtx) ubyte cmac[AES_XCBC_MAC_96_RESULT_SIZE], AES_XCBC_MAC_96_Ctx *pCtx)
Finalizes an AES_XCBC_MAC_96_Ctx and outputs the resulting 96 bit (12 byte) MAC.
MOC_EXTERN MSTATUS AES_XCBC_PRF_128_final(MOC_SYM(hwAccelDescr hwAccelCtx) ubyte cmac[AES_XCBC_PRF_128_RESULT_SIZE], AES_XCBC_PRF_128_Ctx *pCtx)
Finalizes an AES_XCBC_PRF_128_Ctx and outputs the resulting 128 bit (16 byte) MAC.
MOC_EXTERN MSTATUS AES_XCBC_MAC_96_init(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte keyMaterial[AES_BLOCK_SIZE], AES_XCBC_MAC_96_Ctx *pCtx)
Initializes an AES_XCBC_MAC_96_Ctx context.
MOC_EXTERN MSTATUS AES_XCBC_PRF_128_init(MOC_SYM(hwAccelDescr hwAccelCtx) const ubyte keyMaterial[], sbyte4 keyLength, AES_XCBC_PRF_128_Ctx *pCtx)
Initializes an AES_XCBC_PRF_128_Ctx context.