@@ -96,11 +96,12 @@ private static void computeSyndromes(int[] syndromes, byte[] codeWord, int delta
9696 {
9797 for (int i = 0 ; i < 2 * delta ; i ++)
9898 {
99+ int syndromes_i = syndromes [i ] ^ Utils .toUnsigned8bits (codeWord [0 ]);
99100 for (int j = 1 ; j < n1 ; j ++)
100101 {
101- syndromes [ i ] ^= GF .mul (Utils .toUnsigned8bits (codeWord [j ]), alpha [i ][j - 1 ]);
102+ syndromes_i ^= GF .mul (Utils .toUnsigned8bits (codeWord [j ]), alpha [i ][j - 1 ]);
102103 }
103- syndromes [i ] ^= Utils . toUnsigned8bits ( codeWord [ 0 ]) ;
104+ syndromes [i ] = syndromes_i ;
104105 }
105106 }
106107
@@ -131,10 +132,7 @@ private static int computeELP(int[] sigma, int[] syndromes, int delta)
131132 int degX = Utils .toUnsigned16Bits (i - pp );
132133 int degXSigmaP = Utils .toUnsigned16Bits (degX + degSigmaP );
133134
134- int firstMask = d != 0 ? 0xffff : 0 ;
135- int secondMask = degXSigmaP > degSigma ? 0xffff : 0 ;
136-
137- int mask = firstMask & secondMask ;
135+ int mask = ((d | -d ) & (degSigma - degXSigmaP )) >> 31 ;
138136 degSigma ^= mask & (degXSigmaP ^ degSigma );
139137
140138 if (i == (2 * delta - 1 ))
@@ -164,78 +162,81 @@ private static int computeELP(int[] sigma, int[] syndromes, int delta)
164162 private static void computeZx (int [] output , int [] sigma , int deg , int [] syndromes , int delta )
165163 {
166164 output [0 ] = 1 ;
167-
168- for (int i = 1 ; i < delta + 1 ; i ++)
165+ output [1 ] = syndromes [0 ];
169166 {
170- int mask = i - deg < 1 ? 0xffff : 0 ;
171- output [i ] = mask & sigma [i ];
167+ int mask = ~( deg - 1 ) >> 31 ;
168+ output [1 ] ^ = mask & sigma [1 ];
172169 }
173-
174- output [1 ] ^= syndromes [0 ];
175-
176170 for (int i = 2 ; i <= delta ; i ++)
177171 {
178- int mask = i - deg < 1 ? 0xffff : 0 ;
179- output [i ] ^= (mask ) & syndromes [i - 1 ];
172+ int out_i = sigma [i ] ^ syndromes [i - 1 ];
180173 for (int j = 1 ; j < i ; j ++)
181174 {
182- output [ i ] ^= ( mask ) & GF .mul (sigma [j ], syndromes [i - j - 1 ]);
175+ out_i ^= GF .mul (sigma [j ], syndromes [i - j - 1 ]);
183176 }
177+
178+ int mask = ~(deg - i ) >> 31 ;
179+ output [i ] = mask & out_i ;
184180 }
185181 }
186182
187183 private static void computeErrors (int [] res , int [] zx , byte [] errorCompactSet , int delta , int n1 )
188184 {
189185 int [] betaSet = new int [delta ];
190- int [] eSet = new int [delta ];
191186
192187 int deltaCount1 = 0 ;
193188 for (int i = 0 ; i < n1 ; i ++)
194189 {
190+ int ecs_i = errorCompactSet [i ] & 0xFF ;
191+ int mask = (ecs_i | -ecs_i ) >> 31 ;
192+
195193 int mark = 0 ;
196- int mask = errorCompactSet [i ] != 0 ? 0xffff : 0 ;
197194 for (int j = 0 ; j < delta ; j ++)
198195 {
199- int iMask = j == deltaCount1 ? 0xffff : 0 ;
200- betaSet [j ] += iMask & mask & expArrays [i ];
201- mark + = iMask & mask & 1 ;
196+ int iMask = ((( j ^ deltaCount1 ) - 1 ) >> 31 ) & mask ;
197+ betaSet [j ] += iMask & expArrays [i ];
198+ mark - = iMask ; // conditional +1
202199 }
203200 deltaCount1 += mark ;
204201 }
205202
203+ int [] eSet = new int [delta ];
206204 for (int i = 0 ; i < delta ; i ++)
207205 {
208- int temp1 = 1 ;
209- int temp2 = 1 ;
210206 int inv = GF .inv (betaSet [i ]);
211- int invPow = 1 ;
212207
213- for (int j = 1 ; j <= delta ; j ++)
208+ int temp1 = 0 ;
209+ for (int j = delta ; j > 0 ; --j )
214210 {
215- invPow = GF .mul (invPow , inv );
216- temp1 ^= GF .mul (invPow , zx [j ]);
211+ temp1 = GF .mul (temp1 ^ zx [j ], inv );
217212 }
213+ temp1 ^= 1 ;
218214
219- for (int j = 1 ; j < delta ; j ++)
215+ int temp2 = 1 ;
216+ for (int j = 0 ; j < delta ; ++j )
220217 {
221- temp2 = GF .mul (temp2 , 1 ^ GF .mul (inv , betaSet [(i + j ) % delta ]));
218+ if (i != j )
219+ {
220+ temp2 ^= GF .mul3 (temp2 , inv , betaSet [j ]);
221+ }
222222 }
223223
224- int mask1 = i < deltaCount1 ? 0xffff : 0 ;
224+ int mask1 = ( i - deltaCount1 ) >> 31 ;
225225 eSet [i ] = mask1 & GF .div (temp1 , temp2 );
226226 }
227227
228228 int deltaCount2 = 0 ;
229229 for (int i = 0 ; i < n1 ; i ++)
230230 {
231- int mark = 0 ;
232- int mask = errorCompactSet [ i ] != 0 ? 0xffff : 0 ;
231+ int ecs_i = errorCompactSet [ i ] & 0xFF ;
232+ int mask = ( ecs_i | - ecs_i ) >> 31 ;
233233
234+ int mark = 0 ;
234235 for (int j = 0 ; j < delta ; j ++)
235236 {
236- int iMask = j == deltaCount2 ? 0xffff : 0 ;
237- res [i ] += iMask & mask & eSet [j ];
238- mark + = iMask & mask & 1 ;
237+ int iMask = ((( j ^ deltaCount2 ) - 1 ) >> 31 ) & mask ;
238+ res [i ] += iMask & eSet [j ];
239+ mark - = iMask ; // conditional +1
239240 }
240241 deltaCount2 += mark ;
241242 }
0 commit comments