org.bouncycastle.tls.DefaultTlsSRPConfigVerifier Maven / Gradle / Ivy
package org.bouncycastle.tls;
import java.math.BigInteger;
import java.util.Vector;
import org.bouncycastle.tls.crypto.SRP6Group;
import org.bouncycastle.tls.crypto.SRP6StandardGroups;
import org.bouncycastle.tls.crypto.TlsSRPConfig;
public class DefaultTlsSRPConfigVerifier
implements TlsSRPConfigVerifier
{
protected static final Vector DEFAULT_GROUPS = new Vector();
static
{
DEFAULT_GROUPS.addElement(SRP6StandardGroups.rfc5054_1024);
DEFAULT_GROUPS.addElement(SRP6StandardGroups.rfc5054_1536);
DEFAULT_GROUPS.addElement(SRP6StandardGroups.rfc5054_2048);
DEFAULT_GROUPS.addElement(SRP6StandardGroups.rfc5054_3072);
DEFAULT_GROUPS.addElement(SRP6StandardGroups.rfc5054_4096);
DEFAULT_GROUPS.addElement(SRP6StandardGroups.rfc5054_6144);
DEFAULT_GROUPS.addElement(SRP6StandardGroups.rfc5054_8192);
}
// Vector is (SRP6Group)
protected Vector groups;
/**
* Accept only the group parameters specified in RFC 5054 Appendix A.
*/
public DefaultTlsSRPConfigVerifier()
{
this(DEFAULT_GROUPS);
}
/**
* Specify a custom set of acceptable group parameters.
*
* @param groups a {@link Vector} of acceptable {@link SRP6Group}
*/
public DefaultTlsSRPConfigVerifier(Vector groups)
{
this.groups = groups;
}
public boolean accept(TlsSRPConfig srpConfig)
{
for (int i = 0; i < groups.size(); ++i)
{
if (areGroupsEqual(srpConfig, (SRP6Group)groups.elementAt(i)))
{
return true;
}
}
return false;
}
protected boolean areGroupsEqual(TlsSRPConfig a, SRP6Group b)
{
BigInteger[] ng = a.getExplicitNG();
return (areParametersEqual(ng[0], b.getN()) && areParametersEqual(ng[1], b.getG()));
}
protected boolean areParametersEqual(BigInteger a, BigInteger b)
{
return a == b || a.equals(b);
}
}