»Core Development>Code coverage>Modules/_sha3/keccak/KeccakNISTInterface.c

Python code coverage for Modules/_sha3/keccak/KeccakNISTInterface.c

#countcontent
1n/a/*
2n/aThe Keccak sponge function, designed by Guido Bertoni, Joan Daemen,
3n/aMichaël Peeters and Gilles Van Assche. For more information, feedback or
4n/aquestions, please refer to our website: http://keccak.noekeon.org/
5n/a
6n/aImplementation by the designers,
7n/ahereby denoted as "the implementer".
8n/a
9n/aTo the extent possible under law, the implementer has waived all copyright
10n/aand related or neighboring rights to the source code in this file.
11n/ahttp://creativecommons.org/publicdomain/zero/1.0/
12n/a*/
13n/a
14n/a#include <string.h>
15n/a#include "KeccakNISTInterface.h"
16n/a#include "KeccakF-1600-interface.h"
17n/a
18n/astatic HashReturn Init(hashState *state, int hashbitlen)
19n/a{
20n/a switch(hashbitlen) {
21n/a case 0: /* Default parameters, arbitrary length output */
22n/a InitSponge((spongeState*)state, 1024, 576);
23n/a break;
24n/a case 224:
25n/a InitSponge((spongeState*)state, 1152, 448);
26n/a break;
27n/a case 256:
28n/a InitSponge((spongeState*)state, 1088, 512);
29n/a break;
30n/a case 384:
31n/a InitSponge((spongeState*)state, 832, 768);
32n/a break;
33n/a case 512:
34n/a InitSponge((spongeState*)state, 576, 1024);
35n/a break;
36n/a default:
37n/a return BAD_HASHLEN;
38n/a }
39n/a state->fixedOutputLength = hashbitlen;
40n/a return SUCCESS;
41n/a}
42n/a
43n/astatic HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen)
44n/a{
45n/a if ((databitlen % 8) == 0)
46n/a return Absorb((spongeState*)state, data, databitlen);
47n/a else {
48n/a HashReturn ret = Absorb((spongeState*)state, data, databitlen - (databitlen % 8));
49n/a if (ret == SUCCESS) {
50n/a unsigned char lastByte;
51n/a /* Align the last partial byte to the least significant bits */
52n/a lastByte = data[databitlen/8] >> (8 - (databitlen % 8));
53n/a return Absorb((spongeState*)state, &lastByte, databitlen % 8);
54n/a }
55n/a else
56n/a return ret;
57n/a }
58n/a}
59n/a
60n/astatic HashReturn Final(hashState *state, BitSequence *hashval)
61n/a{
62n/a return Squeeze(state, hashval, state->fixedOutputLength);
63n/a}
64n/a
65n/a/*
66n/astatic HashReturn Hash(int hashbitlen, const BitSequence *data, DataLength databitlen, BitSequence *hashval)
67n/a{
68n/a hashState state;
69n/a HashReturn result;
70n/a
71n/a if ((hashbitlen != 224) && (hashbitlen != 256) && (hashbitlen != 384) && (hashbitlen != 512))
72n/a return BAD_HASHLEN; * Only the four fixed output lengths available through this API *
73n/a result = Init(&state, hashbitlen);
74n/a if (result != SUCCESS)
75n/a return result;
76n/a result = Update(&state, data, databitlen);
77n/a if (result != SUCCESS)
78n/a return result;
79n/a result = Final(&state, hashval);
80n/a return result;
81n/a}
82n/a*/
83n/a