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
25const 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*/
43int 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*/
55int 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*/
65int 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*/
77unsigned 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*/
88int 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*/
100int 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*/
115int 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*/
124int 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