~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/ipxe/src/tests/digest_test.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _DIGEST_TEST_H
 
2
#define _DIGEST_TEST_H
 
3
 
 
4
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
5
 
 
6
#include <stdint.h>
 
7
#include <ipxe/crypto.h>
 
8
#include <ipxe/test.h>
 
9
 
 
10
/** A digest test */
 
11
struct digest_test {
 
12
        /** Digest algorithm */
 
13
        struct digest_algorithm *digest;
 
14
        /** Test data */
 
15
        const void *data;
 
16
        /** Length of test data */
 
17
        size_t len;
 
18
        /** Expected digest value */
 
19
        const void *expected;
 
20
        /** Expected digest length */
 
21
        size_t expected_len;
 
22
};
 
23
 
 
24
/** Define inline test data */
 
25
#define DATA(...) { __VA_ARGS__ }
 
26
 
 
27
/** Define inline expected digest value */
 
28
#define DIGEST(...) { __VA_ARGS__ }
 
29
 
 
30
/**
 
31
 * Define a digest test
 
32
 *
 
33
 * @v name              Test name
 
34
 * @v DIGEST            Digest algorithm
 
35
 * @v DATA              Test data
 
36
 * @v EXPECTED          Expected digest value
 
37
 * @ret test            Digest test
 
38
 */
 
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 = {                              \
 
43
                .digest = DIGEST,                                       \
 
44
                .data = name ## _data,                                  \
 
45
                .len = sizeof ( name ## _data ),                        \
 
46
                .expected = name ## _expected,                          \
 
47
                .expected_len = sizeof ( name ## _expected ),           \
 
48
        };
 
49
 
 
50
/** Standard test vector: empty data */
 
51
#define DIGEST_EMPTY DATA()
 
52
 
 
53
/** Standard test vector: NIST string "abc"
 
54
 *
 
55
 * The NIST Cryptographic Toolkit examples for all digest algorithms
 
56
 * include a test vector which is the unterminated string
 
57
 *
 
58
 *   "abc"
 
59
 */
 
60
#define DIGEST_NIST_ABC                                                 \
 
61
        DATA ( 0x61, 0x62, 0x63 )
 
62
 
 
63
/** Standard test vector: NIST string "abc...opq"
 
64
 *
 
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
 
68
 *
 
69
 *   "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
 
70
 */
 
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,    \
 
78
               0x70, 0x71 )
 
79
 
 
80
/** Standard test vector: NIST string "abc...stu"
 
81
 *
 
82
 * The NIST Cryptographic Toolkit examples for all 64-bit digest
 
83
 * algorithms (SHA-512 family) include a test vector which is the
 
84
 * unterminated string
 
85
 *
 
86
 *   "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
 
87
 *   "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
 
88
 */
 
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 )
 
103
 
 
104
/**
 
105
 * Report a digest test result
 
106
 *
 
107
 * @v test              Digest test
 
108
 */
 
109
#define digest_ok(test) digest_okx ( test, __FILE__, __LINE__ )
 
110
 
 
111
extern void digest_okx ( struct digest_test *test, const char *file,
 
112
                         unsigned int line );
 
113
extern unsigned long digest_cost ( struct digest_algorithm *digest );
 
114
 
 
115
#endif /* _DIGEST_TEST_H */