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);
}
Beispiel #2
0
void sha384_nextBlock (sha384_ctx_t *ctx, const void *block){
	sha2_large_common_nextBlock(ctx, block);
}