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 + -
显示快捷键?