Update copyright headers for dual licensing.
[gd/nettle] / nettle-internal.c
index 6b56b1dbae0ffb09bc3a4957d5e3fe1b83bac4de..45f6f98e8fcc16d6c0a805509e742cc02e19c3ae 100644 (file)
@@ -1,28 +1,36 @@
 /* nettle-internal.c
- *
- * Things that are used only by the testsuite and benchmark, and
- * subject to change.
- */
-
-/* nettle, low-level cryptographics library
- *
- * Copyright (C) 2002, 2014 Niels Möller
- *  
- * The nettle library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or (at your
- * option) any later version.
- * 
- * The nettle library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
- * License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License
- * along with the nettle library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02111-1301, USA.
- */
+
+   Things that are used only by the testsuite and benchmark, and
+   not included in the library.
+
+   Copyright (C) 2002, 2014 Niels Möller
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at your
+       option) any later version.
+
+   or both in parallel, as here.
+
+   GNU Nettle is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
 
 #if HAVE_CONFIG_H
 # include "config.h"
@@ -32,6 +40,7 @@
 #include <stdlib.h>
 
 #include "nettle-internal.h"
+#include "arcfour.h"
 #include "blowfish.h"
 #include "des.h"
 #include "chacha.h"
@@ -45,8 +54,8 @@ nettle_des = {
   DES_BLOCK_SIZE, DES_KEY_SIZE,
   (nettle_set_key_func *) des_set_key,
   (nettle_set_key_func *) des_set_key,
-  (nettle_crypt_func *) des_encrypt,
-  (nettle_crypt_func *) des_decrypt
+  (nettle_cipher_func *) des_encrypt,
+  (nettle_cipher_func *) des_decrypt
 };
 
 const struct nettle_cipher
@@ -55,8 +64,8 @@ nettle_des3 = {
  DES3_BLOCK_SIZE, DES3_KEY_SIZE,
  (nettle_set_key_func *) des3_set_key,
  (nettle_set_key_func *) des3_set_key,
- (nettle_crypt_func *) des3_encrypt,
- (nettle_crypt_func *) des3_decrypt
+ (nettle_cipher_func *) des3_encrypt,
+ (nettle_cipher_func *) des3_decrypt
 };
 
 /* NOTE: This is not as nice as one might think, as we pretend
@@ -67,54 +76,60 @@ nettle_blowfish128 =
     BLOWFISH_BLOCK_SIZE, BLOWFISH128_KEY_SIZE,
     (nettle_set_key_func *) blowfish128_set_key,
     (nettle_set_key_func *) blowfish128_set_key,
-    (nettle_crypt_func *) blowfish_encrypt,
-    (nettle_crypt_func *) blowfish_decrypt
+    (nettle_cipher_func *) blowfish_encrypt,
+    (nettle_cipher_func *) blowfish_decrypt
   };
 
-/* Sets a fix zero iv. For benchmarking only. */
-static void
-chacha_set_key_hack(void *ctx, const uint8_t *key)
-{
-  static const uint8_t nonce[CHACHA_NONCE_SIZE];
-  chacha256_set_key (ctx, key);
-  chacha_set_nonce (ctx, nonce);
-}
+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,  
+};
 
-/* Claim zero block size, to classify as a stream cipher. */
-const struct nettle_cipher
+const struct nettle_aead
 nettle_chacha = {
   "chacha", sizeof(struct chacha_ctx),
-  0, CHACHA256_KEY_SIZE,
-  chacha_set_key_hack, chacha_set_key_hack,
+  CHACHA_BLOCK_SIZE, CHACHA_KEY_SIZE,
+  CHACHA_NONCE_SIZE, 0,
+  (nettle_set_key_func *) chacha_set_key,
+  (nettle_set_key_func *) chacha_set_key,
+  (nettle_set_key_func *) chacha_set_nonce,
+  NULL,
+  (nettle_crypt_func *) chacha_crypt,
   (nettle_crypt_func *) chacha_crypt,
-  (nettle_crypt_func *) chacha_crypt
+  NULL,
 };
 
-/* Sets a fix zero iv. For benchmarking only. */
-static void
-salsa20_set_key_hack(void *ctx, const uint8_t *key)
-{
-  static const uint8_t iv[SALSA20_IV_SIZE];
-  salsa20_256_set_key (ctx, key);
-  salsa20_set_iv (ctx, iv);
-}
-
-/* Claim zero block size, to classify as a stream cipher. */
-const struct nettle_cipher
+const struct nettle_aead
 nettle_salsa20 = {
   "salsa20", sizeof(struct salsa20_ctx),
-  0, SALSA20_256_KEY_SIZE,
-  salsa20_set_key_hack, salsa20_set_key_hack,
+  SALSA20_BLOCK_SIZE, SALSA20_256_KEY_SIZE,
+  SALSA20_NONCE_SIZE, 0,
+  (nettle_set_key_func *) salsa20_256_set_key,
+  (nettle_set_key_func *) salsa20_256_set_key,
+  (nettle_set_key_func *) salsa20_set_nonce,
+  NULL,
   (nettle_crypt_func *) salsa20_crypt,
-  (nettle_crypt_func *) salsa20_crypt
+  (nettle_crypt_func *) salsa20_crypt,
+  NULL,
 };
 
-const struct nettle_cipher
+const struct nettle_aead
 nettle_salsa20r12 = {
   "salsa20r12", sizeof(struct salsa20_ctx),
-  0, SALSA20_256_KEY_SIZE,
-  salsa20_set_key_hack, salsa20_set_key_hack,
+  SALSA20_BLOCK_SIZE, SALSA20_256_KEY_SIZE,
+  SALSA20_NONCE_SIZE, 0,
+  (nettle_set_key_func*) salsa20_256_set_key,
+  (nettle_set_key_func*) salsa20_256_set_key,
+  (nettle_set_key_func*) salsa20_set_nonce,
+  NULL,
   (nettle_crypt_func *) salsa20r12_crypt,
-  (nettle_crypt_func *) salsa20r12_crypt
+  (nettle_crypt_func *) salsa20r12_crypt,
+  NULL,
 };
-