summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSRPGroupVerifier.java
diff options
context:
space:
mode:
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.java67
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);
+ }
+}