1package org.bouncycastle.math.field; 2 3import java.math.BigInteger; 4 5import org.bouncycastle.util.Integers; 6 7class GenericPolynomialExtensionField implements PolynomialExtensionField 8{ 9 protected final FiniteField subfield; 10 protected final Polynomial minimalPolynomial; 11 12 GenericPolynomialExtensionField(FiniteField subfield, Polynomial polynomial) 13 { 14 this.subfield = subfield; 15 this.minimalPolynomial = polynomial; 16 } 17 18 public BigInteger getCharacteristic() 19 { 20 return subfield.getCharacteristic(); 21 } 22 23 public int getDimension() 24 { 25 return subfield.getDimension() * minimalPolynomial.getDegree(); 26 } 27 28 public FiniteField getSubfield() 29 { 30 return subfield; 31 } 32 33 public int getDegree() 34 { 35 return minimalPolynomial.getDegree(); 36 } 37 38 public Polynomial getMinimalPolynomial() 39 { 40 return minimalPolynomial; 41 } 42 43 public boolean equals(Object obj) 44 { 45 if (this == obj) 46 { 47 return true; 48 } 49 if (!(obj instanceof GenericPolynomialExtensionField)) 50 { 51 return false; 52 } 53 GenericPolynomialExtensionField other = (GenericPolynomialExtensionField)obj; 54 return subfield.equals(other.subfield) && minimalPolynomial.equals(other.minimalPolynomial); 55 } 56 57 public int hashCode() 58 { 59 return subfield.hashCode() 60 ^ Integers.rotateLeft(minimalPolynomial.hashCode(), 16); 61 } 62} 63