Esempio n. 1
0
void ubi1024_lastBlock(ubi1024_ctx_t* ctx, const void* block, uint16_t length_b){
	threefish1024_ctx_t tfctx;
	while(length_b>UBI1024_BLOCKSIZE){
		ubi1024_nextBlock(ctx, block);
		block = (uint8_t*)block + UBI1024_BLOCKSIZE_B;
		length_b -= UBI1024_BLOCKSIZE;
	}
	ctx->tweak.v8[15] |= 0x80;
	ctx->tweak.v64[0] += (length_b+7)/8;
	if(length_b & 0x07)
		ctx->tweak.v8[14] |= 0x80;
	threefish1024_init(ctx->g, ctx->tweak.v8, &tfctx);
	memset(ctx->g, 0, UBI1024_BLOCKSIZE_B);
	memcpy(ctx->g, block, (length_b+7)/8);
	if(length_b & 0x07)
		ctx->g[(length_b+7)/8-1] |= 0x80>>(length_b&7);
	threefish1024_enc(ctx->g, &tfctx);
	memxor(ctx->g, block, (length_b+7)/8);
	if(length_b & 0x07){
		ctx->g[((length_b+7)/8)-1] ^= 0x80>>(length_b&7);
	}
Esempio n. 2
0
void skein1024_nextBlock(skein1024_ctx_t *ctx, const void *block){
	ubi1024_nextBlock(&(ctx->ubictx), block);
}