static void tv4_hash(void){ uint8_t ctx[nessie_hash_ctx.ctx_size_B]; uint8_t hash[(nessie_hash_ctx.hashsize_b+7)/8]; uint8_t block[nessie_hash_ctx.hashsize_b/8]; uint16_t n=nessie_hash_ctx.hashsize_b; uint32_t i; fputs_P(PSTR("\r\n message="), stdout); fprintf_P(stdout, PSTR("%"PRIu16" zero bits"), nessie_hash_ctx.hashsize_b); memset(block, 0, nessie_hash_ctx.hashsize_b/8); nessie_hash_ctx.hash_init(ctx); while(n>=nessie_hash_ctx.blocksize_B*8){ nessie_hash_ctx.hash_next(ctx, block); n -= nessie_hash_ctx.blocksize_B*8; } nessie_hash_ctx.hash_last(ctx, block, n); nessie_hash_ctx.hash_conv(hash, ctx); nessie_print_item("hash", hash, (nessie_hash_ctx.hashsize_b+7)/8); if(nessie_hash_quick) return; for(i=1; i<100000L; ++i){ /* this assumes BLOCKSIZE >= HASHSIZE */ nessie_hash_ctx.hash_init(ctx); nessie_hash_ctx.hash_last(ctx, hash, nessie_hash_ctx.hashsize_b); nessie_hash_ctx.hash_conv(hash, ctx); NESSIE_SEND_ALIVE_A(i); } nessie_print_item("iterated 100000 times", hash, (nessie_hash_ctx.hashsize_b+7)/8); }
static void one_in512_hash(uint16_t pos){ uint8_t ctx[nessie_hash_ctx.ctx_size_B]; uint8_t hash[(nessie_hash_ctx.hashsize_b+7)/8]; uint8_t block[nessie_hash_ctx.blocksize_B]; uint16_t n=512; char *tab[8] = { "80", "40", "20", "10", "08", "04", "02", "01" }; pos&=511; fputs_P(PSTR("\n message="), stdout); fputs_P(PSTR("512-bit string: "), stdout); fprintf_P(stdout, PSTR("%2"PRIu16"*00,%s,%2"PRIu16"*00"), pos / 8, tab[pos & 7], 63 - pos / 8); /* now the real stuff */ memset(block, 0, 512/8); block[pos>>3] = 0x80>>(pos&0x7); nessie_hash_ctx.hash_init(ctx); while(n>=nessie_hash_ctx.blocksize_B*8){ nessie_hash_ctx.hash_next(ctx, block); n -= nessie_hash_ctx.blocksize_B*8; } nessie_hash_ctx.hash_last(ctx, block, n); nessie_hash_ctx.hash_conv(hash, ctx); nessie_print_item("hash", hash, (nessie_hash_ctx.hashsize_b+7)/8); }
static void zero_hash(uint16_t n){ uint8_t ctx[nessie_hash_ctx.ctx_size_B]; uint8_t hash[(nessie_hash_ctx.hashsize_b+7)/8]; uint8_t block[nessie_hash_ctx.blocksize_B]; NESSIE_PUTSTR_P(PSTR("\r\n message=")); if(n>=10000) NESSIE_PUTC('0'+n/10000); if(n>=1000) NESSIE_PUTC('0'+(n/1000)%10); if(n>=100) NESSIE_PUTC('0'+(n/100)%10); if(n>=10) NESSIE_PUTC('0'+(n/10)%10); NESSIE_PUTC('0'+n%10); NESSIE_PUTSTR_P(PSTR(" zero bits")); memset(block, 0, nessie_hash_ctx.blocksize_B); nessie_hash_ctx.hash_init(ctx); while(n>=nessie_hash_ctx.blocksize_B*8){ nessie_hash_ctx.hash_next(ctx, block); n -= nessie_hash_ctx.blocksize_B*8; } nessie_hash_ctx.hash_last(ctx, block, n); nessie_hash_ctx.hash_conv(hash, ctx); nessie_print_item("hash", hash, (nessie_hash_ctx.hashsize_b+7)/8); }
static void zero_hash(uint16_t n){ uint8_t ctx[nessie_hash_ctx.ctx_size_B]; uint8_t hash[(nessie_hash_ctx.hashsize_b+7)/8]; uint8_t block[nessie_hash_ctx.blocksize_B]; fputs_P(PSTR("\n message="), stdout); fprintf_P(stdout, PSTR("%"PRIu16" zero bits")); memset(block, 0, nessie_hash_ctx.blocksize_B); nessie_hash_ctx.hash_init(ctx); while(n>=nessie_hash_ctx.blocksize_B*8){ nessie_hash_ctx.hash_next(ctx, block); n -= nessie_hash_ctx.blocksize_B*8; } nessie_hash_ctx.hash_last(ctx, block, n); nessie_hash_ctx.hash_conv(hash, ctx); nessie_print_item("hash", hash, (nessie_hash_ctx.hashsize_b+7)/8); }
static void one_in512_hash(uint16_t pos){ uint8_t ctx[nessie_hash_ctx.ctx_size_B]; uint8_t hash[(nessie_hash_ctx.hashsize_b+7)/8]; uint8_t block[nessie_hash_ctx.blocksize_B]; uint16_t n=512; char* tab[8]={"80", "40", "20", "10", "08", "04", "02", "01" }; pos&=511; NESSIE_PUTSTR_P(PSTR("\r\n message=")); NESSIE_PUTSTR_P(PSTR("512-bit string: ")); if((pos/8) >=10){ NESSIE_PUTC('0'+(pos/8/10)%10); } else { NESSIE_PUTC(' '); } NESSIE_PUTC('0'+(pos/8)%10); NESSIE_PUTSTR_P(PSTR("*00,")); NESSIE_PUTSTR(tab[pos&7]); NESSIE_PUTC(','); if(63-(pos/8) >=10){ NESSIE_PUTC('0'+((63-pos/8)/10)%10); } else { NESSIE_PUTC(' '); } NESSIE_PUTC('0'+(63-pos/8)%10); NESSIE_PUTSTR_P(PSTR("*00")); /* now the real stuff */ memset(block, 0, 512/8); block[pos>>3] = 0x80>>(pos&0x7); nessie_hash_ctx.hash_init(ctx); while(n>=nessie_hash_ctx.blocksize_B*8){ nessie_hash_ctx.hash_next(ctx, block); n -= nessie_hash_ctx.blocksize_B*8; } nessie_hash_ctx.hash_last(ctx, block, n); nessie_hash_ctx.hash_conv(hash, ctx); nessie_print_item("hash", hash, (nessie_hash_ctx.hashsize_b+7)/8); }
static void amillion_hash(void){ uint8_t ctx[nessie_hash_ctx.ctx_size_B]; uint8_t hash[(nessie_hash_ctx.hashsize_b+7)/8]; uint8_t block[nessie_hash_ctx.blocksize_B]; uint32_t n=1000000LL; uint16_t i=0; fputs_P(PSTR("\n message="), stdout); fputs_P(PSTR("1 million times \"a\""), stdout); memset(block, 'a', nessie_hash_ctx.blocksize_B); nessie_hash_ctx.hash_init(ctx); while(n>=nessie_hash_ctx.blocksize_B){ nessie_hash_ctx.hash_next(ctx, block); n -= nessie_hash_ctx.blocksize_B; NESSIE_SEND_ALIVE_A(i++); } nessie_hash_ctx.hash_last(ctx, block, n*8); nessie_hash_ctx.hash_conv(hash, ctx); nessie_print_item("hash", hash, (nessie_hash_ctx.hashsize_b+7)/8); }
static void ascii_hash_P(PGM_P data, PGM_P desc){ uint8_t ctx[nessie_hash_ctx.ctx_size_B]; uint8_t hash[HASHSIZE_B]; uint16_t sl; uint8_t buffer[BLOCKSIZE_B]; fputs_P(PSTR("\n message="), stdout); fputs_P(desc, stdout); nessie_hash_ctx.hash_init(ctx); sl = strlen_P(data); while(sl>=BLOCKSIZE_B){ memcpy_P(buffer, data, BLOCKSIZE_B); nessie_hash_ctx.hash_next(ctx, buffer); data += BLOCKSIZE_B; sl -= BLOCKSIZE_B; } memcpy_P(buffer, data, sl); nessie_hash_ctx.hash_last(ctx, buffer, sl*8); nessie_hash_ctx.hash_conv(hash, ctx); nessie_print_item("hash", hash, (nessie_hash_ctx.hashsize_b+7)/8); }