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 
11 #include <ipxe/crypto.h>
12 
13 /** HMAC context type */
14 #define hmac_context_t( digest ) struct { \
15  /** Digest context */ \
16  uint8_t ctx[ digest->ctxsize ]; \
17  /** HMAC input/output padding */ \
18  uint8_t pad[ digest->blocksize ]; \
19  } __attribute__ (( packed ))
20 
21 /**
22  * Calculate HMAC context size
23  *
24  * @v digest Digest algorithm to use
25  * @ret len HMAC context size
26  */
27 static inline __attribute__ (( always_inline )) size_t
28 hmac_ctxsize ( struct digest_algorithm *digest ) {
29  hmac_context_t ( digest ) *hctx;
30 
31  return sizeof ( *hctx );
32 }
33 
34 /**
35  * Update HMAC
36  *
37  * @v digest Digest algorithm to use
38  * @v ctx HMAC context
39  * @v data Data
40  * @v len Length of data
41  */
42 static inline void hmac_update ( struct digest_algorithm *digest, void *ctx,
43  const void *data, size_t len ) {
44  hmac_context_t ( digest ) *hctx = ctx;
45 
46  digest_update ( digest, hctx->ctx, data, len );
47 }
48 
49 extern void hmac_init ( struct digest_algorithm *digest, void *ctx,
50  const void *key, size_t key_len );
51 extern void hmac_final ( struct digest_algorithm *digest, void *ctx,
52  void *hmac );
53 
54 #endif /* _IPXE_HMAC_H */
static __attribute__((always_inline)) size_t hmac_ctxsize(struct digest_algorithm *digest)
Calculate HMAC context size.
Definition: hmac.h:27
#define hmac_context_t(digest)
HMAC context type.
Definition: hmac.h:14
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
Definition: hmac.c:87
Cryptographic API.
static void const void size_t key_len
Definition: crypto.h:285
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
static void struct digest_algorithm * digest
HMAC-MD5 digest.
Definition: crypto.h:308
static void hmac_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Update HMAC.
Definition: hmac.h:42
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
uint32_t len
Length.
Definition: ena.h:14
A message digest algorithm.
Definition: crypto.h:17
uint8_t data[48]
Additional event data.
Definition: ena.h:22
union @382 key
Sense key.
Definition: crypto.h:284
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *key, size_t key_len)
Initialise HMAC.
Definition: hmac.c:57