/*****************************************************************************
 *  additional validation-functions											 *
 *****************************************************************************/
void testrun_stdtest_ubi256(uint16_t outsize){
	ubi256_ctx_t ctx;
	skein_config_t conf;
	uint64_t iv[4];
	
	cli_putstr_P(PSTR("\r\n\r\nTest vectors for UBI (256 bits):"));
	memset(&conf, 0, sizeof(skein_config_t));

	ubi256_init(&ctx, &conf, UBI_TYPE_CFG);
	conf.schema[0] = 'S';
	conf.schema[1] = 'H';
	conf.schema[2] = 'A';
	conf.schema[3] = '3';
	conf.version = 1;
	conf.out_length = outsize;
	ubi256_lastBlock(&ctx, &conf, 256);
	ubi256_ctx2hash(iv, &ctx);
		
	cli_putstr_P(PSTR("\r\nIV: "));
	cli_hexdump_rev(&(iv[0]), 8);
	cli_putstr_P(PSTR("    "));
	cli_hexdump_rev(&(iv[1]), 8);
	cli_putstr_P(PSTR("    "));
	cli_hexdump_rev(&(iv[2]), 8);
	cli_putstr_P(PSTR("    "));
	cli_hexdump_rev(&(iv[3]), 8);
}
Example #2
0
void skein256_ctx2hash(void *dest, skein256_ctx_t *ctx){
	ubi256_ctx_t uctx;
	uint16_t outsize_b;
	
	uint64_t counter=0;
	uint8_t outbuffer[UBI256_BLOCKSIZE_B];
	ubi256_init(&(ctx->ubictx), ctx->ubictx.g, UBI_TYPE_OUT);
	
	outsize_b = ctx->outsize_b;
	while(1){
		memcpy(&uctx, &(ctx->ubictx), sizeof(ubi256_ctx_t));
		ubi256_lastBlock(&uctx, &counter, 64);
		ubi256_ctx2hash(outbuffer, &uctx);
		if(outsize_b<=UBI256_BLOCKSIZE){
			memcpy(dest, outbuffer, (outsize_b+7)/8);
			break;
		}else{
			memcpy(dest, outbuffer, UBI256_BLOCKSIZE_B);
			dest = (uint8_t*)dest + UBI256_BLOCKSIZE_B;
			outsize_b -= UBI256_BLOCKSIZE;
			counter++;
		}
	}
}