1313#if defined __GNUC__
1414#pragma GCC diagnostic push
1515#pragma GCC diagnostic ignored "-Wdeclaration-after-statement"
16+ #pragma GCC diagnostic ignored "-Wuninitialized"
1617#pragma GCC diagnostic ignored "-Wunused-function"
1718#include <emmintrin.h> /* SSE2 _mm_load_si128 _mm_loadu_si128 _mm_store_si128 _mm_set_epi32 _mm_set_epi64x _mm_setzero_si128 _mm_xor_si128 _mm_add_epi32 _mm_shuffle_epi32 */
1819#include <tmmintrin.h> /* SSSE3 _mm_shuffle_epi8 */
@@ -64,13 +65,13 @@ static int ltc_attribute_sha1 s_sha1_x86_compress(hash_state *md, const unsigned
6465
6566 LTC_ARGCHK (md != NULL );
6667 LTC_ARGCHK (buf != NULL );
67- LTC_ARGCHK (((uintptr_t )(& md -> sha1_x86 .state [0 ])) % 16 == 0 );
68+ LTC_ARGCHK (((uintptr_t )(& md -> sha1 .state [0 ])) % 16 == 0 );
6869 LTC_ARGCHK (sizeof (int ) == 4 );
6970
7071 reverse_8 = _mm_set_epi64x (0x0001020304050607ull , 0x08090a0b0c0d0e0full );
71- abcdx = _mm_load_si128 (((__m128i const * )(& md -> sha1_x86 .state [0 ])));
72+ abcdx = _mm_load_si128 (((__m128i const * )(& md -> sha1 .state [0 ])));
7273 abcdx = _mm_shuffle_epi32 (abcdx , k_reverse_32 );
73- e = _mm_set_epi32 (* ((int const * )(& md -> sha1_x86 .state [4 ])), 0 , 0 , 0 );
74+ e = _mm_set_epi32 (* ((int const * )(& md -> sha1 .state [4 ])), 0 , 0 , 0 );
7475
7576 old_abcd = abcdx ;
7677 old_e = e ;
@@ -176,8 +177,8 @@ static int ltc_attribute_sha1 s_sha1_x86_compress(hash_state *md, const unsigned
176177 e = _mm_add_epi32 (e , old_e );
177178
178179 abcdx = _mm_shuffle_epi32 (abcdx , k_reverse_32 );
179- _mm_store_si128 (((__m128i * )(& md -> sha1_x86 .state [0 ])), abcdx );
180- * ((int * )(& md -> sha1_x86 .state [4 ])) = _mm_extract_epi32 (e , 3 );
180+ _mm_store_si128 (((__m128i * )(& md -> sha1 .state [0 ])), abcdx );
181+ * ((int * )(& md -> sha1 .state [4 ])) = _mm_extract_epi32 (e , 3 );
181182
182183 return CRYPT_OK ;
183184
@@ -202,13 +203,16 @@ static int s_sha1_x86_compress(hash_state *md, const unsigned char *buf)
202203int sha1_x86_init (hash_state * md )
203204{
204205 LTC_ARGCHK (md != NULL );
205- md -> sha1_x86 .state [0 ] = 0x67452301UL ;
206- md -> sha1_x86 .state [1 ] = 0xefcdab89UL ;
207- md -> sha1_x86 .state [2 ] = 0x98badcfeUL ;
208- md -> sha1_x86 .state [3 ] = 0x10325476UL ;
209- md -> sha1_x86 .state [4 ] = 0xc3d2e1f0UL ;
210- md -> sha1_x86 .curlen = 0 ;
211- md -> sha1_x86 .length = 0 ;
206+
207+ md -> sha1 .state = LTC_ALIGN_BUF (md -> sha1 .state_buf , 16 );
208+
209+ md -> sha1 .state [0 ] = 0x67452301UL ;
210+ md -> sha1 .state [1 ] = 0xefcdab89UL ;
211+ md -> sha1 .state [2 ] = 0x98badcfeUL ;
212+ md -> sha1 .state [3 ] = 0x10325476UL ;
213+ md -> sha1 .state [4 ] = 0xc3d2e1f0UL ;
214+ md -> sha1 .curlen = 0 ;
215+ md -> sha1 .length = 0 ;
212216 return CRYPT_OK ;
213217}
214218
@@ -219,7 +223,7 @@ int sha1_x86_init(hash_state * md)
219223 @param inlen The length of the data (octets)
220224 @return CRYPT_OK if successful
221225*/
222- HASH_PROCESS (sha1_x86_process , s_sha1_x86_compress , sha1_x86 , 64 )
226+ HASH_PROCESS (sha1_x86_process , s_sha1_x86_compress , sha1 , 64 )
223227
224228/**
225229 Terminate the hash to get the digest
@@ -234,40 +238,40 @@ int sha1_x86_done(hash_state * md, unsigned char *out)
234238 LTC_ARGCHK (md != NULL );
235239 LTC_ARGCHK (out != NULL );
236240
237- if (md -> sha1_x86 .curlen >= ((int )(sizeof (md -> sha1_x86 .buf )))) {
241+ if (md -> sha1 .curlen >= ((int )(sizeof (md -> sha1 .buf )))) {
238242 return CRYPT_INVALID_ARG ;
239243 }
240244
241245 /* increase the length of the message */
242- md -> sha1_x86 .length += md -> sha1_x86 .curlen * 8 ;
246+ md -> sha1 .length += md -> sha1 .curlen * 8 ;
243247
244248 /* append the '1' bit */
245- md -> sha1_x86 .buf [md -> sha1_x86 .curlen ++ ] = (unsigned char )0x80 ;
249+ md -> sha1 .buf [md -> sha1 .curlen ++ ] = (unsigned char )0x80 ;
246250
247251 /* if the length is currently above 56 bytes we append zeros
248252 * then compress. Then we can fall back to padding zeros and length
249253 * encoding like normal.
250254 */
251- if (md -> sha1_x86 .curlen > 56 ) {
252- while (md -> sha1_x86 .curlen < 64 ) {
253- md -> sha1_x86 .buf [md -> sha1_x86 .curlen ++ ] = (unsigned char )0 ;
255+ if (md -> sha1 .curlen > 56 ) {
256+ while (md -> sha1 .curlen < 64 ) {
257+ md -> sha1 .buf [md -> sha1 .curlen ++ ] = (unsigned char )0 ;
254258 }
255- s_sha1_x86_compress (md , md -> sha1_x86 .buf );
256- md -> sha1_x86 .curlen = 0 ;
259+ s_sha1_x86_compress (md , md -> sha1 .buf );
260+ md -> sha1 .curlen = 0 ;
257261 }
258262
259263 /* pad upto 56 bytes of zeroes */
260- while (md -> sha1_x86 .curlen < 56 ) {
261- md -> sha1_x86 .buf [md -> sha1_x86 .curlen ++ ] = (unsigned char )0 ;
264+ while (md -> sha1 .curlen < 56 ) {
265+ md -> sha1 .buf [md -> sha1 .curlen ++ ] = (unsigned char )0 ;
262266 }
263267
264268 /* store length */
265- STORE64H (md -> sha1_x86 .length , md -> sha1_x86 .buf + 56 );
266- s_sha1_x86_compress (md , md -> sha1_x86 .buf );
269+ STORE64H (md -> sha1 .length , md -> sha1 .buf + 56 );
270+ s_sha1_x86_compress (md , md -> sha1 .buf );
267271
268272 /* copy output */
269273 for (i = 0 ; i < 5 ; i ++ ) {
270- STORE32H (md -> sha1_x86 .state [i ], out + (4 * i ));
274+ STORE32H (md -> sha1 .state [i ], out + (4 * i ));
271275 }
272276#ifdef LTC_CLEAN_STACK
273277 zeromem (md , sizeof (hash_state ));
0 commit comments