test.c

来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C语言 代码 · 共 1,898 行 · 第 1/4 页

C
1,898
字号
  printf ("DH en/de crypt key routines: ");  if (x != 16) {    printf ("Failed (length)\n");    exit (-1);  }  for (x = 0; x < 16; x++)    if (buf[0][x] != x) {      printf ("Failed (contents)\n");      exit (-1);    }  printf ("Passed (size %lu)\n", y);/* test sign_hash */  for (x = 0; x < 16; x++)    buf[0][x] = x;  x = sizeof (buf[1]);  if ((errnum =       dh_sign_hash (buf[0], 16, buf[1], &x, &prng, find_prng ("yarrow"),             &usera)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  if (dh_verify_hash (buf[1], x, buf[0], 16, &stat, &usera)) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  buf[0][0] ^= 1;  if (dh_verify_hash (buf[1], x, buf[0], 16, &stat2, &usera)) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  printf ("dh_sign/verify_hash: %s (%d,%d), %lu\n",      ((stat == 1)       && (stat2 == 0)) ? "passed" : "failed", stat, stat2, x);  dh_free (&usera);}#elsevoiddh_tests (void){  printf ("MDH not compiled in\n");}#endifint     callback_x = 0;voidcallback (void){  printf ("%c\x08", "-\\|/"[++callback_x & 3]);#ifndef SONY_PS2  fflush (stdout);#endif}voidrng_tests (void){  unsigned char buf[16];  clock_t t1;  int     x, y;  printf ("RNG tests\n");  t1 = XCLOCK ();  x = rng_get_bytes (buf, sizeof (buf), &callback);  t1 = XCLOCK () - t1;  printf ("  %f bytes per second...",      (double) x / ((double) t1 / (double) XCLOCKS_PER_SEC));  printf ("read %d bytes.\n  ", x);  for (y = 0; y < x; y++)    printf ("%02x ", buf[y]);  printf ("\n");#ifdef YARROW  if ((errnum =       rng_make_prng (128, find_prng ("yarrow"), &prng,              &callback)) != CRYPT_OK) {    printf (" starting yarrow error: %s\n", error_to_string (errnum));    exit (-1);  }#endif}#ifdef MECCvoidecc_tests (void){  unsigned char buf[4][4096];  unsigned long x, y, z;  int     stat, stat2, low, high;  ecc_key usera, userb;  clock_t t1;  if ((errnum = ecc_test ()) != CRYPT_OK) {    printf ("ecc Error: %s\n", error_to_string (errnum));    exit (-1);  }  ecc_sizes (&low, &high);  printf ("ecc Keys from %d to %d supported.\n", low * 8, high * 8);  /* make up two keys */  if ((errnum =       ecc_make_key (&prng, find_prng ("yarrow"), 24, &usera)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  if ((errnum =       ecc_make_key (&prng, find_prng ("yarrow"), 24, &userb)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  /* make the shared secret */  x = 4096;  if ((errnum = ecc_shared_secret (&usera, &userb, buf[0], &x)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  y = 4096;  if ((errnum = ecc_shared_secret (&userb, &usera, buf[1], &y)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  if (y != x) {    printf ("ecc Shared keys are not same size.\n");    exit (-1);  }  if (memcmp (buf[0], buf[1], x)) {    printf ("ecc Shared keys not same contents.\n");    exit (-1);  }  /* now export userb */  y = 4096;  if ((errnum = ecc_export (buf[1], &y, PK_PUBLIC, &userb)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  ecc_free (&userb);  printf ("ECC-192 export took %ld bytes\n", y);  /* import and make the shared secret again */  if ((errnum = ecc_import (buf[1], y, &userb)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  z = 4096;  if ((errnum = ecc_shared_secret (&usera, &userb, buf[2], &z)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  printf ("ecc routines: ");  if (z != x) {    printf ("failed.  Size don't match?\n");    exit (-1);  }  if (memcmp (buf[0], buf[2], x)) {    printf ("Failed.  Content didn't match.\n");    exit (-1);  }  printf ("Passed\n");  ecc_free (&usera);  ecc_free (&userb);/* time stuff */  {    static int sizes[] = { 20, 24, 28, 32, 48, 65 };    int     ii, tt;    for (ii = 0; ii < (int) (sizeof (sizes) / sizeof (sizes[0])); ii++) {      t1 = XCLOCK ();      for (tt = 0; tt < 10; tt++) {    if ((errnum =         ecc_make_key (&prng, find_prng ("yarrow"), sizes[ii],               &usera)) != CRYPT_OK) {      printf ("Error: %s\n", error_to_string (errnum));      exit (-1);    }    ecc_free (&usera);      }      t1 = XCLOCK () - t1;      printf ("Make ECC-%d key took %f msec\n", sizes[ii] * 8,          1000.0 * (((double) t1 / 10.0) / (double) XCLOCKS_PER_SEC));    }  }/* test encrypt_key */  ecc_make_key (&prng, find_prng ("yarrow"), 20, &usera);  for (x = 0; x < 32; x++)    buf[0][x] = x;  y = sizeof (buf[1]);  if ((errnum =       ecc_encrypt_key (buf[0], 32, buf[1], &y, &prng, find_prng ("yarrow"),            find_hash ("sha256"), &usera)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  zeromem (buf[0], sizeof (buf[0]));  x = sizeof (buf[0]);  if ((errnum = ecc_decrypt_key (buf[1], y, buf[0], &x, &usera)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  printf ("ECC en/de crypt key routines: ");  if (x != 32) {    printf ("Failed (length)\n");    exit (-1);  }  for (x = 0; x < 32; x++)    if (buf[0][x] != x) {      printf ("Failed (contents)\n");      exit (-1);    }  printf ("Passed (size: %lu)\n", y);/* test sign_hash */  for (x = 0; x < 16; x++)    buf[0][x] = x;  x = sizeof (buf[1]);  if ((errnum =       ecc_sign_hash (buf[0], 16, buf[1], &x, &prng, find_prng ("yarrow"),              &usera)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  printf("Signature size: %lu\n", x);  if (ecc_verify_hash (buf[1], x, buf[0], 16, &stat, &usera)) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  buf[0][0] ^= 1;  if (ecc_verify_hash (buf[1], x, buf[0], 16, &stat2, &usera)) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  printf ("ecc_sign/verify_hash: %s (%d,%d)\n",      ((stat == 1) && (stat2 == 0)) ? "passed" : "failed", stat, stat2);  ecc_free (&usera);}#elsevoidecc_tests (void){  printf ("MECC not compiled in\n");}#endif#ifdef GFvoidgf_tests (void){  gf_int  a, b, c, d;  int     n;  unsigned char buf[1024];  printf ("GF tests\n");  gf_zero (a);  gf_zero (b);  gf_zero (c);  gf_zero (d);  /* a == 0x18000000b */  a[1] = 1;  a[0] = 0x8000000bUL;  /* b == 0x012345678 */  b[0] = 0x012345678UL;  /* find 1/b mod a */  gf_invmod (b, a, c);  /* find 1/1/b mod a */  gf_invmod (c, a, d);  /* display them */  printf ("  %08lx %08lx\n", c[0], d[0]);  /* store as binary string */  n = gf_size (a);  printf ("  a takes %d bytes\n", n);  gf_toraw (a, buf);  gf_readraw (a, buf, n);  printf ("  a == %08lx%08lx\n", a[1], a[0]);  /* primality testing */  gf_zero (a);  a[0] = 0x169;  printf ("  GF prime: %s, ", gf_is_prime (a) ? "passed" : "failed");  a[0] = 0x168;  printf ("  %s\n", gf_is_prime (a) ? "failed" : "passed");  /* test sqrt code */  gf_zero (a);  a[1] = 0x00000001;  a[0] = 0x8000000bUL;  gf_zero (b);  b[0] = 0x12345678UL;  gf_sqrt (b, a, c);  gf_mulmod (c, c, a, b);  printf ("  (%08lx)^2 = %08lx (mod %08lx%08lx) \n", c[0], b[0], a[1], a[0]);}#elsevoidgf_tests (void){  printf ("GF not compiled in\n");}#endif#ifdef MPIvoidtest_prime (void){  char buf[1024];  mp_int  a;  int     x;  /* make a 1024 bit prime */  mp_init (&a);  rand_prime (&a, 128, &prng, find_prng ("yarrow"));  /* dump it */  mp_todecimal (&a, buf);  printf ("1024-bit prime:\n");  for (x = 0; x < (int) strlen (buf);) {    printf ("%c", buf[x]);    if (!(++x % 60))      printf ("\\ \n");  }  printf ("\n\n");  mp_clear (&a);}#elsevoidtest_prime (void){  printf ("MPI not compiled in\n");}#endifvoidregister_all_algs (void){#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  register_cipher (&null_desc);#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 YARROW  register_prng (&yarrow_desc);#endif#ifdef SPRNG  register_prng (&sprng_desc);#endif}#ifdef KRvoidkr_display (pk_key * kr){  static const char *sys[] = { "NON-KEY", "RSA", "DH", "ECC" };  static const char *type[] = { "PRIVATE", "PUBLIC", "PRIVATE_OPTIMIZED" };  while (kr->system != NON_KEY) {    printf ("CRC [%08lx], System [%10s], Type [%20s], %s, %s, %s\n", kr->ID,        sys[kr->system], type[kr->key_type], kr->name, kr->email,        kr->description);    kr = kr->next;  }  printf ("\n");}voidkr_test_makekeys (pk_key ** kr){  if ((errnum = kr_init (kr)) != CRYPT_OK) {    printf ("KR init error %s\n", error_to_string (errnum));    exit (-1);  }  /* make a DH key */  printf ("KR: Making DH key...\n");  if ((errnum =       kr_make_key (*kr, &prng, find_prng ("yarrow"), DH_KEY, 128, "dhkey",            "dh@dh.dh", "dhkey one")) != CRYPT_OK) {    printf ("Make key error: %s\n", error_to_string (errnum));    exit (-1);  }  /* make a ECC key */  printf ("KR: Making ECC key...\n");  if ((errnum =

⌨️ 快捷键说明

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