?? test.c
字號:
/* 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 + -