package org.bouncycastle.math.field;
import java.math.BigInteger;
import org.bouncycastle.util.Integers;
class GenericPolynomialExtensionField implements PolynomialExtensionField
{
protected final FiniteField subfield;
protected final Polynomial minimalPolynomial;
GenericPolynomialExtensionField(FiniteField subfield, Polynomial polynomial)
{
this.subfield = subfield;
this.minimalPolynomial = polynomial;
}
public BigInteger getCharacteristic()
{
return subfield.getCharacteristic();
}
public int getDimension()
{
return subfield.getDimension() * minimalPolynomial.getDegree();
}
public FiniteField getSubfield()
{
return subfield;
}
public int getDegree()
{
return minimalPolynomial.getDegree();
}
public Polynomial getMinimalPolynomial()
{
return minimalPolynomial;
}
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (!(obj instanceof GenericPolynomialExtensionField))
{
return false;
}
GenericPolynomialExtensionField other = (GenericPolynomialExtensionField)obj;
return subfield.equals(other.subfield) && minimalPolynomial.equals(other.minimalPolynomial);
}
public int hashCode()
{
return subfield.hashCode()
^ Integers.rotateLeft(minimalPolynomial.hashCode(), 16);
}
}