6995421: Eliminate the static dependency to sun.security.ec.ECKeyFactory
Reviewed-by: mullan, vinnie
This commit is contained in:
parent
be8df60f79
commit
8081077ff5
@ -128,7 +128,6 @@ AUTO_FILES_JAVA_DIRS = $(PKGDIR)
|
|||||||
# Exclude the sources that get built by ../other/Makefile
|
# Exclude the sources that get built by ../other/Makefile
|
||||||
#
|
#
|
||||||
AUTO_JAVA_PRUNE = \
|
AUTO_JAVA_PRUNE = \
|
||||||
ECKeyFactory.java \
|
|
||||||
ECParameters.java \
|
ECParameters.java \
|
||||||
ECPrivateKeyImpl.java \
|
ECPrivateKeyImpl.java \
|
||||||
ECPublicKeyImpl.java \
|
ECPublicKeyImpl.java \
|
||||||
|
@ -53,7 +53,6 @@ AUTO_FILES_JAVA_DIRS = \
|
|||||||
# EC classes used by the packages above
|
# EC classes used by the packages above
|
||||||
#
|
#
|
||||||
FILES_java += \
|
FILES_java += \
|
||||||
sun/security/ec/ECKeyFactory.java \
|
|
||||||
sun/security/ec/ECParameters.java \
|
sun/security/ec/ECParameters.java \
|
||||||
sun/security/ec/ECPrivateKeyImpl.java \
|
sun/security/ec/ECPrivateKeyImpl.java \
|
||||||
sun/security/ec/ECPublicKeyImpl.java \
|
sun/security/ec/ECPublicKeyImpl.java \
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -51,33 +51,21 @@ import java.security.spec.*;
|
|||||||
*/
|
*/
|
||||||
public final class ECKeyFactory extends KeyFactorySpi {
|
public final class ECKeyFactory extends KeyFactorySpi {
|
||||||
|
|
||||||
// Used by translateKey() and the SunPKCS11 provider
|
// Used by translateKey()
|
||||||
public final static KeyFactory INSTANCE;
|
private static KeyFactory instance;
|
||||||
|
|
||||||
// Internal provider object we can obtain the KeyFactory and
|
private static KeyFactory getInstance() {
|
||||||
// AlgorithmParameters from. Used by ECParameters and AlgorithmId.
|
if (instance == null) {
|
||||||
// This can go away once we have EC always available in the SUN provider.
|
try {
|
||||||
// Used by ECParameters and AlgorithmId.
|
instance = KeyFactory.getInstance("EC", "SunEC");
|
||||||
public final static Provider ecInternalProvider;
|
} catch (NoSuchProviderException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
static {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
final Provider p = new Provider("SunEC-Internal", 1.0d, null) {
|
throw new RuntimeException(e);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
try {
|
|
||||||
INSTANCE = KeyFactory.getInstance("EC", p);
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
ecInternalProvider = p;
|
|
||||||
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ECKeyFactory() {
|
public ECKeyFactory() {
|
||||||
@ -102,7 +90,12 @@ public final class ECKeyFactory extends KeyFactorySpi {
|
|||||||
checkKey(ecKey);
|
checkKey(ecKey);
|
||||||
return ecKey;
|
return ecKey;
|
||||||
} else {
|
} 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -276,8 +276,8 @@ public final class ECParameters extends AlgorithmParametersSpi {
|
|||||||
static AlgorithmParameters getAlgorithmParameters(ECParameterSpec spec)
|
static AlgorithmParameters getAlgorithmParameters(ECParameterSpec spec)
|
||||||
throws InvalidKeyException {
|
throws InvalidKeyException {
|
||||||
try {
|
try {
|
||||||
AlgorithmParameters params = AlgorithmParameters.getInstance
|
AlgorithmParameters params =
|
||||||
("EC", ECKeyFactory.ecInternalProvider);
|
AlgorithmParameters.getInstance("EC", "SunEC");
|
||||||
params.init(spec);
|
params.init(spec);
|
||||||
return params;
|
return params;
|
||||||
} catch (GeneralSecurityException e) {
|
} catch (GeneralSecurityException e) {
|
||||||
|
@ -96,8 +96,13 @@ public final class ECPublicKeyImpl extends X509Key implements ECPublicKey {
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
protected void parseKeyBits() throws InvalidKeyException {
|
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 {
|
try {
|
||||||
AlgorithmParameters algParams = this.algid.getParameters();
|
|
||||||
params = algParams.getParameterSpec(ECParameterSpec.class);
|
params = algParams.getParameterSpec(ECParameterSpec.class);
|
||||||
w = ECParameters.decodePoint(key, params.getCurve());
|
w = ECParameters.decodePoint(key, params.getCurve());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -54,6 +54,7 @@ final class SunECEntries {
|
|||||||
*/
|
*/
|
||||||
map.put("AlgorithmParameters.EC", "sun.security.ec.ECParameters");
|
map.put("AlgorithmParameters.EC", "sun.security.ec.ECParameters");
|
||||||
map.put("Alg.Alias.AlgorithmParameters.EllipticCurve", "EC");
|
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");
|
map.put("AlgorithmParameters.EC KeySize", "256");
|
||||||
|
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -304,7 +304,7 @@ final class P11ECKeyFactory extends P11KeyFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
KeyFactory implGetSoftwareFactory() throws GeneralSecurityException {
|
KeyFactory implGetSoftwareFactory() throws GeneralSecurityException {
|
||||||
return sun.security.ec.ECKeyFactory.INSTANCE;
|
return KeyFactory.getInstance("EC", "SunEC");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -120,21 +120,14 @@ public class AlgorithmId implements Serializable, DerEncoder {
|
|||||||
try {
|
try {
|
||||||
algParams = AlgorithmParameters.getInstance(algidString);
|
algParams = AlgorithmParameters.getInstance(algidString);
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
try {
|
/*
|
||||||
// Try the internal EC code so that we can fully parse EC
|
* This algorithm parameter type is not supported, so we cannot
|
||||||
// keys even if the provider is not registered.
|
* parse the parameters.
|
||||||
// This code can go away once we have EC in the SUN provider.
|
*/
|
||||||
algParams = AlgorithmParameters.getInstance(algidString,
|
algParams = null;
|
||||||
sun.security.ec.ECKeyFactory.ecInternalProvider);
|
return;
|
||||||
} catch (NoSuchAlgorithmException ee) {
|
|
||||||
/*
|
|
||||||
* This algorithm parameter type is not supported, so we cannot
|
|
||||||
* parse the parameters.
|
|
||||||
*/
|
|
||||||
algParams = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode (parse) the parameters
|
// Decode (parse) the parameters
|
||||||
algParams.init(params.toByteArray());
|
algParams.init(params.toByteArray());
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -33,6 +33,7 @@
|
|||||||
* @run main TestEC
|
* @run main TestEC
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import java.security.NoSuchProviderException;
|
||||||
import java.security.Provider;
|
import java.security.Provider;
|
||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
|
|
||||||
@ -62,7 +63,12 @@ public class TestEC {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main0(String[] args) throws Exception {
|
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() +
|
System.out.println("Running tests with " + p.getName() +
|
||||||
" provider...\n");
|
" provider...\n");
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
|
@ -63,6 +63,10 @@ public class ReadCertificates extends PKCS11Test {
|
|||||||
System.out.println("Provider does not support ECDSA, skipping...");
|
System.out.println("Provider does not support ECDSA, skipping...");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PKCS11Test.main will remove this provider if needed
|
||||||
|
*/
|
||||||
Providers.setAt(p, 1);
|
Providers.setAt(p, 1);
|
||||||
|
|
||||||
random = new SecureRandom();
|
random = new SecureRandom();
|
||||||
@ -132,7 +136,6 @@ public class ReadCertificates extends PKCS11Test {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Security.removeProvider(p.getName());
|
|
||||||
System.out.println("OK");
|
System.out.println("OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,10 @@ public class ReadPKCS12 extends PKCS11Test {
|
|||||||
System.out.println("Provider does not support ECDSA, skipping...");
|
System.out.println("Provider does not support ECDSA, skipping...");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PKCS11Test.main will remove this provider if needed
|
||||||
|
*/
|
||||||
Providers.setAt(p, 1);
|
Providers.setAt(p, 1);
|
||||||
|
|
||||||
CertificateFactory factory = CertificateFactory.getInstance("X.509");
|
CertificateFactory factory = CertificateFactory.getInstance("X.509");
|
||||||
@ -147,7 +151,6 @@ public class ReadPKCS12 extends PKCS11Test {
|
|||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
Security.removeProvider(p.getName());
|
|
||||||
System.out.println("OK");
|
System.out.println("OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +60,10 @@ public class TestECDH extends PKCS11Test {
|
|||||||
System.out.println("Provider does not support ECDH, skipping");
|
System.out.println("Provider does not support ECDH, skipping");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PKCS11Test.main will remove this provider if needed
|
||||||
|
*/
|
||||||
Providers.setAt(p, 1);
|
Providers.setAt(p, 1);
|
||||||
|
|
||||||
if (false) {
|
if (false) {
|
||||||
@ -77,7 +81,6 @@ public class TestECDH extends PKCS11Test {
|
|||||||
test(p, pub192a, priv192a, pub192b, priv192b, secret192);
|
test(p, pub192a, priv192a, pub192b, priv192b, secret192);
|
||||||
test(p, pub163a, priv163a, pub163b, priv163b, secret163);
|
test(p, pub163a, priv163a, pub163b, priv163b, secret163);
|
||||||
|
|
||||||
Security.removeProvider(p.getName());
|
|
||||||
System.out.println("OK");
|
System.out.println("OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,6 +116,10 @@ public class TestECDSA extends PKCS11Test {
|
|||||||
System.out.println("ECDSA not supported, skipping");
|
System.out.println("ECDSA not supported, skipping");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PKCS11Test.main will remove this provider if needed
|
||||||
|
*/
|
||||||
Providers.setAt(provider, 1);
|
Providers.setAt(provider, 1);
|
||||||
|
|
||||||
if (false) {
|
if (false) {
|
||||||
@ -137,7 +141,6 @@ public class TestECDSA extends PKCS11Test {
|
|||||||
test(provider, pub521, priv521, sig521);
|
test(provider, pub521, priv521, sig521);
|
||||||
test(provider, pub571, priv571, sig571);
|
test(provider, pub571, priv571, sig571);
|
||||||
|
|
||||||
Security.removeProvider(provider.getName());
|
|
||||||
long stop = System.currentTimeMillis();
|
long stop = System.currentTimeMillis();
|
||||||
System.out.println("All tests passed (" + (stop - start) + " ms).");
|
System.out.println("All tests passed (" + (stop - start) + " ms).");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user