1 /* ====================================================================
2 * Copyright (c) 2005 The OpenSSL Project. All rights reserved.
3 * ====================================================================
9 #include <openssl/whrlpool.h>
10 #include <openssl/crypto.h>
12 #if defined(OPENSSL_NO_WHIRLPOOL)
13 int main(int argc, char *argv[])
15 printf("No Whirlpool support\n");
20 /* ISO/IEC 10118-3 test vector set */
21 unsigned char iso_test_1[WHIRLPOOL_DIGEST_LENGTH] = {
22 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
23 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
24 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
25 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7,
26 0x3E, 0x83, 0xBE, 0x69, 0x8B, 0x28, 0x8F, 0xEB,
27 0xCF, 0x88, 0xE3, 0xE0, 0x3C, 0x4F, 0x07, 0x57,
28 0xEA, 0x89, 0x64, 0xE5, 0x9B, 0x63, 0xD9, 0x37,
29 0x08, 0xB1, 0x38, 0xCC, 0x42, 0xA6, 0x6E, 0xB3
32 unsigned char iso_test_2[WHIRLPOOL_DIGEST_LENGTH] = {
33 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
34 0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
35 0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
36 0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42,
37 0xD1, 0x1B, 0xC6, 0x45, 0x41, 0x3A, 0xEF, 0xF6,
38 0x3A, 0x42, 0x39, 0x1A, 0x39, 0x14, 0x5A, 0x59,
39 0x1A, 0x92, 0x20, 0x0D, 0x56, 0x01, 0x95, 0xE5,
40 0x3B, 0x47, 0x85, 0x84, 0xFD, 0xAE, 0x23, 0x1A
43 unsigned char iso_test_3[WHIRLPOOL_DIGEST_LENGTH] = {
44 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
45 0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
46 0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
47 0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C,
48 0x71, 0x81, 0xEE, 0xBD, 0xB6, 0xC5, 0x7E, 0x27,
49 0x7D, 0x0E, 0x34, 0x95, 0x71, 0x14, 0xCB, 0xD6,
50 0xC7, 0x97, 0xFC, 0x9D, 0x95, 0xD8, 0xB5, 0x82,
51 0xD2, 0x25, 0x29, 0x20, 0x76, 0xD4, 0xEE, 0xF5
54 unsigned char iso_test_4[WHIRLPOOL_DIGEST_LENGTH] = {
55 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
56 0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
57 0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
58 0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B,
59 0x84, 0x21, 0x55, 0x76, 0x59, 0xEF, 0x55, 0xC1,
60 0x06, 0xB4, 0xB5, 0x2A, 0xC5, 0xA4, 0xAA, 0xA6,
61 0x92, 0xED, 0x92, 0x00, 0x52, 0x83, 0x8F, 0x33,
62 0x62, 0xE8, 0x6D, 0xBD, 0x37, 0xA8, 0x90, 0x3E
65 unsigned char iso_test_5[WHIRLPOOL_DIGEST_LENGTH] = {
66 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
67 0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
68 0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
69 0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B,
70 0x08, 0xBF, 0x2A, 0x92, 0x51, 0xC3, 0x0B, 0x6A,
71 0x0B, 0x8A, 0xAE, 0x86, 0x17, 0x7A, 0xB4, 0xA6,
72 0xF6, 0x8F, 0x67, 0x3E, 0x72, 0x07, 0x86, 0x5D,
73 0x5D, 0x98, 0x19, 0xA3, 0xDB, 0xA4, 0xEB, 0x3B
76 unsigned char iso_test_6[WHIRLPOOL_DIGEST_LENGTH] = {
77 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
78 0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
79 0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
80 0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E,
81 0x08, 0xEB, 0xA2, 0x66, 0x29, 0x12, 0x9D, 0x8F,
82 0xB7, 0xCB, 0x57, 0x21, 0x1B, 0x92, 0x81, 0xA6,
83 0x55, 0x17, 0xCC, 0x87, 0x9D, 0x7B, 0x96, 0x21,
84 0x42, 0xC6, 0x5F, 0x5A, 0x7A, 0xF0, 0x14, 0x67
87 unsigned char iso_test_7[WHIRLPOOL_DIGEST_LENGTH] = {
88 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
89 0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
90 0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
91 0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29,
92 0x4D, 0x5B, 0xD8, 0xDF, 0x2A, 0x6C, 0x44, 0xE5,
93 0x38, 0xCD, 0x04, 0x7B, 0x26, 0x81, 0xA5, 0x1A,
94 0x2C, 0x60, 0x48, 0x1E, 0x88, 0xC5, 0xA2, 0x0B,
95 0x2C, 0x2A, 0x80, 0xCF, 0x3A, 0x9A, 0x08, 0x3B
98 unsigned char iso_test_8[WHIRLPOOL_DIGEST_LENGTH] = {
99 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
100 0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
101 0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
102 0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69,
103 0x16, 0xBD, 0xC8, 0x03, 0x1B, 0xC5, 0xBE, 0x1B,
104 0x7B, 0x94, 0x76, 0x39, 0xFE, 0x05, 0x0B, 0x56,
105 0x93, 0x9B, 0xAA, 0xA0, 0xAD, 0xFF, 0x9A, 0xE6,
106 0x74, 0x5B, 0x7B, 0x18, 0x1C, 0x3B, 0xE3, 0xFD
109 unsigned char iso_test_9[WHIRLPOOL_DIGEST_LENGTH] = {
110 0x0C, 0x99, 0x00, 0x5B, 0xEB, 0x57, 0xEF, 0xF5,
111 0x0A, 0x7C, 0xF0, 0x05, 0x56, 0x0D, 0xDF, 0x5D,
112 0x29, 0x05, 0x7F, 0xD8, 0x6B, 0x20, 0xBF, 0xD6,
113 0x2D, 0xEC, 0xA0, 0xF1, 0xCC, 0xEA, 0x4A, 0xF5,
114 0x1F, 0xC1, 0x54, 0x90, 0xED, 0xDC, 0x47, 0xAF,
115 0x32, 0xBB, 0x2B, 0x66, 0xC3, 0x4F, 0xF9, 0xAD,
116 0x8C, 0x60, 0x08, 0xAD, 0x67, 0x7F, 0x77, 0x12,
117 0x69, 0x53, 0xB2, 0x26, 0xE4, 0xED, 0x8B, 0x01
120 int main(int argc, char *argv[])
122 unsigned char md[WHIRLPOOL_DIGEST_LENGTH];
126 # ifdef OPENSSL_IA32_SSE2
128 * Alternative to this is to call OpenSSL_add_all_algorithms... The below
129 * code is retained exclusively for debugging purposes.
134 if ((env = getenv("OPENSSL_ia32cap")))
135 OPENSSL_ia32cap = strtoul(env, NULL, 0);
139 fprintf(stdout, "Testing Whirlpool ");
141 WHIRLPOOL("", 0, md);
142 if (memcmp(md, iso_test_1, sizeof(iso_test_1))) {
144 fprintf(stderr, "\nTEST 1 of 9 failed.\n");
147 fprintf(stdout, ".");
150 WHIRLPOOL("a", 1, md);
151 if (memcmp(md, iso_test_2, sizeof(iso_test_2))) {
153 fprintf(stderr, "\nTEST 2 of 9 failed.\n");
156 fprintf(stdout, ".");
159 WHIRLPOOL("abc", 3, md);
160 if (memcmp(md, iso_test_3, sizeof(iso_test_3))) {
162 fprintf(stderr, "\nTEST 3 of 9 failed.\n");
165 fprintf(stdout, ".");
168 WHIRLPOOL("message digest", 14, md);
169 if (memcmp(md, iso_test_4, sizeof(iso_test_4))) {
171 fprintf(stderr, "\nTEST 4 of 9 failed.\n");
174 fprintf(stdout, ".");
177 WHIRLPOOL("abcdefghijklmnopqrstuvwxyz", 26, md);
178 if (memcmp(md, iso_test_5, sizeof(iso_test_5))) {
180 fprintf(stderr, "\nTEST 5 of 9 failed.\n");
183 fprintf(stdout, ".");
186 WHIRLPOOL("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
187 "abcdefghijklmnopqrstuvwxyz" "0123456789", 62, md);
188 if (memcmp(md, iso_test_6, sizeof(iso_test_6))) {
190 fprintf(stderr, "\nTEST 6 of 9 failed.\n");
193 fprintf(stdout, ".");
196 WHIRLPOOL("1234567890" "1234567890" "1234567890" "1234567890"
197 "1234567890" "1234567890" "1234567890" "1234567890", 80, md);
198 if (memcmp(md, iso_test_7, sizeof(iso_test_7))) {
200 fprintf(stderr, "\nTEST 7 of 9 failed.\n");
203 fprintf(stdout, ".");
206 WHIRLPOOL("abcdbcdecdefdefgefghfghighijhijk", 32, md);
207 if (memcmp(md, iso_test_8, sizeof(iso_test_8))) {
209 fprintf(stderr, "\nTEST 8 of 9 failed.\n");
212 fprintf(stdout, ".");
215 WHIRLPOOL_Init(&ctx);
216 for (i = 0; i < 1000000; i += 288)
217 WHIRLPOOL_Update(&ctx, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
218 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
219 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
220 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
221 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
222 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
223 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
224 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
225 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
226 (1000000 - i) < 288 ? 1000000 - i : 288);
227 WHIRLPOOL_Final(md, &ctx);
228 if (memcmp(md, iso_test_9, sizeof(iso_test_9))) {
230 fprintf(stderr, "\nTEST 9 of 9 failed.\n");
233 fprintf(stdout, ".");
236 fprintf(stdout, " passed.\n");