These changes are the raw update to qemu-2.6.
[kvmfornfv.git] / qemu / roms / ipxe / src / tests / sha512_test.c
1 /*
2  * Copyright (C) 2015 Michael Brown <mbrown@fensystems.co.uk>.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301, USA.
18  *
19  * You can also choose to distribute this program under the terms of
20  * the Unmodified Binary Distribution Licence (as given in the file
21  * COPYING.UBDL), provided that you have satisfied its requirements.
22  */
23
24 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
25
26 /** @file
27  *
28  * SHA-512 family tests
29  *
30  * NIST test vectors are taken from
31  *
32  *  http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA512.pdf
33  *  http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA384.pdf
34  *  http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA512_256.pdf
35  *  http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA512_224.pdf
36  *
37  */
38
39 /* Forcibly enable assertions */
40 #undef NDEBUG
41
42 #include <ipxe/sha512.h>
43 #include <ipxe/test.h>
44 #include "digest_test.h"
45
46 /* Empty test vector (digest obtained from "sha512sum /dev/null") */
47 DIGEST_TEST ( sha512_empty, &sha512_algorithm, DIGEST_EMPTY,
48               DIGEST ( 0xcf, 0x83, 0xe1, 0x35, 0x7e, 0xef, 0xb8, 0xbd, 0xf1,
49                        0x54, 0x28, 0x50, 0xd6, 0x6d, 0x80, 0x07, 0xd6, 0x20,
50                        0xe4, 0x05, 0x0b, 0x57, 0x15, 0xdc, 0x83, 0xf4, 0xa9,
51                        0x21, 0xd3, 0x6c, 0xe9, 0xce, 0x47, 0xd0, 0xd1, 0x3c,
52                        0x5d, 0x85, 0xf2, 0xb0, 0xff, 0x83, 0x18, 0xd2, 0x87,
53                        0x7e, 0xec, 0x2f, 0x63, 0xb9, 0x31, 0xbd, 0x47, 0x41,
54                        0x7a, 0x81, 0xa5, 0x38, 0x32, 0x7a, 0xf9, 0x27, 0xda,
55                        0x3e ) );
56
57 /* NIST test vector "abc" */
58 DIGEST_TEST ( sha512_nist_abc, &sha512_algorithm, DIGEST_NIST_ABC,
59               DIGEST ( 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc,
60                        0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 0x12, 0xe6,
61                        0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a, 0x9e, 0xee,
62                        0xe6, 0x4b, 0x55, 0xd3, 0x9a, 0x21, 0x92, 0x99, 0x2a,
63                        0x27, 0x4f, 0xc1, 0xa8, 0x36, 0xba, 0x3c, 0x23, 0xa3,
64                        0xfe, 0xeb, 0xbd, 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c,
65                        0xe8, 0x0e, 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4,
66                        0x9f ) );
67
68 /* NIST test vector "abc...stu" */
69 DIGEST_TEST ( sha512_nist_abc_stu, &sha512_algorithm, DIGEST_NIST_ABC_STU,
70               DIGEST ( 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, 0x8c,
71                        0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, 0x8f, 0x77,
72                        0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, 0x72, 0x99, 0xae,
73                        0xad, 0xb6, 0x88, 0x90, 0x18, 0x50, 0x1d, 0x28, 0x9e,
74                        0x49, 0x00, 0xf7, 0xe4, 0x33, 0x1b, 0x99, 0xde, 0xc4,
75                        0xb5, 0x43, 0x3a, 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd,
76                        0x26, 0x54, 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9,
77                        0x09 ) );
78
79 /* Empty test vector (digest obtained from "sha384sum /dev/null") */
80 DIGEST_TEST ( sha384_empty, &sha384_algorithm, DIGEST_EMPTY,
81               DIGEST ( 0x38, 0xb0, 0x60, 0xa7, 0x51, 0xac, 0x96, 0x38, 0x4c,
82                        0xd9, 0x32, 0x7e, 0xb1, 0xb1, 0xe3, 0x6a, 0x21, 0xfd,
83                        0xb7, 0x11, 0x14, 0xbe, 0x07, 0x43, 0x4c, 0x0c, 0xc7,
84                        0xbf, 0x63, 0xf6, 0xe1, 0xda, 0x27, 0x4e, 0xde, 0xbf,
85                        0xe7, 0x6f, 0x65, 0xfb, 0xd5, 0x1a, 0xd2, 0xf1, 0x48,
86                        0x98, 0xb9, 0x5b ) );
87
88 /* NIST test vector "abc" */
89 DIGEST_TEST ( sha384_nist_abc, &sha384_algorithm, DIGEST_NIST_ABC,
90               DIGEST ( 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 0xb5,
91                        0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, 0x27, 0x2c,
92                        0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 0x1a, 0x8b, 0x60,
93                        0x5a, 0x43, 0xff, 0x5b, 0xed, 0x80, 0x86, 0x07, 0x2b,
94                        0xa1, 0xe7, 0xcc, 0x23, 0x58, 0xba, 0xec, 0xa1, 0x34,
95                        0xc8, 0x25, 0xa7 ) );
96
97 /* NIST test vector "abc...stu" */
98 DIGEST_TEST ( sha384_nist_abc_stu, &sha384_algorithm, DIGEST_NIST_ABC_STU,
99               DIGEST ( 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, 0x3d,
100                        0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, 0x53, 0x11,
101                        0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, 0x2f, 0xa0, 0x80,
102                        0x86, 0xe3, 0xb0, 0xf7, 0x12, 0xfc, 0xc7, 0xc7, 0x1a,
103                        0x55, 0x7e, 0x2d, 0xb9, 0x66, 0xc3, 0xe9, 0xfa, 0x91,
104                        0x74, 0x60, 0x39 ) );
105
106 /* Empty test vector (digest obtained from "shasum -a 512256 /dev/null") */
107 DIGEST_TEST ( sha512_256_empty, &sha512_256_algorithm, DIGEST_EMPTY,
108               DIGEST ( 0xc6, 0x72, 0xb8, 0xd1, 0xef, 0x56, 0xed, 0x28, 0xab,
109                        0x87, 0xc3, 0x62, 0x2c, 0x51, 0x14, 0x06, 0x9b, 0xdd,
110                        0x3a, 0xd7, 0xb8, 0xf9, 0x73, 0x74, 0x98, 0xd0, 0xc0,
111                        0x1e, 0xce, 0xf0, 0x96, 0x7a ) );
112
113 /* NIST test vector "abc" */
114 DIGEST_TEST ( sha512_256_nist_abc, &sha512_256_algorithm, DIGEST_NIST_ABC,
115               DIGEST ( 0x53, 0x04, 0x8e, 0x26, 0x81, 0x94, 0x1e, 0xf9, 0x9b,
116                        0x2e, 0x29, 0xb7, 0x6b, 0x4c, 0x7d, 0xab, 0xe4, 0xc2,
117                        0xd0, 0xc6, 0x34, 0xfc, 0x6d, 0x46, 0xe0, 0xe2, 0xf1,
118                        0x31, 0x07, 0xe7, 0xaf, 0x23 ) );
119
120 /* NIST test vector "abc...stu" */
121 DIGEST_TEST ( sha512_256_nist_abc_stu, &sha512_256_algorithm,
122               DIGEST_NIST_ABC_STU,
123               DIGEST ( 0x39, 0x28, 0xe1, 0x84, 0xfb, 0x86, 0x90, 0xf8, 0x40,
124                        0xda, 0x39, 0x88, 0x12, 0x1d, 0x31, 0xbe, 0x65, 0xcb,
125                        0x9d, 0x3e, 0xf8, 0x3e, 0xe6, 0x14, 0x6f, 0xea, 0xc8,
126                        0x61, 0xe1, 0x9b, 0x56, 0x3a ) );
127
128 /* Empty test vector (digest obtained from "shasum -a 512224 /dev/null") */
129 DIGEST_TEST ( sha512_224_empty, &sha512_224_algorithm, DIGEST_EMPTY,
130               DIGEST ( 0x6e, 0xd0, 0xdd, 0x02, 0x80, 0x6f, 0xa8, 0x9e, 0x25,
131                        0xde, 0x06, 0x0c, 0x19, 0xd3, 0xac, 0x86, 0xca, 0xbb,
132                        0x87, 0xd6, 0xa0, 0xdd, 0xd0, 0x5c, 0x33, 0x3b, 0x84,
133                        0xf4 ) );
134
135 /* NIST test vector "abc" */
136 DIGEST_TEST ( sha512_224_nist_abc, &sha512_224_algorithm, DIGEST_NIST_ABC,
137               DIGEST ( 0x46, 0x34, 0x27, 0x0f, 0x70, 0x7b, 0x6a, 0x54, 0xda,
138                        0xae, 0x75, 0x30, 0x46, 0x08, 0x42, 0xe2, 0x0e, 0x37,
139                        0xed, 0x26, 0x5c, 0xee, 0xe9, 0xa4, 0x3e, 0x89, 0x24,
140                        0xaa ) );
141
142 /* NIST test vector "abc...stu" */
143 DIGEST_TEST ( sha512_224_nist_abc_stu, &sha512_224_algorithm,
144               DIGEST_NIST_ABC_STU,
145               DIGEST ( 0x23, 0xfe, 0xc5, 0xbb, 0x94, 0xd6, 0x0b, 0x23, 0x30,
146                        0x81, 0x92, 0x64, 0x0b, 0x0c, 0x45, 0x33, 0x35, 0xd6,
147                        0x64, 0x73, 0x4f, 0xe4, 0x0e, 0x72, 0x68, 0x67, 0x4a,
148                        0xf9 ) );
149
150 /**
151  * Perform SHA-512 family self-test
152  *
153  */
154 static void sha512_test_exec ( void ) {
155
156         /* Correctness tests */
157         digest_ok ( &sha512_empty );
158         digest_ok ( &sha512_nist_abc );
159         digest_ok ( &sha512_nist_abc_stu );
160         digest_ok ( &sha384_empty );
161         digest_ok ( &sha384_nist_abc );
162         digest_ok ( &sha384_nist_abc_stu );
163         digest_ok ( &sha512_256_empty );
164         digest_ok ( &sha512_256_nist_abc );
165         digest_ok ( &sha512_256_nist_abc_stu );
166         digest_ok ( &sha512_224_empty );
167         digest_ok ( &sha512_224_nist_abc );
168         digest_ok ( &sha512_224_nist_abc_stu );
169
170         /* Speed tests */
171         DBG ( "SHA512 required %ld cycles per byte\n",
172               digest_cost ( &sha512_algorithm ) );
173         DBG ( "SHA384 required %ld cycles per byte\n",
174               digest_cost ( &sha384_algorithm ) );
175         DBG ( "SHA512/256 required %ld cycles per byte\n",
176               digest_cost ( &sha512_256_algorithm ) );
177         DBG ( "SHA512/224 required %ld cycles per byte\n",
178               digest_cost ( &sha512_224_algorithm ) );
179 }
180
181 /** SHA-512 family self-test */
182 struct self_test sha512_test __self_test = {
183         .name = "sha512",
184         .exec = sha512_test_exec,
185 };