FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Modules/_sha3/kcp/KeccakHash.c at pythoncapi · pythoncapi/cpython · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
pythoncapi
/
cpython
Public
forked from
python/cpython
Notifications
You must be signed in to change notification settings
Fork
0
Star
1
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Modules
/
_sha3
/
kcp
/
KeccakHash.c
Copy path
More file actions
More file actions
Latest commit
History
History
History
82 lines (68 loc) · 3.19 KB
Breadcrumbs
cpython
/
Modules
/
_sha3
/
kcp
/
KeccakHash.c
Copy path
File metadata and controls
82 lines (68 loc) · 3.19 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni,
Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby
denoted as "the implementer".
For more information, feedback or questions, please refer to our websites:
http://keccak.noekeon.org/
http://keyak.noekeon.org/
http://ketje.noekeon.org/
To the extent possible under law, the implementer has waived all copyright
and related or neighboring rights to the source code in this file.
http://creativecommons.org/publicdomain/zero/1.0/
*/
#include
<string.h>
#include
"KeccakHash.h"
/* ---------------------------------------------------------------- */
HashReturn
Keccak_HashInitialize
(
Keccak_HashInstance
*
instance
,
unsigned
int
rate
,
unsigned
int
capacity
,
unsigned
int
hashbitlen
,
unsigned
char
delimitedSuffix
)
{
HashReturn
result
;
if
(
delimitedSuffix
==
0
)
return
FAIL
;
result
=
(
HashReturn
)
KeccakWidth1600_SpongeInitialize
(
&
instance
->
sponge
,
rate
,
capacity
);
if
(
result
!=
SUCCESS
)
return
result
;
instance
->
fixedOutputLength
=
hashbitlen
;
instance
->
delimitedSuffix
=
delimitedSuffix
;
return
SUCCESS
;
}
/* ---------------------------------------------------------------- */
HashReturn
Keccak_HashUpdate
(
Keccak_HashInstance
*
instance
,
const
BitSequence
*
data
,
DataLength
databitlen
)
{
if
((
databitlen
%
8
)
==
0
)
return
(
HashReturn
)
KeccakWidth1600_SpongeAbsorb
(
&
instance
->
sponge
,
data
,
databitlen
/
8
);
else
{
HashReturn
ret
=
(
HashReturn
)
KeccakWidth1600_SpongeAbsorb
(
&
instance
->
sponge
,
data
,
databitlen
/
8
);
if
(
ret
==
SUCCESS
) {
/* The last partial byte is assumed to be aligned on the least significant bits */
unsigned
char
lastByte
=
data
[
databitlen
/
8
];
/* Concatenate the last few bits provided here with those of the suffix */
unsigned short
delimitedLastBytes
=
(
unsigned short
)((
unsigned short
)
lastByte
| ((
unsigned short
)
instance
->
delimitedSuffix
<< (
databitlen
%
8
)));
if
((
delimitedLastBytes
&
0xFF00
)
==
0x0000
) {
instance
->
delimitedSuffix
=
delimitedLastBytes
&
0xFF
;
}
else
{
unsigned
char
oneByte
[
1
];
oneByte
[
0
]
=
delimitedLastBytes
&
0xFF
;
ret
=
(
HashReturn
)
KeccakWidth1600_SpongeAbsorb
(
&
instance
->
sponge
,
oneByte
,
1
);
instance
->
delimitedSuffix
=
(
delimitedLastBytes
>>
8
)
&
0xFF
;
}
}
return
ret
;
}
}
/* ---------------------------------------------------------------- */
HashReturn
Keccak_HashFinal
(
Keccak_HashInstance
*
instance
,
BitSequence
*
hashval
)
{
HashReturn
ret
=
(
HashReturn
)
KeccakWidth1600_SpongeAbsorbLastFewBits
(
&
instance
->
sponge
,
instance
->
delimitedSuffix
);
if
(
ret
==
SUCCESS
)
return
(
HashReturn
)
KeccakWidth1600_SpongeSqueeze
(
&
instance
->
sponge
,
hashval
,
instance
->
fixedOutputLength
/
8
);
else
return
ret
;
}
/* ---------------------------------------------------------------- */
HashReturn
Keccak_HashSqueeze
(
Keccak_HashInstance
*
instance
,
BitSequence
*
data
,
DataLength
databitlen
)
{
if
((
databitlen
%
8
)
!=
0
)
return
FAIL
;
return
(
HashReturn
)
KeccakWidth1600_SpongeSqueeze
(
&
instance
->
sponge
,
data
,
databitlen
/
8
);
}
Back
|
FazBrowse Home
|
New Git URL