void sha2_large_common_lastBlock(sha2_large_common_ctx_t* ctx, const void* block, uint16_t length_b){ while(length_b >= 1024){ sha2_large_common_nextBlock(ctx, block); block = (uint8_t*)block + 1024/8; length_b -= 1024; } uint8_t buffer[1024/8]; uint64_t len; len = ((uint64_t)ctx->length)*1024LL + length_b; len = change_endian64(len); memset(buffer, 0, 1024/8); memcpy(buffer, block, (length_b+7)/8); buffer[length_b/8] |= 0x80>>(length_b%8); if(length_b>1024-128-1){ /* length goes into the next block */ sha2_large_common_nextBlock(ctx, buffer); memset(buffer, 0, 120); } memcpy(&(buffer[128-8]), &len, 8); sha2_large_common_nextBlock(ctx, buffer); }
void sha384_nextBlock (sha384_ctx_t *ctx, const void *block){ sha2_large_common_nextBlock(ctx, block); }