--- a/src/java.base/share/classes/sun/security/ssl/SSLKeyExchange.java Tue May 22 14:12:14 2018 -0400
+++ b/src/java.base/share/classes/sun/security/ssl/SSLKeyExchange.java Thu Aug 16 13:16:18 2018 -0400
@@ -30,11 +30,13 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
import sun.security.ssl.DHKeyExchange.DHEPossession;
import sun.security.ssl.ECDHKeyExchange.ECDHEPossession;
import sun.security.ssl.XDHKeyExchange.XDHEPossession;
import sun.security.ssl.SupportedGroupsExtension.NamedGroup;
import sun.security.ssl.SupportedGroupsExtension.NamedGroupType;
+import sun.security.ssl.SupportedGroupsExtension.NamedGroupFunctions;
import sun.security.ssl.SupportedGroupsExtension.SupportedGroups;
import sun.security.ssl.X509Authentication.X509Possession;
@@ -559,32 +561,24 @@
@Override
public SSLPossession createPossession(HandshakeContext hc) {
- if (namedGroup.type == NamedGroupType.NAMED_GROUP_ECDHE) {
- return new ECDHEPossession(
- namedGroup, hc.sslContext.getSecureRandom());
- } else if (namedGroup.type == NamedGroupType.NAMED_GROUP_FFDHE) {
- return new DHEPossession(
- namedGroup, hc.sslContext.getSecureRandom());
- } else if (namedGroup.type == NamedGroupType.NAMED_GROUP_XDH) {
- return new XDHEPossession(
- namedGroup, hc.sslContext.getSecureRandom());
+
+ Optional<NamedGroupFunctions> ngf = namedGroup.getFunctions();
+ if (ngf.isEmpty()) {
+ return null;
}
-
- return null;
+ return ngf.get().createPossession(hc.sslContext.getSecureRandom());
}
@Override
public SSLKeyDerivation createKeyDerivation(
HandshakeContext hc) throws IOException {
- if (namedGroup.type == NamedGroupType.NAMED_GROUP_ECDHE) {
- return ECDHKeyExchange.ecdheKAGenerator.createKeyDerivation(hc);
- } else if (namedGroup.type == NamedGroupType.NAMED_GROUP_FFDHE) {
- return DHKeyExchange.kaGenerator.createKeyDerivation(hc);
- } else if (namedGroup.type == NamedGroupType.NAMED_GROUP_XDH) {
- return XDHKeyExchange.xdheKAGenerator.createKeyDerivation(hc);
+
+ Optional<NamedGroupFunctions> ngf = namedGroup.getFunctions();
+ if (ngf.isEmpty()) {
+ return null;
}
+ return ngf.get().createKeyDerivation(hc);
- return null;
}
}
}