]> Git Repo - cpuminer-multi.git/blame - sha3/sph_shavite.h
update build.sh
[cpuminer-multi.git] / sha3 / sph_shavite.h
CommitLineData
b089cc9f
LJ
1/* $Id: sph_shavite.h 208 2010-06-02 20:33:00Z tp $ */
2/**
3 * SHAvite-3 interface. This code implements SHAvite-3 with the
4 * recommended parameters for SHA-3, with outputs of 224, 256, 384 and
5 * 512 bits. In the following, we call the function "SHAvite" (without
6 * the "-3" suffix), thus "SHAvite-224" is "SHAvite-3 with a 224-bit
7 * output".
8 *
9 * ==========================(LICENSE BEGIN)============================
10 *
11 * Copyright (c) 2007-2010 Projet RNRT SAPHIR
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this software and associated documentation files (the
15 * "Software"), to deal in the Software without restriction, including
16 * without limitation the rights to use, copy, modify, merge, publish,
17 * distribute, sublicense, and/or sell copies of the Software, and to
18 * permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be
22 * included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
28 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
29 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 *
32 * ===========================(LICENSE END)=============================
33 *
34 * @file sph_shavite.h
35 * @author Thomas Pornin <[email protected]>
36 */
37
38#ifndef SPH_SHAVITE_H__
39#define SPH_SHAVITE_H__
40
41#include <stddef.h>
42#include "sph_types.h"
43
44#ifdef __cplusplus
45extern "C"{
46#endif
47
48/**
49 * Output size (in bits) for SHAvite-224.
50 */
51#define SPH_SIZE_shavite224 224
52
53/**
54 * Output size (in bits) for SHAvite-256.
55 */
56#define SPH_SIZE_shavite256 256
57
58/**
59 * Output size (in bits) for SHAvite-384.
60 */
61#define SPH_SIZE_shavite384 384
62
63/**
64 * Output size (in bits) for SHAvite-512.
65 */
66#define SPH_SIZE_shavite512 512
67
68/**
69 * This structure is a context for SHAvite-224 and SHAvite-256 computations:
70 * it contains the intermediate values and some data from the last
71 * entered block. Once a SHAvite computation has been performed, the
72 * context can be reused for another computation.
73 *
74 * The contents of this structure are private. A running SHAvite
75 * computation can be cloned by copying the context (e.g. with a simple
76 * <code>memcpy()</code>).
77 */
78typedef struct {
79#ifndef DOXYGEN_IGNORE
80 unsigned char buf[64]; /* first field, for alignment */
81 size_t ptr;
82 sph_u32 h[8];
83 sph_u32 count0, count1;
84#endif
85} sph_shavite_small_context;
86
87/**
88 * This structure is a context for SHAvite-224 computations. It is
89 * identical to the common <code>sph_shavite_small_context</code>.
90 */
91typedef sph_shavite_small_context sph_shavite224_context;
92
93/**
94 * This structure is a context for SHAvite-256 computations. It is
95 * identical to the common <code>sph_shavite_small_context</code>.
96 */
97typedef sph_shavite_small_context sph_shavite256_context;
98
99/**
100 * This structure is a context for SHAvite-384 and SHAvite-512 computations:
101 * it contains the intermediate values and some data from the last
102 * entered block. Once a SHAvite computation has been performed, the
103 * context can be reused for another computation.
104 *
105 * The contents of this structure are private. A running SHAvite
106 * computation can be cloned by copying the context (e.g. with a simple
107 * <code>memcpy()</code>).
108 */
109typedef struct {
110#ifndef DOXYGEN_IGNORE
111 unsigned char buf[128]; /* first field, for alignment */
112 size_t ptr;
113 sph_u32 h[16];
114 sph_u32 count0, count1, count2, count3;
115#endif
116} sph_shavite_big_context;
117
118/**
119 * This structure is a context for SHAvite-384 computations. It is
120 * identical to the common <code>sph_shavite_small_context</code>.
121 */
122typedef sph_shavite_big_context sph_shavite384_context;
123
124/**
125 * This structure is a context for SHAvite-512 computations. It is
126 * identical to the common <code>sph_shavite_small_context</code>.
127 */
128typedef sph_shavite_big_context sph_shavite512_context;
129
130/**
131 * Initialize a SHAvite-224 context. This process performs no memory allocation.
132 *
133 * @param cc the SHAvite-224 context (pointer to a
134 * <code>sph_shavite224_context</code>)
135 */
136void sph_shavite224_init(void *cc);
137
138/**
139 * Process some data bytes. It is acceptable that <code>len</code> is zero
140 * (in which case this function does nothing).
141 *
142 * @param cc the SHAvite-224 context
143 * @param data the input data
144 * @param len the input data length (in bytes)
145 */
146void sph_shavite224(void *cc, const void *data, size_t len);
147
148/**
149 * Terminate the current SHAvite-224 computation and output the result into
150 * the provided buffer. The destination buffer must be wide enough to
151 * accomodate the result (28 bytes). The context is automatically
152 * reinitialized.
153 *
154 * @param cc the SHAvite-224 context
155 * @param dst the destination buffer
156 */
157void sph_shavite224_close(void *cc, void *dst);
158
159/**
160 * Add a few additional bits (0 to 7) to the current computation, then
161 * terminate it and output the result in the provided buffer, which must
162 * be wide enough to accomodate the result (28 bytes). If bit number i
163 * in <code>ub</code> has value 2^i, then the extra bits are those
164 * numbered 7 downto 8-n (this is the big-endian convention at the byte
165 * level). The context is automatically reinitialized.
166 *
167 * @param cc the SHAvite-224 context
168 * @param ub the extra bits
169 * @param n the number of extra bits (0 to 7)
170 * @param dst the destination buffer
171 */
172void sph_shavite224_addbits_and_close(
173 void *cc, unsigned ub, unsigned n, void *dst);
174
175/**
176 * Initialize a SHAvite-256 context. This process performs no memory allocation.
177 *
178 * @param cc the SHAvite-256 context (pointer to a
179 * <code>sph_shavite256_context</code>)
180 */
181void sph_shavite256_init(void *cc);
182
183/**
184 * Process some data bytes. It is acceptable that <code>len</code> is zero
185 * (in which case this function does nothing).
186 *
187 * @param cc the SHAvite-256 context
188 * @param data the input data
189 * @param len the input data length (in bytes)
190 */
191void sph_shavite256(void *cc, const void *data, size_t len);
192
193/**
194 * Terminate the current SHAvite-256 computation and output the result into
195 * the provided buffer. The destination buffer must be wide enough to
196 * accomodate the result (32 bytes). The context is automatically
197 * reinitialized.
198 *
199 * @param cc the SHAvite-256 context
200 * @param dst the destination buffer
201 */
202void sph_shavite256_close(void *cc, void *dst);
203
204/**
205 * Add a few additional bits (0 to 7) to the current computation, then
206 * terminate it and output the result in the provided buffer, which must
207 * be wide enough to accomodate the result (32 bytes). If bit number i
208 * in <code>ub</code> has value 2^i, then the extra bits are those
209 * numbered 7 downto 8-n (this is the big-endian convention at the byte
210 * level). The context is automatically reinitialized.
211 *
212 * @param cc the SHAvite-256 context
213 * @param ub the extra bits
214 * @param n the number of extra bits (0 to 7)
215 * @param dst the destination buffer
216 */
217void sph_shavite256_addbits_and_close(
218 void *cc, unsigned ub, unsigned n, void *dst);
219
220/**
221 * Initialize a SHAvite-384 context. This process performs no memory allocation.
222 *
223 * @param cc the SHAvite-384 context (pointer to a
224 * <code>sph_shavite384_context</code>)
225 */
226void sph_shavite384_init(void *cc);
227
228/**
229 * Process some data bytes. It is acceptable that <code>len</code> is zero
230 * (in which case this function does nothing).
231 *
232 * @param cc the SHAvite-384 context
233 * @param data the input data
234 * @param len the input data length (in bytes)
235 */
236void sph_shavite384(void *cc, const void *data, size_t len);
237
238/**
239 * Terminate the current SHAvite-384 computation and output the result into
240 * the provided buffer. The destination buffer must be wide enough to
241 * accomodate the result (48 bytes). The context is automatically
242 * reinitialized.
243 *
244 * @param cc the SHAvite-384 context
245 * @param dst the destination buffer
246 */
247void sph_shavite384_close(void *cc, void *dst);
248
249/**
250 * Add a few additional bits (0 to 7) to the current computation, then
251 * terminate it and output the result in the provided buffer, which must
252 * be wide enough to accomodate the result (48 bytes). If bit number i
253 * in <code>ub</code> has value 2^i, then the extra bits are those
254 * numbered 7 downto 8-n (this is the big-endian convention at the byte
255 * level). The context is automatically reinitialized.
256 *
257 * @param cc the SHAvite-384 context
258 * @param ub the extra bits
259 * @param n the number of extra bits (0 to 7)
260 * @param dst the destination buffer
261 */
262void sph_shavite384_addbits_and_close(
263 void *cc, unsigned ub, unsigned n, void *dst);
264
265/**
266 * Initialize a SHAvite-512 context. This process performs no memory allocation.
267 *
268 * @param cc the SHAvite-512 context (pointer to a
269 * <code>sph_shavite512_context</code>)
270 */
271void sph_shavite512_init(void *cc);
272
273/**
274 * Process some data bytes. It is acceptable that <code>len</code> is zero
275 * (in which case this function does nothing).
276 *
277 * @param cc the SHAvite-512 context
278 * @param data the input data
279 * @param len the input data length (in bytes)
280 */
281void sph_shavite512(void *cc, const void *data, size_t len);
282
283/**
284 * Terminate the current SHAvite-512 computation and output the result into
285 * the provided buffer. The destination buffer must be wide enough to
286 * accomodate the result (64 bytes). The context is automatically
287 * reinitialized.
288 *
289 * @param cc the SHAvite-512 context
290 * @param dst the destination buffer
291 */
292void sph_shavite512_close(void *cc, void *dst);
293
294/**
295 * Add a few additional bits (0 to 7) to the current computation, then
296 * terminate it and output the result in the provided buffer, which must
297 * be wide enough to accomodate the result (64 bytes). If bit number i
298 * in <code>ub</code> has value 2^i, then the extra bits are those
299 * numbered 7 downto 8-n (this is the big-endian convention at the byte
300 * level). The context is automatically reinitialized.
301 *
302 * @param cc the SHAvite-512 context
303 * @param ub the extra bits
304 * @param n the number of extra bits (0 to 7)
305 * @param dst the destination buffer
306 */
307void sph_shavite512_addbits_and_close(
308 void *cc, unsigned ub, unsigned n, void *dst);
309
310#ifdef __cplusplus
311}
312#endif
313
314#endif
This page took 0.059289 seconds and 4 git commands to generate.