| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- #include "test.h"
- test_entry tests[26];
- test_entry test_list[26] = {
- /* test name provides requires entry */
- {"store_test", "a", "", store_test },
- {"cipher_hash_test", "b", "a", cipher_hash_test },
- {"modes_test", "c", "b", modes_test },
- {"mac_test", "d", "c", mac_test },
- {"der_test", "e", "", der_tests },
- {"pkcs_1_test", "f", "e", pkcs_1_test },
- {"rsa_test", "g", "e", rsa_test },
- {"ecc_test", "h", "a", ecc_tests },
- {"dsa_test", "i", "a", dsa_test },
- {"dh_test", "j", "a", dh_tests },
- {NULL, NULL, NULL, NULL}
- };
- prng_state test_yarrow;
- static int current_test;
- void run_cmd(int res, int line, char *file, char *cmd)
- {
- if (res != CRYPT_OK) {
- fprintf(stderr, "[%s]: %s (%d)\n%s:%d:%s\n", tests[current_test].name, error_to_string(res), res, file, line, cmd);
- exit(EXIT_FAILURE);
- }
- }
- void register_algs(void)
- {
- int err;
- #ifdef RIJNDAEL
- register_cipher (&aes_desc);
- #endif
- #ifdef BLOWFISH
- register_cipher (&blowfish_desc);
- #endif
- #ifdef XTEA
- register_cipher (&xtea_desc);
- #endif
- #ifdef RC5
- register_cipher (&rc5_desc);
- #endif
- #ifdef RC6
- register_cipher (&rc6_desc);
- #endif
- #ifdef SAFERP
- register_cipher (&saferp_desc);
- #endif
- #ifdef TWOFISH
- register_cipher (&twofish_desc);
- #endif
- #ifdef SAFER
- register_cipher (&safer_k64_desc);
- register_cipher (&safer_sk64_desc);
- register_cipher (&safer_k128_desc);
- register_cipher (&safer_sk128_desc);
- #endif
- #ifdef RC2
- register_cipher (&rc2_desc);
- #endif
- #ifdef DES
- register_cipher (&des_desc);
- register_cipher (&des3_desc);
- #endif
- #ifdef CAST5
- register_cipher (&cast5_desc);
- #endif
- #ifdef NOEKEON
- register_cipher (&noekeon_desc);
- #endif
- #ifdef SKIPJACK
- register_cipher (&skipjack_desc);
- #endif
- #ifdef TIGER
- register_hash (&tiger_desc);
- #endif
- #ifdef MD2
- register_hash (&md2_desc);
- #endif
- #ifdef MD4
- register_hash (&md4_desc);
- #endif
- #ifdef MD5
- register_hash (&md5_desc);
- #endif
- #ifdef SHA1
- register_hash (&sha1_desc);
- #endif
- #ifdef SHA256
- register_hash (&sha256_desc);
- #endif
- #ifdef SHA224
- register_hash (&sha224_desc);
- #endif
- #ifdef SHA384
- register_hash (&sha384_desc);
- #endif
- #ifdef SHA512
- register_hash (&sha512_desc);
- #endif
- #ifdef RIPEMD128
- register_hash (&rmd128_desc);
- #endif
- #ifdef RIPEMD160
- register_hash (&rmd160_desc);
- #endif
- #ifdef WHIRLPOOL
- register_hash (&whirlpool_desc);
- #endif
- #ifdef CHC_HASH
- register_hash(&chc_desc);
- if ((err = chc_register(register_cipher(&aes_enc_desc))) != CRYPT_OK) {
- printf("chc_register error: %s\n", error_to_string(err));
- exit(EXIT_FAILURE);
- }
- #endif
- #ifdef YARROW
- register_prng(&yarrow_desc);
- #endif
- #ifdef FORTUNA
- register_prng(&fortuna_desc);
- #endif
- #ifdef RC4
- register_prng(&rc4_desc);
- #endif
- #ifdef SPRNG
- register_prng(&sprng_desc);
- #endif
- #ifdef SOBER128
- register_prng(&sober128_desc);
- #endif
- }
- /* sort tests based on their requirement/services. Helps make sure dependencies are tested first */
- void sort(void)
- {
- unsigned x, y, z, a, pidx[26];
-
- /* find out where things are provided */
- zeromem(pidx, sizeof(pidx));
- z = 0;
- do {
- y = 0;
- for (x = 0; test_list[x].name != NULL; x++) {
- if (test_list[x].entry == NULL) continue;
- if (strlen(test_list[x].prov) == 0) {
- y = 1;
- tests[z++] = test_list[x]; test_list[x].entry = NULL;
- pidx[test_list[x].prov[0]-'a'] = 1;
- break;
- } else {
- for (a = 0; a < strlen(test_list[x].req); a++) {
- if (pidx[test_list[x].req[a]-'a'] == 0) break;
- }
- if (a == strlen(test_list[x].req)) {
- y = 1;
- tests[z++] = test_list[x]; test_list[x].entry = NULL;
- pidx[test_list[x].prov[0]-'a'] = 1;
- break;
- }
- }
- }
- } while (y == 1);
- }
- #define STACKBLOCK 8
- #define STACK_EST_USAGE 32768
- unsigned char stack_mask[STACKBLOCK];
- unsigned long stack_cur=0;
- void stack_masker(void)
- {
- #ifdef STACK_TEST
- volatile unsigned char M[STACK_EST_USAGE];
- stack_cur = 0;
- for (stack_cur = 0; stack_cur < STACK_EST_USAGE/STACKBLOCK; stack_cur++) {
- memcpy(M+(stack_cur*STACKBLOCK), stack_mask, STACKBLOCK);
- }
- #endif
- }
- void stack_check(void)
- {
- #ifdef STACK_TEST
- unsigned char M[STACK_EST_USAGE];
- stack_cur = 0;
- #ifdef STACK_DOWN
- while (memcmp(M+(STACK_EST_USAGE-STACKBLOCK-stack_cur), stack_mask, STACKBLOCK) &&
- #else
- while (memcmp(M+stack_cur, stack_mask, STACKBLOCK) &&
- #endif
- stack_cur < (STACK_EST_USAGE - STACKBLOCK)) {
- ++stack_cur;
- }
- #endif
- }
- int main(void)
- {
- int x;
- unsigned char buf[16];
- /* setup stack checker */
- srand(time(NULL));
- for (x = 0; x < STACKBLOCK; x++) {
- stack_mask[x] = rand() & 255;
- }
- stack_masker();
- printf("Built with\n%s\n", crypt_build_settings);
- sort();
- register_algs();
-
- // start dummy yarrow for internal use
- DO(yarrow_start(&test_yarrow));
- sprng_read(buf, 16, NULL);
- DO(yarrow_add_entropy(buf, 16, &test_yarrow));
- DO(yarrow_ready(&test_yarrow));
- // output sizes
- printf("Sizes of objects (in bytes)\n");
- printf("\tsymmetric_key\t=\t%5lu\n", sizeof(symmetric_key));
- printf("\thash_state\t=\t%5lu\n", sizeof(hash_state));
- printf("\thmac_state\t=\t%5lu\n", sizeof(hmac_state));
- printf("\tomac_state\t=\t%5lu\n", sizeof(omac_state));
- printf("\tpmac_state\t=\t%5lu\n", sizeof(pmac_state));
- printf("\tocb_state\t=\t%5lu\n", sizeof(ocb_state));
- printf("\teax_state\t=\t%5lu\n", sizeof(eax_state));
- printf("\tmp_int\t\t=\t%5lu\n", sizeof(mp_int));
- #ifdef MRSA
- printf("\trsa_key\t\t=\t%5lu\n", sizeof(rsa_key));
- #endif
- #ifdef MDSA
- printf("\tdsa_key\t\t=\t%5lu\n", sizeof(dsa_key));
- #endif
- #ifdef MDH
- printf("\tdh_key\t\t=\t%5lu\n", sizeof(dh_key));
- #endif
- #ifdef MECC
- printf("\tecc_key\t\t=\t%5lu\n", sizeof(ecc_key));
- #endif
- printf("\n\n");
- // do tests
- for (current_test = 0; tests[current_test].name != NULL; current_test++) {
- printf("[%-20s]: ", tests[current_test].name); fflush(stdout);
- printf("\t%s\n", tests[current_test].entry()==0?"passed":"failed");
- }
-
- return 0;
- }
|