blob: 01cc8fed7a682286c5499009099bb9fd3424c0c7 [file]
#ifndef _HMAC_TEST_H
#define _HMAC_TEST_H
/** @file
*
* HMAC self-tests
*
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdint.h>
#include <ipxe/crypto.h>
#include <ipxe/test.h>
/** Define inline key data */
#define KEY(...) { __VA_ARGS__ }
/** Define inline data */
#define DATA(...) { __VA_ARGS__ }
/** Define inline expected HMAC */
#define EXPECTED(...) { __VA_ARGS__ }
/** An HMAC test */
struct hmac_test {
/** Digest algorithm */
struct digest_algorithm *digest;
/** Key */
const void *key;
/** Length of key */
size_t key_len;
/** Data */
const void *data;
/** Length of data */
size_t data_len;
/** Expected HMAC */
const void *expected;
/** Length of expected HMAC */
size_t expected_len;
};
/**
* Define an HMAC test
*
* @v name Test name
* @v DIGEST Digest algorithm
* @v KEY Key
* @v DATA Data
* @v EXPECTED Expected HMAC
* @ret test HMAC test
*/
#define HMAC_TEST( name, DIGEST, KEY, DATA, EXPECTED ) \
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 ), \
}
extern void hmac_okx ( struct hmac_test *test, const char *file,
unsigned int line );
/**
* Report an HMAC test result
*
* @v test HMAC test
*/
#define hmac_ok( test ) hmac_okx ( test, __FILE__, __LINE__ )
#endif /* _HMAC_TEST_H */