X-Git-Url: https://git.cryptolib.org/?p=arm-crypto-lib.git;a=blobdiff_plain;f=test_src%2Fmain-salsa20-test.c;fp=test_src%2Fmain-salsa20-test.c;h=1588af276467510a74b9cf17db2e732e4c4ff9ce;hp=0000000000000000000000000000000000000000;hb=f075eca3b7d5444c048436bbc937ff0831ee5f7c;hpb=b11f6230a459d2117f6740a6575fdf31a684d56b diff --git a/test_src/main-salsa20-test.c b/test_src/main-salsa20-test.c new file mode 100644 index 0000000..1588af2 --- /dev/null +++ b/test_src/main-salsa20-test.c @@ -0,0 +1,280 @@ +/* main-salsa20-test.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2011 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#include "main-test-common.h" + +#include "performance_test.h" +#include "salsa20.h" +#include "scal_salsa20.h" +#include "scal-basic.h" +#include "scal-nessie.h" + +char* algo_name = "Salsa20"; + +/***************************************************************************** + * additional validation-functions * + *****************************************************************************/ + +void nessie_first(void){ + salsa20_ctx_t ctx; + uint8_t key[16]; + + memset(key, 0, 16); + key[0] = 0x80; + cli_putstr("\r\n testing with key: "); + cli_hexdump(key, 16); + salsa20_init(key, 128, NULL, &ctx); + cli_putstr("\r\n internal state: "); + cli_hexdump_block(ctx.a, 64, 4, 16); + salsa20_gen(&ctx); + cli_putstr("\r\n internal state: "); + cli_hexdump_block(ctx.a, 64, 4, 16); + cli_putstr("\r\n data: "); + cli_hexdump_block(ctx.buffer, 64, 4, 16); + + + memset(key, 0, 16); + key[15] = 0x01; + cli_putstr("\r\n testing with key: "); + cli_hexdump(key, 16); + cli_hexdump_block(ctx.a, 64, 4, 16); + salsa20_init(key, 128, NULL, &ctx); + cli_putstr("\r\n internal state: "); + cli_hexdump_block(ctx.a, 64, 4, 16); + salsa20_gen(&ctx); + cli_putstr("\r\n internal state: "); + cli_hexdump_block(ctx.a, 64, 4, 16); + cli_putstr("\r\n data: "); + cli_hexdump_block(ctx.buffer, 64, 4, 16); +} + +/* +Salsa20( + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +=( + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ). + + +Salsa20( + 211,159, 13,115, 76, 55, 82,183, 3,117,222, 37,191,187,234,136, + 49,237,179, 48, 1,106,178,219,175,199,166, 48, 86, 16,179,207, + 31,240, 32, 63, 15, 83, 93,161,116,147, 48,113,238, 55,204, 36, + 79,201,235, 79, 3, 81,156, 47,203, 26,244,243, 88,118,104, 54) += ( + 109, 42,178,168,156,240,248,238,168,196,190,203, 26,110,170,154, + 29, 29,150, 26,150, 30,235,249,190,163,251, 48, 69,144, 51, 57, + 118, 40,152,157,180, 57, 27, 94,107, 42,236, 35, 27,111,114,114, + 219,236,232,135,111,155,110, 18, 24,232, 95,158,179, 19, 48,202 + ). + +Salsa20( + 88,118,104, 54, 79,201,235, 79, 3, 81,156, 47,203, 26,244,243, + 191,187,234,136,211,159, 13,115, 76, 55, 82,183, 3,117,222, 37, + 86, 16,179,207, 49,237,179, 48, 1,106,178,219,175,199,166, 48, + 238, 55,204, 36, 31,240, 32, 63, 15, 83, 93,161,116,147, 48,113) += ( + 179, 19, 48,202,219,236,232,135,111,155,110, 18, 24,232, 95,158, + 26,110,170,154,109, 42,178,168,156,240,248,238,168,196,190,203, + 69,144, 51, 57, 29, 29,150, 26,150, 30,235,249,190,163,251, 48, + 27,111,114,114,118, 40,152,157,180, 57, 27, 94,107, 42,236, 35 + ). + +Salsa20^1000000 ( + 6,124, 83,146, 38,191, 9, 50, 4,161, 47,222,122,182,223,185, + 75, 27, 0,216, 16,122, 7, 89,162,104,101,147,213, 21, 54, 95, + 225,253,139,176,105,132, 23,116, 76, 41,176,207,221, 34,157,108, + 94, 94, 99, 52, 90,117, 91,220,146,190,239,143,196,176,130,186) +=( + 8, 18, 38,199,119, 76,215, 67,173,127,144,162,103,212,176,217, + 192, 19,233, 33,159,197,154,160,128,243,219, 65,171,136,135,225, + 123, 11, 68, 86,237, 82, 20,155,133,189, 9, 83,167,116,194, 78, + 122,127,195,185,185,204,188, 90,245, 9,183,248,226, 85,245,104 + ). + */ + +uint8_t Salsa20_spectest0_in[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +uint8_t Salsa20_spectest0_ref[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + +uint8_t Salsa20_spectest1_in[] = { + 211,159, 13,115, 76, 55, 82,183, 3,117,222, 37,191,187,234,136, + 49,237,179, 48, 1,106,178,219,175,199,166, 48, 86, 16,179,207, + 31,240, 32, 63, 15, 83, 93,161,116,147, 48,113,238, 55,204, 36, + 79,201,235, 79, 3, 81,156, 47,203, 26,244,243, 88,118,104, 54 }; + +uint8_t Salsa20_spectest1_ref[] = { + 109, 42,178,168,156,240,248,238,168,196,190,203, 26,110,170,154, + 29, 29,150, 26,150, 30,235,249,190,163,251, 48, 69,144, 51, 57, + 118, 40,152,157,180, 57, 27, 94,107, 42,236, 35, 27,111,114,114, + 219,236,232,135,111,155,110, 18, 24,232, 95,158,179, 19, 48,202 }; + +uint8_t Salsa20_spectest2_in[] = { + 88,118,104, 54, 79,201,235, 79, 3, 81,156, 47,203, 26,244,243, + 191,187,234,136,211,159, 13,115, 76, 55, 82,183, 3,117,222, 37, + 86, 16,179,207, 49,237,179, 48, 1,106,178,219,175,199,166, 48, + 238, 55,204, 36, 31,240, 32, 63, 15, 83, 93,161,116,147, 48,113 }; + +uint8_t Salsa20_spectest2_ref[] = { + 179, 19, 48,202,219,236,232,135,111,155,110, 18, 24,232, 95,158, + 26,110,170,154,109, 42,178,168,156,240,248,238,168,196,190,203, + 69,144, 51, 57, 29, 29,150, 26,150, 30,235,249,190,163,251, 48, + 27,111,114,114,118, 40,152,157,180, 57, 27, 94,107, 42,236, 35 }; + +uint8_t Salsa20_spectest3_in[] = { + 6,124, 83,146, 38,191, 9, 50, 4,161, 47,222,122,182,223,185, + 75, 27, 0,216, 16,122, 7, 89,162,104,101,147,213, 21, 54, 95, + 225,253,139,176,105,132, 23,116, 76, 41,176,207,221, 34,157,108, + 94, 94, 99, 52, 90,117, 91,220,146,190,239,143,196,176,130,186 }; + +uint8_t Salsa20_spectest3_ref[] = { + 8, 18, 38,199,119, 76,215, 67,173,127,144,162,103,212,176,217, + 192, 19,233, 33,159,197,154,160,128,243,219, 65,171,136,135,225, + 123, 11, 68, 86,237, 82, 20,155,133,189, 9, 83,167,116,194, 78, + 122,127,195,185,185,204,188, 90,245, 9,183,248,226, 85,245,104 }; + + +void spec_test(void){ + uint8_t buffer[64]; + nessie_first(); + cli_putstr("\r\ntesting with vectors from sepcification"); + cli_putstr("\r\ntest 0: "); + memcpy(buffer, Salsa20_spectest0_in, 64); + salsa20_hash((uint32_t*)buffer); + if(memcmp(buffer, Salsa20_spectest0_ref, 64)){ + cli_putstr(" [fail]"); + }else{ + cli_putstr(" [ok]"); + } + + cli_putstr("\r\ntest 1: "); + memcpy(buffer, Salsa20_spectest1_in, 64); + salsa20_hash((uint32_t*)buffer); + if(memcmp(buffer, Salsa20_spectest1_ref, 64)){ + cli_putstr(" [fail]"); + }else{ + cli_putstr(" [ok]"); + } + + cli_putstr("\r\ntest 2: "); + memcpy(buffer, Salsa20_spectest2_in, 64); + salsa20_hash((uint32_t*)buffer); + if(memcmp(buffer, Salsa20_spectest2_ref, 64)){ + cli_putstr(" [fail]"); + }else{ + cli_putstr(" [ok]"); + } + + + + uint32_t count=0; + cli_putstr("\r\ntest 3: "); + memcpy(buffer, Salsa20_spectest3_in, 64); + do{ + if((count&0xFFFF)==0){ + cli_putc('.'); + if((count&0x20FFFF)==0){ + cli_putc('\r'); cli_putc('\n'); + } + } + salsa20_hash((uint32_t*)buffer); + }while(++count<1000000); + if(memcmp(buffer, Salsa20_spectest0_ref, 64)){ + cli_putstr(" [fail]"); + }else{ + cli_putstr(" [ok]"); + } +} + +void testrun_nessie_salsa20(void){ + scal_nessie_set_estream(1); + scal_nessie_run(&salsa20_desc); +} + +void testrun_performance_salsa20(void){ + uint64_t t; + char str[16]; + uint8_t key[32]; + salsa20_ctx_t ctx; + + calibrateTimer(); + print_overhead(); + + memset(key, 0, 16); + + startTimer(1); + salsa20_init(key, 128, NULL, &ctx); + t = stopTimer(); + cli_putstr("\r\n\tctx-gen time: "); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + startTimer(1); + salsa20_gen(&ctx); + t = stopTimer(); + cli_putstr("\r\n\tencrypt time: "); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + cli_putstr("\r\n"); +} + + +/***************************************************************************** + * main * + *****************************************************************************/ + +const char nessie_str[] = "nessie"; +const char test_str[] = "test"; +const char performance_str[] = "performance"; +const char echo_str[] = "echo"; + +cmdlist_entry_t cmdlist[] = { + { nessie_str, NULL, testrun_nessie_salsa20 }, + { performance_str, NULL, testrun_performance_salsa20}, + { test_str, NULL, spec_test}, + { echo_str, (void*)1, (void_fpt)echo_ctrl}, + { NULL, NULL, NULL} +}; + +int main (void){ + main_setup(); + + for(;;){ + welcome_msg(algo_name); + cmd_interface(cmdlist); + } +} +