@@ -1400,16 +1400,12 @@ static void mldsa_vec_encode_t0_t1_c(const sword32* t, byte d, byte* t0,
14001400
14011401 /* 13 bits per number.
14021402 * 8 numbers become 13 bytes. (8 * 13 bits = 13 * 8 bits) */
1403- #if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT <= 2 )
1404- word32 * tp ;
1405- #endif
14061403 #if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT == 0 )
1407- tp = (word32 * )t0 ;
1408- writeUnalignedWord32 (tp + 0 , (n0_0 ) | ((word32 )n0_1 << 13 ) |
1404+ writeUnalignedWord32 (t0 + 0 , (n0_0 ) | ((word32 )n0_1 << 13 ) |
14091405 ((word32 )n0_2 << 26 ));
1410- writeUnalignedWord32 (tp + 1 , (n0_2 >> 6 ) | ((word32 )n0_3 << 7 ) |
1406+ writeUnalignedWord32 (t0 + 4 , (n0_2 >> 6 ) | ((word32 )n0_3 << 7 ) |
14111407 ((word32 )n0_4 << 20 ));
1412- writeUnalignedWord32 (tp + 2 , (n0_4 >> 12 ) | ((word32 )n0_5 << 1 ) |
1408+ writeUnalignedWord32 (t0 + 8 , (n0_4 >> 12 ) | ((word32 )n0_5 << 1 ) |
14131409 ((word32 )n0_6 << 14 ) | ((word32 )n0_7 << 27 ));
14141410 #else
14151411 t0 [ 0 ] = (byte )( (n0_0 << 0 ));
@@ -1430,10 +1426,9 @@ static void mldsa_vec_encode_t0_t1_c(const sword32* t, byte d, byte* t0,
14301426 /* 10 bits per number.
14311427 * 8 bytes become 10 bytes. (8 * 10 bits = 10 * 8 bits) */
14321428 #if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT <= 2 )
1433- tp = (word32 * )t1 ;
1434- writeUnalignedWord32 (tp + 0 , (n1_0 ) | ((word32 )n1_1 << 10 ) |
1429+ writeUnalignedWord32 (t1 + 0 , (n1_0 ) | ((word32 )n1_1 << 10 ) |
14351430 ((word32 )n1_2 << 20 ) | ((word32 )n1_3 << 30 ));
1436- writeUnalignedWord32 (tp + 1 , (n1_3 >> 2 ) | ((word32 )n1_4 << 8 ) |
1431+ writeUnalignedWord32 (t1 + 4 , (n1_3 >> 2 ) | ((word32 )n1_4 << 8 ) |
14371432 ((word32 )n1_5 << 18 ) | ((word32 )n1_6 << 28 ));
14381433 #else
14391434 t1 [0 ] = (byte )( (n1_0 << 0 ));
@@ -1632,7 +1627,7 @@ static void mldsa_decode_t1_c(const byte* t1, sword32* t)
16321627#if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT == 0 )
16331628 #ifdef WC_64BIT_CPU
16341629 word64 t64 = readUnalignedWord64 (t1 );
1635- word16 t16 = * ( const word16 * )( t1 + 8 );
1630+ word16 t16 = ( word16 )(( word16 ) t1 [ 8 ] | (( word16 ) t1 [ 9 ] << 8 ) );
16361631 t [j + 0 ] = (sword32 )( ( t64 & 0x03ff ) << MLDSA_D );
16371632 t [j + 1 ] = (sword32 )( ((t64 >> 10 ) & 0x03ff ) << MLDSA_D );
16381633 t [j + 2 ] = (sword32 )( ((t64 >> 20 ) & 0x03ff ) << MLDSA_D );
@@ -1768,13 +1763,11 @@ static void mldsa_encode_gamma1_17_bits_c(const sword32* z, byte* s)
17681763 * 8 numbers become 9 bytes. (8 * 9 bits = 9 * 8 bits) */
17691764#if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT == 0 )
17701765 #ifdef WC_64BIT_CPU
1771- word64 * s64p = (word64 * )s ;
1772- writeUnalignedWord64 (s64p , z0 | ((word64 )z1 << 18 ) |
1766+ writeUnalignedWord64 (s , z0 | ((word64 )z1 << 18 ) |
17731767 ((word64 )z2 << 36 ) | ((word64 )z3 << 54 ));
17741768 #else
1775- word32 * s32p = (word32 * )s ;
1776- writeUnalignedWord32 (s32p + 0 , z0 | (z1 << 18 ) );
1777- writeUnalignedWord32 (s32p + 1 , (z1 >> 14 ) | (z2 << 4 ) | (z3 << 22 ));
1769+ writeUnalignedWord32 (s + 0 , z0 | (z1 << 18 ) );
1770+ writeUnalignedWord32 (s + 4 , (z1 >> 14 ) | (z2 << 4 ) | (z3 << 22 ));
17781771 #endif
17791772#else
17801773 s [0 ] = (byte )( z0 );
@@ -1836,17 +1829,15 @@ static void mldsa_encode_gamma1_19_bits_c(const sword32* z, byte* s)
18361829 /* 20 bits per number.
18371830 * 4 numbers become 10 bytes. (4 * 20 bits = 10 * 8 bits) */
18381831#if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT <= 2 )
1839- word16 * s16p = (word16 * )s ;
18401832 #ifdef WC_64BIT_CPU
1841- word64 * s64p = (word64 * )s ;
1842- writeUnalignedWord64 (s64p , (word64 )z0 | ((word64 )z1 << 20 ) |
1833+ writeUnalignedWord64 (s , (word64 )z0 | ((word64 )z1 << 20 ) |
18431834 ((word64 )z2 << 40 ) | ((word64 )z3 << 60 ));
18441835 #else
1845- word32 * s32p = (word32 * )s ;
1846- s32p [0 ] = (word32 )( z0 | (z1 << 20 ) );
1847- s32p [1 ] = (word32 )((z1 >> 12 ) | (z2 << 8 ) | (z3 << 28 ));
1836+ writeUnalignedWord32 (s + 0 , (word32 )( z0 | (z1 << 20 ) ));
1837+ writeUnalignedWord32 (s + 4 , (word32 )((z1 >> 12 ) | (z2 << 8 ) | (z3 << 28 )));
18481838 #endif
1849- s16p [4 ] = (word16 )((z3 >> 4 ) );
1839+ s [8 ] = (byte ) (z3 >> 4 );
1840+ s [9 ] = (byte ) (z3 >> 12 );
18501841#else
18511842 s [0 ] = (byte ) z0 ;
18521843 s [1 ] = (byte ) (z0 >> 8 ) ;
@@ -2126,8 +2117,8 @@ static void mldsa_decode_gamma1_c(const byte* s, int bits, sword32* z)
21262117 /* 20 bits per number.
21272118 * 8 numbers from 20 bytes. (8 * 20 bits = 20 * 8 bits) */
21282119 #if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT <= 2 )
2129- word16 s16_0 = (( const word16 * ) s )[ 4 ] ;
2130- word16 s16_1 = (( const word16 * ) s )[ 9 ] ;
2120+ word16 s16_0 = (word16 )(( word16 ) s [ 8 ] | (( word16 ) s [ 9 ] << 8 )) ;
2121+ word16 s16_1 = (word16 )(( word16 ) s [ 18 ] | (( word16 ) s [ 19 ] << 8 )) ;
21312122 #ifdef WC_64BIT_CPU
21322123 word64 s64_0 = readUnalignedWord64 (s + 0 );
21332124 word64 s64_1 = readUnalignedWord64 (s + 10 );
@@ -2289,25 +2280,24 @@ static void mldsa_encode_w1_88_c(const sword32* w1, byte* w1e)
22892280 /* 6 bits per number.
22902281 * 16 numbers in 12 bytes. (16 * 6 bits = 12 * 8 bits) */
22912282#if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT <= 4 )
2292- word32 * w1e32 = (word32 * )w1e ;
2293- w1e32 [0 ] = (word32 )( (word32 )w1 [j + 0 ] |
2283+ writeUnalignedWord32 (w1e + 0 , (word32 )( (word32 )w1 [j + 0 ] |
22942284 ((word32 )w1 [j + 1 ] << 6 ) |
22952285 ((word32 )w1 [j + 2 ] << 12 ) |
22962286 ((word32 )w1 [j + 3 ] << 18 ) |
22972287 ((word32 )w1 [j + 4 ] << 24 ) |
2298- ((word32 )w1 [j + 5 ] << 30 ));
2299- w1e32 [ 1 ] = (word32 )(((word32 )w1 [j + 5 ] >> 2 ) |
2288+ ((word32 )w1 [j + 5 ] << 30 ))) ;
2289+ writeUnalignedWord32 ( w1e + 4 , (word32 )(((word32 )w1 [j + 5 ] >> 2 ) |
23002290 ((word32 )w1 [j + 6 ] << 4 ) |
23012291 ((word32 )w1 [j + 7 ] << 10 ) |
23022292 ((word32 )w1 [j + 8 ] << 16 ) |
23032293 ((word32 )w1 [j + 9 ] << 22 ) |
2304- ((word32 )w1 [j + 10 ] << 28 ));
2305- w1e32 [ 2 ] = (word32 )(((word32 )w1 [j + 10 ] >> 4 ) |
2294+ ((word32 )w1 [j + 10 ] << 28 ))) ;
2295+ writeUnalignedWord32 ( w1e + 8 , (word32 )(((word32 )w1 [j + 10 ] >> 4 ) |
23062296 ((word32 )w1 [j + 11 ] << 2 ) |
23072297 ((word32 )w1 [j + 12 ] << 8 ) |
23082298 ((word32 )w1 [j + 13 ] << 14 ) |
23092299 ((word32 )w1 [j + 14 ] << 20 ) |
2310- ((word32 )w1 [j + 15 ] << 26 ));
2300+ ((word32 )w1 [j + 15 ] << 26 ))) ;
23112301#else
23122302 w1e [ 0 ] = (byte )( w1 [j + 0 ] | (w1 [j + 1 ] << 6 ));
23132303 w1e [ 1 ] = (byte )((w1 [j + 1 ] >> 2 ) | (w1 [j + 2 ] << 4 ));
@@ -2375,23 +2365,22 @@ static void mldsa_encode_w1_32_c(const sword32* w1, byte* w1e)
23752365 /* 4 bits per number.
23762366 * 16 numbers in 8 bytes. (16 * 4 bits = 8 * 8 bits) */
23772367#if defined(LITTLE_ENDIAN_ORDER ) && (WOLFSSL_MLDSA_ALIGNMENT <= 8 )
2378- word32 * w1e32 = (word32 * )w1e ;
2379- w1e32 [0 ] = (word32 )(((word32 )w1 [j + 0 ] << 0 ) |
2368+ writeUnalignedWord32 (w1e + 0 , (word32 )(((word32 )w1 [j + 0 ] << 0 ) |
23802369 ((word32 )w1 [j + 1 ] << 4 ) |
23812370 ((word32 )w1 [j + 2 ] << 8 ) |
23822371 ((word32 )w1 [j + 3 ] << 12 ) |
23832372 ((word32 )w1 [j + 4 ] << 16 ) |
23842373 ((word32 )w1 [j + 5 ] << 20 ) |
23852374 ((word32 )w1 [j + 6 ] << 24 ) |
2386- ((word32 )w1 [j + 7 ] << 28 ));
2387- w1e32 [ 1 ] = (word32 )(((word32 )w1 [j + 8 ] << 0 ) |
2375+ ((word32 )w1 [j + 7 ] << 28 ))) ;
2376+ writeUnalignedWord32 ( w1e + 4 , (word32 )(((word32 )w1 [j + 8 ] << 0 ) |
23882377 ((word32 )w1 [j + 9 ] << 4 ) |
23892378 ((word32 )w1 [j + 10 ] << 8 ) |
23902379 ((word32 )w1 [j + 11 ] << 12 ) |
23912380 ((word32 )w1 [j + 12 ] << 16 ) |
23922381 ((word32 )w1 [j + 13 ] << 20 ) |
23932382 ((word32 )w1 [j + 14 ] << 24 ) |
2394- ((word32 )w1 [j + 15 ] << 28 ));
2383+ ((word32 )w1 [j + 15 ] << 28 ))) ;
23952384#else
23962385 w1e [0 ] = (byte )(w1 [j + 0 ] | (w1 [j + 1 ] << 4 ));
23972386 w1e [1 ] = (byte )(w1 [j + 2 ] | (w1 [j + 3 ] << 4 ));
@@ -2553,7 +2542,7 @@ static int mldsa_rej_ntt_poly_ex(wc_Shake* shake128, byte* seed, sword32* a,
25532542 #if defined(LITTLE_ENDIAN_ORDER ) && \
25542543 (WOLFSSL_MLDSA_ALIGNMENT == 0 )
25552544 /* Load 32-bit value and mask out 23 bits. */
2556- sword32 t = * (( sword32 * ) (h + c ) ) & 0x7fffff ;
2545+ sword32 t = ( sword32 ) readUnalignedWord32 (h + c ) & 0x7fffff ;
25572546 #else
25582547 /* Load 24-bit value and mask out 23 bits. */
25592548 sword32 t = (h [c ] + ((sword32 )h [c + 1 ] << 8 ) +
@@ -2710,7 +2699,7 @@ static int mldsa_rej_ntt_poly_ex(wc_Shake* shake128, byte* seed, sword32* a,
27102699 #if defined(LITTLE_ENDIAN_ORDER ) && \
27112700 (WOLFSSL_MLDSA_ALIGNMENT == 0 )
27122701 /* Load 32-bit value and mask out 23 bits. */
2713- sword32 t = * (( sword32 * ) (h + c ) ) & 0x7fffff ;
2702+ sword32 t = ( sword32 ) readUnalignedWord32 (h + c ) & 0x7fffff ;
27142703 #else
27152704 /* Load 24-bit value and mask out 23 bits. */
27162705 sword32 t = (h [c ] + ((sword32 )h [c + 1 ] << 8 ) +
0 commit comments