iPXE
hmac_test.h File Reference

HMAC self-tests. More...

#include <stdint.h>
#include <ipxe/crypto.h>
#include <ipxe/test.h>

Go to the source code of this file.

Data Structures

struct  hmac_test
 An HMAC test. More...

Macros

#define KEY(...)
 Define inline key data.
#define DATA(...)
 Define inline data.
#define EXPECTED(...)
 Define inline expected HMAC.
#define HMAC_TEST(name, DIGEST, KEY, DATA, EXPECTED)
 Define an HMAC test.
#define hmac_ok(test)
 Report an HMAC test result.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
void hmac_okx (struct hmac_test *test, const char *file, unsigned int line)
 Report an HMAC test result.

Detailed Description

HMAC self-tests.

Definition in file hmac_test.h.

Macro Definition Documentation

◆ KEY

#define KEY ( ...)
Value:
{ __VA_ARGS__ }

Define inline key data.

Definition at line 17 of file hmac_test.h.

◆ DATA

#define DATA ( ...)
Value:
{ __VA_ARGS__ }

Define inline data.

Definition at line 20 of file hmac_test.h.

◆ EXPECTED

#define EXPECTED ( ...)
Value:
{ __VA_ARGS__ }

Define inline expected HMAC.

Definition at line 23 of file hmac_test.h.

◆ HMAC_TEST

#define HMAC_TEST ( name,
DIGEST,
KEY,
DATA,
EXPECTED )
Value:
static const uint8_t name ## _key[] = KEY; \
static const uint8_t name ## _data[] = DATA; \
static const uint8_t name ## _expected[] = EXPECTED; \
static struct hmac_test name = { \
.digest = DIGEST, \
.key = name ## _key, \
.key_len = sizeof ( name ## _key ), \
.data = name ## _data, \
.data_len = sizeof ( name ## _data ), \
.expected = name ## _expected, \
.expected_len = sizeof ( name ## _expected ), \
}
#define DATA(...)
Define inline data.
Definition acpi_test.c:74
unsigned char uint8_t
Definition stdint.h:10
const char * name
Definition ath9k_hw.c:1986
#define KEY(...)
Define inline key.
Definition cipher_test.h:45
#define DIGEST(...)
Define inline expected digest.
Definition der_test.c:45
#define EXPECTED(...)
Define inline expected result point.
uint8_t data[48]
Additional event data.
Definition ena.h:11
An HMAC test.
Definition hmac_test.h:26
uint32_t data_len
Microcode data size (or 0 to indicate 2000 bytes).
Definition ucode.h:15

Define an HMAC test.

Parameters
nameTest name
DIGESTDigest algorithm
KEYKey
DATAData
EXPECTEDExpected HMAC
Return values
testHMAC test

Definition at line 53 of file hmac_test.h.

53#define HMAC_TEST( name, DIGEST, KEY, DATA, EXPECTED ) \
54 static const uint8_t name ## _key[] = KEY; \
55 static const uint8_t name ## _data[] = DATA; \
56 static const uint8_t name ## _expected[] = EXPECTED; \
57 static struct hmac_test name = { \
58 .digest = DIGEST, \
59 .key = name ## _key, \
60 .key_len = sizeof ( name ## _key ), \
61 .data = name ## _data, \
62 .data_len = sizeof ( name ## _data ), \
63 .expected = name ## _expected, \
64 .expected_len = sizeof ( name ## _expected ), \
65 }

◆ hmac_ok

#define hmac_ok ( test)
Value:
hmac_okx ( test, __FILE__, __LINE__ )
static int test
Definition epic100.c:73
void hmac_okx(struct hmac_test *test, const char *file, unsigned int line)
Report an HMAC test result.
Definition hmac_test.c:50

Report an HMAC test result.

Parameters
testHMAC test

Definition at line 75 of file hmac_test.h.

Referenced by hmac_test_exec(), wycheproof_hmac_sha1_exec(), wycheproof_hmac_sha224_exec(), wycheproof_hmac_sha256_exec(), wycheproof_hmac_sha384_exec(), wycheproof_hmac_sha512_224_exec(), wycheproof_hmac_sha512_256_exec(), and wycheproof_hmac_sha512_exec().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ hmac_okx()

void hmac_okx ( struct hmac_test * test,
const char * file,
unsigned int line )
extern

Report an HMAC test result.

Parameters
testHMAC test
fileTest code file
lineTest code line

Definition at line 50 of file hmac_test.c.

51 {
52 struct digest_algorithm *digest = test->digest;
53 uint8_t ctx[ hmac_ctxsize ( digest ) ];
54 uint8_t key[ hmac_keysize ( digest ) ];
55 uint8_t hmac[digest->digestsize];
56
57 /* Sanity checks */
58 okx ( sizeof ( ctx ) == ( digest->ctxsize + digest->blocksize ),
59 file, line );
60 okx ( sizeof ( key ) == digest->blocksize, file, line );
61 okx ( test->expected_len > 0, file, line );
62 okx ( test->expected_len <= digest->digestsize, file, line );
63
64 /* Calculate HMAC */
65 DBGC ( test, "HMAC-%s key:\n", digest->name );
66 DBGC_HDA ( test, 0, test->key, test->key_len );
67 DBGC ( test, "HMAC-%s data:\n", digest->name );
68 DBGC_HDA ( test, 0, test->data, test->data_len );
69 hmac_init ( digest, ctx, test->key, test->key_len );
70 hmac_update ( digest, ctx, test->data, test->data_len );
71 hmac_final ( digest, ctx, hmac );
72 DBGC ( test, "HMAC-%s result:\n", digest->name );
73 DBGC_HDA ( test, 0, hmac, sizeof ( hmac ) );
74 okx ( memcmp ( hmac, test->expected, test->expected_len ) == 0,
75 file, line );
76
77 /* Calculate HMAC using reduced key */
78 hmac_key ( digest, ctx, test->key, test->key_len, key );
79 DBGC ( test, "HMAC-%s key:\n", digest->name );
80 DBGC_HDA ( test, 0, key, sizeof ( key ) );
81 hmac_init_key ( digest, ctx, key );
82 hmac_update ( digest, ctx, test->data, test->data_len );
83 hmac_final ( digest, ctx, hmac );
84 DBGC ( test, "HMAC-%s result:\n", digest->name );
85 DBGC_HDA ( test, 0, hmac, sizeof ( hmac ) );
86 okx ( memcmp ( hmac, test->expected, test->expected_len ) == 0,
87 file, line );
88}
struct golan_eq_context ctx
Definition CIB_PRM.h:0
union @162305117151260234136356364136041353210355154177 key
#define DBGC(...)
Definition compiler.h:530
#define DBGC_HDA(...)
Definition compiler.h:531
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *secret, size_t len)
Initialise HMAC.
Definition hmac.c:106
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
Definition hmac.c:124
void hmac_key(struct digest_algorithm *digest, void *ctx, const void *secret, size_t len, void *key)
Construct HMAC reduced key.
Definition hmac.c:59
void hmac_init_key(struct digest_algorithm *digest, void *ctx, const void *key)
Initialise HMAC from reduced key.
Definition hmac.c:82
static void hmac_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Update HMAC.
Definition hmac.h:62
static size_t hmac_ctxsize(struct digest_algorithm *digest)
Calculate HMAC context size.
Definition hmac.h:48
static size_t hmac_keysize(struct digest_algorithm *digest)
Calculate HMAC reduced key size.
Definition hmac.h:35
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition string.c:115
A message digest algorithm.
Definition crypto.h:19
size_t digestsize
Digest size.
Definition crypto.h:27
size_t blocksize
Block size.
Definition crypto.h:25
size_t ctxsize
Context size.
Definition crypto.h:23
const char * name
Algorithm name.
Definition crypto.h:21
#define okx(success, file, line)
Report test result.
Definition test.h:44

References digest_algorithm::blocksize, ctx, digest_algorithm::ctxsize, DBGC, DBGC_HDA, digest_algorithm::digestsize, hmac_ctxsize(), hmac_final(), hmac_init(), hmac_init_key(), hmac_key(), hmac_keysize(), hmac_update(), key, memcmp(), digest_algorithm::name, okx, and test.