| 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); |
| } |
| } |