⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 这是一个用来加解密的算法库
💻 C
字号:
#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 KHAZAD  register_cipher (&khazad_desc);#endif#ifdef ANUBIS  register_cipher (&anubis_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  32768unsigned 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 (this will crash MSVC... go figure.)#ifndef _MSC_VER    printf("Sizes of objects (in bytes)\n");   printf("\tsymmetric_key\t=\t%5Zu\n", sizeof(symmetric_key));   printf("\thash_state\t=\t%5Zu\n", sizeof(hash_state));   printf("\thmac_state\t=\t%5Zu\n", sizeof(hmac_state));   printf("\tomac_state\t=\t%5Zu\n", sizeof(omac_state));   printf("\tpmac_state\t=\t%5Zu\n", sizeof(pmac_state));   printf("\tocb_state\t=\t%5Zu\n", sizeof(ocb_state));   printf("\teax_state\t=\t%5Zu\n", sizeof(eax_state));   printf("\tmp_int\t\t=\t%5Zu\n", sizeof(mp_int));#ifdef MRSA   printf("\trsa_key\t\t=\t%5Zu\n", sizeof(rsa_key));#endif#ifdef MDSA   printf("\tdsa_key\t\t=\t%5Zu\n", sizeof(dsa_key));#endif#ifdef MDH   printf("\tdh_key\t\t=\t%5Zu\n", sizeof(dh_key));#endif#ifdef MECC   printf("\tecc_key\t\t=\t%5Zu\n", sizeof(ecc_key));#endif   printf("\n\n");#endif   // 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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -