77import java .util .ArrayList ;
88import java .util .Collection ;
99import java .util .Collections ;
10+ import java .util .Comparator ;
1011import java .util .HashSet ;
1112import java .util .Hashtable ;
1213import java .util .LinkedHashMap ;
4546import org .bouncycastle .tls .TlsUtils ;
4647import org .bouncycastle .tls .TrustedAuthority ;
4748import org .bouncycastle .tls .crypto .DHGroup ;
49+ import org .bouncycastle .tls .crypto .TlsDHConfig ;
4850import org .bouncycastle .tls .crypto .impl .jcajce .JcaTlsCrypto ;
4951import org .bouncycastle .util .Arrays ;
5052import 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