aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2016-09-07 13:01:15 +0200
committerChristian Heimes <christian@python.org>2016-09-07 13:01:15 +0200
commitfa15c854d2dca4dd1ebce6ddb4082224354e4e94 (patch)
tree3c54ad32c0ab6471720ce34d44b9da3b82814e0a /Modules/_sha3
parentIssue #16113: compile the module on Windows, too. (diff)
downloadcpython-fa15c854d2dca4dd1ebce6ddb4082224354e4e94.tar.gz
cpython-fa15c854d2dca4dd1ebce6ddb4082224354e4e94.tar.bz2
cpython-fa15c854d2dca4dd1ebce6ddb4082224354e4e94.zip
Issue #16113: take 2 on big endian machines.
Diffstat (limited to 'Modules/_sha3')
-rw-r--r--Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c
index 886dc441971..8382ae53b48 100644
--- a/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c
+++ b/Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c
@@ -188,17 +188,18 @@ void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int l
unsigned int lanePosition;
for(lanePosition=0; lanePosition<laneCount; lanePosition++) {
UINT8 laneAsBytes[8];
+ UINT32 low, high, temp, temp0, temp1;
+ UINT32 *stateAsHalfLanes;
memcpy(laneAsBytes, data+lanePosition*8, 8);
- UINT32 low = laneAsBytes[0]
+ low = laneAsBytes[0]
| ((UINT32)(laneAsBytes[1]) << 8)
| ((UINT32)(laneAsBytes[2]) << 16)
| ((UINT32)(laneAsBytes[3]) << 24);
- UINT32 high = laneAsBytes[4]
+ high = laneAsBytes[4]
| ((UINT32)(laneAsBytes[5]) << 8)
| ((UINT32)(laneAsBytes[6]) << 16)
| ((UINT32)(laneAsBytes[7]) << 24);
- UINT32 even, odd, temp, temp0, temp1;
- UINT32 *stateAsHalfLanes = (UINT32*)state;
+ stateAsHalfLanes = (UINT32*)state;
toBitInterleavingAndXOR(low, high, stateAsHalfLanes[lanePosition*2+0], stateAsHalfLanes[lanePosition*2+1], temp, temp0, temp1);
}
#endif
@@ -243,17 +244,18 @@ void KeccakP1600_OverwriteLanes(void *state, const unsigned char *data, unsigned
unsigned int lanePosition;
for(lanePosition=0; lanePosition<laneCount; lanePosition++) {
UINT8 laneAsBytes[8];
+ UINT32 low, high, temp, temp0, temp1;
+ UINT32 *stateAsHalfLanes;
memcpy(laneAsBytes, data+lanePosition*8, 8);
- UINT32 low = laneAsBytes[0]
+ low = laneAsBytes[0]
| ((UINT32)(laneAsBytes[1]) << 8)
| ((UINT32)(laneAsBytes[2]) << 16)
| ((UINT32)(laneAsBytes[3]) << 24);
- UINT32 high = laneAsBytes[4]
+ high = laneAsBytes[4]
| ((UINT32)(laneAsBytes[5]) << 8)
| ((UINT32)(laneAsBytes[6]) << 16)
| ((UINT32)(laneAsBytes[7]) << 24);
- UINT32 even, odd, temp, temp0, temp1;
- UINT32 *stateAsHalfLanes = (UINT32*)state;
+ stateAsHalfLanes = (UINT32*)state;
toBitInterleavingAndSet(low, high, stateAsHalfLanes[lanePosition*2+0], stateAsHalfLanes[lanePosition*2+1], temp, temp0, temp1);
}
#endif
@@ -406,8 +408,8 @@ void KeccakP1600_ExtractAndAddLanes(const void *state, const unsigned char *inpu
for(lanePosition=0; lanePosition<laneCount; lanePosition++) {
UINT32 *stateAsHalfLanes = (UINT32*)state;
UINT32 low, high, temp, temp0, temp1;
- fromBitInterleaving(stateAsHalfLanes[lanePosition*2], stateAsHalfLanes[lanePosition*2+1], low, high, temp, temp0, temp1);
UINT8 laneAsBytes[8];
+ fromBitInterleaving(stateAsHalfLanes[lanePosition*2], stateAsHalfLanes[lanePosition*2+1], low, high, temp, temp0, temp1);
laneAsBytes[0] = low & 0xFF;
laneAsBytes[1] = (low >> 8) & 0xFF;
laneAsBytes[2] = (low >> 16) & 0xFF;