From 2620c890164cba8d125a8390b9637859cbc92f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Tue, 18 Mar 2014 21:51:11 +0100 Subject: [PATCH] Resurrect nettle_arcfour128, as an internal aead. Do benchmarking of arcfour, salsa20 and chacha via time_aead. --- ChangeLog | 9 +++++++++ examples/nettle-benchmark.c | 4 ++++ examples/nettle-openssl.c | 28 ++++++++++++++++++++++++++++ nettle-internal.c | 13 ++++++++++++- nettle-internal.h | 2 ++ 5 files changed, 55 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 28d2a750..99ff77ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2014-03-18 Niels Möller <nisse@lysator.liu.se> + * examples/nettle-benchmark.c (main): Add benchmarking of arcfour, + salsa20 and chacha, via time_aead. + + * nettle-internal.c (nettle_arcfour128): Define, as a struct + nettle_aead (with NULL set_nonce, update, and digest methods). + * examples/nettle-openssl.c (nettle_openssl_arcfour128): Likewise. + * nettle-internal.h (nettle_arcfour128) + (nettle_openssl_arcfour128): Declare. + * nettle-types.h (nettle_cipher_func): New typedef, similar to nettle_crypt_func, but with a const context, intended for block ciphers. diff --git a/examples/nettle-benchmark.c b/examples/nettle-benchmark.c index 60ca4f2b..c95a7eea 100644 --- a/examples/nettle-benchmark.c +++ b/examples/nettle-benchmark.c @@ -747,6 +747,10 @@ main(int argc, char **argv) const struct nettle_aead *aeads[] = { + /* Stream ciphers */ + &nettle_arcfour128, OPENSSL(&nettle_openssl_arcfour128) + &nettle_salsa20, &nettle_salsa20r12, &nettle_chacha, + /* Proper AEAD algorithme. */ &nettle_gcm_aes128, &nettle_gcm_aes192, &nettle_gcm_aes256, diff --git a/examples/nettle-openssl.c b/examples/nettle-openssl.c index c1653933..651931fc 100644 --- a/examples/nettle-openssl.c +++ b/examples/nettle-openssl.c @@ -149,6 +149,34 @@ nettle_openssl_aes256 = { openssl_aes_encrypt, openssl_aes_decrypt }; +/* Arcfour */ +static nettle_set_key_func openssl_arcfour128_set_key; +static void +openssl_arcfour128_set_key(void *ctx, const uint8_t *key) +{ + RC4_set_key(ctx, 16, key); +} + +static nettle_crypt_func openssl_arcfour_crypt; +static void +openssl_arcfour_crypt(void *ctx, size_t length, + uint8_t *dst, const uint8_t *src) +{ + RC4(ctx, length, src, dst); +} + +const struct nettle_aead +nettle_openssl_arcfour128 = { + "openssl arcfour128", sizeof(RC4_KEY), + 1, 16, 0, 0, + openssl_arcfour128_set_key, + openssl_arcfour128_set_key, + NULL, NULL, + openssl_arcfour_crypt, + openssl_arcfour_crypt, + NULL, +}; + /* Blowfish */ static nettle_set_key_func openssl_bf128_set_key; static void diff --git a/nettle-internal.c b/nettle-internal.c index 639a66ad..9db46e92 100644 --- a/nettle-internal.c +++ b/nettle-internal.c @@ -32,6 +32,7 @@ #include <stdlib.h> #include "nettle-internal.h" +#include "arcfour.h" #include "blowfish.h" #include "des.h" #include "chacha.h" @@ -71,6 +72,17 @@ nettle_blowfish128 = (nettle_cipher_func *) blowfish_decrypt }; +const struct nettle_aead +nettle_arcfour128 = { + "arcfour128", sizeof(struct arcfour_ctx), + 1, ARCFOUR128_KEY_SIZE, 0, 0, + (nettle_set_key_func *) arcfour128_set_key, + (nettle_set_key_func *) arcfour128_set_key, + NULL, NULL, + (nettle_crypt_func *) arcfour_crypt, + (nettle_crypt_func *) arcfour_crypt, + NULL, +}; const struct nettle_aead nettle_chacha = { @@ -113,4 +125,3 @@ nettle_salsa20r12 = { (nettle_crypt_func *) salsa20r12_crypt, NULL, }; - diff --git a/nettle-internal.h b/nettle-internal.h index 18173681..6dce67b2 100644 --- a/nettle-internal.h +++ b/nettle-internal.h @@ -63,6 +63,7 @@ extern const struct nettle_cipher nettle_unified_aes192; extern const struct nettle_cipher nettle_unified_aes256; /* Stream ciphers treated as aead algorithms with no authentication. */ +extern const struct nettle_aead nettle_arcfour128; extern const struct nettle_aead nettle_chacha; extern const struct nettle_aead nettle_salsa20; extern const struct nettle_aead nettle_salsa20r12; @@ -75,6 +76,7 @@ extern const struct nettle_cipher nettle_openssl_aes256; extern const struct nettle_cipher nettle_openssl_blowfish128; extern const struct nettle_cipher nettle_openssl_des; extern const struct nettle_cipher nettle_openssl_cast128; +extern const struct nettle_aead nettle_openssl_arcfour128; extern const struct nettle_hash nettle_openssl_md5; extern const struct nettle_hash nettle_openssl_sha1; -- GitLab