xref: /optee_os/core/lib/libtomcrypt/src/prngs/sprng.c (revision a50cb361d9e5735f197ccc87beb0d24af8315369)
1 /*
2  * Copyright (c) 2001-2007, Tom St Denis
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  * POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
29  *
30  * LibTomCrypt is a library that provides various cryptographic
31  * algorithms in a highly modular and flexible manner.
32  *
33  * The library is free for all purposes without any express
34  * guarantee it works.
35  *
36  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
37  */
38 #include "tomcrypt.h"
39 
40 /**
41    @file sprng.c
42    Secure PRNG, Tom St Denis
43 */
44 
45 /* A secure PRNG using the RNG functions.  Basically this is a
46  * wrapper that allows you to use a secure RNG as a PRNG
47  * in the various other functions.
48  */
49 
50 #ifdef LTC_SPRNG
51 
52 const struct ltc_prng_descriptor sprng_desc =
53 {
54     "sprng", 0,
55     &sprng_start,
56     &sprng_add_entropy,
57     &sprng_ready,
58     &sprng_read,
59     &sprng_done,
60     &sprng_export,
61     &sprng_import,
62     &sprng_test
63 };
64 
65 /**
66   Start the PRNG
67   @param prng     [out] The PRNG state to initialize
68   @return CRYPT_OK if successful
69 */
70 int sprng_start(prng_state *prng)
71 {
72    LTC_UNUSED_PARAM(prng);
73    return CRYPT_OK;
74 }
75 
76 /**
77   Add entropy to the PRNG state
78   @param in       The data to add
79   @param inlen    Length of the data to add
80   @param prng     PRNG state to update
81   @return CRYPT_OK if successful
82 */
83 int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng)
84 {
85    LTC_UNUSED_PARAM(in);
86    LTC_UNUSED_PARAM(inlen);
87    LTC_UNUSED_PARAM(prng);
88    return CRYPT_OK;
89 }
90 
91 /**
92   Make the PRNG ready to read from
93   @param prng   The PRNG to make active
94   @return CRYPT_OK if successful
95 */
96 int sprng_ready(prng_state *prng)
97 {
98    LTC_UNUSED_PARAM(prng);
99    return CRYPT_OK;
100 }
101 
102 /**
103   Read from the PRNG
104   @param out      Destination
105   @param outlen   Length of output
106   @param prng     The active PRNG to read from
107   @return Number of octets read
108 */
109 unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng)
110 {
111    LTC_ARGCHK(out != NULL);
112    LTC_UNUSED_PARAM(prng);
113    return rng_get_bytes(out, outlen, NULL);
114 }
115 
116 /**
117   Terminate the PRNG
118   @param prng   The PRNG to terminate
119   @return CRYPT_OK if successful
120 */
121 int sprng_done(prng_state *prng)
122 {
123    LTC_UNUSED_PARAM(prng);
124    return CRYPT_OK;
125 }
126 
127 /**
128   Export the PRNG state
129   @param out       [out] Destination
130   @param outlen    [in/out] Max size and resulting size of the state
131   @param prng      The PRNG to export
132   @return CRYPT_OK if successful
133 */
134 int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
135 {
136    LTC_ARGCHK(outlen != NULL);
137    LTC_UNUSED_PARAM(out);
138    LTC_UNUSED_PARAM(prng);
139 
140    *outlen = 0;
141    return CRYPT_OK;
142 }
143 
144 /**
145   Import a PRNG state
146   @param in       The PRNG state
147   @param inlen    Size of the state
148   @param prng     The PRNG to import
149   @return CRYPT_OK if successful
150 */
151 int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng)
152 {
153   LTC_UNUSED_PARAM(in);
154   LTC_UNUSED_PARAM(inlen);
155   LTC_UNUSED_PARAM(prng);
156    return CRYPT_OK;
157 }
158 
159 /**
160   PRNG self-test
161   @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
162 */
163 int sprng_test(void)
164 {
165    return CRYPT_OK;
166 }
167 
168 #endif
169 
170 
171 
172 
173 /* $Source: /cvs/libtom/libtomcrypt/src/prngs/sprng.c,v $ */
174 /* $Revision: 1.6 $ */
175 /* $Date: 2007/05/12 14:32:35 $ */
176