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@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 */
sprng_start(prng_state * prng)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 */
sprng_add_entropy(const unsigned char * in,unsigned long inlen,prng_state * prng)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 */
sprng_ready(prng_state * prng)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 */
sprng_read(unsigned char * out,unsigned long outlen,prng_state * prng)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 */
sprng_done(prng_state * prng)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 */
sprng_export(unsigned char * out,unsigned long * outlen,prng_state * prng)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 */
sprng_import(const unsigned char * in,unsigned long inlen,prng_state * prng)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 */
sprng_test(void)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