5
test_entry test_list[26] = {
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
{"der_test", "e", "", der_tests },
14
{"pkcs_1_test", "f", "e", pkcs_1_test },
15
{"rsa_test", "g", "e", rsa_test },
16
{"ecc_test", "h", "a", ecc_tests },
17
{"dsa_test", "i", "a", dsa_test },
18
{"dh_test", "j", "a", dh_tests },
20
{NULL, NULL, NULL, NULL}
23
prng_state test_yarrow;
24
static int current_test;
26
void run_cmd(int res, int line, char *file, char *cmd)
28
if (res != CRYPT_OK) {
29
fprintf(stderr, "[%s]: %s (%d)\n%s:%d:%s\n", tests[current_test].name, error_to_string(res), res, file, line, cmd);
34
void register_algs(void)
39
register_cipher (&aes_desc);
42
register_cipher (&blowfish_desc);
45
register_cipher (&xtea_desc);
48
register_cipher (&rc5_desc);
51
register_cipher (&rc6_desc);
54
register_cipher (&saferp_desc);
57
register_cipher (&twofish_desc);
60
register_cipher (&safer_k64_desc);
61
register_cipher (&safer_sk64_desc);
62
register_cipher (&safer_k128_desc);
63
register_cipher (&safer_sk128_desc);
66
register_cipher (&rc2_desc);
69
register_cipher (&des_desc);
70
register_cipher (&des3_desc);
73
register_cipher (&cast5_desc);
76
register_cipher (&noekeon_desc);
79
register_cipher (&skipjack_desc);
82
register_hash (&tiger_desc);
85
register_hash (&md2_desc);
88
register_hash (&md4_desc);
91
register_hash (&md5_desc);
94
register_hash (&sha1_desc);
97
register_hash (&sha256_desc);
100
register_hash (&sha224_desc);
103
register_hash (&sha384_desc);
106
register_hash (&sha512_desc);
109
register_hash (&rmd128_desc);
112
register_hash (&rmd160_desc);
115
register_hash (&whirlpool_desc);
118
register_hash(&chc_desc);
119
if ((err = chc_register(register_cipher(&aes_enc_desc))) != CRYPT_OK) {
120
printf("chc_register error: %s\n", error_to_string(err));
127
register_prng(&yarrow_desc);
130
register_prng(&fortuna_desc);
133
register_prng(&rc4_desc);
136
register_prng(&sprng_desc);
139
register_prng(&sober128_desc);
143
/* sort tests based on their requirement/services. Helps make sure dependencies are tested first */
146
unsigned x, y, z, a, pidx[26];
148
/* find out where things are provided */
149
zeromem(pidx, sizeof(pidx));
153
for (x = 0; test_list[x].name != NULL; x++) {
154
if (test_list[x].entry == NULL) continue;
155
if (strlen(test_list[x].prov) == 0) {
157
tests[z++] = test_list[x]; test_list[x].entry = NULL;
158
pidx[test_list[x].prov[0]-'a'] = 1;
161
for (a = 0; a < strlen(test_list[x].req); a++) {
162
if (pidx[test_list[x].req[a]-'a'] == 0) break;
164
if (a == strlen(test_list[x].req)) {
166
tests[z++] = test_list[x]; test_list[x].entry = NULL;
167
pidx[test_list[x].prov[0]-'a'] = 1;
176
#define STACK_EST_USAGE 32768
178
unsigned char stack_mask[STACKBLOCK];
179
unsigned long stack_cur=0;
181
void stack_masker(void)
184
volatile unsigned char M[STACK_EST_USAGE];
186
for (stack_cur = 0; stack_cur < STACK_EST_USAGE/STACKBLOCK; stack_cur++) {
187
memcpy(M+(stack_cur*STACKBLOCK), stack_mask, STACKBLOCK);
192
void stack_check(void)
195
unsigned char M[STACK_EST_USAGE];
198
while (memcmp(M+(STACK_EST_USAGE-STACKBLOCK-stack_cur), stack_mask, STACKBLOCK) &&
200
while (memcmp(M+stack_cur, stack_mask, STACKBLOCK) &&
202
stack_cur < (STACK_EST_USAGE - STACKBLOCK)) {
211
unsigned char buf[16];
213
/* setup stack checker */
215
for (x = 0; x < STACKBLOCK; x++) {
216
stack_mask[x] = rand() & 255;
220
printf("Built with\n%s\n", crypt_build_settings);
225
// start dummy yarrow for internal use
226
DO(yarrow_start(&test_yarrow));
227
sprng_read(buf, 16, NULL);
228
DO(yarrow_add_entropy(buf, 16, &test_yarrow));
229
DO(yarrow_ready(&test_yarrow));
232
printf("Sizes of objects (in bytes)\n");
233
printf("\tsymmetric_key\t=\t%5lu\n", sizeof(symmetric_key));
234
printf("\thash_state\t=\t%5lu\n", sizeof(hash_state));
235
printf("\thmac_state\t=\t%5lu\n", sizeof(hmac_state));
236
printf("\tomac_state\t=\t%5lu\n", sizeof(omac_state));
237
printf("\tpmac_state\t=\t%5lu\n", sizeof(pmac_state));
238
printf("\tocb_state\t=\t%5lu\n", sizeof(ocb_state));
239
printf("\teax_state\t=\t%5lu\n", sizeof(eax_state));
240
printf("\tmp_int\t\t=\t%5lu\n", sizeof(mp_int));
242
printf("\trsa_key\t\t=\t%5lu\n", sizeof(rsa_key));
245
printf("\tdsa_key\t\t=\t%5lu\n", sizeof(dsa_key));
248
printf("\tdh_key\t\t=\t%5lu\n", sizeof(dh_key));
251
printf("\tecc_key\t\t=\t%5lu\n", sizeof(ecc_key));
256
for (current_test = 0; tests[current_test].name != NULL; current_test++) {
257
printf("[%-20s]: ", tests[current_test].name); fflush(stdout);
258
printf("\t%s\n", tests[current_test].entry()==0?"passed":"failed");