bring in keccak symbols
[mobile-com.git] / DH-Keccak / assets / KremKeccak / KeccakNISTInterface.h
1 /*
2 The Keccak sponge function, designed by Guido Bertoni, Joan Daemen,
3 Michaƫl Peeters and Gilles Van Assche. For more information, feedback or
4 questions, please refer to our website: http://keccak.noekeon.org/
5
6 Implementation by the designers,
7 hereby denoted as "the implementer".
8
9 To the extent possible under law, the implementer has waived all copyright
10 and related or neighboring rights to the source code in this file.
11 http://creativecommons.org/publicdomain/zero/1.0/
12 */
13
14 #ifndef _KeccakNISTInterface_h_
15 #define _KeccakNISTInterface_h_
16
17 #include "KeccakSponge.h"
18
19 typedef unsigned char BitSequence;
20 typedef unsigned long long DataLength;
21 typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHLEN = 2 } HashReturn;
22
23 typedef spongeState hashState;
24
25 /**
26 * Function to initialize the state of the Keccak[r, c] sponge function.
27 * The rate r and capacity c values are determined from @a hashbitlen.
28 * @param state Pointer to the state of the sponge function to be initialized.
29 * @param hashbitlen The desired number of output bits,
30 * or 0 for Keccak[] with default parameters
31 * and arbitrarily-long output.
32 * @pre The value of hashbitlen must be one of 0, 224, 256, 384 and 512.
33 * @return SUCCESS if successful, BAD_HASHLEN if the value of hashbitlen is incorrect.
34 */
35 HashReturn Init(hashState *state, int hashbitlen);
36 /**
37 * Function to give input data for the sponge function to absorb.
38 * @param state Pointer to the state of the sponge function initialized by Init().
39 * @param data Pointer to the input data.
40 * When @a databitLen is not a multiple of 8, the last bits of data must be
41 * in the most significant bits of the last byte.
42 * @param databitLen The number of input bits provided in the input data.
43 * @pre In the previous call to Absorb(), databitLen was a multiple of 8.
44 * @return SUCCESS if successful, FAIL otherwise.
45 */
46 HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen);
47 /**
48 * Function to squeeze output data from the sponge function.
49 * If @a hashbitlen was not 0 in the call to Init(), the number of output bits is equal to @a hashbitlen.
50 * If @a hashbitlen was 0 in the call to Init(), the output bits must be extracted using the Squeeze() function.
51 * @param state Pointer to the state of the sponge function initialized by Init().
52 * @param hashval Pointer to the buffer where to store the output data.
53 * @return SUCCESS if successful, FAIL otherwise.
54 */
55 HashReturn Final(hashState *state, BitSequence *hashval);
56 /**
57 * Function to compute a hash using the Keccak[r, c] sponge function.
58 * The rate r and capacity c values are determined from @a hashbitlen.
59 * @param hashbitlen The desired number of output bits.
60 * @param data Pointer to the input data.
61 * When @a databitLen is not a multiple of 8, the last bits of data must be
62 * in the most significant bits of the last byte.
63 * @param databitLen The number of input bits provided in the input data.
64 * @param hashval Pointer to the buffer where to store the output data.
65 * @pre The value of hashbitlen must be one of 224, 256, 384 and 512.
66 * @return SUCCESS if successful, BAD_HASHLEN if the value of hashbitlen is incorrect.
67 */
68 HashReturn Hash(int hashbitlen, const BitSequence *data, DataLength databitlen, BitSequence *hashval);
69
70 #endif