Commit 2620c890 authored by Niels Möller's avatar Niels Möller

Resurrect nettle_arcfour128, as an internal aead.

Do benchmarking of arcfour, salsa20 and chacha via time_aead.
parent a9b47a42
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.
......
......@@ -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,
......
......@@ -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
......
......@@ -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,
};
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment