Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(46290)

Delta Between Two Patch Sets: Modules/_sha3/kcp/KeccakHash.c

Issue 16113: Add SHA-3 (Keccak) support
Left Patch Set: Created 6 years, 11 months ago
Right Patch Set: Created 3 years, 1 month ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « Modules/_sha3/kcp/align.h ('k') | Modules/_sha3/kcp/KeccakHash.h » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
1 /*
2 Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni,
3 Joan Daemen, Michaƫl Peeters, Gilles Van Assche and Ronny Van Keer, hereby
4 denoted as "the implementer".
5
6 For more information, feedback or questions, please refer to our websites:
7 http://keccak.noekeon.org/
8 http://keyak.noekeon.org/
9 http://ketje.noekeon.org/
10
11 To the extent possible under law, the implementer has waived all copyright
12 and related or neighboring rights to the source code in this file.
13 http://creativecommons.org/publicdomain/zero/1.0/
14 */
15
16 #include <string.h>
17 #include "KeccakHash.h"
18
19 /* ---------------------------------------------------------------- */
20
21 HashReturn Keccak_HashInitialize(Keccak_HashInstance *instance, unsigned int rat e, unsigned int capacity, unsigned int hashbitlen, unsigned char delimitedSuffix )
22 {
23 HashReturn result;
24
25 if (delimitedSuffix == 0)
26 return FAIL;
27 result = (HashReturn)KeccakWidth1600_SpongeInitialize(&instance->sponge, rat e, capacity);
28 if (result != SUCCESS)
29 return result;
30 instance->fixedOutputLength = hashbitlen;
31 instance->delimitedSuffix = delimitedSuffix;
32 return SUCCESS;
33 }
34
35 /* ---------------------------------------------------------------- */
36
37 HashReturn Keccak_HashUpdate(Keccak_HashInstance *instance, const BitSequence *d ata, DataLength databitlen)
38 {
39 if ((databitlen % 8) == 0)
40 return (HashReturn)KeccakWidth1600_SpongeAbsorb(&instance->sponge, data, databitlen/8);
41 else {
42 HashReturn ret = (HashReturn)KeccakWidth1600_SpongeAbsorb(&instance->spo nge, data, databitlen/8);
43 if (ret == SUCCESS) {
44 /* The last partial byte is assumed to be aligned on the least signi ficant bits */
45
46 unsigned char lastByte = data[databitlen/8];
47 /* Concatenate the last few bits provided here with those of the suf fix */
48
49 unsigned short delimitedLastBytes = (unsigned short)((unsigned short )lastByte | ((unsigned short)instance->delimitedSuffix << (databitlen % 8)));
50 if ((delimitedLastBytes & 0xFF00) == 0x0000) {
51 instance->delimitedSuffix = delimitedLastBytes & 0xFF;
52 }
53 else {
54 unsigned char oneByte[1];
55 oneByte[0] = delimitedLastBytes & 0xFF;
56 ret = (HashReturn)KeccakWidth1600_SpongeAbsorb(&instance->sponge , oneByte, 1);
57 instance->delimitedSuffix = (delimitedLastBytes >> 8) & 0xFF;
58 }
59 }
60 return ret;
61 }
62 }
63
64 /* ---------------------------------------------------------------- */
65
66 HashReturn Keccak_HashFinal(Keccak_HashInstance *instance, BitSequence *hashval)
67 {
68 HashReturn ret = (HashReturn)KeccakWidth1600_SpongeAbsorbLastFewBits(&instan ce->sponge, instance->delimitedSuffix);
69 if (ret == SUCCESS)
70 return (HashReturn)KeccakWidth1600_SpongeSqueeze(&instance->sponge, hash val, instance->fixedOutputLength/8);
71 else
72 return ret;
73 }
74
75 /* ---------------------------------------------------------------- */
76
77 HashReturn Keccak_HashSqueeze(Keccak_HashInstance *instance, BitSequence *data, DataLength databitlen)
78 {
79 if ((databitlen % 8) != 0)
80 return FAIL;
81 return (HashReturn)KeccakWidth1600_SpongeSqueeze(&instance->sponge, data, da tabitlen/8);
82 }
LEFTRIGHT

RSS Feeds Recent Issues | This issue
This is Rietveld 894c83f36cb7+