@@ -186,63 +186,51 @@ private byte determinant3x3(byte[] m, int off, int i0, int i1, int i2)
186186
187187 private byte determinant4x4 (byte [] m , int off )
188188 {
189- byte d0 = gf16Mul (getGF16m (m , 0 , off ), gf16Add (
190- gf16Add (
191- pod (m , off , 1 , 2 , 3 , 3 , 2 ),
192- pod (m , off , 2 , 1 , 3 , 3 , 1 )
193- ),
194- pod (m , off , 3 , 1 , 2 , 2 , 1 )
195- ));
196-
197- byte d1 = gf16Mul (getGF16m (m , 0 , off + 1 ), gf16Add (
198- gf16Add (
199- pod (m , off , 0 , 2 , 3 , 3 , 2 ),
200- pod (m , off , 2 , 0 , 3 , 3 , 0 )
201- ),
202- pod (m , off , 3 , 0 , 2 , 2 , 0 )
203- ));
204-
205- byte d2 = gf16Mul (getGF16m (m , 0 , off + 2 ), gf16Add (
206- gf16Add (
207- pod (m , off , 0 , 1 , 3 , 3 , 1 ),
208- pod (m , off , 1 , 0 , 3 , 3 , 0 )
209- ),
210- pod (m , off , 3 , 0 , 1 , 1 , 0 )
211- ));
212-
213- byte d3 = gf16Mul (getGF16m (m , 0 , off + 3 ), gf16Add (
214- gf16Add (
215- pod (m , off , 0 , 1 , 2 , 2 , 1 ),
216- pod (m , off , 1 , 0 , 2 , 2 , 0 )
217- ),
218- pod (m , off , 2 , 0 , 1 , 1 , 0 )
219- ));
189+ byte d0 = gf16Mul (getGF16m (m , 0 , off ), (byte )(
190+ pod (m , off , 1 , 2 , 3 , 3 , 2 ) ^
191+ pod (m , off , 2 , 1 , 3 , 3 , 1 ) ^
192+ pod (m , off , 3 , 1 , 2 , 2 , 1 )));
193+
194+ byte d1 = gf16Mul (getGF16m (m , 0 , off + 1 ), (byte )(
195+ pod (m , off , 0 , 2 , 3 , 3 , 2 ) ^
196+ pod (m , off , 2 , 0 , 3 , 3 , 0 ) ^
197+ pod (m , off , 3 , 0 , 2 , 2 , 0 )));
198+
199+ byte d2 = gf16Mul (getGF16m (m , 0 , off + 2 ), (byte )(
200+ pod (m , off , 0 , 1 , 3 , 3 , 1 ) ^
201+ pod (m , off , 1 , 0 , 3 , 3 , 0 ) ^
202+ pod (m , off , 3 , 0 , 1 , 1 , 0 )));
203+
204+ byte d3 = gf16Mul (getGF16m (m , 0 , off + 3 ), (byte )(
205+ pod (m , off , 0 , 1 , 2 , 2 , 1 ) ^
206+ pod (m , off , 1 , 0 , 2 , 2 , 0 ) ^
207+ pod (m , off , 2 , 0 , 1 , 1 , 0 )));
220208
221209 return (byte )(d0 ^ d1 ^ d2 ^ d3 );
222210 }
223211
224212 private byte determinant5x5 (byte [] m , int off )
225213 {
226214 byte result = gf16Mul (determinant3x3 (m , off , 0 , 1 , 2 ),
227- gf16Add ( gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off + 4 )), gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off + 3 ))));
215+ ( byte )( gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off + 4 )) ^ gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off + 3 ))));
228216 result ^= gf16Mul (determinant3x3 (m , off , 0 , 1 , 3 ),
229- gf16Add ( gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off + 4 )), gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off + 2 ))));
217+ ( byte )( gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off + 4 )) ^ gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off + 2 ))));
230218 result ^= gf16Mul (determinant3x3 (m , off , 0 , 1 , 4 ),
231- gf16Add ( gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off + 3 )), gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off + 2 ))));
219+ ( byte )( gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off + 3 )) ^ gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off + 2 ))));
232220 result ^= gf16Mul (determinant3x3 (m , off , 0 , 2 , 3 ),
233- gf16Add ( gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off + 4 )), gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off + 1 ))));
221+ ( byte )( gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off + 4 )) ^ gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off + 1 ))));
234222 result ^= gf16Mul (determinant3x3 (m , off , 0 , 2 , 4 ),
235- gf16Add ( gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off + 3 )), gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off + 1 ))));
223+ ( byte )( gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off + 3 )) ^ gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off + 1 ))));
236224 result ^= gf16Mul (determinant3x3 (m , off , 0 , 3 , 4 ),
237- gf16Add ( gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off + 2 )), gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off + 1 ))));
225+ ( byte )( gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off + 2 )) ^ gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off + 1 ))));
238226 result ^= gf16Mul (determinant3x3 (m , off , 1 , 2 , 3 ),
239- gf16Add ( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 4 )), gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off ))));
227+ ( byte )( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 4 )) ^ gf16Mul (getGF16m (m , 3 , off + 4 ), getGF16m (m , 4 , off ))));
240228 result ^= gf16Mul (determinant3x3 (m , off , 1 , 2 , 4 ),
241- gf16Add ( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 3 )), gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off ))));
229+ ( byte )( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 3 )) ^ gf16Mul (getGF16m (m , 3 , off + 3 ), getGF16m (m , 4 , off ))));
242230 result ^= gf16Mul (determinant3x3 (m , off , 1 , 3 , 4 ),
243- gf16Add ( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 2 )), gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off ))));
231+ ( byte )( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 2 )) ^ gf16Mul (getGF16m (m , 3 , off + 2 ), getGF16m (m , 4 , off ))));
244232 result ^= gf16Mul (determinant3x3 (m , off , 2 , 3 , 4 ),
245- gf16Add ( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 1 )), gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off ))));
233+ ( byte )( gf16Mul (getGF16m (m , 3 , off ), getGF16m (m , 4 , off + 1 )) ^ gf16Mul (getGF16m (m , 3 , off + 1 ), getGF16m (m , 4 , off ))));
246234 return result ;
247235 }
248236
@@ -274,17 +262,11 @@ private void addMatrices(byte[] a, int aOff, byte[] b, int bOff, byte[] c, int c
274262 {
275263 for (int j = 0 ; j < l ; j ++)
276264 {
277- setGF16m (c , i , cOff + j , gf16Add ( getGF16m (a , i , aOff + j ), getGF16m (b , i , bOff + j )));
265+ setGF16m (c , i , cOff + j , ( byte )( getGF16m (a , i , aOff + j ) ^ getGF16m (b , i , bOff + j )));
278266 }
279267 }
280268 }
281269
282- // GF(16) arithmetic
283- private static byte gf16Add (byte a , byte b )
284- {
285- return (byte )(a ^ b );
286- }
287-
288270 // GF(16) multiplication using lookup table
289271 private static byte gf16Mul (byte a , byte b )
290272 {
0 commit comments