You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2014/06/12 20:11:02 UTC
svn commit: r1602254 - in /santuario/xml-security-java/branches/1.5.x-fixes:
pom.xml src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java
Author: mullan
Date: Thu Jun 12 18:11:02 2014
New Revision: 1602254
URL: http://svn.apache.org/r1602254
Log:
Fix ECDSA test failures with JDK 1.8.
Modified:
santuario/xml-security-java/branches/1.5.x-fixes/pom.xml
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java
Modified: santuario/xml-security-java/branches/1.5.x-fixes/pom.xml
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/pom.xml?rev=1602254&r1=1602253&r2=1602254&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/pom.xml (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/pom.xml Thu Jun 12 18:11:02 2014
@@ -137,6 +137,7 @@
<configuration>
<source>1.5</source>
<target>1.5</target>
+ <compilerArgument>-Xlint:unchecked,deprecation</compilerArgument>
</configuration>
</plugin>
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java?rev=1602254&r1=1602253&r2=1602254&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMKeyValue.java Thu Jun 12 18:11:02 2014
@@ -29,10 +29,11 @@ import javax.xml.crypto.dom.DOMCryptoCon
import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.keyinfo.KeyValue;
-// import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.AccessController;
+import java.security.AlgorithmParameters;
+import java.security.GeneralSecurityException;
import java.security.KeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
@@ -44,6 +45,7 @@ import java.security.interfaces.DSAPubli
import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.DSAPublicKeySpec;
+import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec;
import java.security.spec.ECPoint;
import java.security.spec.ECPublicKeySpec;
@@ -332,12 +334,15 @@ public abstract class DOMKeyValue extend
}
static final class EC extends DOMKeyValue {
+
+ private final static String ver = System.getProperty("java.version");
+ private final static boolean atLeast18 = !ver.startsWith("1.5") &&
+ !ver.startsWith("1.6") && !ver.startsWith("1.7");
// ECKeyValue CryptoBinaries
private byte[] ecPublicKey;
private KeyFactory eckf;
private ECParameterSpec ecParams;
- private Method encodePoint, decodePoint, getCurveName,
- getECParameterSpec;
+ private Method encodePoint, decodePoint;
EC(PublicKey key) throws KeyException {
super(key);
@@ -374,16 +379,15 @@ public abstract class DOMKeyValue extend
}
void getMethods() throws ClassNotFoundException, NoSuchMethodException {
- Class c = ClassLoaderUtils.loadClass("sun.security.ec.ECParameters", DOMKeyValue.class);
+ String className = atLeast18
+ ? "sun.security.util.ECUtil"
+ : "sun.security.ec.ECParameters";
+ Class c = ClassLoaderUtils.loadClass(className, DOMKeyValue.class);
Class[] params = new Class<?>[] { ECPoint.class, EllipticCurve.class };
encodePoint = c.getMethod("encodePoint", params);
params = new Class[] { ECParameterSpec.class };
- getCurveName = c.getMethod("getCurveName", params);
params = new Class[] { byte[].class, EllipticCurve.class };
decodePoint = c.getMethod("decodePoint", params);
- c = ClassLoaderUtils.loadClass("sun.security.ec.NamedCurve", DOMKeyValue.class);
- params = new Class[] { String.class };
- getECParameterSpec = c.getMethod("getECParameterSpec", params);
}
void marshalPublicKey(Node parent, Document doc, String dsPrefix,
@@ -402,12 +406,10 @@ public abstract class DOMKeyValue extend
prefix);
Object[] args = new Object[] { ecParams };
try {
- String oid = (String) getCurveName.invoke(null, args);
+ String oid = getCurveName(ecParams);
DOMUtils.setAttribute(namedCurveElem, "URI", "urn:oid:" + oid);
- } catch (IllegalAccessException iae) {
- throw new MarshalException(iae);
- } catch (InvocationTargetException ite) {
- throw new MarshalException(ite);
+ } catch (GeneralSecurityException gse) {
+ throw new MarshalException(gse);
}
String qname = (prefix == null || prefix.length() == 0)
? "xmlns" : "xmlns:" + prefix;
@@ -421,6 +423,19 @@ public abstract class DOMKeyValue extend
parent.appendChild(ecKeyValueElem);
}
+ private static String getCurveName(ECParameterSpec spec)
+ throws GeneralSecurityException
+ {
+ AlgorithmParameters ap = AlgorithmParameters.getInstance("EC");
+ ap.init(spec);
+ ECGenParameterSpec nameSpec =
+ ap.getParameterSpec(ECGenParameterSpec.class);
+ if (nameSpec == null) {
+ return null;
+ }
+ return nameSpec.getName();
+ }
+
PublicKey unmarshalKeyValue(Element kvtElem)
throws MarshalException
{
@@ -465,12 +480,9 @@ public abstract class DOMKeyValue extend
String oid = uri.substring(8);
try {
Object[] args = new Object[] { oid };
- ecParams = (ECParameterSpec)
- getECParameterSpec.invoke(null, args);
- } catch (IllegalAccessException iae) {
- throw new MarshalException(iae);
- } catch (InvocationTargetException ite) {
- throw new MarshalException(ite);
+ ecParams = getECParameterSpec(oid);
+ } catch (GeneralSecurityException gse) {
+ throw new MarshalException(gse);
}
} else {
throw new MarshalException("Invalid NamedCurve URI");
@@ -498,6 +510,14 @@ public abstract class DOMKeyValue extend
ECPublicKeySpec spec = new ECPublicKeySpec(ecPoint, ecParams);
return generatePublicKey(eckf, spec);
}
+
+ private static ECParameterSpec getECParameterSpec(String name)
+ throws GeneralSecurityException
+ {
+ AlgorithmParameters ap = AlgorithmParameters.getInstance("EC");
+ ap.init(new ECGenParameterSpec(name));
+ return ap.getParameterSpec(ECParameterSpec.class);
+ }
}
static final class Unknown extends DOMKeyValue {