the idea is to be able to easily provide a plug-in rng for a specific platform without the need to touch the library.
@@ -193,6 +193,9 @@ unsigned long rng_get_bytes(unsigned char *out,
int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void));
+extern unsigned long (*ltc_rng)(unsigned char *out, unsigned long outlen,
+ void (*callback)(void));
+
/* $Source$ */
/* $Revision$ */
@@ -0,0 +1,13 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ * Tom St Denis, [email protected], http://libtom.org
+ */
+#include "tomcrypt.h"
+unsigned long (*ltc_rng)(unsigned char *out, unsigned long outlen, void (*callback)(void));
@@ -135,6 +135,13 @@ unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen,
LTC_ARGCHK(out != NULL);
+ if (ltc_rng) {
+ x = ltc_rng(out, outlen, callback);
+ if (x != 0) {
+ return x;
+ }
#if defined(_WIN32) || defined(_WIN32_WCE)
x = rng_win32(out, outlen, callback); if (x != 0) { return x; }
#elif defined(LTC_DEVRANDOM)