diff options
Diffstat (limited to 'source/tests/test_aes.c')
-rw-r--r-- | source/tests/test_aes.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/source/tests/test_aes.c b/source/tests/test_aes.c new file mode 100644 index 0000000..1040378 --- /dev/null +++ b/source/tests/test_aes.c @@ -0,0 +1,100 @@ +#include "tests.h" + +#include "compat.h" +#include "aes.h" +#include "pe_infect.h" + +#include "aes_strings_gen.h" +#include "loader_x86_crypt.h" +_AESDATA_(ldrdata, LOADER_SHELLCODE); + + +BOOL test_aes(void) +{ + ERRETCP(bInitCompat(LoadLibraryA(TEXT("KERNEL32.dll")), GetProcAddress) == TRUE); + + unsigned char key[KEY_256]; + memset(&key[0], '\0', sizeof(unsigned char)*KEY_256); + aes_randomkey(&key[0], KEY_256); + + unsigned char ptext[16] = "Attack at dawn!"; + unsigned char ctext[16]; + unsigned char decptext[16]; + aes_ctx_t* ctx; + + memset(&ctext[0], '\0', sizeof(ctext)); + memset(&decptext[0], '\0', sizeof(decptext)); + + aes_init(); + ctx = aes_alloc_ctx(key, sizeof(key)); + if(!ctx) { + return FALSE; + } + aes_encrypt(ctx, ptext, ctext); + aes_decrypt(ctx, ctext, decptext); + ERRETCP( strlen((char*)decptext) == strlen((char*)ptext) ); + ERRETCP( strcmp((char*)decptext, (char*)ptext) == 0 ); + + unsigned char qtext[16] = "blah"; + unsigned char dtext[16]; + unsigned char decqtext[16]; + + memset(&dtext[0], '\0', sizeof(dtext)); + memset(&decqtext[0], '\0', sizeof(decqtext)); + + aes_encrypt(ctx, qtext, dtext); + aes_decrypt(ctx, dtext, decqtext); + ERRETCP( strlen((char*)decqtext) == strlen((char*)qtext) ); + ERRETCP( strcmp((char*)decqtext, (char*)qtext) == 0 ); + + { + char inbuf[] = "This is a short short short short short text, but bigger than 16 bytes ..."; + char *outbuf = NULL; + char *chkbuf = NULL; + size_t len = 0; + outbuf = aes_crypt_s(ctx, inbuf, sizeof(inbuf), &len, TRUE); + size_t chklen = 0; + chkbuf = aes_crypt_s(ctx, outbuf, len, &chklen, FALSE); + ERRETCP( strlen(inbuf) == strlen(chkbuf) ); + ERRETCP( strcmp(inbuf, chkbuf) == 0 ); + COMPAT(free)(outbuf); + COMPAT(free)(chkbuf); + } + + aes_free_ctx(ctx); + + { + unsigned char newkey[] = "\x08\xEE\xD4\xBA\xA0\x86\x6C\x52\x38\x1E\x04\xEA\xD0\xB6\x9C\x82\x68\x4E\x34\x1A\x00\xE6\xCC\xB2\x98\x7E\x64\x4A\x30\x16\xFC\xE2"; + char newbuf[] = "\x3F\x65\xF3\xEC\xF2\xFD\x4D\x1B\xFE\xF5\x12\xE9\x66\x0D\x83\xD3\x1D\xB5\x64\xC1\x9F\x6D\xD2\x51\x51\x64\x89\x22\x94\xBE\x63\x11\x9E\xD7\x7A\x10\x9D\xDF\x22\x57\xB8\xD2\x76\x7E\x4E\x71\x1B\xCB"; + char chkbuf[] = "This is a somewhat stupid test dude .."; + ctx = aes_alloc_ctx(newkey, sizeof(newkey)-1); + char* outbuf = aes_crypt_s(ctx, newbuf, sizeof(newbuf)-1, NULL, FALSE); + ERRETCP( strlen(chkbuf) == strlen(outbuf) ); + ERRETCP( strcmp(outbuf, chkbuf) == 0 ); + aes_free_ctx(ctx); + COMPAT(free)(outbuf); + } + + { + unsigned char newkey[] = "\x81\x88\x8F\x96\x9D\xA4\xAB\xB2\xB9\xC0\xC7\xCE\xD5\xDC\xE3\xEA\xF1\xF8\xFF\x06\x0D\x14\x1B\x22\x29\x30\x37\x3E\x45\x4C\x53\x5A"; + char chkbuf[] = "This is a somewhat stupid test dude .."; + ctx = aes_alloc_ctx(newkey, sizeof(newkey)-1); + size_t len = 0, newlen = 0; + char* outbuf = aes_crypt_s(ctx, chkbuf, sizeof(chkbuf)-1, &len, TRUE); + char* decbuf = aes_crypt_s(ctx, outbuf, len, &newlen, FALSE); + ERRETCP( strlen(chkbuf) == strlen(decbuf) ); + ERRETCP( strcmp(decbuf, chkbuf) == 0 ); + ERRETCP( newlen == len ); + aes_free_ctx(ctx); + COMPAT(free)(outbuf); + } + + SIZE_T lsiz = 0; + BYTE* l = getLoader(&lsiz); + ERRETCP( l != NULL ); + ERRETCP( lsiz > 0 ); + COMPAT(free)(l); + + aes_cleanup(); + return TRUE; +} |