Mercurial > dropbear
view demos/test/test.c @ 143:5d99163f7e32 libtomcrypt-orig
import of libtomcrypt 0.99
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sun, 19 Dec 2004 11:34:45 +0000 |
parents | 6362d3854bb4 |
children |
line wrap: on
line source
#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; }