@@ -273,27 +273,41 @@ WC_MISC_STATIC WC_INLINE void xorbufout(void* out, const void* buf,
273273{
274274 word32 i ;
275275 byte * o ;
276- byte * b ;
276+ const byte * b ;
277277 const byte * m ;
278278
279279 o = (byte * )out ;
280- b = (byte * )buf ;
280+ b = (const byte * )buf ;
281281 m = (const byte * )mask ;
282282
283283
284284 if (((wc_ptr_t )o ) % WOLFSSL_WORD_SIZE ==
285285 ((wc_ptr_t )b ) % WOLFSSL_WORD_SIZE &&
286286 ((wc_ptr_t )b ) % WOLFSSL_WORD_SIZE ==
287287 ((wc_ptr_t )m ) % WOLFSSL_WORD_SIZE ) {
288+ /* type-punning helpers */
289+ union {
290+ byte * bp ;
291+ wolfssl_word * wp ;
292+ } tpo ;
293+ union {
294+ const byte * bp ;
295+ const wolfssl_word * wp ;
296+ } tpb , tpm ;
288297 /* Alignment checks out. Possible to XOR words. */
289298 /* Move alignment so that it lines up with a
290299 * WOLFSSL_WORD_SIZE boundary */
291300 while (((wc_ptr_t )b ) % WOLFSSL_WORD_SIZE != 0 && count > 0 ) {
292301 * (o ++ ) = (byte )(* (b ++ ) ^ * (m ++ ));
293302 count -- ;
294303 }
295- XorWordsOut ( (wolfssl_word * * )& o , (const wolfssl_word * * )& b ,
296- (const wolfssl_word * * )& m , count / WOLFSSL_WORD_SIZE );
304+ tpo .bp = o ;
305+ tpb .bp = b ;
306+ tpm .bp = m ;
307+ XorWordsOut ( & tpo .wp , & tpb .wp , & tpm .wp , count / WOLFSSL_WORD_SIZE );
308+ o = tpo .bp ;
309+ b = tpb .bp ;
310+ m = tpm .bp ;
297311 count %= WOLFSSL_WORD_SIZE ;
298312 }
299313
@@ -326,15 +340,27 @@ WC_MISC_STATIC WC_INLINE void xorbuf(void* buf, const void* mask, word32 count)
326340
327341 if (((wc_ptr_t )b ) % WOLFSSL_WORD_SIZE ==
328342 ((wc_ptr_t )m ) % WOLFSSL_WORD_SIZE ) {
343+ /* type-punning helpers */
344+ union {
345+ byte * bp ;
346+ wolfssl_word * wp ;
347+ } tpb ;
348+ union {
349+ const byte * bp ;
350+ const wolfssl_word * wp ;
351+ } tpm ;
329352 /* Alignment checks out. Possible to XOR words. */
330353 /* Move alignment so that it lines up with a
331354 * WOLFSSL_WORD_SIZE boundary */
332355 while (((wc_ptr_t )buf ) % WOLFSSL_WORD_SIZE != 0 && count > 0 ) {
333356 * (b ++ ) ^= * (m ++ );
334357 count -- ;
335358 }
336- XorWords ( (wolfssl_word * * )& b ,
337- (const wolfssl_word * * )& m , count / WOLFSSL_WORD_SIZE );
359+ tpb .bp = b ;
360+ tpm .bp = m ;
361+ XorWords ( & tpb .wp , & tpm .wp , count / WOLFSSL_WORD_SIZE );
362+ b = tpb .bp ;
363+ m = tpm .bp ;
338364 count %= WOLFSSL_WORD_SIZE ;
339365 }
340366
0 commit comments