15
|
1 #include "test.h" |
|
2 |
|
3 test_entry tests[26]; |
|
4 |
|
5 test_entry test_list[26] = { |
|
6 |
|
7 /* test name provides requires entry */ |
|
8 {"store_test", "a", "", store_test }, |
|
9 {"cipher_hash_test", "b", "a", cipher_hash_test }, |
|
10 {"modes_test", "c", "b", modes_test }, |
|
11 {"mac_test", "d", "c", mac_test }, |
|
12 {"pkcs_1_test", "e", "b", pkcs_1_test }, |
|
13 {"rsa_test", "f", "e", rsa_test }, |
|
14 {"ecc_test", "g", "a", ecc_tests }, |
|
15 {"dsa_test", "h", "a", dsa_test }, |
|
16 {"dh_test", "i", "a", dh_tests }, |
|
17 |
|
18 {NULL, NULL, NULL, NULL} |
|
19 }; |
|
20 |
|
21 prng_state test_yarrow; |
|
22 static int current_test; |
|
23 |
|
24 void run_cmd(int res, int line, char *file, char *cmd) |
|
25 { |
|
26 if (res != CRYPT_OK) { |
|
27 fprintf(stderr, "[%s]: %s (%d)\n%s:%d:%s\n", tests[current_test].name, error_to_string(res), res, file, line, cmd); |
|
28 exit(EXIT_FAILURE); |
|
29 } |
|
30 } |
|
31 |
|
32 void register_algs(void) |
|
33 { |
|
34 #ifdef RIJNDAEL |
|
35 register_cipher (&aes_desc); |
|
36 #endif |
|
37 #ifdef BLOWFISH |
|
38 register_cipher (&blowfish_desc); |
|
39 #endif |
|
40 #ifdef XTEA |
|
41 register_cipher (&xtea_desc); |
|
42 #endif |
|
43 #ifdef RC5 |
|
44 register_cipher (&rc5_desc); |
|
45 #endif |
|
46 #ifdef RC6 |
|
47 register_cipher (&rc6_desc); |
|
48 #endif |
|
49 #ifdef SAFERP |
|
50 register_cipher (&saferp_desc); |
|
51 #endif |
|
52 #ifdef TWOFISH |
|
53 register_cipher (&twofish_desc); |
|
54 #endif |
|
55 #ifdef SAFER |
|
56 register_cipher (&safer_k64_desc); |
|
57 register_cipher (&safer_sk64_desc); |
|
58 register_cipher (&safer_k128_desc); |
|
59 register_cipher (&safer_sk128_desc); |
|
60 #endif |
|
61 #ifdef RC2 |
|
62 register_cipher (&rc2_desc); |
|
63 #endif |
|
64 #ifdef DES |
|
65 register_cipher (&des_desc); |
|
66 register_cipher (&des3_desc); |
|
67 #endif |
|
68 #ifdef CAST5 |
|
69 register_cipher (&cast5_desc); |
|
70 #endif |
|
71 #ifdef NOEKEON |
|
72 register_cipher (&noekeon_desc); |
|
73 #endif |
|
74 #ifdef SKIPJACK |
|
75 register_cipher (&skipjack_desc); |
|
76 #endif |
|
77 #ifdef TIGER |
|
78 register_hash (&tiger_desc); |
|
79 #endif |
|
80 #ifdef MD2 |
|
81 register_hash (&md2_desc); |
|
82 #endif |
|
83 #ifdef MD4 |
|
84 register_hash (&md4_desc); |
|
85 #endif |
|
86 #ifdef MD5 |
|
87 register_hash (&md5_desc); |
|
88 #endif |
|
89 #ifdef SHA1 |
|
90 register_hash (&sha1_desc); |
|
91 #endif |
|
92 #ifdef SHA256 |
|
93 register_hash (&sha256_desc); |
|
94 #endif |
|
95 #ifdef SHA224 |
|
96 register_hash (&sha224_desc); |
|
97 #endif |
|
98 #ifdef SHA384 |
|
99 register_hash (&sha384_desc); |
|
100 #endif |
|
101 #ifdef SHA512 |
|
102 register_hash (&sha512_desc); |
|
103 #endif |
|
104 #ifdef RIPEMD128 |
|
105 register_hash (&rmd128_desc); |
|
106 #endif |
|
107 #ifdef RIPEMD160 |
|
108 register_hash (&rmd160_desc); |
|
109 #endif |
|
110 #ifdef WHIRLPOOL |
|
111 register_hash (&whirlpool_desc); |
|
112 #endif |
|
113 |
|
114 if (register_prng(&yarrow_desc) == -1) { |
|
115 printf("Error registering yarrow PRNG\n"); |
|
116 exit(-1); |
|
117 } |
|
118 |
|
119 if (register_prng(&sprng_desc) == -1) { |
|
120 printf("Error registering sprng PRNG\n"); |
|
121 exit(-1); |
|
122 } |
|
123 } |
|
124 |
|
125 /* sort tests based on their requirement/services. Helps make sure dependencies are tested first */ |
|
126 void sort(void) |
|
127 { |
|
128 unsigned x, y, z, a, pidx[26]; |
|
129 |
|
130 /* find out where things are provided */ |
|
131 zeromem(pidx, sizeof(pidx)); |
|
132 z = 0; |
|
133 do { |
|
134 y = 0; |
|
135 for (x = 0; test_list[x].name != NULL; x++) { |
|
136 if (test_list[x].entry == NULL) continue; |
|
137 if (strlen(test_list[x].prov) == 0) { |
|
138 y = 1; |
|
139 tests[z++] = test_list[x]; test_list[x].entry = NULL; |
|
140 pidx[test_list[x].prov[0]-'a'] = 1; |
|
141 break; |
|
142 } else { |
|
143 for (a = 0; a < strlen(test_list[x].req); a++) { |
|
144 if (pidx[test_list[x].req[a]-'a'] == 0) break; |
|
145 } |
|
146 if (a == strlen(test_list[x].req)) { |
|
147 y = 1; |
|
148 tests[z++] = test_list[x]; test_list[x].entry = NULL; |
|
149 pidx[test_list[x].prov[0]-'a'] = 1; |
|
150 break; |
|
151 } |
|
152 } |
|
153 } |
|
154 } while (y == 1); |
|
155 } |
|
156 |
|
157 int main(void) |
|
158 { |
|
159 printf("Built with\n%s\n", crypt_build_settings); |
|
160 |
|
161 srand(time(NULL)); |
|
162 sort(); |
|
163 register_algs(); |
|
164 |
|
165 // start dummy yarrow for internal use |
|
166 DO(yarrow_start(&test_yarrow)); |
|
167 DO(yarrow_add_entropy("test", 4, &test_yarrow)); |
|
168 DO(yarrow_ready(&test_yarrow)); |
|
169 |
|
170 // do tests |
|
171 for (current_test = 0; tests[current_test].name != NULL; current_test++) { |
|
172 printf("[%-20s]: ", tests[current_test].name); fflush(stdout); |
|
173 printf("\t%s\n", tests[current_test].entry()==0?"passed":"failed"); |
|
174 } |
|
175 |
|
176 return 0; |
|
177 } |