3939void  mld_keccakf1600_extract_bytes (uint64_t  * state , unsigned char   * data ,
4040                                   unsigned  offset , unsigned  length )
4141{
42+ #if  defined(MLD_USE_FIPS202_X1_XOR_NATIVE )
43+   mld_keccakf1600_extract_bytes_native (state , data , offset , length );
44+ #elif  defined(MLD_SYS_LITTLE_ENDIAN )
4245  unsigned  i ;
43- #if  defined(MLD_SYS_LITTLE_ENDIAN )
4446  uint8_t  * state_ptr  =  (uint8_t  * )state  +  offset ;
4547  for  (i  =  0 ; i  <  length ; i ++ )
4648  __loop__ (invariant (i  <= length ))
4749  {
4850    data [i ] =  state_ptr [i ];
4951  }
50- #else   /* MLD_SYS_LITTLE_ENDIAN */ 
52+ #else   /* !MLD_USE_FIPS202_X1_XOR_NATIVE && MLD_SYS_LITTLE_ENDIAN */ 
53+   unsigned  i ;
5154  /* Portable version */ 
5255  for  (i  =  0 ; i  <  length ; i ++ )
5356  __loop__ (invariant (i  <= length ))
5457  {
5558    data [i ] =  (state [(offset  +  i ) >> 3 ] >> (8  *  ((offset  +  i ) &  0x07 ))) &  0xFF ;
5659  }
57- #endif  /* !MLD_SYS_LITTLE_ENDIAN */ 
60+ #endif  /* !MLD_USE_FIPS202_X1_XOR_NATIVE && ! MLD_SYS_LITTLE_ENDIAN */ 
5861}
5962
6063void  mld_keccakf1600_xor_bytes (uint64_t  * state , const  unsigned char   * data ,
6164                               unsigned  offset , unsigned  length )
6265{
66+ #if  defined(MLD_USE_FIPS202_X1_XOR_NATIVE )
67+   mld_keccakf1600_xor_bytes_native (state , data , offset , length );
68+ #elif  defined(MLD_SYS_LITTLE_ENDIAN )
6369  unsigned  i ;
64- #if  defined(MLD_SYS_LITTLE_ENDIAN )
6570  uint8_t  * state_ptr  =  (uint8_t  * )state  +  offset ;
6671  for  (i  =  0 ; i  <  length ; i ++ )
6772  __loop__ (invariant (i  <= length ))
6873  {
6974    state_ptr [i ] ^= data [i ];
7075  }
71- #else   /* MLD_SYS_LITTLE_ENDIAN */ 
76+ #else   /* !MLD_USE_FIPS202_X1_XOR_NATIVE && MLD_SYS_LITTLE_ENDIAN */ 
77+   unsigned  i ;
7278  /* Portable version */ 
7379  for  (i  =  0 ; i  <  length ; i ++ )
7480  __loop__ (invariant (i  <= length ))
7581  {
7682    state [(offset  +  i ) >> 3 ] ^= (uint64_t )data [i ]
7783                                << (8  *  ((offset  +  i ) &  0x07 ));
7884  }
79- #endif  /* !MLD_SYS_LITTLE_ENDIAN */ 
85+ #endif  /* !MLD_USE_FIPS202_X1_XOR_NATIVE && ! MLD_SYS_LITTLE_ENDIAN */ 
8086}
8187
8288void  mld_keccakf1600x4_extract_bytes (uint64_t  * state , unsigned char   * data0 ,
8389                                     unsigned char   * data1 , unsigned char   * data2 ,
8490                                     unsigned char   * data3 , unsigned  offset ,
8591                                     unsigned  length )
8692{
93+ #if  defined(MLD_USE_FIPS202_X4_XOR_NATIVE )
94+   mld_keccakf1600_extract_bytes_x4_native (state , data0 , data1 , data2 , data3 ,
95+                                           offset , length );
96+ #else 
8797  mld_keccakf1600_extract_bytes (state  +  MLD_KECCAK_LANES  *  0 , data0 , offset ,
8898                                length );
8999  mld_keccakf1600_extract_bytes (state  +  MLD_KECCAK_LANES  *  1 , data1 , offset ,
@@ -92,6 +102,7 @@ void mld_keccakf1600x4_extract_bytes(uint64_t *state, unsigned char *data0,
92102                                length );
93103  mld_keccakf1600_extract_bytes (state  +  MLD_KECCAK_LANES  *  3 , data3 , offset ,
94104                                length );
105+ #endif  /* !MLD_USE_FIPS202_X4_XOR_NATIVE */ 
95106}
96107
97108void  mld_keccakf1600x4_xor_bytes (uint64_t  * state , const  unsigned char   * data0 ,
@@ -100,6 +111,10 @@ void mld_keccakf1600x4_xor_bytes(uint64_t *state, const unsigned char *data0,
100111                                 const  unsigned char   * data3 , unsigned  offset ,
101112                                 unsigned  length )
102113{
114+ #if  defined(MLD_USE_FIPS202_X4_XOR_NATIVE )
115+   mld_keccakf1600_xor_bytes_x4_native (state , data0 , data1 , data2 , data3 , offset ,
116+                                       length );
117+ #else 
103118  mld_keccakf1600_xor_bytes (state  +  MLD_KECCAK_LANES  *  0 , data0 , offset ,
104119                            length );
105120  mld_keccakf1600_xor_bytes (state  +  MLD_KECCAK_LANES  *  1 , data1 , offset ,
@@ -108,6 +123,7 @@ void mld_keccakf1600x4_xor_bytes(uint64_t *state, const unsigned char *data0,
108123                            length );
109124  mld_keccakf1600_xor_bytes (state  +  MLD_KECCAK_LANES  *  3 , data3 , offset ,
110125                            length );
126+ #endif  /* !MLD_USE_FIPS202_X4_XOR_NATIVE */ 
111127}
112128
113129void  mld_keccakf1600x4_permute (uint64_t  * state )
0 commit comments