BOOL CDialogOption::OnInitDialog() { CString ak; CString sk; CString host; ConfigMgr::Instance().GetAk(ak); ConfigMgr::Instance().GetSk(sk); ConfigMgr::Instance().GetHost(host); AES aes; aes.Decrypt(ak, ak); aes.Decrypt(sk, sk); m_strAK = m_strAKbak = ak; m_strSK = m_strSKbak = sk; m_strHost = m_strHostbak = host; CDialog::OnInitDialog(); return TRUE; }
TEST(AESTest, aes_test) { static const struct { int keylen; unsigned char key[32], pt[16], ct[16]; } tests[] = { { 16, { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } }, { 24, { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } }, { 32, { 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 } } }; AES *tf; unsigned char tmp[2][16]; size_t i; int y; for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { tf = new AES(tests[i].key, tests[i].keylen); tf->Encrypt(tests[i].pt, tmp[0]); tf->Decrypt(tmp[0], tmp[1]); if (memcmp(tmp[0], tests[i].ct, 16) != 0 || memcmp(tmp[1], tests[i].pt, 16) != 0) { delete tf; FAIL() << "Test vector " << i; } /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ for (y = 0; y < 16; y++) tmp[0][y] = 0; for (y = 0; y < 1000; y++) tf->Encrypt(tmp[0], tmp[0]); for (y = 0; y < 1000; y++) tf->Decrypt(tmp[0], tmp[0]); for (y = 0; y < 16; y++) if (tmp[0][y] != 0) {delete tf; FAIL() << "Encrypt/Decrypt zeros failed";} delete tf; } SUCCEED(); }
int _tmain(int argc, _TCHAR* argv[]) { AES* AESCipher = NULL; string msg; string key; char* temp_msg_hex; char* temp_key_hex; int mode = -1; while (mode != 0 && mode != 1) { cout << "Please choose the AES mode (0 for CBC, 1 for CTR): "; cin >> mode; switch (mode) { case 0: AESCipher = new AES128CBC(); break; case 1: AESCipher = new AES128CTR(); break; } cin.clear(); cin.ignore(numeric_limits<std::streamsize>::max(), '\n'); } if (NULL == AESCipher) { cout << "Error allocating memory for cipher engine, program exiting...\n"; return 0; } cout << "please provide the key: "; cin >> key; cout << "please provide the message text: "; cin >> msg; temp_key_hex = new char[key.length() + 1]; for (int i = 0; i < key.length(); i++) { temp_key_hex[i] = key.c_str()[i]; } temp_key_hex[key.length()] = 0; temp_msg_hex = new char[msg.length() + 1]; for (int i = 0; i < msg.length(); i++) { temp_msg_hex[i] = msg.c_str()[i]; } temp_msg_hex[msg.length()] = 0; AESCipher->setKey(temp_key_hex); mode = -1; while (/* mode != 0 && */ mode != 1) { cout << "Please choose whether you want to encrypt or decrypt (1 for decrypt, encrypt is not ready): "; cin >> mode; switch (mode) { case 0: AESCipher->setPT(temp_msg_hex); AESCipher->Encrypt(); break; case 1: AESCipher->setCT(temp_msg_hex); AESCipher->Decrypt(); break; } cin.clear(); cin.ignore(numeric_limits<std::streamsize>::max(), '\n'); } return 0; }