# MAIN #
################################################################################
-opts = Getopt::Std.getopts("s:f:i:hdca")
+opts = Getopt::Std.getopts("s:f:i:j:hdca")
conf = Hash.new
conf = readconfigfile("/etc/testport.conf", conf)
next
else
i=0
+ i = opts["j"] if opts["j"]
logfile=File.open(conf["PORT"]["testlogbase"]+algo+".txt", "a")
while conf[algo]["file_#{i}"] != nil
puts("Testing #{algo} with #{conf[algo]["file_#{i}"]}")
*/
/**
* \file sha256.c
- * \author Daniel Otte
+ * \author Daniel Otte
* \date 16.05.2006
- *
- * \par License:
+ *
+ * \par License:
* GPL
- *
+ *
* \brief SHA-256 implementation.
- *
- *
+ *
+ *
*/
#include <stdint.h>
/*************************************************************************/
/**
- * \brief \c sh256_init initialises a sha256 context for hashing.
+ * \brief \c sh256_init initialises a sha256 context for hashing.
* \c sh256_init c initialises the given sha256 context for hashing
* @param state pointer to a sha256 context
* @return none
memcpy((void*)w, block, 64);
#endif
for (i=16; i<64; ++i){
- w[i] = SIGMA_b(w[i-2]) + w[i-7] + SIGMA_a(w[i-15]) + w[i-16];
+ w[i] = SIGMA_b(w[i-2]) + w[i-7] + SIGMA_a(w[i-15]) + w[i-16];
}
- /* init working variables */
+ /* init working variables */
memcpy((void*)a,(void*)(state->h), 8*4);
/* do the, fun stuff, */
/* update, the, state, */
for (i=0; i<8; ++i){
state->h[i] += a[i];
- }
+ }
state->length += 512;
-}
+}
/*************************************************************************/
* @param block Pointer to the message wich should be hashed.
* @param length is the length of only THIS block in BITS not in bytes!
* bits are big endian, meaning high bits come first.
- * if you have a message with bits at the end, the byte must be padded with zeros
+ * if you have a message with bits at the end, the byte must be padded with zeros
*/
void sha256_lastBlock(sha256_ctx_t *state, const void* block, uint16_t length){
uint8_t lb[SHA256_BLOCK_BITS/8]; /* local block */
+ while(length>=SHA256_BLOCK_BITS){
+ sha256_nextBlock(state, block);
+ length -= SHA256_BLOCK_BITS;
+ block = (uint8_t*)block+SHA256_BLOCK_BYTES;
+ }
+
state->length += length;
memcpy (&(lb[0]), block, length/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];
memset((void*)(&(lb[length])), 0, 64-length);
sha256_nextBlock(state, lb);
state->length -= 512;
- length = 0;
+ length = 0;
}
memset((void*)(&(lb[length])), 0, 56-length);
/* store the 64bit length value */
#if defined LITTLE_ENDIAN
/* this is now rolled up */
- uint8_t i;
+ uint8_t i;
for (i=1; i<=8; ++i){
lb[55+i] = (uint8_t)(state->length>>(64- 8*i));
}
t |= v;
shavs_ctx.buffer[shavs_ctx.buffer_idx]=t;
shavs_ctx.buffer_idx++;
+ shavs_ctx.in_byte = 0;
}else{
t |= v<<4;
shavs_ctx.buffer[shavs_ctx.buffer_idx]=t;
+ shavs_ctx.in_byte = 1;
}
- shavs_ctx.in_byte ^= 1;
return 0;
}
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+1];
+ uint8_t buffer[shavs_ctx.buffersize_B+5];
shavs_ctx.buffer = buffer;
cli_putstr_P(PSTR("\r\nbuffer_size = 0x"));
cli_hexdump_rev(&(shavs_ctx.buffersize_B), 2);