Skip to content

Commit 22513e7

Browse files
ottokapeterdettman
authored andcommitted
ProvTlsServer should use custom DH groups when configured
(cherry picked from commit 2a5b885)
1 parent 7bbee18 commit 22513e7

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

tls/src/main/java/org/bouncycastle/jsse/provider/ProvTlsServer.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.ArrayList;
88
import java.util.Collection;
99
import java.util.Collections;
10+
import java.util.Comparator;
1011
import java.util.HashSet;
1112
import java.util.Hashtable;
1213
import java.util.LinkedHashMap;
@@ -45,6 +46,7 @@
4546
import org.bouncycastle.tls.TlsUtils;
4647
import org.bouncycastle.tls.TrustedAuthority;
4748
import org.bouncycastle.tls.crypto.DHGroup;
49+
import org.bouncycastle.tls.crypto.TlsDHConfig;
4850
import org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCrypto;
4951
import org.bouncycastle.util.Arrays;
5052
import org.bouncycastle.util.encoders.Hex;
@@ -64,7 +66,6 @@ class ProvTlsServer
6466
* TODO[jsse] Does this selection override the restriction from 'jdk.tls.ephemeralDHKeySize'?
6567
* TODO[fips] Probably should be ignored in fips mode?
6668
*/
67-
@SuppressWarnings("unused")
6869
private static final DHGroup[] provServerDefaultDHEParameters = getDefaultDHEParameters();
6970

7071
private static final boolean provServerEnableCA = PropertyUtils
@@ -153,6 +154,14 @@ else if (!p.isProbablePrime(120))
153154
outerComma = closeBrace + 1;
154155
if (outerComma >= limit)
155156
{
157+
result.sort(new Comparator<DHGroup>()
158+
{
159+
@Override
160+
public int compare(DHGroup a, DHGroup b)
161+
{
162+
return a.getP().bitLength() - b.getP().bitLength();
163+
}
164+
});
156165
return result.toArray(new DHGroup[result.size()]);
157166
}
158167
}
@@ -324,6 +333,25 @@ protected boolean selectCipherSuite(int cipherSuite) throws IOException
324333
return result;
325334
}
326335

336+
@Override
337+
public TlsDHConfig getDHConfig() throws IOException
338+
{
339+
if (provServerDefaultDHEParameters != null)
340+
{
341+
int minimumFiniteFieldBits = Math.max(
342+
TlsDHUtils.getMinimumFiniteFieldBits(selectedCipherSuite), provEphemeralDHKeySize);
343+
344+
for (DHGroup group: provServerDefaultDHEParameters)
345+
{
346+
if (group.getP().bitLength() >= minimumFiniteFieldBits)
347+
{
348+
return new TlsDHConfig(group);
349+
}
350+
}
351+
}
352+
return super.getDHConfig();
353+
}
354+
327355
@Override
328356
protected int selectDH(int minimumFiniteFieldBits)
329357
{

0 commit comments

Comments
 (0)