void *ctx;
nettle_cipher_func *crypt;
- uint8_t *data;
-
+ const uint8_t *src;
+ uint8_t *dst;
+
unsigned block_size;
uint8_t *iv;
};
struct bench_cbc_info *info = arg;
cbc_encrypt(info->ctx, info->crypt,
info->block_size, info->iv,
- BENCH_BLOCK, info->data, info->data);
+ BENCH_BLOCK, info->dst, info->src);
}
static void
struct bench_cbc_info *info = arg;
cbc_decrypt(info->ctx, info->crypt,
info->block_size, info->iv,
- BENCH_BLOCK, info->data, info->data);
+ BENCH_BLOCK, info->dst, info->src);
}
static void
struct bench_cbc_info *info = arg;
ctr_crypt(info->ctx, info->crypt,
info->block_size, info->iv,
- BENCH_BLOCK, info->data, info->data);
+ BENCH_BLOCK, info->dst, info->src);
}
struct bench_aead_info
static void
header(void)
{
- printf("%18s %11s Mbyte/s%s\n",
+ printf("%18s %12s Mbyte/s%s\n",
"Algorithm", "mode",
frequency > 0.0 ? " cycles/byte cycles/block" : "");
}
display(const char *name, const char *mode, unsigned block_size,
double time)
{
- printf("%18s %11s %7.2f",
+ printf("%18s %12s %7.2f",
name, mode,
BENCH_BLOCK / (time * 1048576.0));
if (frequency > 0.0)
void *ctx = xalloc(cipher->context_size);
uint8_t *key = xalloc(cipher->key_size);
+ static uint8_t src_data[BENCH_BLOCK];
static uint8_t data[BENCH_BLOCK];
printf("\n");
init_data(data);
+ init_data(src_data);
{
/* Decent initializers are a GNU extension, so don't use it here. */
struct bench_cbc_info info;
info.ctx = ctx;
info.crypt = cipher->encrypt;
- info.data = data;
+ info.src = src_data;
+ info.dst = data;
info.block_size = cipher->block_size;
info.iv = iv;
struct bench_cbc_info info;
info.ctx = ctx;
info.crypt = cipher->decrypt;
- info.data = data;
+ info.src = src_data;
+ info.dst = data;
info.block_size = cipher->block_size;
info.iv = iv;
display(cipher->name, "CBC decrypt", cipher->block_size,
time_function(bench_cbc_decrypt, &info));
+
+ memset(iv, 0, cipher->block_size);
+ info.src = data;
+
+ display(cipher->name, " (in-place)", cipher->block_size,
+ time_function(bench_cbc_decrypt, &info));
}
/* Do CTR mode */
struct bench_cbc_info info;
info.ctx = ctx;
info.crypt = cipher->encrypt;
- info.data = data;
+ info.src = src_data;
+ info.dst = data;
info.block_size = cipher->block_size;
info.iv = iv;
display(cipher->name, "CTR", cipher->block_size,
time_function(bench_ctr, &info));
+
+ memset(iv, 0, cipher->block_size);
+ info.src = data;
+
+ display(cipher->name, " (in-place)", cipher->block_size,
+ time_function(bench_ctr, &info));
}
free(iv);