diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSRPGroupVerifier.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSRPGroupVerifier.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSRPGroupVerifier.java b/bcprov/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSRPGroupVerifier.java new file mode 100644 index 0000000..8fb9baa --- /dev/null +++ b/bcprov/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSRPGroupVerifier.java @@ -0,0 +1,67 @@ +package org.bouncycastle.crypto.tls; + +import java.math.BigInteger; +import java.util.Vector; + +import org.bouncycastle.crypto.agreement.srp.SRP6StandardGroups; +import org.bouncycastle.crypto.params.SRP6GroupParameters; + +public class DefaultTlsSRPGroupVerifier + implements TlsSRPGroupVerifier +{ + 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 (SRP6GroupParameters) + protected Vector groups; + + /** + * Accept only the group parameters specified in RFC 5054 Appendix A. + */ + public DefaultTlsSRPGroupVerifier() + { + this(DEFAULT_GROUPS); + } + + /** + * Specify a custom set of acceptable group parameters. + * + * @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + */ + public DefaultTlsSRPGroupVerifier(Vector groups) + { + this.groups = groups; + } + + public boolean accept(SRP6GroupParameters group) + { + for (int i = 0; i < groups.size(); ++i) + { + if (areGroupsEqual(group, (SRP6GroupParameters)groups.elementAt(i))) + { + return true; + } + } + return false; + } + + protected boolean areGroupsEqual(SRP6GroupParameters a, SRP6GroupParameters b) + { + return a == b || (areParametersEqual(a.getN(), b.getN()) && areParametersEqual(a.getG(), b.getG())); + } + + protected boolean areParametersEqual(BigInteger a, BigInteger b) + { + return a == b || a.equals(b); + } +} |