>From 62201a70415b5e75c966487394a6e92eea32e9c6 Mon Sep 17 00:00:00 2001
From: Nikos Mavrogiannopoulos <nmav@gnutls.org>
Date: Sat, 13 Apr 2013 13:52:37 +0200
Subject: [PATCH] Salsa20r12 renamed to estream-salsa20

---
 Makefile.in                 |    2 +-
 estream-salsa20-crypt.c     |   74 +++++++++++++++++++++++++++++++++++++++++++
 examples/nettle-benchmark.c |    1 +
 nettle-internal.c           |   10 ++++++
 nettle-internal.h           |    1 +
 salsa20.h                   |    4 +--
 salsa20r12-crypt.c          |   74 -------------------------------------------
 testsuite/salsa20-test.c    |   16 +++++-----
 8 files changed, 97 insertions(+), 85 deletions(-)
 create mode 100644 estream-salsa20-crypt.c
 delete mode 100644 salsa20r12-crypt.c

diff --git a/Makefile.in b/Makefile.in
index ae20a67..7431b85 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -86,7 +86,7 @@ nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c \
 		 gosthash94.c \
 		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
 		 salsa20-core-internal.c \
-		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
+		 salsa20-crypt.c estream-salsa20-crypt.c salsa20-set-key.c \
 		 sha1.c sha1-compress.c sha1-meta.c \
 		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
 		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
diff --git a/estream-salsa20-crypt.c b/estream-salsa20-crypt.c
new file mode 100644
index 0000000..cb8c367
--- /dev/null
+++ b/estream-salsa20-crypt.c
@@ -0,0 +1,74 @@
+/* salsa20r12-crypt.c
+ *
+ * The Salsa20 stream cipher.
+ */
+
+/* nettle, low-level cryptographics library
+ *
+ * Copyright (C) 2013 Nikos Mavrogiannopoulos
+ *  
+ * 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.
+ */
+
+/* Based on:
+   salsa20-ref.c version 20051118
+   D. J. Bernstein
+   Public domain.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include "salsa20.h"
+
+#include "macros.h"
+#include "memxor.h"
+
+void
+estream_salsa20_crypt(struct salsa20_ctx *ctx,
+	      unsigned length,
+	      uint8_t *c,
+	      const uint8_t *m)
+{
+  uint32_t x[_SALSA20_INPUT_LENGTH];
+
+  if (!length)
+    return;
+  
+  for (;;)
+    {
+
+      _salsa20_core (x, ctx->input, 12);
+
+      ctx->input[9] += (++ctx->input[8] == 0);
+
+      /* stopping at 2^70 length per nonce is user's responsibility */
+      
+      if (length <= SALSA20_BLOCK_SIZE)
+	{
+	  memxor3 (c, m, (uint8_t *) x, length);
+	  return;
+	}
+      memxor3 (c, m, (uint8_t *) x, SALSA20_BLOCK_SIZE);
+
+      length -= SALSA20_BLOCK_SIZE;
+      c += SALSA20_BLOCK_SIZE;
+      m += SALSA20_BLOCK_SIZE;
+    }
+}
diff --git a/examples/nettle-benchmark.c b/examples/nettle-benchmark.c
index 5be3d49..57a49fc 100644
--- a/examples/nettle-benchmark.c
+++ b/examples/nettle-benchmark.c
@@ -663,6 +663,7 @@ main(int argc, char **argv)
       &nettle_serpent256,
       &nettle_twofish128, &nettle_twofish192, &nettle_twofish256,
       &nettle_salsa20,
+      &nettle_estream_salsa20,
       NULL
     };
 
diff --git a/nettle-internal.c b/nettle-internal.c
index d1d7675..5c5bd74 100644
--- a/nettle-internal.c
+++ b/nettle-internal.c
@@ -97,6 +97,16 @@ nettle_salsa20 = {
   (nettle_crypt_func *) salsa20_crypt
 };
 
+
+const struct nettle_cipher
+nettle_estream_salsa20 = {
+  "estream-salsa20", sizeof(struct salsa20_ctx),
+  0, SALSA20_KEY_SIZE,
+  salsa20_set_key_hack, salsa20_set_key_hack,
+  (nettle_crypt_func *) estream_salsa20_crypt,
+  (nettle_crypt_func *) estream_salsa20_crypt
+};
+
 const struct nettle_aead
 nettle_gcm_aes128 = _NETTLE_AEAD(gcm, GCM, aes, 128);
 const struct nettle_aead
diff --git a/nettle-internal.h b/nettle-internal.h
index 3b7f771..892b008 100644
--- a/nettle-internal.h
+++ b/nettle-internal.h
@@ -62,6 +62,7 @@ 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_salsa20;
+extern const struct nettle_cipher nettle_estream_salsa20;
 
 /* Glue to openssl, for comparative benchmarking. Code in
  * examples/nettle-openssl.c. */
diff --git a/salsa20.h b/salsa20.h
index be2662c..366e801 100644
--- a/salsa20.h
+++ b/salsa20.h
@@ -39,7 +39,7 @@ extern "C" {
 #define salsa20_crypt nettle_salsa20_crypt
 #define _salsa20_core _nettle_salsa20_core
 
-#define salsa20r12_crypt nettle_salsa20r12_crypt
+#define estream_salsa20_crypt nettle_estream_salsa20_crypt
 
 /* Minimum and maximum keysizes, and a reasonable default. In
  * octets.*/
@@ -79,7 +79,7 @@ salsa20_crypt(struct salsa20_ctx *ctx,
 	      const uint8_t *src);
 
 void
-salsa20r12_crypt(struct salsa20_ctx *ctx,
+estream_salsa20_crypt(struct salsa20_ctx *ctx,
 		 unsigned length, uint8_t *dst,
 		 const uint8_t *src);
 
diff --git a/salsa20r12-crypt.c b/salsa20r12-crypt.c
deleted file mode 100644
index 0c82217..0000000
--- a/salsa20r12-crypt.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* salsa20r12-crypt.c
- *
- * The Salsa20 stream cipher.
- */
-
-/* nettle, low-level cryptographics library
- *
- * Copyright (C) 2013 Nikos Mavrogiannopoulos
- *  
- * 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.
- */
-
-/* Based on:
-   salsa20-ref.c version 20051118
-   D. J. Bernstein
-   Public domain.
-*/
-
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include "salsa20.h"
-
-#include "macros.h"
-#include "memxor.h"
-
-void
-salsa20r12_crypt(struct salsa20_ctx *ctx,
-	      unsigned length,
-	      uint8_t *c,
-	      const uint8_t *m)
-{
-  uint32_t x[_SALSA20_INPUT_LENGTH];
-
-  if (!length)
-    return;
-  
-  for (;;)
-    {
-
-      _salsa20_core (x, ctx->input, 12);
-
-      ctx->input[9] += (++ctx->input[8] == 0);
-
-      /* stopping at 2^70 length per nonce is user's responsibility */
-      
-      if (length <= SALSA20_BLOCK_SIZE)
-	{
-	  memxor3 (c, m, (uint8_t *) x, length);
-	  return;
-	}
-      memxor3 (c, m, (uint8_t *) x, SALSA20_BLOCK_SIZE);
-
-      length -= SALSA20_BLOCK_SIZE;
-      c += SALSA20_BLOCK_SIZE;
-      m += SALSA20_BLOCK_SIZE;
-    }
-}
diff --git a/testsuite/salsa20-test.c b/testsuite/salsa20-test.c
index 4b0906f..c3bf993 100644
--- a/testsuite/salsa20-test.c
+++ b/testsuite/salsa20-test.c
@@ -181,41 +181,41 @@ _test_salsa20(salsa20_func *crypt,
 #define test_salsa20(key, iv, cleartext, ciphertext) \
   _test_salsa20 (salsa20_crypt, (key), (iv), (cleartext), (ciphertext))
 
-#define test_salsa20r12(key, iv, cleartext, ciphertext) \
-  _test_salsa20 (salsa20r12_crypt, (key), (iv), (cleartext), (ciphertext))
+#define test_estream_salsa20(key, iv, cleartext, ciphertext) \
+  _test_salsa20 (estream_salsa20_crypt, (key), (iv), (cleartext), (ciphertext))
 
   
 void
 test_main(void)
 {
   /* http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/salsa20/reduced/12-rounds/verified.test-vectors?logsort=rev&rev=210&view=markup */
-  test_salsa20r12(SHEX("80000000 00000000 00000000 00000000"),
+  test_estream_salsa20(SHEX("80000000 00000000 00000000 00000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("FC207DBF C76C5E17"));
 
-  test_salsa20r12(SHEX("00400000 00000000 00000000 00000000"),
+  test_estream_salsa20(SHEX("00400000 00000000 00000000 00000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("6C11A3F9 5FEC7F48"));
 
-  test_salsa20r12(SHEX("09090909090909090909090909090909"),
+  test_estream_salsa20(SHEX("09090909090909090909090909090909"),
 		  SHEX("0000000000000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("78E11FC3 33DEDE88"));
 
-  test_salsa20r12(SHEX("1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B"),
+  test_estream_salsa20(SHEX("1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B"),
 		  SHEX("00000000 00000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("A6747461 1DF551FF"));
 
-  test_salsa20r12(SHEX("80000000000000000000000000000000"
+  test_estream_salsa20(SHEX("80000000000000000000000000000000"
 		       "00000000000000000000000000000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("00000000 00000000"),
 		  SHEX("AFE411ED 1C4E07E4"));
 
-  test_salsa20r12(SHEX("0053A6F94C9FF24598EB3E91E4378ADD"
+  test_estream_salsa20(SHEX("0053A6F94C9FF24598EB3E91E4378ADD"
 		       "3083D6297CCF2275C81B6EC11467BA0D"),
 		  SHEX("0D74DB42A91077DE"),
 		  SHEX("00000000 00000000"),
-- 
1.7.10.4

