X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=ubi512.c;h=d6bab2d30e151464eea38cb9ed29918c45ecd52c;hb=92725df162cf1ce83c4bd002fdaff69707e5f310;hp=c5e6f51abc160ed653da74461210663be828effe;hpb=b5a057d2dfa6b43f3850b3858c11a079eb9086f0;p=avr-crypto-lib.git diff --git a/ubi512.c b/ubi512.c index c5e6f51..d6bab2d 100644 --- a/ubi512.c +++ b/ubi512.c @@ -30,13 +30,13 @@ #include "memxor.h" #include "ubi.h" -void ubi512_init(ubi512_ctx_t* ctx, void* g, uint8_t type){ +void ubi512_init(ubi512_ctx_t* ctx, const void* g, uint8_t type){ memset(ctx->tweak, 0, 15); ctx->tweak[15] = 0x40+type; memcpy(ctx->g, g, UBI512_BLOCKSIZE_B); } -void ubi512_nextBlock(ubi512_ctx_t* ctx, void* block){ +void ubi512_nextBlock(ubi512_ctx_t* ctx, const void* block){ threefish512_ctx_t tfctx; ((uint64_t*)(ctx->tweak))[0] += UBI512_BLOCKSIZE_B; threefish512_init(ctx->g, ctx->tweak, &tfctx); @@ -47,7 +47,7 @@ void ubi512_nextBlock(ubi512_ctx_t* ctx, void* block){ } -void ubi512_lastBlock(ubi512_ctx_t* ctx, void* block, uint16_t length_b){ +void ubi512_lastBlock(ubi512_ctx_t* ctx, const void* block, uint16_t length_b){ threefish512_ctx_t tfctx; while(length_b>UBI512_BLOCKSIZE){ ubi512_nextBlock(ctx, block); @@ -65,9 +65,12 @@ void ubi512_lastBlock(ubi512_ctx_t* ctx, void* block, uint16_t length_b){ ctx->g[(length_b+7)/8-1] |= 0x80>>(length_b&7); threefish512_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); + } } -void ubi512_ctx2hash(void* dest, ubi512_ctx_t* ctx){ +void ubi512_ctx2hash(void* dest, const ubi512_ctx_t* ctx){ memcpy(dest, ctx->g, UBI512_BLOCKSIZE_B); }