X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=test_src%2Fmain-aes-test.c;h=c4b9adc55441e253abdb10a0475ce04eac88bce4;hb=5120e1b9ade92d8b8c44e8b4609ebc859140aa02;hp=d50c739ee4ca5df043a83363634d29d10e55b145;hpb=3790ef3b40efb6649a517144f3089aba564ca541;p=avr-crypto-lib.git diff --git a/test_src/main-aes-test.c b/test_src/main-aes-test.c index d50c739..c4b9adc 100644 --- a/test_src/main-aes-test.c +++ b/test_src/main-aes-test.c @@ -39,6 +39,10 @@ #include "bcal-cbc.h" #include "bcal-cfb_byte.h" #include "bcal-cfb_bit.h" +#include "bcal-ofb.h" +#include "bcal-ctr.h" +#include "bcal-cmac.h" +#include "cmacvs.h" #include #include @@ -47,6 +51,13 @@ char* algo_name = "AES"; +const bcdesc_t* algolist[] PROGMEM = { + (bcdesc_t*)&aes128_desc, + (bcdesc_t*)&aes192_desc, + (bcdesc_t*)&aes256_desc, + NULL +}; + /***************************************************************************** * additional validation-functions * *****************************************************************************/ @@ -183,24 +194,36 @@ void testrun_testkey_aes(void){ testrun_testkey_aes256(); } -uint8_t modes_key[] PROGMEM={ 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, - 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c - }; -uint8_t modes_iv[] PROGMEM={ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f - }; -uint8_t modes_plain[] PROGMEM={ 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, - 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, - /* --- */ - 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, - 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, - /* --- */ - 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, - 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, - /* --- */ - 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, - 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 - }; +uint8_t modes_key[] PROGMEM = { + 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, + 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c, + 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, + 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 + }; +uint8_t modes_iv[] PROGMEM = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f + }; + +uint8_t modes_ctriv[] PROGMEM = { + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff + }; + +uint8_t modes_plain[] PROGMEM = { + 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, + 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, + /* --- */ + 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, + 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, + /* --- */ + 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, + 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, + /* --- */ + 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, + 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 + }; + void testrun_aes128_cbc(void){ uint8_t key[16]; @@ -223,15 +246,15 @@ void testrun_aes128_cbc(void){ cli_putstr_P(PSTR("\r\n IV: ")); cli_hexdump(iv, 128/8); cli_putstr_P(PSTR("\r\n plaintext:")); - cli_hexdump_block(plain, 4*128/8, 4, 8); + cli_hexdump_block(plain, 4*128/8, 4, 16); if(r) return; bcal_cbc_encMsg(iv, plain, 4, &ctx); cli_putstr_P(PSTR("\r\n ciphertext: ")); - cli_hexdump_block(plain, 4*128/8, 4, 8); + cli_hexdump_block(plain, 4*128/8, 4, 16); bcal_cbc_decMsg(iv, plain, 4, &ctx); cli_putstr_P(PSTR("\r\n plaintext: ")); - cli_hexdump_block(plain, 4*128/8, 4, 8); + cli_hexdump_block(plain, 4*128/8, 4, 16); bcal_cbc_free(&ctx); } @@ -256,16 +279,16 @@ void testrun_aes128_cfb8(void){ cli_putstr_P(PSTR("\r\n IV: ")); cli_hexdump(iv, 128/8); cli_putstr_P(PSTR("\r\n plaintext:")); - cli_hexdump_block(plain, 4*128/8, 4, 8); + cli_hexdump_block(plain, 4*128/8, 4, 16); if(r) return; bcal_cfb_B_encMsg(iv, plain, 64, &ctx); cli_putstr_P(PSTR("\r\n ciphertext: ")); - cli_hexdump_block(plain, 64, 4, 8); + cli_hexdump_block(plain, 64, 4, 16); bcal_cfb_B_decMsg(iv, plain, 64, &ctx); cli_putstr_P(PSTR("\r\n plaintext: ")); - cli_hexdump_block(plain, 64, 4, 8); + cli_hexdump_block(plain, 64, 4, 16); bcal_cfb_B_free(&ctx); @@ -292,7 +315,7 @@ void testrun_aes128_cfb1(void){ cli_putstr_P(PSTR("\r\n IV: ")); cli_hexdump(iv, 128/8); cli_putstr_P(PSTR("\r\n plaintext:")); - cli_hexdump_block(plain, 2, 4, 8); + cli_hexdump_block(plain, 2, 4, 16); if(r) return; uint8_t i, bit_offset, byte_offset; @@ -307,7 +330,7 @@ void testrun_aes128_cfb1(void){ cli_putc((plain[byte_offset]&(1<<(7-bit_offset)))?'1':'0'); } cli_putstr_P(PSTR("\r\n ciphertext: ")); - cli_hexdump_block(plain, 2, 4, 8); + cli_hexdump_block(plain, 2, 4, 16); bcal_cfb_b_loadIV(iv, &ctx); for(i=0; i<16; ++i){ @@ -320,20 +343,190 @@ void testrun_aes128_cfb1(void){ cli_putc((plain[byte_offset]&(1<<(7-bit_offset)))?'1':'0'); } cli_putstr_P(PSTR("\r\n plaintext: ")); - cli_hexdump_block(plain, 2, 4, 8); + cli_hexdump_block(plain, 2, 4, 16); bcal_cfb_b_encMsg(iv, plain, 0, 64*8, &ctx); cli_putstr_P(PSTR("\r\n ciphertext: ")); - cli_hexdump_block(plain, 64, 4, 8); + cli_hexdump_block(plain, 64, 4, 16); bcal_cfb_b_decMsg(iv, plain, 0, 64*8, &ctx); cli_putstr_P(PSTR("\r\n plaintext: ")); - cli_hexdump_block(plain, 64, 4, 8); + cli_hexdump_block(plain, 64, 4, 16); bcal_cfb_b_free(&ctx); +} + +void testrun_aes128_ofb(void){ + uint8_t key[16]; + uint8_t iv[16]; + uint8_t plain[64]; + + bcal_ofb_ctx_t ctx; + uint8_t r; + + memcpy_P(key, modes_key, 16); + memcpy_P(iv, modes_iv, 16); + memcpy_P(plain, modes_plain, 64); + cli_putstr_P(PSTR("\r\n** AES128-OFB-TEST **")); + r = bcal_ofb_init(&aes128_desc, key, 128, &ctx); + cli_putstr_P(PSTR("\r\n init = 0x")); + cli_hexdump(&r, 1); + cli_putstr_P(PSTR("\r\n key: ")); + cli_hexdump(key, 128/8); + cli_putstr_P(PSTR("\r\n IV: ")); + cli_hexdump(iv, 128/8); + cli_putstr_P(PSTR("\r\n plaintext:")); + cli_hexdump_block(plain, 4*128/8, 4, 16); + if(r) + return; + bcal_ofb_encMsg(iv, plain, 4*128, &ctx); + cli_putstr_P(PSTR("\r\n ciphertext: ")); + cli_hexdump_block(plain, 4*128/8, 4, 16); + bcal_ofb_decMsg(iv, plain, 4*128, &ctx); + cli_putstr_P(PSTR("\r\n plaintext: ")); + cli_hexdump_block(plain, 4*128/8, 4, 16); + bcal_ofb_free(&ctx); } + +void testrun_aes128_ctr(void){ + uint8_t key[16]; + uint8_t iv[16]; + uint8_t plain[64]; + + bcal_ctr_ctx_t ctx; + uint8_t r; + + memcpy_P(key, modes_key, 16); + memcpy_P(iv, modes_ctriv, 16); + memcpy_P(plain, modes_plain, 64); + + cli_putstr_P(PSTR("\r\n** AES128-CTR-TEST **")); + r = bcal_ctr_init(&aes128_desc, key, 128, NULL, &ctx); + cli_putstr_P(PSTR("\r\n init = 0x")); + cli_hexdump(&r, 1); + cli_putstr_P(PSTR("\r\n key: ")); + cli_hexdump(key, 128/8); + cli_putstr_P(PSTR("\r\n IV: ")); + cli_hexdump(iv, 128/8); + cli_putstr_P(PSTR("\r\n plaintext:")); + cli_hexdump_block(plain, 4*128/8, 4, 16); + if(r) + return; + bcal_ctr_encMsg(iv, plain, 4*128, &ctx); + cli_putstr_P(PSTR("\r\n ciphertext: ")); + cli_hexdump_block(plain, 4*128/8, 4, 16); + bcal_ctr_decMsg(iv, plain, 4*128, &ctx); + cli_putstr_P(PSTR("\r\n plaintext: ")); + cli_hexdump_block(plain, 4*128/8, 4, 16); + bcal_ctr_free(&ctx); +} + +void testrun_aes128_cmac(void){ + uint8_t key[16]; + uint8_t tag[16]; + uint8_t plain[64]; + uint16_t length[] = { 0, 128, 320, 512 }; + bcal_cmac_ctx_t ctx; + uint8_t r,i; + + memcpy_P(key, modes_key, 16); + memcpy_P(plain, modes_plain, 64); + + cli_putstr_P(PSTR("\r\n** AES128-CMAC-TEST **")); + + cli_putstr_P(PSTR("\r\n key: ")); + cli_hexdump(key, 128/8); + for(i=0; i<4; ++i){ + r = bcal_cmac_init(&aes128_desc, key, 128, &ctx); + cli_putstr_P(PSTR("\r\n init = 0x")); + cli_hexdump(&r, 1); + cli_putstr_P(PSTR("\r\n message: ")); + cli_hexdump_block(plain, length[i]/8, 4, 16); + if(r) + return; + bcal_cmac(tag, 128, plain, length[i], &ctx); + cli_putstr_P(PSTR("\r\n tag: ")); + cli_hexdump_block(tag, 128/8, 4, 16); + bcal_cmac_free(&ctx); + } +} +/* +Klen = 16 +Mlen = 18 +Tlen = 2 +Key = 3250974e306b4b678f914b514d1e90f6 +Msg = cf132fd4ebc25fd3866f1a95a6193a1a9cdf +*/ +void testrun_aes128_cmac72(void){ + uint8_t key[16]= { + 0x32, 0x50, 0x97, 0x4e, 0x30, 0x6b, 0x4b, 0x67, + 0x8f, 0x91, 0x4b, 0x51, 0x4d, 0x1e, 0x90, 0xf6 + }; + uint8_t tag[2]; + uint8_t plain[18] = { + 0xcf, 0x13, 0x2f, 0xd4, 0xeb, 0xc2, 0x5f, 0xd3, + 0x86, 0x6f, 0x1a, 0x95, 0xa6, 0x19, 0x3a, 0x1a, + 0x9c, 0xdf, + }; + bcal_cmac_ctx_t ctx; + uint8_t r; + + + cli_putstr_P(PSTR("\r\n** AES128-CMAC-72-TEST **")); + + cli_putstr_P(PSTR("\r\n key: ")); + cli_hexdump(key, 128/8); + r = bcal_cmac_init(&aes128_desc, key, 128, &ctx); + cli_putstr_P(PSTR("\r\n init = 0x")); + cli_hexdump(&r, 1); + cli_putstr_P(PSTR("\r\n message: ")); + cli_hexdump_block(plain, 18, 4, 16); + if(r) + return; + bcal_cmac(tag, 16, plain, 18*8, &ctx); + cli_putstr_P(PSTR("\r\n tag: ")); + cli_hexdump_block(tag, 2, 4, 16); + bcal_cmac_free(&ctx); +} +/* +Count = 0 +Klen = 24 +Mlen = 0 +Tlen = 2 +Key = 2b2aaa666be161ed16648e862ac9bd1e317f71bc69e268b5 +Msg = 00 +*/ +void testrun_aes192_cmac0(void){ + uint8_t key[24]= { + 0x2b, 0x2a, 0xaa, 0x66, 0x6b, 0xe1, 0x61, 0xed, + 0x16, 0x64, 0x8e, 0x86, 0x2a, 0xc9, 0xbd, 0x1e, + 0x31, 0x7f, 0x71, 0xbc, 0x69, 0xe2, 0x68, 0xb5 + }; + uint8_t tag[2]; + uint8_t plain[1] = { + 0x00 + }; + bcal_cmac_ctx_t ctx; + uint8_t r; + + + cli_putstr_P(PSTR("\r\n** AES192-CMAC-0-TEST **")); + + cli_putstr_P(PSTR("\r\n key: ")); + cli_hexdump(key, 192/8); + r = bcal_cmac_init(&aes192_desc, key, 192, &ctx); + cli_putstr_P(PSTR("\r\n init = 0x")); + cli_hexdump(&r, 1); + if(r) + return; + bcal_cmac(tag, 16, plain, 0*8, &ctx); + cli_putstr_P(PSTR("\r\n tag: ")); + cli_hexdump_block(tag, 2, 4, 16); + bcal_cmac_free(&ctx); +} + /*****************************************************************************/ void testrun_performance_aes128(void){ @@ -465,27 +658,45 @@ void testrun_performance_aes(void){ * main * *****************************************************************************/ -const char nessie_str[] PROGMEM = "nessie"; -const char test_str[] PROGMEM = "test"; -const char testkey_str[] PROGMEM = "testkey"; -const char testcbc_str[] PROGMEM = "testcbc"; -const char testcfb8_str[] PROGMEM = "testcfb8"; -const char testcfb1_str[] PROGMEM = "testcfb1"; -const char performance_str[] PROGMEM = "performance"; -const char dump_str[] PROGMEM = "dump"; -const char echo_str[] PROGMEM = "echo"; +const char nessie_str[] PROGMEM = "nessie"; +const char test_str[] PROGMEM = "test"; +const char testkey_str[] PROGMEM = "testkey"; +const char testcbc_str[] PROGMEM = "testcbc"; +const char testcfb8_str[] PROGMEM = "testcfb8"; +const char testcfb1_str[] PROGMEM = "testcfb1"; +const char testofb_str[] PROGMEM = "testofb"; +const char testctr_str[] PROGMEM = "testctr"; +const char testcmac_str[] PROGMEM = "testcmac"; +const char testcmac72_str[] PROGMEM = "testcmac72"; +const char testcmac0_str[] PROGMEM = "testcmac0"; +const char cmacvs_list_str[] PROGMEM = "cmacvs_list"; +const char cmacvs_set_str[] PROGMEM = "cmacvs_set"; +const char cmacvs_test1_str[] PROGMEM = "cmacvs_test1"; +const char cmacvs_test2_str[] PROGMEM = "cmacvs_test2"; +const char performance_str[] PROGMEM = "performance"; +const char dump_str[] PROGMEM = "dump"; +const char echo_str[] PROGMEM = "echo"; cmdlist_entry_t cmdlist[] PROGMEM = { - { nessie_str, NULL, testrun_nessie_aes }, - { test_str, NULL, testrun_test_aes}, - { testkey_str, NULL, testrun_testkey_aes}, - { testcbc_str, NULL, testrun_aes128_cbc}, - { testcfb8_str, NULL, testrun_aes128_cfb8}, - { testcfb1_str, NULL, testrun_aes128_cfb1}, - { performance_str, NULL, testrun_performance_aes}, - { dump_str, (void*)1, (void_fpt)dump}, - { echo_str, (void*)1, (void_fpt)echo_ctrl}, - { NULL, NULL, NULL} + { nessie_str, NULL, testrun_nessie_aes }, + { test_str, NULL, testrun_test_aes }, + { testkey_str, NULL, testrun_testkey_aes }, + { testcbc_str, NULL, testrun_aes128_cbc }, + { testcfb8_str, NULL, testrun_aes128_cfb8 }, + { testcfb1_str, NULL, testrun_aes128_cfb1 }, + { testofb_str, NULL, testrun_aes128_ofb }, + { testctr_str, NULL, testrun_aes128_ctr }, + { testcmac_str, NULL, testrun_aes128_cmac }, + { testcmac72_str, NULL, testrun_aes128_cmac72 }, + { testcmac0_str, NULL, testrun_aes192_cmac0 }, + { cmacvs_list_str, NULL, cmacvs_listalgos }, + { cmacvs_set_str, (void*)1, (void_fpt)cmacvs_setalgo }, + { cmacvs_test1_str, NULL, cmacvs_test1 }, + { cmacvs_test2_str, NULL, cmacvs_test2 }, + { performance_str, NULL, testrun_performance_aes }, + { dump_str, (void*)1, (void_fpt)dump }, + { echo_str, (void*)1, (void_fpt)echo_ctrl }, + { NULL, NULL, NULL } }; @@ -494,6 +705,8 @@ int main (void){ cli_rx = (cli_rx_fpt)uart0_getc; cli_tx = (cli_tx_fpt)uart0_putc; + cmacvs_algolist=(bcdesc_t**)algolist; + cmacvs_algo=(bcdesc_t*)&aes128_desc; for(;;){ cli_putstr_P(PSTR("\r\n\r\nCrypto-VS (")); cli_putstr(algo_name);