1 package org.bouncycastle.math.field; 2 3 import java.math.BigInteger; 4 5 public abstract class FiniteFields 6 { 7 static final FiniteField GF_2 = new PrimeField(BigInteger.valueOf(2)); 8 static final FiniteField GF_3 = new PrimeField(BigInteger.valueOf(3)); 9 getBinaryExtensionField(int[] exponents)10 public static PolynomialExtensionField getBinaryExtensionField(int[] exponents) 11 { 12 if (exponents[0] != 0) 13 { 14 throw new IllegalArgumentException("Irreducible polynomials in GF(2) must have constant term"); 15 } 16 for (int i = 1; i < exponents.length; ++i) 17 { 18 if (exponents[i] <= exponents[i - 1]) 19 { 20 throw new IllegalArgumentException("Polynomial exponents must be montonically increasing"); 21 } 22 } 23 24 return new GenericPolynomialExtensionField(GF_2, new GF2Polynomial(exponents)); 25 } 26 27 // public static PolynomialExtensionField getTernaryExtensionField(Term[] terms) 28 // { 29 // return new GenericPolynomialExtensionField(GF_3, new GF3Polynomial(terms)); 30 // } 31 getPrimeField(BigInteger characteristic)32 public static FiniteField getPrimeField(BigInteger characteristic) 33 { 34 int bitLength = characteristic.bitLength(); 35 if (characteristic.signum() <= 0 || bitLength < 2) 36 { 37 throw new IllegalArgumentException("'characteristic' must be >= 2"); 38 } 39 40 if (bitLength < 3) 41 { 42 switch (characteristic.intValue()) 43 { 44 case 2: 45 return GF_2; 46 case 3: 47 return GF_3; 48 } 49 } 50 51 return new PrimeField(characteristic); 52 } 53 } 54