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

📄 test.c

📁 最新版本的加密解密算法库
💻 C
📖 第 1 页 / 共 3 页
字号:
/* This is the worst code you have ever seen written on purpose.... this code is just a big hack to testout the functionality of the library */#ifdef SONY_PS2#include <eetypes.h>#include <eeregs.h>#include "timer.h"#endif#include <mycrypt.h>int     errnum;intnull_setup (const unsigned char *key, int keylen, int num_rounds,        symmetric_key * skey){  return CRYPT_OK;}voidnull_ecb_encrypt (const unsigned char *pt, unsigned char *ct,          symmetric_key * key){  memcpy (ct, pt, 8);}voidnull_ecb_decrypt (const unsigned char *ct, unsigned char *pt,          symmetric_key * key){  memcpy (pt, ct, 8);}intnull_test (void){  return CRYPT_OK;}intnull_keysize (int *desired_keysize){  return CRYPT_OK;}const struct _cipher_descriptor null_desc = {  "memcpy()",  255,  8, 8, 8, 1,  &null_setup,  &null_ecb_encrypt,  &null_ecb_decrypt,  &null_test,  &null_keysize};prng_state prng;voidstore_tests (void){  unsigned char buf[8];  unsigned long L;  ulong64 LL;  printf ("LOAD32/STORE32 tests\n");  L = 0x12345678UL;  STORE32L (L, &buf[0]);  L = 0;  LOAD32L (L, &buf[0]);  if (L != 0x12345678UL) {    printf ("LOAD/STORE32 Little don't work\n");    exit (-1);  }  LL = CONST64 (0x01020304050607);  STORE64L (LL, &buf[0]);  LL = 0;  LOAD64L (LL, &buf[0])    if (LL != CONST64 (0x01020304050607)) {    printf ("LOAD/STORE64 Little don't work\n");    exit (-1);  }  L = 0x12345678UL;  STORE32H (L, &buf[0]);  L = 0;  LOAD32H (L, &buf[0]);  if (L != 0x12345678UL) {    printf ("LOAD/STORE32 High don't work, %08lx\n", L);    exit (-1);  }  LL = CONST64 (0x01020304050607);  STORE64H (LL, &buf[0]);  LL = 0;  LOAD64H (LL, &buf[0])    if (LL != CONST64 (0x01020304050607)) {    printf ("LOAD/STORE64 High don't work\n");    exit (-1);  }}voidcipher_tests (void){  int     x;  printf ("Ciphers compiled in\n");  for (x = 0; cipher_descriptor[x].name != NULL; x++) {    printf      (" %12s (%2d) Key Size: %4d to %4d, Block Size: %3d, Default # of rounds: %2d\n",       cipher_descriptor[x].name, cipher_descriptor[x].ID,       cipher_descriptor[x].min_key_length * 8,       cipher_descriptor[x].max_key_length * 8,       cipher_descriptor[x].block_length * 8,       cipher_descriptor[x].default_rounds);  }}voidecb_tests (void){  int     x;  printf ("ECB tests\n");  for (x = 0; cipher_descriptor[x].name != NULL; x++) {    printf (" %12s: ", cipher_descriptor[x].name);    if ((errnum = cipher_descriptor[x].test ()) != CRYPT_OK) {      printf (" **failed** Reason: %s\n", error_to_string (errnum));      exit (-1);    } else {      printf ("passed\n");    }  }}#ifdef CBCvoidcbc_tests (void){  symmetric_CBC cbc;  int     x, y;  unsigned char blk[32], ct[32], key[32], IV[32];  const unsigned char test[] =    { 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  printf ("CBC tests\n");  /* ---- CBC ENCODING ---- */  /* make up a block and IV */  for (x = 0; x < 32; x++)    blk[x] = IV[x] = x;  /* now lets start a cbc session */  if ((errnum =       cbc_start (find_cipher ("blowfish"), IV, key, 16, 0,          &cbc)) != CRYPT_OK) {    printf ("CBC Setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets encode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = cbc_encrypt (blk + 8 * x, ct + 8 * x, &cbc)) != CRYPT_OK) {      printf ("CBC encrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  zeromem (blk, sizeof (blk));  /* ---- CBC DECODING ---- */  /* make up a IV */  for (x = 0; x < 32; x++)    IV[x] = x;  /* now lets start a cbc session */  if ((errnum =       cbc_start (find_cipher ("blowfish"), IV, key, 16, 0,          &cbc)) != CRYPT_OK) {    printf ("CBC Setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets decode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = cbc_decrypt (ct + 8 * x, blk + 8 * x, &cbc)) != CRYPT_OK) {      printf ("CBC decrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  /* print output */  for (x = y = 0; x < 32; x++)    if (blk[x] != x)      y = 1;  printf ("  %s\n", y ? "failed" : "passed");  /* lets actually check the bytes */  memset (IV, 0, 8);  IV[0] = 0xFF;         /* IV  = FF 00 00 00 00 00 00 00 */  memset (blk, 0, 32);  blk[8] = 0xFF;        /* BLK = 00 00 00 00 00 00 00 00 FF 00 00 00 00 00 00 00 */  cbc_start (find_cipher ("memcpy()"), IV, key, 8, 0, &cbc);  cbc_encrypt (blk, ct, &cbc);  /* expect: FF 00 00 00 00 00 00 00 */  cbc_encrypt (blk + 8, ct + 8, &cbc);  /* expect: 00 00 00 00 00 00 00 00 */  if (memcmp (ct, test, 16)) {    printf ("CBC failed logical testing.\n");    for (x = 0; x < 16; x++)      printf ("%02x ", ct[x]);    printf ("\n");    exit (-1);  } else {    printf ("CBC passed logical testing.\n");  }}#elsevoidcbc_tests (void){  printf ("CBC not compiled in\n");}#endif#ifdef OFBvoidofb_tests (void){  symmetric_OFB ofb;  int     x, y;  unsigned char blk[32], ct[32], key[32], IV[32];  printf ("OFB tests\n");  /* ---- ofb ENCODING ---- */  /* make up a block and IV */  for (x = 0; x < 32; x++)    blk[x] = IV[x] = x;  /* now lets start a ofb session */  if ((errnum =       ofb_start (find_cipher ("cast5"), IV, key, 16, 0, &ofb)) != CRYPT_OK) {    printf ("OFB Setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets encode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = ofb_encrypt (blk + 8 * x, ct + 8 * x, 8, &ofb)) != CRYPT_OK) {      printf ("OFB encrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  zeromem (blk, sizeof (blk));  /* ---- ofb DECODING ---- */  /* make up a IV */  for (x = 0; x < 32; x++)    IV[x] = x;  /* now lets start a ofb session */  if ((errnum =       ofb_start (find_cipher ("cast5"), IV, key, 16, 0, &ofb)) != CRYPT_OK) {    printf ("OFB setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets decode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = ofb_decrypt (ct + 8 * x, blk + 8 * x, 8, &ofb)) != CRYPT_OK) {      printf ("OFB decrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  /* print output */  for (x = y = 0; x < 32; x++)    if (blk[x] != x)      y = 1;  printf ("  %s\n", y ? "failed" : "passed");  if (y)    exit (-1);}#elsevoidofb_tests (void){  printf ("OFB not compiled in\n");}#endif#ifdef CFBvoidcfb_tests (void){  symmetric_CFB cfb;  int     x, y;  unsigned char blk[32], ct[32], key[32], IV[32];  printf ("CFB tests\n");  /* ---- cfb ENCODING ---- */  /* make up a block and IV */  for (x = 0; x < 32; x++)    blk[x] = IV[x] = x;  /* now lets start a cfb session */  if ((errnum =       cfb_start (find_cipher ("blowfish"), IV, key, 16, 0,          &cfb)) != CRYPT_OK) {    printf ("CFB setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets encode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = cfb_encrypt (blk + 8 * x, ct + 8 * x, 8, &cfb)) != CRYPT_OK) {      printf ("CFB encrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  zeromem (blk, sizeof (blk));  /* ---- cfb DECODING ---- */  /* make up ahash_descriptor[prng->yarrow.hash].hashsize IV */  for (x = 0; x < 32; x++)    IV[x] = x;  /* now lets start a cfb session */  if ((errnum =       cfb_start (find_cipher ("blowfish"), IV, key, 16, 0,          &cfb)) != CRYPT_OK) {    printf ("CFB Setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets decode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = cfb_decrypt (ct + 8 * x, blk + 8 * x, 8, &cfb)) != CRYPT_OK) {      printf ("CFB decrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  /* print output */  for (x = y = 0; x < 32; x++)    if (blk[x] != x)      y = 1;  printf ("  %s\n", y ? "failed" : "passed");  if (y)    exit (-1);}#elsevoidcfb_tests (void){  printf ("CFB not compiled in\n");}#endif#ifdef CTRvoidctr_tests (void){  symmetric_CTR ctr;  int     x, y;  unsigned char blk[32], ct[32], key[32], count[32];  const unsigned char test[] =    { 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0 };  printf ("CTR tests\n");  /* ---- CTR ENCODING ---- */  /* make up a block and IV */  for (x = 0; x < 32; x++)    blk[x] = count[x] = x;  /* now lets start a ctr session */  if ((errnum =       ctr_start (find_cipher ("xtea"), count, key, 16, 0,          &ctr)) != CRYPT_OK) {    printf ("CTR Setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets encode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = ctr_encrypt (blk + 8 * x, ct + 8 * x, 8, &ctr)) != CRYPT_OK) {      printf ("CTR encrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  zeromem (blk, sizeof (blk));  /* ---- CTR DECODING ---- */  /* make up a IV */  for (x = 0; x < 32; x++)    count[x] = x;  /* now lets start a cbc session */  if ((errnum =       ctr_start (find_cipher ("xtea"), count, key, 16, 0,          &ctr)) != CRYPT_OK) {    printf ("CTR Setup: %s\n", error_to_string (errnum));    exit (-1);  }  /* now lets decode 32 bytes */  for (x = 0; x < 4; x++) {    if ((errnum = ctr_decrypt (ct + 8 * x, blk + 8 * x, 8, &ctr)) != CRYPT_OK) {      printf ("CTR decrypt: %s\n", error_to_string (errnum));      exit (-1);    }  }  /* print output */  for (x = y = 0; x < 32; x++)    if (blk[x] != x)      y = 1;  printf ("  %s\n", y ? "failed" : "passed");  if (y)    exit (-1);  /* lets actually check the bytes */  memset (count, 0, 8);  count[0] = 0xFF;      /* IV  = FF 00 00 00 00 00 00 00 */  memset (blk, 0, 32);  blk[9] = 2;           /* BLK = 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 */  ctr_start (find_cipher ("memcpy()"), count, key, 8, 0, &ctr);  ctr_encrypt (blk, ct, 8, &ctr);   /* expect: FF 00 00 00 00 00 00 00 */  ctr_encrypt (blk + 8, ct + 8, 8, &ctr);   /* expect: 00 03 00 00 00 00 00 00 */  if (memcmp (ct, test, 16)) {    printf ("CTR failed logical testing.\n");    for (x = 0; x < 16; x++)      printf ("%02x ", ct[x]);    printf ("\n");  } else {    printf ("CTR passed logical testing.\n");  }}#elsevoidctr_tests (void){  printf ("CTR not compiled in\n");}#endifvoidhash_tests (void){  int     x;  printf ("Hash tests\n");  for (x = 0; hash_descriptor[x].name != NULL; x++) {    printf (" %10s (%2d) ", hash_descriptor[x].name, hash_descriptor[x].ID);    if ((errnum = hash_descriptor[x].test ()) != CRYPT_OK) {      printf ("**failed** Reason: %s\n", error_to_string (errnum));      exit(-1);    } else {      printf ("passed\n");    }  }}#ifdef MRSAvoidpad_test (void){  unsigned char in[100], out[100];  unsigned long x, y;  /* make a dummy message */  for (x = 0; x < 16; x++)    in[x] = (unsigned char) x;  /* pad the message so that random filler is placed before and after it */  y = 100;  if ((errnum =       rsa_pad (in, 16, out, &y, find_prng ("yarrow"), &prng)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  /* depad the message to get the original content */  memset (in, 0, sizeof (in));  x = 100;  if ((errnum = rsa_depad (out, y, in, &x)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  /* check outcome */  printf ("rsa_pad: ");  if (x != 16) {    printf ("Failed.  Wrong size.\n");    exit (-1);  }  for (x = 0; x < 16; x++)    if (in[x] != x) {      printf ("Failed.  Expected %02lx and got %02x.\n", x, in[x]);      exit (-1);    }  printf ("passed.\n");}voidrsa_test (void){  unsigned char in[520], out[520];  unsigned long x, y, z, limit;  int     stat;  rsa_key key;  clock_t t;  /* ---- SINGLE ENCRYPT ---- */  /* encrypt a short 8 byte string */  if ((errnum =       rsa_make_key (&prng, find_prng ("yarrow"), 1024 / 8, 65537,             &key)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  for (x = 0; x < 8; x++)    in[x] = (unsigned char) (x + 1);  y = sizeof (in);  if ((errnum = rsa_exptmod (in, 8, out, &y, PK_PUBLIC, &key)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }  /* decrypt it */  zeromem (in, sizeof (in));  x = sizeof (out);  if ((errnum = rsa_exptmod (out, y, in, &x, PK_PRIVATE, &key)) != CRYPT_OK) {    printf ("Error: %s\n", error_to_string (errnum));    exit (-1);  }

⌨️ 快捷键说明

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