瀏覽代碼

add ltc_rng function pointer

the idea is to be able to easily provide a plug-in rng for a specific
platform without the need to touch the library.
Steffen Jaeckel 10 年之前
父節點
當前提交
fe7c4e3993
共有 3 個文件被更改,包括 23 次插入0 次删除
  1. 3 0
      src/headers/tomcrypt_prng.h
  2. 13 0
      src/misc/crypt/crypt_prng_rng_descriptor.c
  3. 7 0
      src/prngs/rng_get_bytes.c

+ 3 - 0
src/headers/tomcrypt_prng.h

@@ -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));
 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$ */
 /* $Source$ */
 /* $Revision$ */
 /* $Revision$ */

+ 13 - 0
src/misc/crypt/crypt_prng_rng_descriptor.c

@@ -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));

+ 7 - 0
src/prngs/rng_get_bytes.c

@@ -135,6 +135,13 @@ unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen,
 
 
    LTC_ARGCHK(out != NULL);
    LTC_ARGCHK(out != NULL);
 
 
+   if (ltc_rng) {
+      x = ltc_rng(out, outlen, callback);
+      if (x != 0) {
+         return x;
+      }
+   }
+
 #if defined(_WIN32) || defined(_WIN32_WCE)
 #if defined(_WIN32) || defined(_WIN32_WCE)
    x = rng_win32(out, outlen, callback); if (x != 0) { return x; }
    x = rng_win32(out, outlen, callback); if (x != 0) { return x; }
 #elif defined(LTC_DEVRANDOM)
 #elif defined(LTC_DEVRANDOM)