summaryrefslogtreecommitdiff
path: root/knuth-lfib.h
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2002-01-16 20:58:02 +0100
committerNiels Möller <nisse@lysator.liu.se>2002-01-16 20:58:02 +0100
commit5b64829d925f296e58ada703f74661dd280f535e (patch)
treefefab1db5877f70546f7151839a2acfe5c7ddb37 /knuth-lfib.h
parent79b7ca39e029d69b3c998df2997187d4311a9c55 (diff)
downloadnettle-5b64829d925f296e58ada703f74661dd280f535e.tar.gz
New files, implementing a
non-cryptographic prng. Rev: src/nettle/knuth-lfib.c:1.1 Rev: src/nettle/knuth-lfib.h:1.1
Diffstat (limited to 'knuth-lfib.h')
-rw-r--r--knuth-lfib.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/knuth-lfib.h b/knuth-lfib.h
new file mode 100644
index 00000000..8ca45a71
--- /dev/null
+++ b/knuth-lfib.h
@@ -0,0 +1,61 @@
+/* knuth-lfib.h
+ *
+ * A "lagged fibonacci" pseudorandomness generator.
+ *
+ * Described in Knuth, TAOCP, 3.6
+ */
+
+/* nettle, low-level cryptographics library
+ *
+ * Copyright (C) 2002 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.
+ */
+
+/* NOTE: This generator is totally inappropriate for cryptographic
+ * applications. It is useful for generating deterministic but
+ * random-looking test data, and is used by the Nettle testsuite. */
+#ifndef NETTLE_KNUTH_LFIB_H_INCLUDED
+#define NETTLE_KNUTH_LFIB_H_INCLUDED
+
+#include <inttypes.h>
+
+#define _KNUTH_LFIB_KK 100
+
+struct knuth_lfib_ctx
+{
+ uint32_t x[_KNUTH_LFIB_KK];
+ unsigned index;
+};
+
+void
+knuth_lfib_init(struct knuth_lfib_ctx *ctx, uint32_t seed);
+
+/* Get's a single number in the range 0 ... 2^30-1 */
+uint32_t
+knuth_lfib_get(struct knuth_lfib_ctx *ctx);
+
+/* Get an array of numbers */
+void
+knuth_lfib_get_array(struct knuth_lfib_ctx *ctx,
+ unsigned n, uint32_t *a);
+
+/* Get an array of octets. */
+void
+knuth_lfib_random(struct knuth_lfib_ctx *ctx,
+ unsigned n, uint8_t *dst);
+
+#endif /* NETTLE_KNUTH_LFIB_H_INCLUDED */