package net.i2p.crypto.elgamal.spec;
import java.math.BigInteger;
import java.security.spec.AlgorithmParameterSpec;
/**
* Copied from org.bouncycastle.jce.spec
* This can't actually be passed to the BC provider, we would have to
* use reflection to create a "real" org.bouncycasle.jce.spec.ElGamalParameterSpec.
*
* @since 0.9.18, moved from net.i2p.crypto in 0.9.25
*/
public class ElGamalParameterSpec implements AlgorithmParameterSpec {
private final BigInteger p;
private final BigInteger g;
/**
* Constructs a parameter set for Diffie-Hellman, using a prime modulus
* <code>p</code> and a base generator <code>g</code>.
*
* @param p the prime modulus
* @param g the base generator
*/
public ElGamalParameterSpec(BigInteger p, BigInteger g) {
this.p = p;
this.g = g;
}
/**
* Returns the prime modulus <code>p</code>.
*
* @return the prime modulus <code>p</code>
*/
public BigInteger getP() {
return p;
}
/**
* Returns the base generator <code>g</code>.
*
* @return the base generator <code>g</code>
*/
public BigInteger getG() {
return g;
}
/**
* @since 0.9.25
*/
@Override
public int hashCode() {
return p.hashCode() ^ g.hashCode();
}
/**
* @since 0.9.25
*/
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
BigInteger op, og;
if (obj instanceof ElGamalParameterSpec) {
ElGamalParameterSpec egps = (ElGamalParameterSpec) obj;
op = egps.getP();
og = egps.getG();
//} else if (obj.getClass().getName().equals("org.bouncycastle.jce.spec.ElGamalParameterSpec")) {
//reflection... no...
} else {
return false;
}
return p.equals(op) && g.equals(og);
}
}