iPXE
hmac.h
Go to the documentation of this file.
1 #ifndef _IPXE_HMAC_H
2 #define _IPXE_HMAC_H
3 
4 /** @file
5  *
6  * Keyed-Hashing for Message Authentication
7  */
8 
9 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
10 FILE_SECBOOT ( PERMITTED );
11 
12 #include <ipxe/crypto.h>
13 
14 /** HMAC context type */
15 #define hmac_context_t( digest ) struct { \
16  /** Digest context */ \
17  uint8_t ctx[ digest->ctxsize ]; \
18  /** HMAC input/output padding */ \
19  uint8_t pad[ digest->blocksize ]; \
20  } __attribute__ (( packed ))
21 
22 /**
23  * Calculate HMAC context size
24  *
25  * @v digest Digest algorithm to use
26  * @ret len HMAC context size
27  */
28 static inline __attribute__ (( always_inline )) size_t
29 hmac_ctxsize ( struct digest_algorithm *digest ) {
30  hmac_context_t ( digest ) *hctx;
31 
32  return sizeof ( *hctx );
33 }
34 
35 /**
36  * Update HMAC
37  *
38  * @v digest Digest algorithm to use
39  * @v ctx HMAC context
40  * @v data Data
41  * @v len Length of data
42  */
43 static inline void hmac_update ( struct digest_algorithm *digest, void *ctx,
44  const void *data, size_t len ) {
45  hmac_context_t ( digest ) *hctx = ctx;
46 
47  digest_update ( digest, hctx->ctx, data, len );
48 }
49 
50 extern void hmac_init ( struct digest_algorithm *digest, void *ctx,
51  const void *key, size_t key_len );
52 extern void hmac_final ( struct digest_algorithm *digest, void *ctx,
53  void *hmac );
54 
55 #endif /* _IPXE_HMAC_H */
#define __attribute__(x)
Definition: compiler.h:10
static void digest_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Definition: crypto.h:224
#define hmac_context_t(digest)
HMAC context type.
Definition: hmac.h:15
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
Definition: hmac.c:88
Cryptographic API.
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
ring len
Length.
Definition: dwmac.h:231
static void hmac_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Update HMAC.
Definition: hmac.h:43
static size_t hmac_ctxsize(struct digest_algorithm *digest)
Calculate HMAC context size.
Definition: hmac.h:29
FILE_SECBOOT(PERMITTED)
A message digest algorithm.
Definition: crypto.h:19
uint8_t data[48]
Additional event data.
Definition: ena.h:22
union @391 key
Sense key.
Definition: scsi.h:18
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *key, size_t key_len)
Initialise HMAC.
Definition: hmac.c:58