# HG changeset patch # User xuelei # Date 1574390553 28800 # Node ID e7df7c86eda14745a674f39c26d8e8b30a75f5a6 # Parent 229aa067e4cc6746f113dee4e94265b4f04e0beb 8233954: UnsatisfiedLinkError or NoSuchAlgorithmException after removing sunec.dll Reviewed-by: ascarpino diff -r 229aa067e4cc -r e7df7c86eda1 src/java.base/share/classes/sun/security/ssl/NamedGroup.java --- a/src/java.base/share/classes/sun/security/ssl/NamedGroup.java Fri Nov 22 09:33:03 2019 +0800 +++ b/src/java.base/share/classes/sun/security/ssl/NamedGroup.java Thu Nov 21 18:42:33 2019 -0800 @@ -250,8 +250,19 @@ this.supportedProtocols = supportedProtocols; this.keAlgParamSpec = keAlgParamSpec; + // Check if it is a supported named group. AlgorithmParameters algParams = null; boolean mediator = (keAlgParamSpec != null); + + // HACK CODE + // + // An EC provider, for example the SunEC provider, may support + // AlgorithmParameters but not KeyPairGenerator or KeyAgreement. + if (mediator && (namedGroupSpec == NamedGroupSpec.NAMED_GROUP_ECDHE)) { + mediator = JsseJce.isEcAvailable(); + } + + // Check the specific algorithm parameters. if (mediator) { try { algParams = diff -r 229aa067e4cc -r e7df7c86eda1 src/java.base/share/classes/sun/security/ssl/SignatureScheme.java --- a/src/java.base/share/classes/sun/security/ssl/SignatureScheme.java Fri Nov 22 09:33:03 2019 +0800 +++ b/src/java.base/share/classes/sun/security/ssl/SignatureScheme.java Thu Nov 21 18:42:33 2019 -0800 @@ -274,17 +274,28 @@ Arrays.asList(handshakeSupportedProtocols); boolean mediator = true; - if (signAlgParams != null) { - mediator = signAlgParams.isAvailable; - } else { - try { - Signature.getInstance(algorithm); - } catch (Exception e) { - mediator = false; - if (SSLLogger.isOn && SSLLogger.isOn("ssl,handshake")) { - SSLLogger.warning( - "Signature algorithm, " + algorithm + - ", is not supported by the underlying providers"); + // HACK CODE + // + // An EC provider, for example the SunEC provider, may support + // AlgorithmParameters but not KeyPairGenerator or Signature. + if ("EC".equals(keyAlgorithm)) { + mediator = JsseJce.isEcAvailable(); + } + + // Check the specific algorithm and parameters. + if (mediator) { + if (signAlgParams != null) { + mediator = signAlgParams.isAvailable; + } else { + try { + Signature.getInstance(algorithm); + } catch (Exception e) { + mediator = false; + if (SSLLogger.isOn && SSLLogger.isOn("ssl,handshake")) { + SSLLogger.warning( + "Signature algorithm, " + algorithm + + ", is not supported by the underlying providers"); + } } } }