Mercurial > hg > icedtea7-forest > jdk
changeset 9118:c84d183b30e0
6995421: Eliminate the static dependency to sun.security.ec.ECKeyFactory
Reviewed-by: mullan, vinnie
Contributed-by: stephen.flores@oracle.com
line wrap: on
line diff
--- a/make/sun/security/ec/Makefile Fri Feb 03 02:48:43 2017 +0000 +++ b/make/sun/security/ec/Makefile Fri Feb 03 03:16:15 2017 +0000 @@ -127,7 +127,6 @@ # Exclude the sources that get built by ../other/Makefile # AUTO_JAVA_PRUNE = \ - ECKeyFactory.java \ ECParameters.java \ ECPrivateKeyImpl.java \ ECPublicKeyImpl.java \
--- a/make/sun/security/other/Makefile Fri Feb 03 02:48:43 2017 +0000 +++ b/make/sun/security/other/Makefile Fri Feb 03 03:16:15 2017 +0000 @@ -52,7 +52,6 @@ # EC classes used by the packages above # FILES_java += \ - sun/security/ec/ECKeyFactory.java \ sun/security/ec/ECParameters.java \ sun/security/ec/ECPrivateKeyImpl.java \ sun/security/ec/ECPublicKeyImpl.java \
--- a/src/share/classes/sun/security/ec/ECKeyFactory.java Fri Feb 03 02:48:43 2017 +0000 +++ b/src/share/classes/sun/security/ec/ECKeyFactory.java Fri Feb 03 03:16:15 2017 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,33 +51,21 @@ */ public final class ECKeyFactory extends KeyFactorySpi { - // Used by translateKey() and the SunPKCS11 provider - public final static KeyFactory INSTANCE; - - // Internal provider object we can obtain the KeyFactory and - // AlgorithmParameters from. Used by ECParameters and AlgorithmId. - // This can go away once we have EC always available in the SUN provider. - // Used by ECParameters and AlgorithmId. - public final static Provider ecInternalProvider; + // Used by translateKey() + private static KeyFactory instance; - static { - final Provider p = new Provider("SunEC-Internal", 1.0d, null) { - private static final long serialVersionUID = 970685700309471261L; - }; - AccessController.doPrivileged(new PrivilegedAction<Void>() { - public Void run() { - p.put("KeyFactory.EC", "sun.security.ec.ECKeyFactory"); - p.put("AlgorithmParameters.EC", "sun.security.ec.ECParameters"); - p.put("Alg.Alias.AlgorithmParameters.1.2.840.10045.2.1", "EC"); - return null; + private static KeyFactory getInstance() { + if (instance == null) { + try { + instance = KeyFactory.getInstance("EC", "SunEC"); + } catch (NoSuchProviderException e) { + throw new RuntimeException(e); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); } - }); - try { - INSTANCE = KeyFactory.getInstance("EC", p); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); } - ecInternalProvider = p; + + return instance; } public ECKeyFactory() { @@ -102,7 +90,12 @@ checkKey(ecKey); return ecKey; } else { - return (ECKey)INSTANCE.translateKey(key); + /* + * We don't call the engineTranslateKey method directly + * because KeyFactory.translateKey adds code to loop through + * all key factories. + */ + return (ECKey)getInstance().translateKey(key); } }
--- a/src/share/classes/sun/security/ec/ECParameters.java Fri Feb 03 02:48:43 2017 +0000 +++ b/src/share/classes/sun/security/ec/ECParameters.java Fri Feb 03 03:16:15 2017 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -276,8 +276,8 @@ static AlgorithmParameters getAlgorithmParameters(ECParameterSpec spec) throws InvalidKeyException { try { - AlgorithmParameters params = AlgorithmParameters.getInstance - ("EC", ECKeyFactory.ecInternalProvider); + AlgorithmParameters params = + AlgorithmParameters.getInstance("EC", "SunEC"); params.init(spec); return params; } catch (GeneralSecurityException e) {
--- a/src/share/classes/sun/security/ec/ECPublicKeyImpl.java Fri Feb 03 02:48:43 2017 +0000 +++ b/src/share/classes/sun/security/ec/ECPublicKeyImpl.java Fri Feb 03 03:16:15 2017 +0000 @@ -93,8 +93,13 @@ * Parse the key. Called by X509Key. */ protected void parseKeyBits() throws InvalidKeyException { + AlgorithmParameters algParams = this.algid.getParameters(); + if (algParams == null) { + throw new InvalidKeyException("EC domain parameters must be " + + "encoded in the algorithm identifier"); + } + try { - AlgorithmParameters algParams = this.algid.getParameters(); params = algParams.getParameterSpec(ECParameterSpec.class); w = ECParameters.decodePoint(key, params.getCurve()); } catch (IOException e) {
--- a/src/share/classes/sun/security/ec/SunECEntries.java Fri Feb 03 02:48:43 2017 +0000 +++ b/src/share/classes/sun/security/ec/SunECEntries.java Fri Feb 03 03:16:15 2017 +0000 @@ -54,6 +54,7 @@ */ map.put("AlgorithmParameters.EC", "sun.security.ec.ECParameters"); map.put("Alg.Alias.AlgorithmParameters.EllipticCurve", "EC"); + map.put("Alg.Alias.AlgorithmParameters.1.2.840.10045.2.1", "EC"); map.put("AlgorithmParameters.EC KeySize", "256");
--- a/src/share/classes/sun/security/pkcs11/P11ECKeyFactory.java Fri Feb 03 02:48:43 2017 +0000 +++ b/src/share/classes/sun/security/pkcs11/P11ECKeyFactory.java Fri Feb 03 03:16:15 2017 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -304,7 +304,7 @@ } KeyFactory implGetSoftwareFactory() throws GeneralSecurityException { - return sun.security.ec.ECKeyFactory.INSTANCE; + return KeyFactory.getInstance("EC", "SunEC"); } }
--- a/src/share/classes/sun/security/x509/AlgorithmId.java Fri Feb 03 02:48:43 2017 +0000 +++ b/src/share/classes/sun/security/x509/AlgorithmId.java Fri Feb 03 03:16:15 2017 +0000 @@ -120,21 +120,14 @@ try { algParams = AlgorithmParameters.getInstance(algidString); } catch (NoSuchAlgorithmException e) { - try { - // Try the internal EC code so that we can fully parse EC - // keys even if the provider is not registered. - // This code can go away once we have EC in the SUN provider. - algParams = AlgorithmParameters.getInstance(algidString, - sun.security.ec.ECKeyFactory.ecInternalProvider); - } catch (NoSuchAlgorithmException ee) { - /* - * This algorithm parameter type is not supported, so we cannot - * parse the parameters. - */ - algParams = null; - return; - } + /* + * This algorithm parameter type is not supported, so we cannot + * parse the parameters. + */ + algParams = null; + return; } + // Decode (parse) the parameters algParams.init(params.toByteArray()); }
--- a/test/sun/security/ec/TestEC.java Fri Feb 03 02:48:43 2017 +0000 +++ b/test/sun/security/ec/TestEC.java Fri Feb 03 03:16:15 2017 +0000 @@ -33,6 +33,7 @@ * @run main/othervm -Djdk.tls.namedGroups="secp256r1,sect193r1" TestEC */ +import java.security.NoSuchProviderException; import java.security.Provider; import java.security.Security; @@ -67,7 +68,12 @@ } public static void main0(String[] args) throws Exception { - Provider p = new sun.security.ec.SunEC(); + Provider p = Security.getProvider("SunEC"); + + if (p == null) { + throw new NoSuchProviderException("Can't get SunEC provider"); + } + System.out.println("Running tests with " + p.getName() + " provider...\n"); long start = System.currentTimeMillis();
--- a/test/sun/security/pkcs11/ec/ReadCertificates.java Fri Feb 03 02:48:43 2017 +0000 +++ b/test/sun/security/pkcs11/ec/ReadCertificates.java Fri Feb 03 03:16:15 2017 +0000 @@ -63,6 +63,10 @@ System.out.println("Provider does not support ECDSA, skipping..."); return; } + + /* + * PKCS11Test.main will remove this provider if needed + */ Providers.setAt(p, 1); random = new SecureRandom(); @@ -132,7 +136,6 @@ } } - Security.removeProvider(p.getName()); System.out.println("OK"); }
--- a/test/sun/security/pkcs11/ec/ReadPKCS12.java Fri Feb 03 02:48:43 2017 +0000 +++ b/test/sun/security/pkcs11/ec/ReadPKCS12.java Fri Feb 03 03:16:15 2017 +0000 @@ -53,6 +53,10 @@ System.out.println("Provider does not support ECDSA, skipping..."); return; } + + /* + * PKCS11Test.main will remove this provider if needed + */ Providers.setAt(p, 1); CertificateFactory factory = CertificateFactory.getInstance("X.509"); @@ -147,7 +151,6 @@ out.close(); } - Security.removeProvider(p.getName()); System.out.println("OK"); }
--- a/test/sun/security/pkcs11/ec/TestECDH.java Fri Feb 03 02:48:43 2017 +0000 +++ b/test/sun/security/pkcs11/ec/TestECDH.java Fri Feb 03 03:16:15 2017 +0000 @@ -60,6 +60,10 @@ System.out.println("Provider does not support ECDH, skipping"); return; } + + /* + * PKCS11Test.main will remove this provider if needed + */ Providers.setAt(p, 1); if (false) { @@ -77,7 +81,6 @@ test(p, pub192a, priv192a, pub192b, priv192b, secret192); test(p, pub163a, priv163a, pub163b, priv163b, secret163); - Security.removeProvider(p.getName()); System.out.println("OK"); }
--- a/test/sun/security/pkcs11/ec/TestECDSA.java Fri Feb 03 02:48:43 2017 +0000 +++ b/test/sun/security/pkcs11/ec/TestECDSA.java Fri Feb 03 03:16:15 2017 +0000 @@ -116,6 +116,10 @@ System.out.println("ECDSA not supported, skipping"); return; } + + /* + * PKCS11Test.main will remove this provider if needed + */ Providers.setAt(provider, 1); if (false) { @@ -137,7 +141,6 @@ test(provider, pub521, priv521, sig521); test(provider, pub571, priv571, sig571); - Security.removeProvider(provider.getName()); long stop = System.currentTimeMillis(); System.out.println("All tests passed (" + (stop - start) + " ms)."); }