iPXE
hkdf_test.h
Go to the documentation of this file.
1#ifndef _HKDF_TEST_H
2#define _HKDF_TEST_H
3
4/** @file
5 *
6 * HKDF self-tests
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11
12#include <stdint.h>
13#include <ipxe/crypto.h>
14#include <ipxe/test.h>
15
16/** Define inline input keying material */
17#define IKM(...) { __VA_ARGS__ }
18
19/** Define inline salt */
20#define SALT(...) { __VA_ARGS__ }
21
22/** Define inline additional information */
23#define INFO(...) { __VA_ARGS__ }
24
25/** Define inline expected pseudorandom key */
26#define PRK(...) { __VA_ARGS__ }
27
28/** Define inline absence of expected pseudorandom key */
29#define PRK_UNSPECIFIED PRK()
30
31/** Define inline expected output keying material */
32#define OKM(...) { __VA_ARGS__ }
33
34/** An HKDF self-test */
35struct hkdf_test {
36 /** Digest algorithm */
38 /** Input keying material */
39 const void *ikm;
40 /** Length of input keying material */
41 size_t ikm_len;
42 /** Salt */
43 const void *salt;
44 /** Length of salt */
45 size_t salt_len;
46 /** Additional information */
47 const void *info;
48 /** Length of additional information */
49 size_t info_len;
50 /** Expected pseudorandom key */
51 const void *prk;
52 /** Length of expected pseudorandom key */
53 size_t prk_len;
54 /** Expected output keying material */
55 const void *okm;
56 /** Length of expected output keying material */
57 size_t okm_len;
58};
59
60/**
61 * Define an HKDF test
62 *
63 * @v name Test name
64 * @v DIGEST Digest algorithm
65 * @v SALTED Use salt value
66 * @v IKM Input keying material
67 * @v SALT Salt
68 * @v INFO Additional information
69 * @v PRK Expected pseudorandom key
70 * @v OKM Expected output keying material
71 */
72#define HKDF_TEST( name, DIGEST, SALTED, IKM, SALT, INFO, PRK, OKM ) \
73 static const uint8_t name ## _ikm[] = IKM; \
74 static const uint8_t name ## _salt[] = SALT; \
75 static const uint8_t name ## _info[] = INFO; \
76 static const uint8_t name ## _prk[] = PRK; \
77 static const uint8_t name ## _okm[] = OKM; \
78 static struct hkdf_test name = { \
79 .digest = DIGEST, \
80 .ikm = name ## _ikm, \
81 .ikm_len = sizeof ( name ## _ikm ), \
82 .salt = ( SALTED ? name ## _salt : NULL ), \
83 .salt_len = sizeof ( name ## _salt ), \
84 .info = name ## _info, \
85 .info_len = sizeof ( name ## _info ), \
86 .prk = name ## _prk, \
87 .prk_len = sizeof ( name ## _prk ), \
88 .okm = name ## _okm, \
89 .okm_len = sizeof ( name ## _okm ), \
90 }
91
92extern void hkdf_okx ( struct hkdf_test *test, const char *file,
93 unsigned int line );
94
95/**
96 * Report an HKDF test result
97 *
98 * @v test HMAC test
99 */
100#define hkdf_ok( test ) hkdf_okx ( test, __FILE__, __LINE__ )
101
102#endif /* _HKDF_TEST_H */
static int test
Definition epic100.c:73
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:921
void hkdf_okx(struct hkdf_test *test, const char *file, unsigned int line)
Report an HKDF test result.
Definition hkdf_test.c:51
Cryptographic API.
A message digest algorithm.
Definition crypto.h:19
An HKDF self-test.
Definition hkdf_test.h:35
size_t info_len
Length of additional information.
Definition hkdf_test.h:49
const void * okm
Expected output keying material.
Definition hkdf_test.h:55
const void * info
Additional information.
Definition hkdf_test.h:47
struct digest_algorithm * digest
Digest algorithm.
Definition hkdf_test.h:37
size_t salt_len
Length of salt.
Definition hkdf_test.h:45
const void * salt
Salt.
Definition hkdf_test.h:43
size_t ikm_len
Length of input keying material.
Definition hkdf_test.h:41
const void * prk
Expected pseudorandom key.
Definition hkdf_test.h:51
size_t prk_len
Length of expected pseudorandom key.
Definition hkdf_test.h:53
const void * ikm
Input keying material.
Definition hkdf_test.h:39
size_t okm_len
Length of expected output keying material.
Definition hkdf_test.h:57
Self-test infrastructure.