43 #define KEY(...) { __VA_ARGS__ } 46 #define DATA(...) { __VA_ARGS__ } 49 #define EXPECTED(...) { __VA_ARGS__ } 79 #define HMAC_TEST( name, DIGEST, KEY, DATA, EXPECTED ) \ 80 static const uint8_t name ## _key[] = KEY; \ 81 static const uint8_t name ## _data[] = DATA; \ 82 static const uint8_t name ## _expected[] = EXPECTED; \ 83 static struct hmac_test name = { \ 85 .key = name ## _key, \ 86 .key_len = sizeof ( name ## _key ), \ 87 .data = name ## _data, \ 88 .data_len = sizeof ( name ## _data ), \ 89 .expected = name ## _expected, \ 90 .expected_len = sizeof ( name ## _expected ), \ 101 unsigned int line ) {
126 #define hmac_ok( test ) hmac_okx ( test, __FILE__, __LINE__ ) 130 EXPECTED ( 0xb6, 0x13, 0x67, 0x9a, 0x08, 0x14, 0xd9, 0xec, 0x77,
131 0x2f, 0x95, 0xd7, 0x78, 0xc3, 0x5f, 0xc5, 0xff, 0x16,
132 0x97, 0xc4, 0x93, 0x71, 0x56, 0x53, 0xc6, 0xc7, 0x12,
133 0x14, 0x42, 0x92, 0xc5, 0xad ) );
137 KEY (
'H',
'e',
'l',
'l',
'o' ),
138 DATA (
'W',
'o',
'r',
'l',
'd' ),
139 EXPECTED ( 0x59, 0x16, 0x8e, 0x30, 0x9f, 0x2c, 0x97, 0xdd, 0x04,
140 0xe4, 0x5b, 0xe3, 0xe7, 0x9b, 0xd9, 0xac, 0xb6, 0xd2,
141 0x2f, 0xda, 0x65, 0x46, 0xc0, 0x0c, 0x53, 0x92, 0x82,
142 0xc4, 0x1e, 0xeb, 0x91, 0x6e ) );
146 KEY (
'H',
'e',
'l',
'l',
'o' ),
147 DATA (
'W',
'o',
'r',
'l',
'd' ),
148 EXPECTED ( 0x9e, 0x29, 0xcf, 0x6d, 0x48, 0x90, 0x49, 0x9e, 0xf8,
149 0x5a, 0x31, 0x47, 0x55, 0x7b, 0x1a, 0x45, 0xd5, 0xae,
154 KEY (
'H',
'e',
'l',
'l',
'o' ),
155 DATA (
'W',
'o',
'r',
'l',
'd' ),
156 EXPECTED ( 0xc7, 0x1c, 0x0c, 0xd0, 0xdc, 0x24, 0x49, 0xbd, 0xd8,
157 0x9d, 0x28, 0xeb, 0x03, 0xbe, 0xf2, 0x04 ) );
161 KEY ( 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
162 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
163 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
164 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
165 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
166 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
167 0x3c, 0x3d, 0x3e, 0x3f ),
168 DATA (
'H',
'e',
'l',
'l',
'o',
' ',
'W',
'o',
'r',
'l',
'd' ),
169 EXPECTED ( 0xdd, 0x05, 0xcc, 0xe6, 0xd6, 0xaf, 0x91, 0x61, 0x4b,
170 0xaf, 0x35, 0x6b, 0x86, 0x0a, 0x05, 0x67, 0x25, 0x22,
171 0xf0, 0x54, 0xd2, 0x5f, 0xd7, 0xe1, 0x54, 0x26, 0x01,
172 0x16, 0xfd, 0x8a, 0xf3, 0x5b ) );
176 KEY ( 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
177 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
178 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
179 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
180 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
181 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
182 0x3c, 0x3d, 0x3e, 0x3f, 0x40 ),
183 DATA (
'H',
'e',
'l',
'l',
'o',
' ',
'W',
'o',
'r',
'l',
'd' ),
184 EXPECTED ( 0x4f, 0x0f, 0x42, 0x07, 0xda, 0x84, 0x3d, 0x2a, 0x34,
185 0xae, 0x5d, 0xd9, 0x05, 0x1e, 0x96, 0xa8, 0xb6, 0xef,
186 0xa1, 0xcd, 0x49, 0x5b, 0xea, 0x30, 0xbf, 0x47, 0x3b,
187 0xdc, 0xa9, 0x86, 0xbb, 0x31 ) );
#define EXPECTED(...)
Define inline expected HMAC.
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *key, size_t key_len)
Initialise HMAC.
static void hmac_okx(struct hmac_test *test, const char *file, unsigned int line)
Report an HMAC test result.
size_t data_len
Length of data.
Self-test infrastructure.
const char * name
Test set name.
struct golan_eq_context ctx
#define DATA(...)
Define inline data.
struct digest_algorithm * digest
Digest algorithm.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
size_t blocksize
Block size.
#define okx(success, file, line)
Report test result.
#define HMAC_TEST(name, DIGEST, KEY, DATA, EXPECTED)
Define an HMAC test.
#define KEY(...)
Define inline key data.
Keyed-Hashing for Message Authentication.
static void hmac_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Update HMAC.
static size_t hmac_ctxsize(struct digest_algorithm *digest)
Calculate HMAC context size.
size_t expected_len
Length of expected HMAC.
size_t key_len
Length of key.
struct digest_algorithm sha256_algorithm
SHA-256 algorithm.
size_t ctxsize
Context size.
size_t digestsize
Digest size.
const char * name
Algorithm name.
const void * expected
Expected HMAC.
A message digest algorithm.
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
static void hmac_test_exec(void)
Perform HMAC self-tests.
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
struct self_test hmac_test __self_test
HMAC self-tests.
struct digest_algorithm md5_algorithm
MD5 algorithm.
struct digest_algorithm sha1_algorithm
SHA-1 algorithm.