📄 testcrypt.c
字号:
// AES ECB test vectors FIPS-197
#define AES_TEST_COUNT 1
typedef struct {
unsigned char key[32];
unsigned char plaintext[16];
unsigned char ciphertext[16];
} AES_TEST;
AES_TEST aes_ecb_vectors[1] = {
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff,
0x8e,0xa2,0xb7,0xca,0x51,0x67,0x45,0xbf,0xea,0xfc,0x49,0x90,0x4b,0x49,0x60,0x89
};
#define SERPENT_TEST_COUNT 1
typedef struct {
unsigned char key[32];
unsigned char plaintext[16];
unsigned char ciphertext[16];
} SERPENT_TEST;
SERPENT_TEST serpent_vectors[1] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8, 0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c,
};
#define TWOFISH_TEST_COUNT 1
typedef struct {
unsigned char key[32];
unsigned char plaintext[16];
unsigned char ciphertext[16];
} TWOFISH_TEST;
TWOFISH_TEST twofish_vectors[1] = {
0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D,
0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F,
0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6,
0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA
};
unsigned char ks_tmp[MAX_EXPANDED_KEY];
void
CipherInit2(int cipher, void* key, void* ks, int key_len)
{
/* This routine uses CipherInit for everything except the variable key length ciphers */
switch (cipher)
{
case BLOWFISH:
BF_set_key (ks, key_len, key);
break;
case AES:
CipherInit(cipher,key,ks);
break;
case DES56:
CipherInit(cipher,key,ks);
break;
case CAST:
CipherInit(cipher,key,ks);
break;
case SERPENT:
CipherInit(cipher,key,ks);
break;
case TRIPLEDES:
CipherInit(cipher,key,ks);
break;
case TWOFISH:
CipherInit(cipher,key,ks);
break;
}
}
void
ResetCipherTest(HWND hwndDlg, int nCipherChoice)
{
int ndx;
ShowWindow(GetDlgItem(hwndDlg, IDC_TESTS_MESSAGE), SW_HIDE);
ShowWindow(GetDlgItem(hwndDlg, IDC_REDTICK), SW_HIDE);
/* Only allow user to pick key size if this is possible */
if (nCipherChoice == BLOWFISH)
EnableWindow(GetDlgItem(hwndDlg,IDC_KEY_SIZE), TRUE);
else
EnableWindow(GetDlgItem(hwndDlg,IDC_KEY_SIZE), FALSE);
/* Setup the keysize and plaintext sizes for the selected cipher */
SendMessage (GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_RESETCONTENT, 0,0);
SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_RESETCONTENT, 0,0);
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_ADDSTRING, 0,(LPARAM) "8");
SendMessage(GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 8);
SendMessage(GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_SETCURSEL, ndx,0);
if (nCipherChoice == BLOWFISH)
{
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_ADDSTRING, 0,(LPARAM) "8");
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 8);
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_ADDSTRING, 0,(LPARAM) "16");
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 16);
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_ADDSTRING, 0,(LPARAM) "32");
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 32);
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETCURSEL, 0,0);
SetWindowText(GetDlgItem(hwndDlg, IDC_KEY), "0000000000000000");
}
if (nCipherChoice == CAST)
{
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_ADDSTRING, 0,(LPARAM) "16");
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 16);
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETCURSEL, ndx,0);
SetWindowText(GetDlgItem(hwndDlg, IDC_KEY), "00000000000000000000000000000000");
}
if (nCipherChoice == TRIPLEDES)
{
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_ADDSTRING, 0,(LPARAM) "24");
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 24);
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETCURSEL, ndx,0);
SetWindowText(GetDlgItem(hwndDlg, IDC_KEY), "000000000000000000000000000000000000000000000000");
}
if (nCipherChoice == DES56)
{
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_ADDSTRING, 0,(LPARAM) "8");
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 8);
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETCURSEL, 0,0);
SetWindowText(GetDlgItem(hwndDlg, IDC_KEY), "0000000000000000");
}
SetWindowText(GetDlgItem(hwndDlg, IDC_PLAINTEXT), "0000000000000000");
SetWindowText(GetDlgItem(hwndDlg, IDC_CIPHERTEXT), "0000000000000000");
if (nCipherChoice == AES || nCipherChoice == SERPENT || nCipherChoice == TWOFISH)
{
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_ADDSTRING, 0,(LPARAM) "32");
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 32);
SendMessage(GetDlgItem(hwndDlg, IDC_KEY_SIZE), CB_SETCURSEL, ndx,0);
SendMessage (GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_RESETCONTENT, 0,0);
ndx = SendMessage (GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_ADDSTRING, 0,(LPARAM) "16");
SendMessage(GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_SETITEMDATA, ndx,(LPARAM) 16);
SendMessage(GetDlgItem(hwndDlg, IDC_PLAINTEXT_SIZE), CB_SETCURSEL, ndx,0);
SetWindowText(GetDlgItem(hwndDlg, IDC_KEY), "0000000000000000000000000000000000000000000000000000000000000000");
SetWindowText(GetDlgItem(hwndDlg, IDC_PLAINTEXT), "00000000000000000000000000000000");
SetWindowText(GetDlgItem(hwndDlg, IDC_CIPHERTEXT), "00000000000000000000000000000000");
}
}
BOOL Des56TestLoop(void *test_vectors, int nVectorCount, int enc)
{
char key[32];
long tmp[2];
int i, cipher;
cipher = DES56;
for (i=0;i<nVectorCount;i++)
{
memcpy(key, ((DES_TEST*)test_vectors)->key, 8);
memcpy(tmp, ((DES_TEST*)test_vectors)->plaintext, 8);
memset(ks_tmp,0,sizeof(ks_tmp));
CipherInit2(cipher, key, ks_tmp, 8);
if (enc)
{
EncipherBlock(cipher, tmp, ks_tmp);
}
else
{
DecipherBlock(cipher, tmp, ks_tmp);
}
if (memcmp(((DES_TEST*)test_vectors)->ciphertext, tmp,8)!=0)
return FALSE;
}
return TRUE;
}
/* Except in response to the WM_INITDIALOG message, the dialog box procedure
should return nonzero if it processes the message, and zero if it does
not. - see DialogProc */
BOOL CALLBACK
CipherTestDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
WORD lw = LOWORD (wParam);
static int nCipherChoice;
if (lParam); /* Remove unused parameter warning */
switch (uMsg)
{
case WM_INITDIALOG:
{
char szTmp[256];
SetDefaultUserFont (hwndDlg);
SendMessage(GetDlgItem(hwndDlg, IDC_TESTS_MESSAGE), WM_SETFONT, (WPARAM)hSmallBoldFont, MAKELPARAM(TRUE,0));
SendMessage(GetDlgItem(hwndDlg, IDC_KEY), EM_LIMITTEXT, 80,0);
SendMessage(GetDlgItem(hwndDlg, IDC_KEY), WM_SETFONT, (WPARAM)hSmallFont, MAKELPARAM(1,0));
SendMessage(GetDlgItem(hwndDlg, IDC_PLAINTEXT), EM_LIMITTEXT,80,0);
SendMessage(GetDlgItem(hwndDlg, IDC_PLAINTEXT), WM_SETFONT, (WPARAM)hSmallFont, MAKELPARAM(1,0));
SendMessage(GetDlgItem(hwndDlg, IDC_CIPHERTEXT), EM_LIMITTEXT,80,0);
SendMessage(GetDlgItem(hwndDlg, IDC_CIPHERTEXT), WM_SETFONT, (WPARAM)hSmallFont, MAKELPARAM(1,0));
nCipherChoice = (int) lParam;
ResetCipherTest(hwndDlg, nCipherChoice);
sprintf(szTmp, getstr(IDS_CIPHER_TEST), CipherGetName(nCipherChoice));
SetWindowText(hwndDlg, szTmp);
return 1;
}
case WM_COMMAND:
if (lw == IDC_RESET)
{
ResetCipherTest(hwndDlg, nCipherChoice);
return 1;
}
if (lw == IDC_AUTO)
{
if (!AutoTestAlgorithms())
{
ShowWindow(GetDlgItem(hwndDlg, IDC_TESTS_MESSAGE), SW_SHOWNORMAL);
SetWindowText(GetDlgItem(hwndDlg, IDC_TESTS_MESSAGE), getstr(IDS_TESTS_FAILED));
}
else
{
ShowWindow(GetDlgItem(hwndDlg, IDC_TESTS_MESSAGE), SW_SHO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -