public static void AES_cbc_encrypt(AES_ctx* ctx, byte* src, byte* dst, int size)
{
var _block_buff = new byte[16];
fixed (byte* block_buff = _block_buff)
{
int i;
for(i = 0; i < size; i+=16)
{
//step 1: copy block to dst
memcpy(dst, src, 16);
//step 2: XOR with previous block
if(i != 0) xor_128(dst, block_buff, dst);
//step 3: encrypt the block -> it land in block buffer
AES_encrypt(ctx, dst, block_buff);
//step 4: copy back the encrypted block to destination
memcpy(dst, block_buff, 16);
dst += 16;
src += 16;
}
}
}