From 85fbad44704ba6608f3320d9953e54b4c9a74ba0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Fri, 19 Sep 2003 15:44:44 +0200
Subject: [PATCH] * tools/nettle-lfib-stream.c: New tool, which outputs a
 sequence of pseudorandom (non-cryptographic) bytes, using Knuth's lagged
 fibonacci generator.

Rev: src/nettle/tools/.cvsignore:1.3
Rev: src/nettle/tools/Makefile.am:1.6
Rev: src/nettle/tools/nettle-lfib-stream.c:1.1
---
 tools/.cvsignore           |  1 +
 tools/.gitignore           |  1 +
 tools/Makefile.am          |  2 +-
 tools/nettle-lfib-stream.c | 81 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 84 insertions(+), 1 deletion(-)
 create mode 100644 tools/nettle-lfib-stream.c

diff --git a/tools/.cvsignore b/tools/.cvsignore
index 4aab25ff..b8d1a307 100644
--- a/tools/.cvsignore
+++ b/tools/.cvsignore
@@ -1,4 +1,5 @@
 .deps
 Makefile
 Makefile.in
+nettle-lfib-stream
 sexp-conv
diff --git a/tools/.gitignore b/tools/.gitignore
index 0d9c08db..4c171461 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -1,4 +1,5 @@
 /.deps
 /Makefile
 /Makefile.in
+/nettle-lfib-stream
 /sexp-conv
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 2e5e3db2..d7f43c10 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -5,7 +5,7 @@ AM_CFLAGS = -I$(top_srcdir)
 # installed version.
 AM_LDFLAGS = -L..
 
-bin_PROGRAMS = sexp-conv
+bin_PROGRAMS = sexp-conv nettle-lfib-stream
 
 # libnettle.a is added at the end to make sure all programs depend on it.
 # It seems there's no DEPENDENCIES variable that affects all programs.
diff --git a/tools/nettle-lfib-stream.c b/tools/nettle-lfib-stream.c
new file mode 100644
index 00000000..f6669003
--- /dev/null
+++ b/tools/nettle-lfib-stream.c
@@ -0,0 +1,81 @@
+/* lfib-stream.c
+ *
+ * Generates a pseudorandom stream, using the Knuth lfib
+ * (non-cryptographic) pseudorandom generator.
+ *
+ */
+ 
+/* nettle, low-level cryptographics library
+ *
+ * Copyright (C) 2003 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., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+#include "knuth-lfib.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <time.h>
+
+#define BUFSIZE 500
+
+static void
+usage(void)
+{
+  fprintf(stderr, "Usage: lfib-stream [SEED]\n");
+}
+
+int
+main(int argc, char **argv)
+{
+  struct knuth_lfib_ctx ctx;
+  uint32_t seed;
+
+  if (argc == 1)
+    seed = time(NULL);
+
+  else if (argc == 2)
+    {
+      seed = atoi(argv[1]);
+      if (!seed)
+	{
+	  usage();
+	  return EXIT_FAILURE;
+	}
+    }
+  else
+    {
+      usage();
+      return EXIT_FAILURE;
+    }
+
+  knuth_lfib_init(&ctx, seed);
+
+  for (;;)
+    {
+      char buffer[BUFSIZE];
+      knuth_lfib_random(&ctx, BUFSIZE, buffer);
+
+      if (fwrite(buffer, 1, BUFSIZE, stdout) < BUFSIZE
+	  || fflush(stdout) < 0)
+	return EXIT_FAILURE;
+    }
+
+  /* Not reached. This program is usually terminated by SIGPIPE */
+}
-- 
GitLab