123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #ifndef _DIGEST_TEST_H
- #define _DIGEST_TEST_H
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #include <stdint.h>
- #include <ipxe/crypto.h>
- #include <ipxe/test.h>
-
- /** A digest test */
- struct digest_test {
- /** Digest algorithm */
- struct digest_algorithm *digest;
- /** Test data */
- const void *data;
- /** Length of test data */
- size_t len;
- /** Expected digest value */
- const void *expected;
- /** Expected digest length */
- size_t expected_len;
- };
-
- /** Define inline test data */
- #define DATA(...) { __VA_ARGS__ }
-
- /** Define inline expected digest value */
- #define DIGEST(...) { __VA_ARGS__ }
-
- /**
- * Define a digest test
- *
- * @v name Test name
- * @v DIGEST Digest algorithm
- * @v DATA Test data
- * @v EXPECTED Expected digest value
- * @ret test Digest test
- */
- #define DIGEST_TEST( name, DIGEST, DATA, EXPECTED ) \
- static const uint8_t name ## _data[] = DATA; \
- static const uint8_t name ## _expected[] = EXPECTED; \
- static struct digest_test name = { \
- .digest = DIGEST, \
- .data = name ## _data, \
- .len = sizeof ( name ## _data ), \
- .expected = name ## _expected, \
- .expected_len = sizeof ( name ## _expected ), \
- };
-
- /** Standard test vector: empty data */
- #define DIGEST_EMPTY DATA()
-
- /** Standard test vector: NIST string "abc"
- *
- * The NIST Cryptographic Toolkit examples for all digest algorithms
- * include a test vector which is the unterminated string
- *
- * "abc"
- */
- #define DIGEST_NIST_ABC \
- DATA ( 0x61, 0x62, 0x63 )
-
- /** Standard test vector: NIST string "abc...opq"
- *
- * The NIST Cryptographic Toolkit examples for all 32-bit digest
- * algorithms (SHA-1 and the SHA-256 family) include a test vector
- * which is the unterminated string
- *
- * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
- */
- #define DIGEST_NIST_ABC_OPQ \
- DATA ( 0x61, 0x62, 0x63, 0x64, 0x62, 0x63, 0x64, 0x65, 0x63, \
- 0x64, 0x65, 0x66, 0x64, 0x65, 0x66, 0x67, 0x65, 0x66, \
- 0x67, 0x68, 0x66, 0x67, 0x68, 0x69, 0x67, 0x68, 0x69, \
- 0x6a, 0x68, 0x69, 0x6a, 0x6b, 0x69, 0x6a, 0x6b, 0x6c, \
- 0x6a, 0x6b, 0x6c, 0x6d, 0x6b, 0x6c, 0x6d, 0x6e, 0x6c, \
- 0x6d, 0x6e, 0x6f, 0x6d, 0x6e, 0x6f, 0x70, 0x6e, 0x6f, \
- 0x70, 0x71 )
-
- /** Standard test vector: NIST string "abc...stu"
- *
- * The NIST Cryptographic Toolkit examples for all 64-bit digest
- * algorithms (SHA-512 family) include a test vector which is the
- * unterminated string
- *
- * "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
- * "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
- */
- #define DIGEST_NIST_ABC_STU \
- DATA ( 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x62, \
- 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x63, 0x64, \
- 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x64, 0x65, 0x66, \
- 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x65, 0x66, 0x67, 0x68, \
- 0x69, 0x6a, 0x6b, 0x6c, 0x66, 0x67, 0x68, 0x69, 0x6a, \
- 0x6b, 0x6c, 0x6d, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, \
- 0x6d, 0x6e, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, \
- 0x6f, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, \
- 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x6b, \
- 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x6c, 0x6d, \
- 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x6d, 0x6e, 0x6f, \
- 0x70, 0x71, 0x72, 0x73, 0x74, 0x6e, 0x6f, 0x70, 0x71, \
- 0x72, 0x73, 0x74, 0x75 )
-
- /**
- * Report a digest test result
- *
- * @v test Digest test
- */
- #define digest_ok(test) digest_okx ( test, __FILE__, __LINE__ )
-
- extern void digest_okx ( struct digest_test *test, const char *file,
- unsigned int line );
- extern unsigned long digest_cost ( struct digest_algorithm *digest );
-
- #endif /* _DIGEST_TEST_H */
|