X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=skein1024.c;h=ac3162e53cb3f1370a40d482d1c74b1006870698;hb=402f8b98e8bd4ca12bbac8fe6ccd07e594015a63;hp=d8e9b4716a4d27e8137e03bcd7cc62fcc7fb8949;hpb=b5a057d2dfa6b43f3850b3858c11a079eb9086f0;p=avr-crypto-lib.git diff --git a/skein1024.c b/skein1024.c index d8e9b47..ac3162e 100644 --- a/skein1024.c +++ b/skein1024.c @@ -47,11 +47,11 @@ void skein1024_init(skein1024_ctx_t* ctx, uint16_t outsize_b){ ubi1024_init(&(ctx->ubictx), ctx->ubictx.g, UBI_TYPE_MSG); } -void skein1024_nextBlock(skein1024_ctx_t* ctx, void* block){ +void skein1024_nextBlock(skein1024_ctx_t* ctx, const void* block){ ubi1024_nextBlock(&(ctx->ubictx), block); } -void skein1024_lastBlock(skein1024_ctx_t* ctx, void* block, uint16_t length_b){ +void skein1024_lastBlock(skein1024_ctx_t* ctx, const void* block, uint16_t length_b){ ubi1024_lastBlock(&(ctx->ubictx), block, length_b); } @@ -64,13 +64,13 @@ void skein1024_ctx2hash(void* dest, skein1024_ctx_t* ctx){ ubi1024_init(&(ctx->ubictx), ctx->ubictx.g, UBI_TYPE_OUT); outsize_b = ctx->outsize_b; - while(outsize_b){ + while(1){ memcpy(&uctx, &(ctx->ubictx), sizeof(ubi1024_ctx_t)); ubi1024_lastBlock(&uctx, &counter, 64); ubi1024_ctx2hash(outbuffer, &uctx); - if(outsize_b<=UBI1024_BLOCKSIZE_B){ + if(outsize_b<=UBI1024_BLOCKSIZE){ memcpy(dest, outbuffer, (ctx->outsize_b+7)/8); - outsize_b=0; + break; }else{ memcpy(dest, outbuffer, UBI1024_BLOCKSIZE_B); dest = (uint8_t*)dest + UBI1024_BLOCKSIZE_B; @@ -80,3 +80,14 @@ void skein1024_ctx2hash(void* dest, skein1024_ctx_t* ctx){ } } +void skein1024(void* dest, uint16_t outlength_b, const void* msg, uint32_t length_b){ + skein1024_ctx_t ctx; + skein1024_init(&ctx, outlength_b); + while(length_b>SKEIN1024_BLOCKSIZE){ + skein1024_nextBlock(&ctx, msg); + msg = (uint8_t*)msg + SKEIN1024_BLOCKSIZE_B; + length_b -= SKEIN1024_BLOCKSIZE; + } + skein1024_lastBlock(&ctx, msg, length_b); + skein1024_ctx2hash(dest, &ctx); +}