comparison libtomcrypt/tests/no_prng.c @ 1471:6dba84798cd5

Update to libtomcrypt 1.18.1, merged with Dropbear changes
author Matt Johnston <matt@ucc.asn.au>
date Fri, 09 Feb 2018 21:44:05 +0800
parents
children
comparison
equal deleted inserted replaced
1470:8bba51a55704 1471:6dba84798cd5
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 #include "tomcrypt.h"
10
11 /**
12 @file no_prng.c
13 NO PRNG, Steffen Jaeckel
14 */
15
16 #ifdef LTC_PKCS_1
17
18 typedef struct
19 {
20 struct ltc_prng_descriptor desc;
21 char name[64];
22 unsigned char entropy[1024];
23 unsigned long len;
24 unsigned long offset;
25 } no_prng_desc_t;
26
27 /**
28 Start the PRNG
29 @param prng [out] The PRNG state to initialize
30 @return CRYPT_OK if successful
31 */
32 int no_prng_start(prng_state *prng)
33 {
34 no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
35 LTC_ARGCHK(no_prng != NULL);
36 LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
37 no_prng->len = 0;
38 no_prng->offset = 0;
39
40 return CRYPT_OK;
41 }
42
43 /**
44 Add entropy to the PRNG state
45 @param in The data to add
46 @param inlen Length of the data to add
47 @param prng PRNG state to update
48 @return CRYPT_OK if successful
49 */
50 int no_prng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng)
51 {
52 no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
53 LTC_ARGCHK(no_prng != NULL);
54 LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
55 LTC_ARGCHK(in != NULL);
56 LTC_ARGCHK(inlen <= sizeof(no_prng->entropy));
57
58 no_prng->len = MIN(inlen, sizeof(no_prng->entropy));
59 memcpy(no_prng->entropy, in, no_prng->len);
60 no_prng->offset = 0;
61
62 return CRYPT_OK;
63
64 }
65
66 /**
67 Make the PRNG ready to read from
68 @param prng The PRNG to make active
69 @return CRYPT_OK if successful
70 */
71 int no_prng_ready(prng_state *prng)
72 {
73 LTC_ARGCHK(prng != NULL);
74
75 return CRYPT_OK;
76 }
77
78 /**
79 Read from the PRNG
80 @param out Destination
81 @param outlen Length of output
82 @param prng The active PRNG to read from
83 @return Number of octets read
84 */
85 unsigned long no_prng_read(unsigned char *out, unsigned long outlen, prng_state *prng)
86 {
87 no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
88 LTC_ARGCHK(no_prng != NULL);
89 LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
90 LTC_ARGCHK(out != NULL);
91
92 outlen = MIN(outlen, no_prng->len - no_prng->offset);
93 memcpy(out, &no_prng->entropy[no_prng->offset], outlen);
94 no_prng->offset += outlen;
95
96 return outlen;
97 }
98
99 /**
100 Terminate the PRNG
101 @param prng The PRNG to terminate
102 @return CRYPT_OK if successful
103 */
104 int no_prng_done(prng_state *prng)
105 {
106 LTC_UNUSED_PARAM(prng);
107 return CRYPT_OK;
108 }
109
110 /**
111 Export the PRNG state
112 @param out [out] Destination
113 @param outlen [in/out] Max size and resulting size of the state
114 @param prng The PRNG to export
115 @return CRYPT_OK if successful
116 */
117 int no_prng_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
118 {
119 LTC_UNUSED_PARAM(out);
120 LTC_UNUSED_PARAM(outlen);
121 LTC_UNUSED_PARAM(prng);
122 return CRYPT_OK;
123 }
124
125 /**
126 Import a PRNG state
127 @param in The PRNG state
128 @param inlen Size of the state
129 @param prng The PRNG to import
130 @return CRYPT_OK if successful
131 */
132 int no_prng_import(const unsigned char *in, unsigned long inlen, prng_state *prng)
133 {
134 LTC_UNUSED_PARAM(in);
135 LTC_UNUSED_PARAM(inlen);
136 LTC_UNUSED_PARAM(prng);
137 return CRYPT_OK;
138 }
139
140 /**
141 PRNG self-test
142 @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
143 */
144 int no_prng_test(void)
145 {
146 return CRYPT_OK;
147 }
148
149 static const struct ltc_prng_descriptor no_prng_desc =
150 {
151 NULL, 0,
152 &no_prng_start,
153 &no_prng_add_entropy,
154 &no_prng_ready,
155 &no_prng_read,
156 &no_prng_done,
157 &no_prng_export,
158 &no_prng_import,
159 &no_prng_test
160 };
161
162 struct ltc_prng_descriptor* no_prng_desc_get(void)
163 {
164 no_prng_desc_t* no_prng = XMALLOC(sizeof(*no_prng));
165 LTC_ARGCHK(no_prng != NULL);
166 XMEMCPY(&no_prng->desc, &no_prng_desc, sizeof(no_prng_desc));
167 LTC_ARGCHK(snprintf(no_prng->name, sizeof(no_prng->name), "no_prng@%p", no_prng) < (int)sizeof(no_prng->name));
168 no_prng->desc.name = no_prng->name;
169 return &no_prng->desc;
170 }
171
172 void no_prng_desc_free(struct ltc_prng_descriptor* prng)
173 {
174 no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
175 LTC_ARGCHK(no_prng != NULL);
176 LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
177 XFREE(no_prng);
178 }
179
180 #endif
181
182
183 /* ref: $Format:%D$ */
184 /* git commit: $Format:%H$ */
185 /* commit time: $Format:%ai$ */