| #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 */ |