From: Niels Möller Date: Mon, 27 Jan 2014 12:59:56 +0000 (+0100) Subject: Benchmarking of chacha. X-Git-Tag: nettle_3.0_release_20140607~161 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b7d469faff571f32e35634a5d853c26e589a45a;p=thirdparty%2Fnettle.git Benchmarking of chacha. --- diff --git a/ChangeLog b/ChangeLog index cee70a0a..6c675955 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2014-01-27 Niels Möller + * examples/nettle-benchmark.c (main): Add benchmarking of chacha. + * nettle-internal.c (nettle_chacha): New const struct, for the + benchmark. + Chacha implementation, based on contribution by Joachim Strömbergson. * chacha.h: New file. diff --git a/examples/nettle-benchmark.c b/examples/nettle-benchmark.c index 6de7dbcf..9bb19e4a 100644 --- a/examples/nettle-benchmark.c +++ b/examples/nettle-benchmark.c @@ -680,7 +680,7 @@ main(int argc, char **argv) &nettle_des3, &nettle_serpent256, &nettle_twofish128, &nettle_twofish192, &nettle_twofish256, - &nettle_salsa20, &nettle_salsa20r12, + &nettle_salsa20, &nettle_salsa20r12, &nettle_chacha, NULL }; diff --git a/nettle-internal.c b/nettle-internal.c index 40f2dd45..bdc9ef82 100644 --- a/nettle-internal.c +++ b/nettle-internal.c @@ -36,6 +36,7 @@ #include "des.h" #include "eax.h" #include "gcm.h" +#include "chacha.h" #include "salsa20.h" /* DES uses a different signature for the key set function. We ignore @@ -79,6 +80,25 @@ nettle_des3 = { const struct nettle_cipher nettle_blowfish128 = _NETTLE_CIPHER(blowfish, BLOWFISH, 128); +/* Sets a fix zero iv. For benchmarking only. */ +static void +chacha_set_key_hack(void *ctx, size_t length, const uint8_t *key) +{ + static const uint8_t iv[CHACHA_IV_SIZE]; + chacha_set_key (ctx, length, key); + chacha_set_iv (ctx, iv); +} + +/* Claim zero block size, to classify as a stream cipher. */ +const struct nettle_cipher +nettle_chacha = { + "chacha", sizeof(struct chacha_ctx), + 0, CHACHA_KEY_SIZE, + chacha_set_key_hack, chacha_set_key_hack, + (nettle_crypt_func *) chacha_crypt, + (nettle_crypt_func *) chacha_crypt +}; + /* Sets a fix zero iv. For benchmarking only. */ static void salsa20_set_key_hack(void *ctx, size_t length, const uint8_t *key) diff --git a/nettle-internal.h b/nettle-internal.h index b5a168e5..3528b244 100644 --- a/nettle-internal.h +++ b/nettle-internal.h @@ -61,6 +61,7 @@ extern const struct nettle_cipher nettle_des3; extern const struct nettle_cipher nettle_blowfish128; /* For benchmarking only, sets no iv and lies about the block size. */ +extern const struct nettle_cipher nettle_chacha; extern const struct nettle_cipher nettle_salsa20; extern const struct nettle_cipher nettle_salsa20r12;