From e9d58dce0a1eca2c78aec260406e1605ae29fff7 Mon Sep 17 00:00:00 2001 From: bg Date: Mon, 2 Feb 2009 23:05:19 +0000 Subject: [PATCH] fixing a bug in sha1-C and sha256-C (only C-Versions are affected) in setting the padding bit for non-byte messages --- host/get_test.rb | 37 +++++++++++++-------------- sha1.c | 4 +-- sha256.c | 4 +-- test_src/cli.c | 65 ++---------------------------------------------- test_src/cli.h | 16 +++--------- 5 files changed, 28 insertions(+), 98 deletions(-) diff --git a/host/get_test.rb b/host/get_test.rb index 987a5b1..2e5985c 100644 --- a/host/get_test.rb +++ b/host/get_test.rb @@ -2,24 +2,6 @@ require 'serialport' -if ARGV.size < 5 - STDERR.print <=6)?ARGV[5]:""; -param=(ARGV.size>=7)?ARGV[6]:""; - -puts("\nPort: "+ARGV[0]+ "@"+ARGV[1]+" "+ARGV[2]+"N"+ARGV[3]+"\n"); -$linewidth = 16 -$sp = SerialPort.new(ARGV[0], ARGV[1].to_i, ARGV[2].to_i, ARGV[3].to_i, SerialPort::NONE); -$sp.read_timeout=1*60*1000; # 5 minutes -$extended_wait=10; -$sp.write(command); - def readTestVector(param) fname=$dir; lb=""; @@ -98,6 +80,25 @@ def readTestVector(param) return true end + +if ARGV.size < 5 + STDERR.print <=6)?ARGV[5]:""; +param=(ARGV.size>=7)?ARGV[6]:""; + +puts("\nPort: "+ARGV[0]+ "@"+ARGV[1]+" "+ARGV[2]+"N"+ARGV[3]+"\n"); +$linewidth = 16 +$sp = SerialPort.new(ARGV[0], ARGV[1].to_i, ARGV[2].to_i, ARGV[3].to_i, SerialPort::NONE); +$sp.read_timeout=1*60*1000; # 5 minutes +$extended_wait=100; +$sp.write(command); + if(readTestVector(param)==false) puts("ERROR: test seems not to be implemented"); exit(3); diff --git a/sha1.c b/sha1.c index b2fc283..045af10 100644 --- a/sha1.c +++ b/sha1.c @@ -170,13 +170,13 @@ void sha1_lastBlock(sha1_ctx_t *state, void* block, uint16_t length){ memcpy (&(lb[0]), block, length/8); /* set the final one bit */ - if (length & 0x3){ /* if we have single bits at the end */ + if (length & 0x7){ /* if we have single bits at the end */ lb[length/8] = ((uint8_t*)(block))[length/8]; } else { lb[length/8] = 0; } lb[length/8] |= 0x80>>(length & 0x3); - length =(length >> 3) + 1; /* from now on length contains the number of BYTES in lb*/ + length =(length >> 7) + 1; /* from now on length contains the number of BYTES in lb*/ /* pad with zeros */ if (length>64-8){ /* not enouth space for 64bit length value */ memset((void*)(&(lb[length])), 0, 64-length); diff --git a/sha256.c b/sha256.c index 9df0f04..f310f7c 100644 --- a/sha256.c +++ b/sha256.c @@ -164,12 +164,12 @@ void sha256_lastBlock(sha256_ctx_t *state, const void* block, uint16_t length){ memcpy (&(lb[0]), block, length/8); /* set the final one bit */ - if (length & 0x3){ // if we have single bits at the end + if (length & 0x7){ // if we have single bits at the end lb[length/8] = ((uint8_t*)(block))[length/8]; } else { lb[length/8] = 0; } - lb[length/8] |= 0x80>>(length & 0x3); + lb[length/8] |= 0x80>>(length & 0x7); length =(length >> 3) + 1; /* from now on length contains the number of BYTES in lb*/ /* pad with zeros */ if (length>64-8){ /* not enouth space for 64bit length value */ diff --git a/test_src/cli.c b/test_src/cli.c index 47bd6ad..35f0aa2 100644 --- a/test_src/cli.c +++ b/test_src/cli.c @@ -34,66 +34,6 @@ #include "cli.h" #include "config.h" -int16_t findstring_d0(const char* str, const char* v){ - uint8_t i=0; - while(*v){ - if(!strcmp(str, v)){ - return i; - } - while(*v++) /* go to the next string */ - ; - ++i; - } - return -1; -} - -#ifdef CLI_OLD - -int16_t findstring_d0_P(const char* str, PGM_P v){ - uint8_t i=0; - while(pgm_read_byte(v)){ - if(!strcmp_P(str, v)){ - return i; - } - while(pgm_read_byte(v++)) /* go to the next string */ - ; - ++i; - } - return -1; -} - -#ifdef CLI_AUTO_HELP -#include "uart.h" - -void cli_auto_help_P(PGM_P dbzstr){ - char c; - uart_putstr_P(PSTR("\r\n[auto help] available commands are:\r\n\t")); - do{ - while((c=pgm_read_byte(dbzstr++))!=0){ - uart_putc(c); - } - uart_putstr_P(PSTR("\r\n\t")); - }while((c=pgm_read_byte(dbzstr))!=0); - uart_putstr_P(PSTR("\r\n")); -} - -int16_t execcommand_d0_P(const char* str, PGM_P v, void(*fpt[])(void) ){ - int16_t i=0; - i=findstring_d0_P(str, v); - if(i!=-1){ - if(fpt[i]) - fpt[i](); - return i; - }else{ - cli_auto_help_P(v); - return -1; - } -} - -#endif - -#else /* CLI_OLD */ - cli_rx_fpt cli_rx = NULL; cli_tx_fpt cli_tx = NULL; uint8_t cli_echo=1; @@ -131,6 +71,7 @@ void cli_hexdump(void* data, uint16_t length){ } } +static void cli_auto_help(uint16_t maxcmdlength, PGM_VOID_P cmdlist){ cmdlist_entry_t item; uint16_t i; @@ -168,6 +109,7 @@ void cli_auto_help(uint16_t maxcmdlength, PGM_VOID_P cmdlist){ } } +static uint16_t firstword_length(char* s){ uint16_t ret=0; while(isalnum(*s++)) @@ -383,6 +325,3 @@ int8_t cmd_interface(PGM_VOID_P cmd_desc){ } } } - -#endif - diff --git a/test_src/cli.h b/test_src/cli.h index 182611d..6504ee2 100644 --- a/test_src/cli.h +++ b/test_src/cli.h @@ -23,16 +23,6 @@ #include typedef void(*void_fpt)(void); - -#ifdef CLI_OLD - -int16_t findstring_d0(const char* str, const char* v); -int16_t findstring_d0_P(const char* str, PGM_P v); - -int16_t execcommand_d0_P(const char* str, PGM_P v, void(*fpt[])(void) ); - -#else - typedef char (*cli_rx_fpt)(void); typedef void (*cli_tx_fpt)(char); @@ -48,11 +38,11 @@ extern cli_rx_fpt cli_rx; extern cli_tx_fpt cli_tx; extern uint8_t cli_echo; +void cli_putstr(char* s); +void cli_putstr_P(PGM_P s); +void cli_hexdump(void* data, uint16_t length); void echo_ctrl(char* s); int8_t cmd_interface(PGM_VOID_P cmd_desc); -#endif - - #endif /*CLI_H_*/ -- 2.39.5