/** * * author: Daniel Otte * email: daniel.otte@rub.de * license: GPLv3 * * a suit for running the nessie-tests for streamciphers * * */ #include #include #include "nessie_stream_test.h" #include "uart.h" nessie_stream_ctx_t nessie_stream_ctx; static void printblock(uint8_t* block, uint16_t blocksize_bit){ char tab [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; uint16_t i; for(i=0; i<(blocksize_bit+7)/8; ++i){ uart_putc(tab[(block[i])>>4]); uart_putc(tab[(block[i])&0xf]); } } #define SPACES 31 #define BYTESPERLINE 16 static void printitem(char* name, uint8_t* buffer, uint16_t size_B){ uint8_t name_len; uint8_t i; name_len=strlen(name); if(name_len>SPACES-1){ uart_putstr_P(PSTR("\r\n!!! formatting error !!!\r\n")); return; } uart_putstr_P(PSTR("\r\n")); for(i=0; iBYTESPERLINE)?BYTESPERLINE:toprint)*8); buffer += BYTESPERLINE; toprint -= BYTESPERLINE; } } } static void memxor(void* dest, void* src, uint8_t length){ while(length--){ *((uint8_t*)dest) ^= *((uint8_t*)src); dest = (uint8_t*)dest +1; src = (uint8_t*)src +1; } } #define BLOCKSIZE_B 64 static void nessie_gen_block(void* ctx, uint8_t* block){ uint16_t i; for(i=0; i10){ uart_putc('0'+(nessie_stream_ctx.keysize_b/10)%10); } uart_putc('0'+nessie_stream_ctx.keysize_b%10); uart_putstr_P(PSTR(" bits\r\n")); } static void print_footer(void){ uart_putstr_P(PSTR("\r\n\r\n\r\n\r\nEnd of test vectors")); } void nessie_stream_run(void){ uint16_t i; uint8_t set; uint8_t key[(nessie_stream_ctx.keysize_b+7)/8]; print_header(); /* test set 1 */ set=1; print_setheader(set); for(i=0; i>(i%8); nessie_stream_enc(key); } /* test set 2 */ set=2; print_setheader(set); for(i=0; i<256; ++i){ print_set_vector(set, i); memset(key, i, (nessie_stream_ctx.keysize_b+7)/8); nessie_stream_enc(key); } /* test set 3 */ set=3; print_setheader(set); for(i=0; i<256; ++i){ uint8_t j; print_set_vector(set, i); for(j=0; j<(nessie_stream_ctx.keysize_b+7)/8; ++j){ key[j]=(i+j)&0xff; } nessie_stream_enc(key); } /* test set 4 */ set=4; print_setheader(set); for(i=0; i<4; ++i){ uint8_t j; print_set_vector(set, i); for(j=0; j<(nessie_stream_ctx.keysize_b+7)/8; ++j){ key[j]=(i*5+j*0x53)&0xff; } nessie_stream_enc_large(key); } print_footer(); }