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
9FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
10FILE_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 */
28static inline __attribute__ (( always_inline )) size_t
29hmac_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 */
43static 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
50extern void hmac_init ( struct digest_algorithm *digest, void *ctx,
51 const void *key, size_t key_len );
52extern void hmac_final ( struct digest_algorithm *digest, void *ctx,
53 void *hmac );
54
55#endif /* _IPXE_HMAC_H */
union @162305117151260234136356364136041353210355154177 key
Sense key.
Definition scsi.h:3
struct golan_eq_context ctx
Definition CIB_PRM.h:0
ring len
Length.
Definition dwmac.h:226
uint8_t data[48]
Additional event data.
Definition ena.h:11
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
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
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *key, size_t key_len)
Initialise HMAC.
Definition hmac.c:58
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
Definition hmac.c:88
#define hmac_context_t(digest)
HMAC context type.
Definition hmac.h:15
#define __attribute__(x)
Definition compiler.h:10
Cryptographic API.
static void digest_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Definition crypto.h:224
A message digest algorithm.
Definition crypto.h:19