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 ) {
138#define hmac_ok( test ) hmac_okx ( test, __FILE__, __LINE__ )
142 EXPECTED ( 0xb6, 0x13, 0x67, 0x9a, 0x08, 0x14, 0xd9, 0xec, 0x77,
143 0x2f, 0x95, 0xd7, 0x78, 0xc3, 0x5f, 0xc5, 0xff, 0x16,
144 0x97, 0xc4, 0x93, 0x71, 0x56, 0x53, 0xc6, 0xc7, 0x12,
145 0x14, 0x42, 0x92, 0xc5, 0xad ) );
149 KEY (
'H',
'e',
'l',
'l',
'o' ),
150 DATA (
'W',
'o',
'r',
'l',
'd' ),
151 EXPECTED ( 0x59, 0x16, 0x8e, 0x30, 0x9f, 0x2c, 0x97, 0xdd, 0x04,
152 0xe4, 0x5b, 0xe3, 0xe7, 0x9b, 0xd9, 0xac, 0xb6, 0xd2,
153 0x2f, 0xda, 0x65, 0x46, 0xc0, 0x0c, 0x53, 0x92, 0x82,
154 0xc4, 0x1e, 0xeb, 0x91, 0x6e ) );
158 KEY (
'H',
'e',
'l',
'l',
'o' ),
159 DATA (
'W',
'o',
'r',
'l',
'd' ),
160 EXPECTED ( 0x9e, 0x29, 0xcf, 0x6d, 0x48, 0x90, 0x49, 0x9e, 0xf8,
161 0x5a, 0x31, 0x47, 0x55, 0x7b, 0x1a, 0x45, 0xd5, 0xae,
166 KEY (
'H',
'e',
'l',
'l',
'o' ),
167 DATA (
'W',
'o',
'r',
'l',
'd' ),
168 EXPECTED ( 0xc7, 0x1c, 0x0c, 0xd0, 0xdc, 0x24, 0x49, 0xbd, 0xd8,
169 0x9d, 0x28, 0xeb, 0x03, 0xbe, 0xf2, 0x04 ) );
173 KEY ( 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
174 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
175 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
176 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
177 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
178 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
179 0x3c, 0x3d, 0x3e, 0x3f ),
180 DATA (
'H',
'e',
'l',
'l',
'o',
' ',
'W',
'o',
'r',
'l',
'd' ),
181 EXPECTED ( 0xdd, 0x05, 0xcc, 0xe6, 0xd6, 0xaf, 0x91, 0x61, 0x4b,
182 0xaf, 0x35, 0x6b, 0x86, 0x0a, 0x05, 0x67, 0x25, 0x22,
183 0xf0, 0x54, 0xd2, 0x5f, 0xd7, 0xe1, 0x54, 0x26, 0x01,
184 0x16, 0xfd, 0x8a, 0xf3, 0x5b ) );
188 KEY ( 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
189 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
190 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
191 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
192 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
193 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
194 0x3c, 0x3d, 0x3e, 0x3f, 0x40 ),
195 DATA (
'H',
'e',
'l',
'l',
'o',
' ',
'W',
'o',
'r',
'l',
'd' ),
196 EXPECTED ( 0x4f, 0x0f, 0x42, 0x07, 0xda, 0x84, 0x3d, 0x2a, 0x34,
197 0xae, 0x5d, 0xd9, 0x05, 0x1e, 0x96, 0xa8, 0xb6, 0xef,
198 0xa1, 0xcd, 0x49, 0x5b, 0xea, 0x30, 0xbf, 0x47, 0x3b,
199 0xdc, 0xa9, 0x86, 0xbb, 0x31 ) );
struct golan_eq_context ctx
union @162305117151260234136356364136041353210355154177 key
#define DATA(...)
Define inline data.
#define KEY(...)
Define inline key.
#define EXPECTED(...)
Define inline expected result point.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *secret, size_t len)
Initialise HMAC.
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
void hmac_key(struct digest_algorithm *digest, void *ctx, const void *secret, size_t len, void *key)
Construct HMAC reduced key.
void hmac_init_key(struct digest_algorithm *digest, void *ctx, const void *key)
Initialise HMAC from reduced key.
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.
static size_t hmac_keysize(struct digest_algorithm *digest)
Calculate HMAC reduced key size.
#define HMAC_TEST(name, DIGEST, KEY, DATA, EXPECTED)
Define an HMAC test.
static void hmac_okx(struct hmac_test *test, const char *file, unsigned int line)
Report an HMAC test result.
#define KEY(...)
Define inline key data.
static void hmac_test_exec(void)
Perform HMAC self-tests.
#define DATA(...)
Define inline data.
struct digest_algorithm md5_algorithm
struct digest_algorithm sha1_algorithm
struct digest_algorithm sha256_algorithm
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
A message digest algorithm.
size_t digestsize
Digest size.
size_t blocksize
Block size.
size_t ctxsize
Context size.
const char * name
Algorithm name.
size_t expected_len
Length of expected HMAC.
size_t data_len
Length of data.
size_t key_len
Length of key.
const void * expected
Expected HMAC.
struct digest_algorithm * digest
Digest algorithm.
Self-test infrastructure.
#define okx(success, file, line)
Report test result.
#define __self_test
Declare a self-test.