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

📄 test.c

📁 NIST推荐的素域上的椭圆曲线
💻 C
📖 第 1 页 / 共 3 页
字号:
 ecc_free(&usera);}#elsevoid ecc_tests(void) { printf("MECC not compiled in\n"); }#endif#ifdef GFvoid gf_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]);}#elsevoid gf_tests(void) { printf("GF not compiled in\n"); }#endif#ifdef MPIvoid test_prime(void){   unsigned 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);}#elsevoid test_prime(void) { printf("MPI not compiled in\n"); }#endifvoid register_all_algs(void){#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 SERPENT   register_cipher(&serpent_desc);#endif#ifdef RIJNDAEL   register_cipher(&rijndael_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 TWOFISH   register_cipher(&twofish_desc);#endif#ifdef RC2   register_cipher(&rc2_desc);#endif#ifdef CAST5   register_cipher(&cast5_desc);#endif#ifdef DES   register_cipher(&des_desc);   register_cipher(&des3_desc);#endif   register_cipher(&null_desc);#ifdef SHA256   register_hash(&sha256_desc);#endif#ifdef TIGER   register_hash(&tiger_desc);#endif#ifdef SHA1   register_hash(&sha1_desc);#endif#ifdef MD5   register_hash(&md5_desc);#endif#ifdef SHA384   register_hash(&sha384_desc);#endif#ifdef SHA512   register_hash(&sha512_desc);#endif#ifdef MD4   register_hash(&md4_desc);#endif#ifdef MD2   register_hash(&md2_desc);#endif#ifdef YARROW   register_prng(&yarrow_desc);#endif#ifdef SPRNG   register_prng(&sprng_desc);#endif}void kr_display(pk_key *kr){   static const char *system[] = { "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, system[kr->system], type[kr->key_type], kr->name, kr->email, kr->description);       kr = kr->next;   }   printf("\n");}void kr_test_makekeys(pk_key **kr){   if ((errno = kr_init(kr)) != CRYPT_OK) {      printf("KR init error %s\n", error_to_string(errno));      exit(-1);   }   /* make a ECC key */   printf("KR: Making ECC key...\n");   if ((errno = kr_make_key(*kr, &prng, find_prng("yarrow"), ECC_KEY, 24, "ecckey", "ecc@ecc.ecc", "ecckey one")) != CRYPT_OK) {      printf("Make key error: %s\n", error_to_string(errno));      exit(-1);   }   /* make a RSA key */   printf("KR: Making RSA key...\n");   if ((errno = kr_make_key(*kr, &prng, find_prng("yarrow"), RSA_KEY, 128, "rsakey", "rsa@rsa.rsa", "rsakey one")) != CRYPT_OK) {      printf("Make key error: %s\n", error_to_string(errno));      exit(-1);   }   /* make a DH key */   printf("KR: Making DH key...\n");   if ((errno = 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(errno));      exit(-1);   }}void kr_test(void){   pk_key *kr, *_kr;   unsigned char buf[8192], buf2[8192], buf3[8192];   unsigned long len;   int i, j, stat;#ifndef NO_FILE      FILE *f;#endif   kr_test_makekeys(&kr);   printf("The original list:\n");   kr_display(kr);   for (i = 0; i < 3; i++) {       len = sizeof(buf);       if ((errno = kr_export(kr, kr->ID, kr->key_type, buf, &len)) != CRYPT_OK) {          printf("Error exporting key %d, %s\n", i, error_to_string(errno));          exit(-1);       }       printf("Exported key was: %lu bytes\n", len);       if ((errno = kr_del(&kr, kr->ID)) != CRYPT_OK) {          printf("Error deleting key %d, %s\n", i, error_to_string(errno));          exit(-1);       }       kr_display(kr);       if ((errno = kr_import(kr, buf)) != CRYPT_OK) {          printf("Error importing key %d, %s\n", i, error_to_string(errno));          exit(-1);       }       kr_display(kr);   }            for (i = 0; i < 3; i++) {       len = sizeof(buf);       if ((errno = kr_export(kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) {          printf("Error exporting key %d, %s\n", i, error_to_string(errno));          exit(-1);       }       printf("Exported key was: %lu bytes\n", len);       if ((errno = kr_del(&kr, kr->ID)) != CRYPT_OK) {          printf("Error deleting key %d, %s\n", i, error_to_string(errno));          exit(-1);       }       kr_display(kr);       if ((errno = kr_import(kr, buf)) != CRYPT_OK) {          printf("Error importing key %d, %s\n", i, error_to_string(errno));          exit(-1);       }       kr_display(kr);   }   if ((errno = kr_clear(&kr)) != CRYPT_OK) {      printf("Error clearing ring: %s\n", error_to_string(errno));      exit(-1);   }/* TEST output to file */#ifndef NO_FILE   if ((errno = kr_init(&kr)) != CRYPT_OK) {      printf("KR init error %s\n", error_to_string(errno));      exit(-1);   }   kr_test_makekeys(&kr);   /* save to file */   f = fopen("ring.dat", "wb");   if ((errno = kr_save(kr, f, NULL)) != CRYPT_OK) {      printf("kr_save error %s\n", error_to_string(errno));      exit(-1);   }   fclose(f);   /* delete and load */   if ((errno = kr_clear(&kr)) != CRYPT_OK) {      printf("clear error: %s\n", error_to_string(errno));      exit(-1);   }   f = fopen("ring.dat", "rb");   if ((errno = kr_load(&kr, f, NULL)) != CRYPT_OK) {      printf("kr_load error %s\n", error_to_string(errno));      exit(-1);   }   fclose(f);   remove("ring.dat");   printf("After load and save...\n");   kr_display(kr);     if ((errno = kr_clear(&kr)) != CRYPT_OK) {      printf("clear error: %s\n", error_to_string(errno));      exit(-1);   }#endif/* test the packet encryption/sign stuff */   for (i = 0; i < 16; i++) buf[i] = i;   kr_test_makekeys(&kr);   _kr = kr;   for (i = 0; i < 3; i++) {       printf("Testing a key with system %d, type %d:\t", _kr->system, _kr->key_type);       len = sizeof(buf2);       if ((errno = kr_encrypt_key(kr, _kr->ID, buf, 16, buf2, &len, &prng, find_prng("yarrow"), find_hash("md5"))) != CRYPT_OK) {          printf("Encrypt error, %d, %s\n", i, error_to_string(errno));          exit(-1);       }       len = sizeof(buf3);       if ((errno = kr_decrypt_key(kr, buf2, buf3, &len)) != CRYPT_OK) {          printf("decrypt error, %d, %s\n", i, error_to_string(errno));          exit(-1);       }       if (len != 16 || memcmp(buf3, buf, 16)) {          printf("kr_decrypt_key failed, %i, %lu\n", i, len);          exit(-1);       }       printf("kr_encrypt_key passed, ");       len = sizeof(buf2);       if ((errno = kr_sign_hash(kr, _kr->ID, buf, 16, buf2, &len, &prng, find_prng("yarrow"))) != CRYPT_OK) {          printf("kr_sign_hash failed, %i, %lu\n", i, len);          exit(-1);       }       printf("kr_sign_hash: ");       if ((errno = kr_verify_hash(kr, buf2, buf, 16, &stat)) != CRYPT_OK) {          printf("kr_sign_hash failed, %i, %lu\n", i, len);          exit(-1);       }       printf("%s, ", stat?"passed":"failed");       buf[15] ^= 1;       if ((errno = kr_verify_hash(kr, buf2, buf, 16, &stat)) != CRYPT_OK) {          printf("kr_sign_hash failed, %i, %lu\n", i, len);          exit(-1);       }       printf("%s\n", (!stat)?"passed":"failed");       buf[15] ^= 1;       len = sizeof(buf);       if ((errno = kr_fingerprint(kr, _kr->ID, find_hash("sha1"), buf, &len)) != CRYPT_OK) {          printf("kr_fingerprint failed, %i, %lu\n", i, len);          exit(-1);       }       printf("Fingerprint:  ");       for (j = 0; j < 20; j++) {           printf("%02x", buf[j]);           if (j < 19) printf(":");       }       printf("\n\n");       _kr = _kr->next;    }/* Test encrypting/decrypting to a public key *//* first dump the other two keys */   kr_del(&kr, kr->ID);   kr_del(&kr, kr->ID);   kr_display(kr);   /* now export it as public and private */   len = sizeof(buf);   if ((errno = kr_export(kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) {       printf("Error exporting key %d, %s\n", i, error_to_string(errno));       exit(-1);   }   /* check boundaries */   memset(buf+len, 0, sizeof(buf)-len);   len = sizeof(buf2);   if ((errno = kr_export(kr, kr->ID, PK_PRIVATE, buf2, &len)) != CRYPT_OK) {       printf("Error exporting key  %s\n", error_to_string(errno));       exit(-1);   }   /* check boundaries */   memset(buf2+len, 0, sizeof(buf2)-len);   /* delete the key and import the public */   kr_clear(&kr);   kr_init(&kr);   kr_display(kr);   if ((errno = kr_import(kr, buf)) != CRYPT_OK) {      printf("Error importing key %s\n", error_to_string(errno));      exit(-1);   }   kr_display(kr);      /* now encrypt a buffer */   for (i = 0; i < 16; i++) buf[i] = i;   len = sizeof(buf3);   if ((errno = kr_encrypt_key(kr, kr->ID, buf, 16, buf3, &len, &prng, find_prng("yarrow"), find_hash("md5"))) != CRYPT_OK) {      printf("Encrypt error, %d, %s\n", i, error_to_string(errno));      exit(-1);   }   /* now delete the key and import the private one */   kr_clear(&kr);   kr_init(&kr);   kr_display(kr);   if ((errno = kr_import(kr, buf2)) != CRYPT_OK) {      printf("Error importing key %s\n", error_to_string(errno));      exit(-1);   }   kr_display(kr);   /* now decrypt */   len = sizeof(buf2);   if ((errno = kr_decrypt_key(kr, buf3, buf2, &len)) != CRYPT_OK) {      printf("decrypt error, %s\n", error_to_string(errno));      exit(-1);   }   printf("KR encrypt to public, decrypt with private: ");   if (len == 16 && !memcmp(buf2, buf, 16)) {      printf("passed\n");    } else {      printf("failed\n");   }   kr_clear(&kr);}   void test_errs(void){   #define ERR(x)  printf("%25s => %s\n", #x, error_to_string(x));   ERR(CRYPT_OK);   ERR(CRYPT_ERROR);   ERR(CRYPT_INVALID_KEYSIZE);   ERR(CRYPT_INVALID_ROUNDS);   ERR(CRYPT_FAIL_TESTVECTOR);   ERR(CRYPT_BUFFER_OVERFLOW);   ERR(CRYPT_INVALID_PACKET);   ERR(CRYPT_INVALID_PRNGSIZE);   ERR(CRYPT_ERROR_READPRNG);   ERR(CRYPT_INVALID_CIPHER);   ERR(CRYPT_INVALID_HASH);   ERR(CRYPT_INVALID_PRNG);   ERR(CRYPT_MEM);   ERR(CRYPT_PK_TYPE_MISMATCH);   ERR(CRYPT_PK_NOT_PRIVATE);   ERR(CRYPT_INVALID_ARG);   ERR(CRYPT_PK_INVALID_TYPE);   ERR(CRYPT_PK_INVALID_SYSTEM);   ERR(CRYPT_PK_DUP);   ERR(CRYPT_PK_NOT_FOUND);   ERR(CRYPT_PK_INVALID_SIZE);   ERR(CRYPT_INVALID_PRIME_SIZE);}   int main(void){#ifdef SONY_PS2  TIMER_Init();#endif register_all_algs(); if ((errno = yarrow_start(&prng)) != CRYPT_OK) {    printf("yarrow_start: %s\n", error_to_string(errno)); } if ((errno = yarrow_add_entropy("hello", 5, &prng)) != CRYPT_OK) {    printf("yarrow_add_entropy: %s\n", error_to_string(errno)); } if ((errno = yarrow_ready(&prng)) != CRYPT_OK) {    printf("yarrow_ready: %s\n", error_to_string(errno)); } printf(crypt_build_settings); test_errs();#ifdef HMAC  printf("HMAC: %s\n", hmac_test() == CRYPT_OK ? "passed" : "failed");#endif store_tests(); cipher_tests(); hash_tests(); ecb_tests(); cbc_tests(); ctr_tests(); ofb_tests(); cfb_tests(); rng_tests(); //test_prime(); kr_test(); rsa_test(); pad_test(); ecc_tests(); dh_tests(); gf_tests(); base64_test(); time_ecb(); time_hash();#ifdef SONY_PS2  TIMER_Shutdown();#endif return 0;}

⌨️ 快捷键说明

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