public int getDimension() { return subfield.getDimension() * minimalPolynomial.getDegree(); }
public int getDegree() { return minimalPolynomial.getDegree(); }
protected AbstractFp(BigInteger q) { super(FiniteFields.getPrimeField(q)); }
public static ECField convertField(FiniteField field) { if (ECAlgorithms.isFpField(field)) { return new ECFieldFp(field.getCharacteristic()); } else //if (ECAlgorithms.isF2mField(curveField)) { Polynomial poly = ((PolynomialExtensionField)field).getMinimalPolynomial(); int[] exponents = poly.getExponentsPresent(); int[] ks = Arrays.reverse(Arrays.copyOfRange(exponents, 1, exponents.length - 1)); return new ECFieldF2m(poly.getDegree(), ks); } }
public static boolean isF2mField(FiniteField field) { return field.getDimension() > 1 && field.getCharacteristic().equals(ECConstants.TWO) && field instanceof PolynomialExtensionField; }
public static PolynomialExtensionField getBinaryExtensionField(int[] exponents) { if (exponents[0] != 0) { throw new IllegalArgumentException("Irreducible polynomials in GF(2) must have constant term"); } for (int i = 1; i < exponents.length; ++i) { if (exponents[i] <= exponents[i - 1]) { throw new IllegalArgumentException("Polynomial exponents must be montonically increasing"); } } return new GenericPolynomialExtensionField(GF_2, new GF2Polynomial(exponents)); }
public BigInteger getCharacteristic() { return subfield.getCharacteristic(); }
public static boolean isFpField(FiniteField field) { return field.getDimension() == 1; }
public static FiniteField getPrimeField(BigInteger characteristic) { int bitLength = characteristic.bitLength(); if (characteristic.signum() <= 0 || bitLength < 2) { throw new IllegalArgumentException("'characteristic' must be >= 2"); } if (bitLength < 3) { switch (characteristic.intValue()) { case 2: return GF_2; case 3: return GF_3; } } return new PrimeField(characteristic); } }
private static FiniteField buildField(int m, int k1, int k2, int k3) { if (k1 == 0) { throw new IllegalArgumentException("k1 must be > 0"); } if (k2 == 0) { if (k3 != 0) { throw new IllegalArgumentException("k3 must be 0 if k2 == 0"); } return FiniteFields.getBinaryExtensionField(new int[]{ 0, k1, m }); } if (k2 <= k1) { throw new IllegalArgumentException("k2 must be > k1"); } if (k3 <= k2) { throw new IllegalArgumentException("k3 must be > k2"); } return FiniteFields.getBinaryExtensionField(new int[]{ 0, k1, k2, k3, m }); }
private static ECField convertField(FiniteField field) { if (ECAlgorithms.isFpField(field)) { return new ECFieldFp(field.getCharacteristic()); } else //if (ECAlgorithms.isF2mField(curveField)) { Polynomial poly = ((PolynomialExtensionField)field).getMinimalPolynomial(); int[] exponents = poly.getExponentsPresent(); int[] ks = Arrays.reverse(Arrays.copyOfRange(exponents, 1, exponents.length - 1)); return new ECFieldF2m(poly.getDegree(), ks); } }
public static boolean isF2mCurve(ECCurve c) { FiniteField field = c.getField(); return field.getDimension() > 1 && field.getCharacteristic().equals(ECConstants.TWO) && field instanceof PolynomialExtensionField; }
public int getDimension() { return subfield.getDimension() * minimalPolynomial.getDegree(); }
public static PolynomialExtensionField getBinaryExtensionField(int[] exponents) { if (exponents[0] != 0) { throw new IllegalArgumentException("Irreducible polynomials in GF(2) must have constant term"); } for (int i = 1; i < exponents.length; ++i) { if (exponents[i] <= exponents[i - 1]) { throw new IllegalArgumentException("Polynomial exponents must be montonically increasing"); } } return new GenericPolynomialExtensionField(GF_2, new GF2Polynomial(exponents)); }
public BigInteger getCharacteristic() { return subfield.getCharacteristic(); }
public int getDegree() { return minimalPolynomial.getDegree(); }
public static boolean isFpCurve(ECCurve c) { return c.getField().getDimension() == 1; }
protected AbstractFp(BigInteger q) { super(FiniteFields.getPrimeField(q)); }
private static FiniteField buildField(int m, int k1, int k2, int k3) { if (k1 == 0) { throw new IllegalArgumentException("k1 must be > 0"); } if (k2 == 0) { if (k3 != 0) { throw new IllegalArgumentException("k3 must be 0 if k2 == 0"); } return FiniteFields.getBinaryExtensionField(new int[]{ 0, k1, m }); } if (k2 <= k1) { throw new IllegalArgumentException("k2 must be > k1"); } if (k3 <= k2) { throw new IllegalArgumentException("k3 must be > k2"); } return FiniteFields.getBinaryExtensionField(new int[]{ 0, k1, k2, k3, m }); }
public boolean isValidFieldElement(BigInteger x) { return x != null && x.signum() >= 0 && x.compareTo(this.getField().getCharacteristic()) < 0; }