Ver Fonte

add testprof/no_prng

a PRNG that is no PRNG as its output is predefined and can be set
by calling add_entropy()
Steffen Jaeckel há 11 anos atrás
pai
commit
b570175b47

+ 1 - 1
testprof/makefile

@@ -5,7 +5,7 @@ ifndef RANLIB
    RANLIB=ranlib
 endif
 
-OBJECTS = base64_test.o cipher_hash_test.o der_tests.o                                   \
+OBJECTS = base64_test.o cipher_hash_test.o der_tests.o no_prng.o                         \
 dsa_test.o ecc_test.o mac_test.o misc_test.o modes_test.o pkcs_1_test.o rsa_test.o       \
 store_test.o test_driver.o x86_prof.o katja_test.o dh_test.o
 

+ 1 - 1
testprof/makefile.icc

@@ -1,7 +1,7 @@
 CFLAGS += -I../src/headers -I./ 
 CC?=icc
 
-OBJECTS = base64_test.o cipher_hash_test.o der_tests.o                                   \
+OBJECTS = base64_test.o cipher_hash_test.o der_tests.o no_prng.o                         \
 dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o                   \
 store_test.o test_driver.o x86_prof.o katja_test.o dh_test.o misc_test.o
 

+ 1 - 1
testprof/makefile.mingw

@@ -4,7 +4,7 @@
 
 CFLAGS = $(CFLAGS_OPTS) -W -I../src/headers -I. -Wall -W
 
-OBJECTS = base64_test.o cipher_hash_test.o der_tests.o                                   \
+OBJECTS = base64_test.o cipher_hash_test.o der_tests.o no_prng.o                         \
 dsa_test.o ecc_test.o mac_test.o misc_test.o modes_test.o pkcs_1_test.o rsa_test.o       \
 store_test.o test_driver.o x86_prof.o katja_test.o dh_test.o
 

+ 1 - 1
testprof/makefile.msvc

@@ -1,6 +1,6 @@
 CFLAGS = /I../src/headers/ /I./ /Ox /DWIN32 /DLTC_SOURCE /W3 /Fo$@
 
-OBJECTS=base64_test.obj cipher_hash_test.obj der_tests.obj            \
+OBJECTS=base64_test.obj cipher_hash_test.obj der_tests.obj no_prng.obj \
 dsa_test.obj ecc_test.obj mac_test.obj modes_test.obj pkcs_1_test.obj \
 rsa_test.obj store_test.obj test_driver.obj x86_prof.obj katja_test.obj \
 dh_test.obj misc_test.obj

+ 1 - 1
testprof/makefile.shared

@@ -6,7 +6,7 @@ LTCOMPILE = $(LT) --mode=compile --tag=CC $(CC)
 
 CFLAGS += -I../src/headers -I./ -Wall -Wsign-compare -W -Wshadow -Wno-unused-parameter
 
-OBJECTS = base64_test.o cipher_hash_test.o der_tests.o                                   \
+OBJECTS = base64_test.o cipher_hash_test.o der_tests.o no_prng.o                         \
 dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o                   \
 store_test.o test_driver.o x86_prof.o katja_test.o dh_test.o misc_test.o
 

+ 148 - 0
testprof/no_prng.c

@@ -0,0 +1,148 @@
+/* LibTomCrypt, modular cryptographic library
+ *
+ * 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.
+ *
+ * http://libtom.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file no_prng.c
+  NO PRNG, Steffen Jaeckel
+*/
+
+#ifdef LTC_PKCS_1
+
+static unsigned char no_prng_entropy[1024];
+static unsigned long no_prng_len = 0;
+static unsigned long no_prng_offset = 0;
+
+/**
+  Start the PRNG
+  @param prng     [out] The PRNG state to initialize
+  @return CRYPT_OK if successful
+*/
+int no_prng_start(prng_state *prng)
+{
+    no_prng_len = 0;
+    no_prng_offset = 0;
+
+    return CRYPT_OK;
+}
+
+/**
+  Add entropy to the PRNG state
+  @param in       The data to add
+  @param inlen    Length of the data to add
+  @param prng     PRNG state to update
+  @return CRYPT_OK if successful
+*/
+int no_prng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng)
+{
+    LTC_ARGCHK(in  != NULL);
+    LTC_ARGCHK(inlen <= sizeof(no_prng_entropy));
+
+    no_prng_len = MIN(inlen, sizeof(no_prng_entropy));
+    memcpy(no_prng_entropy, in, no_prng_len);
+    no_prng_offset = 0;
+
+    return CRYPT_OK;
+
+}
+
+/**
+  Make the PRNG ready to read from
+  @param prng   The PRNG to make active
+  @return CRYPT_OK if successful
+*/
+int no_prng_ready(prng_state *prng)
+{
+    LTC_ARGCHK(prng != NULL);
+
+    return CRYPT_OK;
+}
+
+/**
+  Read from the PRNG
+  @param out      Destination
+  @param outlen   Length of output
+  @param prng     The active PRNG to read from
+  @return Number of octets read
+*/
+unsigned long no_prng_read(unsigned char *out, unsigned long outlen, prng_state *prng)
+{
+   LTC_ARGCHK(out != NULL);
+
+   outlen = MIN(outlen, no_prng_len - no_prng_offset);
+   memcpy(out, &no_prng_entropy[no_prng_offset], outlen);
+   no_prng_offset += outlen;
+
+   return outlen;
+}
+
+/**
+  Terminate the PRNG
+  @param prng   The PRNG to terminate
+  @return CRYPT_OK if successful
+*/
+int no_prng_done(prng_state *prng)
+{
+   return CRYPT_OK;
+}
+
+/**
+  Export the PRNG state
+  @param out       [out] Destination
+  @param outlen    [in/out] Max size and resulting size of the state
+  @param prng      The PRNG to export
+  @return CRYPT_OK if successful
+*/
+int no_prng_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
+{
+   return CRYPT_OK;
+}
+
+/**
+  Import a PRNG state
+  @param in       The PRNG state
+  @param inlen    Size of the state
+  @param prng     The PRNG to import
+  @return CRYPT_OK if successful
+*/
+int no_prng_import(const unsigned char *in, unsigned long inlen, prng_state *prng)
+{
+   return CRYPT_OK;
+}
+
+/**
+  PRNG self-test
+  @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
+*/
+int no_prng_test(void)
+{
+   return CRYPT_OK;
+}
+
+const struct ltc_prng_descriptor no_prng_desc =
+{
+   "no_prng", 0,
+    &no_prng_start,
+    &no_prng_add_entropy,
+    &no_prng_ready,
+    &no_prng_read,
+    &no_prng_done,
+    &no_prng_export,
+    &no_prng_import,
+    &no_prng_test
+};
+
+#endif
+
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */

+ 4 - 0
testprof/tomcrypt_test.h

@@ -72,6 +72,10 @@ extern struct list {
 
 extern int no_results;
 
+#ifdef LTC_PKCS_1
+extern const struct ltc_prng_descriptor no_prng_desc;
+#endif
+
 int sorter(const void *a, const void *b);
 void tally_results(int type);
 ulong64 rdtsc (void);