fixed Salsa20 initialization crash on non-SSE2 machines
parent
d42ea79cd7
commit
b130b99781
17
salsa.cpp
17
salsa.cpp
|
|
@ -72,11 +72,6 @@ unsigned int Salsa20_Policy::GetOptimalBlockSize() const
|
|||
}
|
||||
#endif
|
||||
|
||||
#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
|
||||
static const __m128i s_maskLo32 = _mm_shuffle_epi32(_mm_cvtsi32_si128(-1), _MM_SHUFFLE(1, 0, 1, 0));
|
||||
static const __m128i s_maskHi32 = _mm_slli_epi64(s_maskLo32, 32);
|
||||
#endif
|
||||
|
||||
void Salsa20_Policy::OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount)
|
||||
{
|
||||
int i;
|
||||
|
|
@ -207,9 +202,13 @@ void Salsa20_Policy::OperateKeystream(KeystreamOperation operation, byte *output
|
|||
}
|
||||
#endif
|
||||
|
||||
if (!IsP4()) while (iterationCount)
|
||||
if (!IsP4() && iterationCount > 0)
|
||||
{
|
||||
const __m128i s_maskLo32 = _mm_shuffle_epi32(_mm_cvtsi32_si128(-1), _MM_SHUFFLE(1, 0, 1, 0));
|
||||
const __m128i s_maskHi32 = _mm_slli_epi64(s_maskLo32, 32);
|
||||
|
||||
do
|
||||
{
|
||||
--iterationCount;
|
||||
__m128i x0 = s[0];
|
||||
__m128i x1 = s[1];
|
||||
__m128i x2 = s[2];
|
||||
|
|
@ -264,6 +263,8 @@ void Salsa20_Policy::OperateKeystream(KeystreamOperation operation, byte *output
|
|||
|
||||
CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH(SSE2_OUTPUT, BYTES_PER_ITERATION);
|
||||
}
|
||||
while (--iterationCount);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -325,7 +326,9 @@ void Salsa20_Policy::OperateKeystream(KeystreamOperation operation, byte *output
|
|||
CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 14, x6 + m_state[6]);\
|
||||
CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 15, x3 + m_state[3]);}
|
||||
|
||||
#ifndef CRYPTOPP_DOXYGEN_PROCESSING
|
||||
CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH(SALSA_OUTPUT, BYTES_PER_ITERATION);
|
||||
#endif
|
||||
|
||||
if (++m_state[8] == 0)
|
||||
++m_state[5];
|
||||
|
|
|
|||
Loading…
Reference in New Issue