4
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
7
#include <ipxe/crypto.h>
12
/** Digest algorithm */
13
struct digest_algorithm *digest;
16
/** Length of test data */
18
/** Expected digest value */
20
/** Expected digest length */
24
/** Define inline test data */
25
#define DATA(...) { __VA_ARGS__ }
27
/** Define inline expected digest value */
28
#define DIGEST(...) { __VA_ARGS__ }
31
* Define a digest test
34
* @v DIGEST Digest algorithm
36
* @v EXPECTED Expected digest value
37
* @ret test Digest test
39
#define DIGEST_TEST( name, DIGEST, DATA, EXPECTED ) \
40
static const uint8_t name ## _data[] = DATA; \
41
static const uint8_t name ## _expected[] = EXPECTED; \
42
static struct digest_test name = { \
44
.data = name ## _data, \
45
.len = sizeof ( name ## _data ), \
46
.expected = name ## _expected, \
47
.expected_len = sizeof ( name ## _expected ), \
50
/** Standard test vector: empty data */
51
#define DIGEST_EMPTY DATA()
53
/** Standard test vector: NIST string "abc"
55
* The NIST Cryptographic Toolkit examples for all digest algorithms
56
* include a test vector which is the unterminated string
60
#define DIGEST_NIST_ABC \
61
DATA ( 0x61, 0x62, 0x63 )
63
/** Standard test vector: NIST string "abc...opq"
65
* The NIST Cryptographic Toolkit examples for all 32-bit digest
66
* algorithms (SHA-1 and the SHA-256 family) include a test vector
67
* which is the unterminated string
69
* "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
71
#define DIGEST_NIST_ABC_OPQ \
72
DATA ( 0x61, 0x62, 0x63, 0x64, 0x62, 0x63, 0x64, 0x65, 0x63, \
73
0x64, 0x65, 0x66, 0x64, 0x65, 0x66, 0x67, 0x65, 0x66, \
74
0x67, 0x68, 0x66, 0x67, 0x68, 0x69, 0x67, 0x68, 0x69, \
75
0x6a, 0x68, 0x69, 0x6a, 0x6b, 0x69, 0x6a, 0x6b, 0x6c, \
76
0x6a, 0x6b, 0x6c, 0x6d, 0x6b, 0x6c, 0x6d, 0x6e, 0x6c, \
77
0x6d, 0x6e, 0x6f, 0x6d, 0x6e, 0x6f, 0x70, 0x6e, 0x6f, \
80
/** Standard test vector: NIST string "abc...stu"
82
* The NIST Cryptographic Toolkit examples for all 64-bit digest
83
* algorithms (SHA-512 family) include a test vector which is the
86
* "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
87
* "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
89
#define DIGEST_NIST_ABC_STU \
90
DATA ( 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x62, \
91
0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x63, 0x64, \
92
0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x64, 0x65, 0x66, \
93
0x67, 0x68, 0x69, 0x6a, 0x6b, 0x65, 0x66, 0x67, 0x68, \
94
0x69, 0x6a, 0x6b, 0x6c, 0x66, 0x67, 0x68, 0x69, 0x6a, \
95
0x6b, 0x6c, 0x6d, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, \
96
0x6d, 0x6e, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, \
97
0x6f, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, \
98
0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x6b, \
99
0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x6c, 0x6d, \
100
0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x6d, 0x6e, 0x6f, \
101
0x70, 0x71, 0x72, 0x73, 0x74, 0x6e, 0x6f, 0x70, 0x71, \
102
0x72, 0x73, 0x74, 0x75 )
105
* Report a digest test result
107
* @v test Digest test
109
#define digest_ok(test) digest_okx ( test, __FILE__, __LINE__ )
111
extern void digest_okx ( struct digest_test *test, const char *file,
113
extern unsigned long digest_cost ( struct digest_algorithm *digest );
115
#endif /* _DIGEST_TEST_H */