some bugs fixed for SHA1-C (some may be left)
This commit is contained in:
parent
d32eba56ce
commit
83398013d7
1
debug.h
1
debug.h
|
@ -24,6 +24,7 @@
|
|||
#define DEBUG_C(_c) debug_char(_c)
|
||||
#define DEBUG_S(_s) debug_str(_s)
|
||||
#define DEBUG_B(_b) debug_byte(_b)
|
||||
#include "cli.h"
|
||||
#else
|
||||
#define DEBUG_INIT()
|
||||
#define DEBUG_C(_c)
|
||||
|
|
|
@ -64,7 +64,7 @@ def send_md(md_string)
|
|||
end
|
||||
|
||||
def run_test(filename)
|
||||
errors = 0
|
||||
nerrors = 0
|
||||
line=1
|
||||
if not File.exist?(filename)
|
||||
puts("ERROR file "+filename+" does not exist!")
|
||||
|
@ -101,12 +101,12 @@ def run_test(filename)
|
|||
putc('*')
|
||||
else
|
||||
putc('!')
|
||||
# printf("\nshould: %s\ngot: %s\n",lb,avr_md)
|
||||
errors += 1;
|
||||
printf("\nshould: %s\ngot: %s\n",lb,avr_md)
|
||||
nerrors += 1
|
||||
end
|
||||
pos += 1
|
||||
end
|
||||
return errors
|
||||
return nerrors.to_i
|
||||
end
|
||||
|
||||
if ARGV.size < 6
|
||||
|
@ -133,13 +133,13 @@ $algo_select = ARGV[4]
|
|||
|
||||
init_system()
|
||||
|
||||
errors = 0
|
||||
nerrors = 0
|
||||
for i in (5..(ARGV.size-1))
|
||||
errors = run_test(ARGV[i])
|
||||
if errors == 0
|
||||
nerrors = run_test(ARGV[i])
|
||||
if nerrors == 0
|
||||
puts("\n[ok]")
|
||||
else
|
||||
puts("\n[errors: "+errors.to_s+"]")
|
||||
puts("\n[errors: "+ nerrors.to_s() +"]")
|
||||
end
|
||||
end
|
||||
$sp.print("EXIT\r");
|
||||
|
|
31
sha1/sha1.c
31
sha1/sha1.c
|
@ -29,6 +29,7 @@
|
|||
#include <stdint.h>
|
||||
#include "config.h"
|
||||
#undef DEBUG
|
||||
//#define DEBUG UART
|
||||
#include "debug.h"
|
||||
#include "sha1.h"
|
||||
|
||||
|
@ -124,7 +125,7 @@ void sha1_nextBlock (sha1_ctx_t *state, const void* block){
|
|||
s = t & MASK;
|
||||
if(t>=16){
|
||||
#ifdef DEBUG
|
||||
DEBUG_S("\r\n ws = "); cli_hexdump(&ws, 4);
|
||||
DEBUG_S("\r\n ws = "); cli_hexdump(&(w[s]), 4);
|
||||
#endif
|
||||
w[s] = rotl32( w[(s+13)&MASK] ^ w[(s+8)&MASK] ^
|
||||
w[(s+ 2)&MASK] ^ w[s] ,1);
|
||||
|
@ -166,31 +167,33 @@ void sha1_nextBlock (sha1_ctx_t *state, const void* block){
|
|||
|
||||
void sha1_lastBlock(sha1_ctx_t *state, const void* block, uint16_t length){
|
||||
uint8_t lb[SHA1_BLOCK_BITS/8]; /* local block */
|
||||
while(length>=512){
|
||||
sha1_nextBlock(state, block);
|
||||
length -=512;
|
||||
block = (uint8_t*)block + 512/8;
|
||||
}
|
||||
state->length += length;
|
||||
memcpy (&(lb[0]), block, length/8);
|
||||
memcpy (lb, block, (length+7)/8);
|
||||
|
||||
/* set the final one bit */
|
||||
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 >> 7) + 1; /* from now on length contains the number of BYTES in lb*/
|
||||
/* pad with zeros */
|
||||
lb[length/8] |= 0x80>>(length & 0x07);
|
||||
length=(length)/8 +1; /* from now on length contains the number of BYTES in lb */
|
||||
|
||||
if (length>64-8){ /* not enouth space for 64bit length value */
|
||||
memset((void*)(&(lb[length])), 0, 64-length);
|
||||
memset(lb+length, 0, 64-length);
|
||||
sha1_nextBlock(state, lb);
|
||||
state->length -= 512;
|
||||
length = 0;
|
||||
}
|
||||
memset((void*)(&(lb[length])), 0, 56-length);
|
||||
|
||||
/* pad with zeros */
|
||||
memset(lb+length, 0, 56-length);
|
||||
/* store the 64bit length value */
|
||||
#if defined LITTLE_ENDIAN
|
||||
/* this is now rolled up */
|
||||
uint8_t i;
|
||||
for (i=1; i<=8; ++i){
|
||||
lb[55+i] = (uint8_t)(state->length>>(64- 8*i));
|
||||
for (i=0; i<8; ++i){
|
||||
lb[56+i] = ((uint8_t*)&(state->length))[7-i];
|
||||
}
|
||||
#elif defined BIG_ENDIAN
|
||||
*((uint64_t)&(lb[56])) = state->length;
|
||||
|
|
|
@ -79,13 +79,34 @@ void sha1_ctx_dump(sha1_ctx_t *s){
|
|||
void testrun_sha1(void){
|
||||
sha1_hash_t hash;
|
||||
sha1(&hash,"abc",3*8);
|
||||
cli_putstr("\r\nsha1(\"abc\") = \r\n\t");
|
||||
cli_putstr_P(PSTR("\r\nsha1(\"abc\") = \r\n\t"));
|
||||
cli_hexdump(hash,SHA1_HASH_BITS/8);
|
||||
|
||||
sha1(&hash,"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",448);
|
||||
cli_putstr("\r\nsha1(\"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq\") = \r\n\t");
|
||||
sha1(&hash,"\0\0\0\0\0\0\0\0", 8*8);
|
||||
cli_putstr_P(PSTR("\r\nsha1(8 x 0x00) = \r\n\t"));
|
||||
cli_hexdump(hash,SHA1_HASH_BITS/8);
|
||||
/*
|
||||
Len = 496
|
||||
Msg = 46fe5ed326c8fe376fcc92dc9e2714e2240d3253b105ad
|
||||
fbb256ff7a19bc40975c604ad7c0071c4fd78a7cb64786
|
||||
e1bece548fa4833c04065fe593f6fb10
|
||||
MD = f220a7457f4588d639dc21407c942e9843f8e26b
|
||||
*/
|
||||
sha1(&hash,"\x46\xfe\x5e\xd3\x26\xc8\xfe\x37"
|
||||
"\x6f\xcc\x92\xdc\x9e\x27\x14\xe2"
|
||||
"\x24\x0d\x32\x53\xb1\x05\xad\xfb"
|
||||
"\xb2\x56\xff\x7a\x19\xbc\x40\x97"
|
||||
"\x5c\x60\x4a\xd7\xc0\x07\x1c\x4f"
|
||||
"\xd7\x8a\x7c\xb6\x47\x86\xe1\xbe"
|
||||
"\xce\x54\x8f\xa4\x83\x3c\x04\x06"
|
||||
"\x5f\xe5\x93\xf6\xfb\x10", 496);
|
||||
cli_putstr_P(PSTR("\r\nsha1(tv_496) = \r\n\t"));
|
||||
cli_hexdump(hash,SHA1_HASH_BITS/8);
|
||||
|
||||
// sha1(&hash,"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",448);
|
||||
cli_putstr_P(PSTR("\r\nsha1(\"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq\") = \r\n\t"));
|
||||
cli_hexdump(hash,SHA1_HASH_BITS/8);
|
||||
/*
|
||||
cli_putstr("\r\nsha1(1,000,000 * 'a') = \r\n\t");
|
||||
{
|
||||
uint8_t block[SHA1_BLOCK_BITS/8];
|
||||
|
@ -93,14 +114,14 @@ void testrun_sha1(void){
|
|||
sha1_ctx_t s;
|
||||
memset(block,'a',SHA1_BLOCK_BITS/8);
|
||||
sha1_init(&s);
|
||||
for(i=0;i<15625; ++i){ /* (1000000/(SHA1_BLOCK_BITS/8)) */
|
||||
for(i=0;i<15625; ++i){ / * (1000000/(SHA1_BLOCK_BITS/8)) * /
|
||||
sha1_nextBlock(&s, block);
|
||||
}
|
||||
sha1_lastBlock(&s,block,0);
|
||||
sha1_ctx2hash(&hash, &s);
|
||||
}
|
||||
cli_hexdump(hash,SHA1_HASH_BITS/8);
|
||||
|
||||
*/
|
||||
|
||||
cli_putstr("\r\nx");
|
||||
}
|
||||
|
@ -110,7 +131,7 @@ void testrun_sha1_2(void){
|
|||
sha1_ctx_t ctx;
|
||||
sha1_hash_t hash;
|
||||
sha1(&hash,"",0);
|
||||
cli_putstr("\r\nsha1(NULL) = \r\n\t");
|
||||
cli_putstr_P(PSTR("\r\nsha1(NULL) = \r\n\t"));
|
||||
cli_hexdump(hash,SHA1_HASH_BYTES);
|
||||
|
||||
memset(hash, 0, SHA1_HASH_BYTES);
|
||||
|
@ -118,7 +139,7 @@ void testrun_sha1_2(void){
|
|||
sha1_init(&ctx);
|
||||
sha1_lastBlock(&ctx, "", 0);
|
||||
sha1_ctx2hash(&hash, &ctx);
|
||||
cli_putstr("\r\nsha1(NULL) = \r\n\t");
|
||||
cli_putstr_P(PSTR("\r\nsha1(NULL) = \r\n\t"));
|
||||
cli_hexdump(hash,SHA1_HASH_BYTES);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue