diff options
author | Christian Heimes <christian@python.org> | 2016-09-07 11:01:15 (GMT) |
---|---|---|
committer | Christian Heimes <christian@python.org> | 2016-09-07 11:01:15 (GMT) |
commit | fa15c854d2dca4dd1ebce6ddb4082224354e4e94 (patch) | |
tree | 3c54ad32c0ab6471720ce34d44b9da3b82814e0a /Modules | |
parent | 393b82e4c165e7f766560965d528b54fb9c99391 (diff) | |
download | cpython-fa15c854d2dca4dd1ebce6ddb4082224354e4e94.zip cpython-fa15c854d2dca4dd1ebce6ddb4082224354e4e94.tar.gz cpython-fa15c854d2dca4dd1ebce6ddb4082224354e4e94.tar.bz2 |
Issue #16113: take 2 on big endian machines.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_sha3/kcp/KeccakP-1600-inplace32BI.c | 20 |
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 886dc44..8382ae5 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; |