1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis 2 * 3 * LibTomCrypt is a library that provides various cryptographic 4 * algorithms in a highly modular and flexible manner. 5 * 6 * The library is free for all purposes without any express 7 * guarantee it works. 8 * 9 * Tom St Denis, tomstdenis (at) gmail.com, http://libtomcrypt.com 10 */ 11 #include "tomcrypt.h" 12 13 /** 14 @file sprng.c 15 Secure PRNG, Tom St Denis 16 */ 17 18 /* A secure PRNG using the RNG functions. Basically this is a 19 * wrapper that allows you to use a secure RNG as a PRNG 20 * in the various other functions. 21 */ 22 23 #ifdef SPRNG 24 25 const struct ltc_prng_descriptor sprng_desc = 26 { 27 "sprng", 0, 28 &sprng_start, 29 &sprng_add_entropy, 30 &sprng_ready, 31 &sprng_read, 32 &sprng_done, 33 &sprng_export, 34 &sprng_import, 35 &sprng_test 36 }; 37 38 /** 39 Start the PRNG 40 @param prng [out] The PRNG state to initialize 41 @return CRYPT_OK if successful 42 */ 43 int sprng_start(prng_state *prng) 44 { 45 return CRYPT_OK; 46 } 47 48 /** 49 Add entropy to the PRNG state 50 @param in The data to add 51 @param inlen Length of the data to add 52 @param prng PRNG state to update 53 @return CRYPT_OK if successful 54 */ 55 int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) 56 { 57 return CRYPT_OK; 58 } 59 60 /** 61 Make the PRNG ready to read from 62 @param prng The PRNG to make active 63 @return CRYPT_OK if successful 64 */ 65 int sprng_ready(prng_state *prng) 66 { 67 return CRYPT_OK; 68 } 69 70 /** 71 Read from the PRNG 72 @param out Destination 73 @param outlen Length of output 74 @param prng The active PRNG to read from 75 @return Number of octets read 76 */ 77 unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng) 78 { 79 LTC_ARGCHK(out != NULL); 80 return rng_get_bytes(out, outlen, NULL); 81 } 82 83 /** 84 Terminate the PRNG 85 @param prng The PRNG to terminate 86 @return CRYPT_OK if successful 87 */ 88 int sprng_done(prng_state *prng) 89 { 90 return CRYPT_OK; 91 } 92 93 /** 94 Export the PRNG state 95 @param out [out] Destination 96 @param outlen [in/out] Max size and resulting size of the state 97 @param prng The PRNG to export 98 @return CRYPT_OK if successful 99 */ 100 int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng) 101 { 102 LTC_ARGCHK(outlen != NULL); 103 104 *outlen = 0; 105 return CRYPT_OK; 106 } 107 108 /** 109 Import a PRNG state 110 @param in The PRNG state 111 @param inlen Size of the state 112 @param prng The PRNG to import 113 @return CRYPT_OK if successful 114 */ 115 int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng) 116 { 117 return CRYPT_OK; 118 } 119 120 /** 121 PRNG self-test 122 @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled 123 */ 124 int sprng_test(void) 125 { 126 return CRYPT_OK; 127 } 128 129 #endif 130 131 132 133 134 /* $Source: /cvs/libtom/libtomcrypt/src/prngs/sprng.c,v $ */ 135 /* $Revision: 1.4 $ */ 136 /* $Date: 2006/03/31 14:15:35 $ */ 137