| 5 | import org.bouncycastle.util.Pack; |
| 6 | |
| 7 | class GF2x |
| 8 | { |
| 9 | private final int bits; |
| 10 | private final int size; |
| 11 | private final int sizeExt; |
| 12 | |
| 13 | GF2x(int n) |
| 14 | { |
| 15 | if ((n & 0xFFFF0001) != 1) |
| 16 | throw new IllegalArgumentException(); |
| 17 | |
| 18 | bits = n; |
| 19 | size = Utils.getByte64SizeFromBitSize(n); |
| 20 | sizeExt = size * 2; |
| 21 | } |
| 22 | |
| 23 | void addTo(long[] x, long[] z) |
| 24 | { |
| 25 | Nat.xorTo64(size, x, z); |
| 26 | } |
| 27 | |
| 28 | void clear(long[] z) |
| 29 | { |
| 30 | Nat.zero64(size, z); |
| 31 | } |
| 32 | |
| 33 | long[] create() |
| 34 | { |
| 35 | return new long[size]; |
| 36 | } |
| 37 | |
| 38 | long[] createExt() |
| 39 | { |
| 40 | return new long[sizeExt]; |
| 41 | } |
| 42 | |
| 43 | long equalTo(long[] x, long[] y) |
| 44 | { |
| 45 | return Nat.equalTo64(size, x, y); |
| 46 | } |
| 47 | |
| 48 | void mul(long[] x, long[] y, long[] z) |
| 49 | { |
| 50 | long[] tt = createExt(); |
| 51 | long[] tmp = new long[size << 4]; |
| 52 | karatsuba(size, x, 0, y, 0, tt, 0, tmp, 0); |
| 53 | reduce(tt, z); |
| 54 | } |
| 55 | |
| 56 | void random(Shake256RandomGenerator generator, long[] z) |
| 57 | { |
| 58 | byte[] tmp = new byte[size << 3]; |
| 59 | generator.xofGetBytes(tmp, Utils.getByteSizeFromBitSize(bits)); |
| 60 | Pack.littleEndianToLong(tmp, 0, z); |
| 61 | z[size - 1] &= (1L << (bits & 63)) - 1L; |
| 62 | } |
| 63 | |
| 64 | /** |
nothing calls this directly
no outgoing calls
no test coverage detected