$conffile_check = Hash.new
$conffile_check.default = 0
+################################################################################
+# readconfigfile #
+################################################################################
+
def readconfigfile(fname, conf)
return conf if $conffile_check[fname]==1
$conffile_check[fname]=1
return conf
end
+################################################################################
+# reset_system #
+################################################################################
+
def reset_system
$sp.print("exit\r")
sleep 0.1
sleep 0.1
end
+################################################################################
+# scan_system #
+################################################################################
+
def scan_system
algos = Hash.new
$sp.print("shavs_list\r")
end
end
+################################################################################
+# init_system #
+################################################################################
+
def init_system(algo_select)
$sp.print("echo off \r")
print("DBG i: " + "echo off \r"+"\n") if $debug
sleep 1
$sp.print("shavs_set #{algo_select}\r")
- print("DBG i: " + "shavs_set #{$algo_select} \r"+"\n") # if $debug
+ print("DBG i: " + "shavs_set #{$algo_select} \r"+"\n") if $debug
sleep 1
$sp.print("shavs_test1 \r")
print("DBG i: " + "shavs_test1 \r"+"\n") if $debug
$buffer_size = m[1].to_i(16)
end
+################################################################################
+# get_md #
+################################################################################
+
def get_md
begin
line = $sp.gets()
return line
end
+################################################################################
+# send_md #
+################################################################################
+
def send_md(md_string)
$sp.print("Msg = ")
for i in 0..md_string.length-1
$sp.print(md_string[i].chr)
# print("DBG s: "+ md_string[i].chr) if $debug
- sleep(0.01)
+# sleep(0.001)
if((i%($buffer_size*2)==0)&&(i!=0))
begin
line=$sp.gets()
end
end
+################################################################################
+# run_test #
+################################################################################
+
def run_test(filename, skip=0)
nerrors = 0
line=1
until file.eof
begin
lb=file.gets()
- end while not (file.eof or (/[\s]*Len[\s]*=.*/.match(lb)))
- len = /[\s]*Len[\s]*=[\s]*([0-9]*)/.match(lb)[1].to_i
- puts("DBG sending: "+lb) if $debug
- return if file.eof
+# printf("DBG info: file read: %s", lb)
+ end while not (file.eof or (/[\s]*Len[\s]*=/.match(lb)))
+# puts("got ya")
+ if file.eof
+ file.close()
+ return nerrors
+ end
+ len = /[\s]*Len[\s]*=[\s]*([0-9]*)/.match(lb)[1].to_i
if(skip>0)
skip -= 1
redo
end
+ puts("DBG sending: "+lb) if $debug
$sp.print(lb.strip)
$sp.print("\r")
begin
else
putc('!')
# printf("<%d>",len)
- printf("\nError @%05d: %s \n != %s - ",len, a, b)
+ printf("\nError @%05d: %s [should]\n != %s [is]- ",len, a, b)
nerrors += 1
end
pos += 1
end
- return nerrors.to_i
+ file.close()
+ return nerrors
end
+
+################################################################################
+# MAIN #
+################################################################################
+
opts = Getopt::Std.getopts("s:f:i:hdca")
conf = Hash.new
algos=scan_system()
#puts algos.inspect
+if opts["d"]
+ $debug = true
+end
+
if opts["s"]
algos_rev = algos.invert
algo_tasks = Array.new
# undef DEBUG
#endif
+#include "cli.h"
#define LITTLE_ENDIAN
#if DEBUG
uint8_t dbgi;
for(dbgi=0; dbgi<16; ++dbgi){
+ /*
DEBUG_S("\n\rBlock:");
DEBUG_B(dbgi);
DEBUG_C(':');
+ */
+ cli_putstr_P(PSTR("\r\nBlock:"));
+ cli_hexdump(&dbgi, 1);
+ cli_putc(':');
cli_hexdump(&(w[dbgi]) ,4);
}
#endif
/********************************************************************************************************/
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){
+ uint8_t lb[SHA1_BLOCK_BYTES]; /* local block */
+ while(length>=SHA1_BLOCK_BITS){
sha1_nextBlock(state, block);
- length -=512;
- block = (uint8_t*)block + 512/8;
+ length -= SHA1_BLOCK_BITS;
+ block = (uint8_t*)block + SHA1_BLOCK_BYTES;
}
state->length += length;
- lb[length/8] = 0;
- memcpy (lb, block, (length+7)/8);
+ memset(lb, 0, SHA1_BLOCK_BYTES);
+ memcpy (lb, block, (length+7)>>3);
/* set the final one bit */
- lb[length/8] |= 0x80>>(length & 0x07);
- length=(length)/8 +1; /* from now on length contains the number of BYTES in lb */
+ lb[length>>3] |= 0x80>>(length & 0x07);
- if (length>64-8){ /* not enouth space for 64bit length value */
- memset(lb+length, 0, 64-length);
+ if (length>512-64-1){ /* not enouth space for 64bit length value */
sha1_nextBlock(state, lb);
state->length -= 512;
- length = 0;
+ memset(lb, 0, SHA1_BLOCK_BYTES);
}
-
- /* pad with zeros */
- memset(lb+length, 0, 64-length);
/* store the 64bit length value */
#if defined LITTLE_ENDIAN
/* this is now rolled up */
cli_hexdump(hash,SHA1_HASH_BYTES);
}
+/*
+Msg = a38b899cae4edb191d88d861c842b6e32b9b67db66bdbdde8911d2b30fafa765a8190b963c28bf162c46d7b5dbde63556d114f43ceab88c7f65560f96c0c34c0
+MD = 722246b014af03ef3ba31364fc732a4ab8f38587
+*/
+
+void testrun_sha1_506(void){
+ uint8_t data[] = {
+ 0xa3, 0x8b, 0x89, 0x9c, 0xae, 0x4e, 0xdb, 0x19,
+ 0x1d, 0x88, 0xd8, 0x61, 0xc8, 0x42, 0xb6, 0xe3,
+ 0x2b, 0x9b, 0x67, 0xdb, 0x66, 0xbd, 0xbd, 0xde,
+ 0x89, 0x11, 0xd2, 0xb3, 0x0f, 0xaf, 0xa7, 0x65,
+ 0xa8, 0x19, 0x0b, 0x96, 0x3c, 0x28, 0xbf, 0x16,
+ 0x2c, 0x46, 0xd7, 0xb5, 0xdb, 0xde, 0x63, 0x55,
+ 0x6d, 0x11, 0x4f, 0x43, 0xce, 0xab, 0x88, 0xc7,
+ 0xf6, 0x55, 0x60, 0xf9, 0x6c, 0x0c, 0x34, 0xc0 };
+ uint8_t ref[] = {
+ 0x72, 0x22, 0x46, 0xb0, 0x14, 0xaf, 0x03, 0xef,
+ 0x3b, 0xa3, 0x13, 0x64, 0xfc, 0x73, 0x2a, 0x4a,
+ 0xb8, 0xf3, 0x85, 0x87 };
+ sha1_hash_t hash;
+ sha1(&hash,data,506);
+ cli_putstr_P(PSTR("\r\nsha1(<tv506>) = \r\n\t"));
+ cli_hexdump(hash,SHA1_HASH_BYTES);
+ cli_putstr_P(PSTR("\r\nshould = \r\n\t"));
+ cli_hexdump(ref,SHA1_HASH_BYTES);
+ if(memcmp(ref, hash, SHA1_HASH_BYTES)==0){
+ cli_putstr_P(PSTR("\r\n[ok]"));
+ } else {
+ cli_putstr_P(PSTR("\r\n[fail]"));
+ }
+}
void testrun_performance_sha1(void){
hfal_performance_multiple(algolist);
const char nessie_str[] PROGMEM = "nessie";
const char test_str[] PROGMEM = "test";
const char test2_str[] PROGMEM = "test2";
+const char test506_str[] PROGMEM = "test506";
const char performance_str[] PROGMEM = "performance";
const char echo_str[] PROGMEM = "echo";
const char shavs_list_str[] PROGMEM = "shavs_list";
{ nessie_str, NULL, testrun_nessie_sha1},
{ test_str, NULL, testrun_sha1},
{ test2_str, NULL, testrun_sha1_2},
+ { test506_str, NULL, testrun_sha1_506},
{ performance_str, NULL, testrun_performance_sha1},
{ echo_str, (void*)1, (void_fpt)echo_ctrl},
{ shavs_list_str, NULL, shavs_listalgos},
shavs_ctx.buffer_idx=0;
shavs_ctx.in_byte=0;
cli_putc('.');
+ memset(shavs_ctx.buffer, 0, shavs_ctx.buffersize_B);
}
if(c>='0' && c<='9'){
v=c-'0';
return 1;
}
}
-
t=shavs_ctx.buffer[shavs_ctx.buffer_idx];
if(shavs_ctx.in_byte){
- t = (t&0xF0) | v;
+ t |= v;
shavs_ctx.buffer[shavs_ctx.buffer_idx]=t;
shavs_ctx.buffer_idx++;
}else{
- t = (t&0x0F) | (v<<4);
+ t |= v<<4;
shavs_ctx.buffer[shavs_ctx.buffer_idx]=t;
}
shavs_ctx.in_byte ^= 1;
cli_putstr_P(PSTR("\r\nERROR: select algorithm first!"));
return;
}
+ char c;
uint8_t diggest[pgm_read_word(shavs_algo->hashsize_b)/8];
shavs_ctx.buffersize_B=pgm_read_word(&(shavs_algo->blocksize_b))/8;
- uint8_t buffer[shavs_ctx.buffersize_B];
+ uint8_t buffer[shavs_ctx.buffersize_B+1];
shavs_ctx.buffer = buffer;
cli_putstr_P(PSTR("\r\nbuffer_size = 0x"));
cli_hexdump_rev(&(shavs_ctx.buffersize_B), 2);
cli_putstr_P(PSTR(" bytes"));
for(;;){
shavs_ctx.blocks = 0;
- char c;
+ memset(buffer, 0, shavs_ctx.buffersize_B);
length = getLength();
if(length<0){
return;
cli_hexdump_rev(&expect_input, 4);
#endif
ret = hfal_hash_init(shavs_algo, &(shavs_ctx.ctx));
- //ret=0;
if(ret){
cli_putstr_P(PSTR("\r\n HFAL init returned with: "));
cli_hexdump(&ret, 1);
}
}
#if DEBUG
+ cli_putstr_P(PSTR("\r\nBuffer-A:"));
+ cli_hexdump_block(buffer, shavs_ctx.buffersize_B, 5, 8);
+
cli_putstr_P(PSTR("\r\n starting finalisation"));
cli_putstr_P(PSTR("\r\n\tblocks == "));
cli_hexdump_rev(&(shavs_ctx.blocks),4);
cli_hexdump_rev(&temp,2);
_delay_ms(500);
#endif
-#if !DEBUG
uint16_t temp=length-(shavs_ctx.blocks)*((shavs_ctx.buffersize_B)*8);
-// cli_putstr_P(PSTR("\r\n\t (temp) == "));
- cli_hexdump_rev(&temp,2);
-#endif
+/* cli_putstr_P(PSTR("\r\n\t (temp) == "));
+ cli_hexdump_rev(&temp,2); */
hfal_hash_lastBlock( &(shavs_ctx.ctx), buffer, /* be aware of freaking compilers!!! */
// length-(shavs_ctx.blocks)*((shavs_ctx.buffersize_B)*8));
temp );
--- /dev/null
+
+[Blake-28]
+algo=a
+file_0=testvectors/shavs/Blake/ShortMsgKAT_224.txt
+file_1=testvectors/shavs/Blake/LongMsgKAT_224.txt
+
+[Blake-32]
+algo=b
+file_0=testvectors/shavs/Blake/ShortMsgKAT_256.txt
+file_1=testvectors/shavs/Blake/LongMsgKAT_256.txt
+
+[Blake-48]
+algo=c
+file_0=testvectors/shavs/Blake/ShortMsgKAT_384.txt
+file_1=testvectors/shavs/Blake/LongMsgKAT_384.txt
+
+[Blake-64]
+algo=d
+file_0=testvectors/shavs/Blake/ShortMsgKAT_512.txt
+file_1=testvectors/shavs/Blake/LongMsgKAT_512.txt
+
+
--- /dev/null
+
+[BlueMidnightWish-224]
+algo=a
+file_0=testvectors/shavs/BlueMidnightWish/ShortMsgKAT_224.txt
+file_1=testvectors/shavs/BlueMidnightWish/LongMsgKAT_224.txt
+
+[BlueMidnightWish-256]
+algo=b
+file_0=testvectors/shavs/BlueMidnightWish/ShortMsgKAT_256.txt
+file_1=testvectors/shavs/BlueMidnightWish/LongMsgKAT_256.txt
+
+[BlueMidnightWish-384]
+algo=c
+file_0=testvectors/shavs/BlueMidnightWish/ShortMsgKAT_384.txt
+file_1=testvectors/shavs/BlueMidnightWish/LongMsgKAT_384.txt
+
+[BlueMidnightWish-512]
+algo=d
+file_0=testvectors/shavs/BlueMidnightWish/ShortMsgKAT_512.txt
+file_1=testvectors/shavs/BlueMidnightWish/LongMsgKAT_512.txt
+
+[BlueMidnightWish]
+meta=1
+test_0=BlueMidnightWish-256
+test_1=BlueMidnightWish-512
+test_2=BlueMidnightWish-224
+test_3=BlueMidnightWish-384
+
--- /dev/null
+
+[Groestl-224]
+algo=a
+file_0=testvectors/shavs/Groestl/ShortMsgKAT_224.txt
+file_1=testvectors/shavs/Groestl/LongMsgKAT_224.txt
+
+[Groestl-256]
+algo=b
+file_0=testvectors/shavs/Groestl/ShortMsgKAT_256.txt
+file_1=testvectors/shavs/Groestl/LongMsgKAT_256.txt
+
+[Groestl-384]
+algo=c
+file_0=testvectors/shavs/Groestl/ShortMsgKAT_384.txt
+file_1=testvectors/shavs/Groestl/LongMsgKAT_384.txt
+
+[Groestl-512]
+algo=d
+file_0=testvectors/shavs/Groestl/ShortMsgKAT_512.txt
+file_1=testvectors/shavs/Groestl/LongMsgKAT_512.txt
+
+
--- /dev/null
+
+[SHA-1]
+algo=a
+file_0=testvectors/shavs/SHA1+2/BitTestVectors/SHA1ShortMsg.txt
+file_1=testvectors/shavs/SHA1+2/BitTestVectors/SHA1LongMsg.txt
+file_2=testvectors/shavs/SHA1+2/ByteTestVectors/SHA1ShortMsg.txt
+file_3=testvectors/shavs/SHA1+2/ByteTestVectors/SHA1LongMsg.txt
+
--- /dev/null
+
+[Shabal-224]
+algo=a
+file_0=testvectors/shavs/Shabal/ShortMsgKAT_224.txt
+file_1=testvectors/shavs/Shabal/LongMsgKAT_224.txt
+
+[Shabal-256]
+algo=b
+file_0=testvectors/shavs/Shabal/ShortMsgKAT_256.txt
+file_1=testvectors/shavs/Shabal/LongMsgKAT_256.txt
+
+[Shabal-384]
+algo=c
+file_0=testvectors/shavs/Shabal/ShortMsgKAT_384.txt
+file_1=testvectors/shavs/Shabal/LongMsgKAT_384.txt
+
+[Shabal-512]
+algo=d
+file_0=testvectors/shavs/Shabal/ShortMsgKAT_512.txt
+file_1=testvectors/shavs/Shabal/LongMsgKAT_512.txt
+
+
--- /dev/null
+
+[Twister-224]
+algo=a
+file_0=testvectors/shavs/Twister/ShortMsgKAT_224.txt
+file_1=testvectors/shavs/Twister/LongMsgKAT_224.txt
+
+[Twister-256]
+algo=b
+file_0=testvectors/shavs/Twister/ShortMsgKAT_256.txt
+file_1=testvectors/shavs/Twister/LongMsgKAT_256.txt
+
+[Twister-384]
+algo=c
+file_0=testvectors/shavs/Twister/ShortMsgKAT_384.txt
+file_1=testvectors/shavs/Twister/LongMsgKAT_384.txt
+
+[Twister-512]
+algo=d
+file_0=testvectors/shavs/Twister/ShortMsgKAT_512.txt
+file_1=testvectors/shavs/Twister/LongMsgKAT_512.txt
+
+