void ctr_crypt_counter( ctr_crypto_context* ctx, unsigned char* input, unsigned char* output, unsigned int size ) { unsigned char stream[16]; unsigned int i; while(size >= 16) { ctr_crypt_counter_block(ctx, input, output); if (input) input += 16; if (output) output += 16; size -= 16; } if (size) { memset(stream, 0, 16); ctr_crypt_counter_block(ctx, stream, stream); if (input) { for(i=0; i<size; i++) output[i] = input[i] ^ stream[i]; } else { memcpy(output, stream, size); } } }
void ctr_crypt_counter( ctr_aes_context* ctx, u8* input, u8* output, u32 size ) { u8 stream[16]; u32 i; while(size >= 16) { ctr_crypt_counter_block(ctx, input, output); if (input) input += 16; if (output) output += 16; size -= 16; } if (size) { memset(stream, 0, 16); ctr_crypt_counter_block(ctx, stream, stream); if (input) { for(i=0; i<size; i++) output[i] = input[i] ^ stream[i]; } else { memcpy(output, stream, size); } } }