comparison ltc_prng.c @ 839:33207ed1174b

Merge in ECC
author Matt Johnston <matt@ucc.asn.au>
date Mon, 21 Oct 2013 22:57:21 +0800
parents ac2158e3e403
children c19acba28590
comparison
equal deleted inserted replaced
834:e378da7eae5d 839:33207ed1174b
1 /* Copied from libtomcrypt/src/prngs/sprng.c and modified to
2 * use Dropbear's genrandom(). */
3
4 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
5 *
6 * LibTomCrypt is a library that provides various cryptographic
7 * algorithms in a highly modular and flexible manner.
8 *
9 * The library is free for all purposes without any express
10 * guarantee it works.
11 *
12 * Tom St Denis, [email protected], http://libtomcrypt.com
13 */
14 #include "options.h"
15 #include "includes.h"
16 #include "random.h"
17 #include "ltc_prng.h"
18
19 /**
20 @file sprng.c
21 Secure PRNG, Tom St Denis
22 */
23
24 /* A secure PRNG using the RNG functions. Basically this is a
25 * wrapper that allows you to use a secure RNG as a PRNG
26 * in the various other functions.
27 */
28
29 #ifdef DROPBEAR_LTC_PRNG
30
31 /**
32 Start the PRNG
33 @param prng [out] The PRNG state to initialize
34 @return CRYPT_OK if successful
35 */
36 int dropbear_prng_start(prng_state* UNUSED(prng))
37 {
38 return CRYPT_OK;
39 }
40
41 /**
42 Add entropy to the PRNG state
43 @param in The data to add
44 @param inlen Length of the data to add
45 @param prng PRNG state to update
46 @return CRYPT_OK if successful
47 */
48 int dropbear_prng_add_entropy(const unsigned char* UNUSED(in), unsigned long UNUSED(inlen), prng_state* UNUSED(prng))
49 {
50 return CRYPT_OK;
51 }
52
53 /**
54 Make the PRNG ready to read from
55 @param prng The PRNG to make active
56 @return CRYPT_OK if successful
57 */
58 int dropbear_prng_ready(prng_state* UNUSED(prng))
59 {
60 return CRYPT_OK;
61 }
62
63 /**
64 Read from the PRNG
65 @param out Destination
66 @param outlen Length of output
67 @param prng The active PRNG to read from
68 @return Number of octets read
69 */
70 unsigned long dropbear_prng_read(unsigned char* out, unsigned long outlen, prng_state* UNUSED(prng))
71 {
72 LTC_ARGCHK(out != NULL);
73 genrandom(out, outlen);
74 return outlen;
75 }
76
77 /**
78 Terminate the PRNG
79 @param prng The PRNG to terminate
80 @return CRYPT_OK if successful
81 */
82 int dropbear_prng_done(prng_state* UNUSED(prng))
83 {
84 return CRYPT_OK;
85 }
86
87 /**
88 Export the PRNG state
89 @param out [out] Destination
90 @param outlen [in/out] Max size and resulting size of the state
91 @param prng The PRNG to export
92 @return CRYPT_OK if successful
93 */
94 int dropbear_prng_export(unsigned char* UNUSED(out), unsigned long* outlen, prng_state* UNUSED(prng))
95 {
96 LTC_ARGCHK(outlen != NULL);
97
98 *outlen = 0;
99 return CRYPT_OK;
100 }
101
102 /**
103 Import a PRNG state
104 @param in The PRNG state
105 @param inlen Size of the state
106 @param prng The PRNG to import
107 @return CRYPT_OK if successful
108 */
109 int dropbear_prng_import(const unsigned char* UNUSED(in), unsigned long UNUSED(inlen), prng_state* UNUSED(prng))
110 {
111 return CRYPT_OK;
112 }
113
114 /**
115 PRNG self-test
116 @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
117 */
118 int dropbear_prng_test(void)
119 {
120 return CRYPT_OK;
121 }
122
123 const struct ltc_prng_descriptor dropbear_prng_desc =
124 {
125 "dropbear_prng", 0,
126 &dropbear_prng_start,
127 &dropbear_prng_add_entropy,
128 &dropbear_prng_ready,
129 &dropbear_prng_read,
130 &dropbear_prng_done,
131 &dropbear_prng_export,
132 &dropbear_prng_import,
133 &dropbear_prng_test
134 };
135
136
137 #endif // DROPBEAR_LTC_PRNG