You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by co...@apache.org on 2014/05/23 12:59:50 UTC
svn commit: r1597058 - in
/santuario/xml-security-java/branches/1.5.x-fixes/src:
main/java/org/apache/jcp/xml/dsig/internal/dom/
main/java/org/apache/xml/security/algorithms/
main/java/org/apache/xml/security/algorithms/implementations/
main/java/org/a...
Author: coheigea
Date: Fri May 23 10:59:50 2014
New Revision: 1597058
URL: http://svn.apache.org/r1597058
Log:
Adding more PublicKey Signature testing
Added:
santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java
santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/org/apache/xml/security/test/dom/algorithms/PKSignatureAlgorithmTest.java
Modified:
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithm.java
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/resource/config.xml
santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/signature/XMLSignature.java
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureMethod.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/DOMSignatureMethod.java?rev=1597058&r1=1597057&r2=1597058&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java Fri May 23 10:59:50 2014
@@ -58,8 +58,12 @@ public abstract class DOMSignatureMethod
"http://www.w3.org/2001/04/xmldsig-more#rsa-sha384";
static final String RSA_SHA512 =
"http://www.w3.org/2001/04/xmldsig-more#rsa-sha512";
+ static final String RSA_RIPEMD160 =
+ "http://www.w3.org/2001/04/xmldsig-more#rsa-ripemd160";
static final String ECDSA_SHA1 =
"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1";
+ static final String ECDSA_SHA224 =
+ "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha224";
static final String ECDSA_SHA256 =
"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256";
static final String ECDSA_SHA384 =
@@ -117,12 +121,16 @@ public abstract class DOMSignatureMethod
return new SHA384withRSA(smElem);
} else if (alg.equals(RSA_SHA512)) {
return new SHA512withRSA(smElem);
+ } else if (alg.equals(RSA_RIPEMD160)) {
+ return new RIPEMD160withRSA(smElem);
} else if (alg.equals(SignatureMethod.DSA_SHA1)) {
return new SHA1withDSA(smElem);
} else if (alg.equals(DSA_SHA256)) {
return new SHA256withDSA(smElem);
} else if (alg.equals(ECDSA_SHA1)) {
return new SHA1withECDSA(smElem);
+ } else if (alg.equals(ECDSA_SHA224)) {
+ return new SHA224withECDSA(smElem);
} else if (alg.equals(ECDSA_SHA256)) {
return new SHA256withECDSA(smElem);
} else if (alg.equals(ECDSA_SHA384)) {
@@ -320,6 +328,28 @@ public abstract class DOMSignatureMethod
return Type.RSA;
}
}
+
+ static final class RIPEMD160withRSA extends DOMSignatureMethod {
+ RIPEMD160withRSA(AlgorithmParameterSpec params)
+ throws InvalidAlgorithmParameterException {
+ super(params);
+ }
+ RIPEMD160withRSA(Element dmElem) throws MarshalException {
+ super(dmElem);
+ }
+ @Override
+ public String getAlgorithm() {
+ return RSA_RIPEMD160;
+ }
+ @Override
+ String getJCAAlgorithm() {
+ return "RIPEMD160withRSA";
+ }
+ @Override
+ Type getAlgorithmType() {
+ return Type.RSA;
+ }
+ }
static final class SHA1withDSA extends DOMSignatureMethod {
SHA1withDSA(AlgorithmParameterSpec params)
@@ -377,6 +407,28 @@ public abstract class DOMSignatureMethod
return Type.ECDSA;
}
}
+
+ static final class SHA224withECDSA extends DOMSignatureMethod {
+ SHA224withECDSA(AlgorithmParameterSpec params)
+ throws InvalidAlgorithmParameterException {
+ super(params);
+ }
+ SHA224withECDSA(Element dmElem) throws MarshalException {
+ super(dmElem);
+ }
+ @Override
+ public String getAlgorithm() {
+ return ECDSA_SHA224;
+ }
+ @Override
+ String getJCAAlgorithm() {
+ return "SHA224withECDSA";
+ }
+ @Override
+ Type getAlgorithmType() {
+ return Type.ECDSA;
+ }
+ }
static final class SHA256withECDSA extends DOMSignatureMethod {
SHA256withECDSA(AlgorithmParameterSpec params)
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.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/DOMXMLSignatureFactory.java?rev=1597058&r1=1597057&r2=1597058&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Fri May 23 10:59:50 2014
@@ -237,6 +237,10 @@ public final class DOMXMLSignatureFactor
return new DOMSignatureMethod.SHA384withRSA(params);
} else if (algorithm.equals(DOMSignatureMethod.RSA_SHA512)) {
return new DOMSignatureMethod.SHA512withRSA(params);
+ } else if (algorithm.equals(DOMSignatureMethod.RSA_SHA512)) {
+ return new DOMSignatureMethod.SHA512withRSA(params);
+ } else if (algorithm.equals(DOMSignatureMethod.RSA_RIPEMD160)) {
+ return new DOMSignatureMethod.RIPEMD160withRSA(params);
} else if (algorithm.equals(SignatureMethod.DSA_SHA1)) {
return new DOMSignatureMethod.SHA1withDSA(params);
} else if (algorithm.equals(DOMSignatureMethod.DSA_SHA256)) {
@@ -255,6 +259,8 @@ public final class DOMXMLSignatureFactor
return new DOMHMACSignatureMethod.RIPEMD160(params);
} else if (algorithm.equals(DOMSignatureMethod.ECDSA_SHA1)) {
return new DOMSignatureMethod.SHA1withECDSA(params);
+ } else if (algorithm.equals(DOMSignatureMethod.ECDSA_SHA224)) {
+ return new DOMSignatureMethod.SHA224withECDSA(params);
} else if (algorithm.equals(DOMSignatureMethod.ECDSA_SHA256)) {
return new DOMSignatureMethod.SHA256withECDSA(params);
} else if (algorithm.equals(DOMSignatureMethod.ECDSA_SHA384)) {
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java?rev=1597058&r1=1597057&r2=1597058&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java Fri May 23 10:59:50 2014
@@ -121,6 +121,10 @@ public class JCEMapper {
new Algorithm("", "SHA1withECDSA", "Signature")
);
algorithmsMap.put(
+ XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA224,
+ new Algorithm("SHA224withECDSA", "SHA224withECDSA", "Signature")
+ );
+ algorithmsMap.put(
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA256,
new Algorithm("", "SHA256withECDSA", "Signature")
);
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithm.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithm.java?rev=1597058&r1=1597057&r2=1597058&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithm.java (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithm.java Fri May 23 10:59:50 2014
@@ -410,6 +410,9 @@ public class SignatureAlgorithm extends
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1, SignatureECDSA.SignatureECDSASHA1.class
);
algorithmHash.put(
+ XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA224, SignatureECDSA.SignatureECDSASHA224.class
+ );
+ algorithmHash.put(
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA256, SignatureECDSA.SignatureECDSASHA256.class
);
algorithmHash.put(
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java?rev=1597058&r1=1597057&r2=1597058&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java Fri May 23 10:59:50 2014
@@ -363,13 +363,13 @@ public abstract class SignatureECDSA ext
}
/**
- * Class SignatureRSASHA1
+ * Class SignatureECDSASHA1
*
* @author $Author: marcx $
*/
public static class SignatureECDSASHA1 extends SignatureECDSA {
/**
- * Constructor SignatureRSASHA1
+ * Constructor SignatureECDSASHA1
*
* @throws XMLSignatureException
*/
@@ -384,14 +384,34 @@ public abstract class SignatureECDSA ext
}
/**
- * Class SignatureRSASHA256
+ * Class SignatureECDSASHA224
+ */
+ public static class SignatureECDSASHA224 extends SignatureECDSA {
+
+ /**
+ * Constructor SignatureECDSASHA224
+ *
+ * @throws XMLSignatureException
+ */
+ public SignatureECDSASHA224() throws XMLSignatureException {
+ super();
+ }
+
+ /** @inheritDoc */
+ public String engineGetURI() {
+ return XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA224;
+ }
+ }
+
+ /**
+ * Class SignatureECDSASHA256
*
* @author Alex Dupre
*/
public static class SignatureECDSASHA256 extends SignatureECDSA {
/**
- * Constructor SignatureRSASHA256
+ * Constructor SignatureECDSASHA256
*
* @throws XMLSignatureException
*/
@@ -406,14 +426,14 @@ public abstract class SignatureECDSA ext
}
/**
- * Class SignatureRSASHA384
+ * Class SignatureECDSASHA384
*
* @author Alex Dupre
*/
public static class SignatureECDSASHA384 extends SignatureECDSA {
/**
- * Constructor SignatureRSASHA384
+ * Constructor SignatureECDSASHA384
*
* @throws XMLSignatureException
*/
@@ -428,14 +448,14 @@ public abstract class SignatureECDSA ext
}
/**
- * Class SignatureRSASHA512
+ * Class SignatureECDSASHA512
*
* @author Alex Dupre
*/
public static class SignatureECDSASHA512 extends SignatureECDSA {
/**
- * Constructor SignatureRSASHA512
+ * Constructor SignatureECDSASHA512
*
* @throws XMLSignatureException
*/
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/resource/config.xml
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/resource/config.xml?rev=1597058&r1=1597057&r2=1597058&view=diff
==============================================================================
Binary files - no diff available.
Modified: santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/signature/XMLSignature.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/signature/XMLSignature.java?rev=1597058&r1=1597057&r2=1597058&view=diff
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/signature/XMLSignature.java (original)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/main/java/org/apache/xml/security/signature/XMLSignature.java Fri May 23 10:59:50 2014
@@ -141,6 +141,10 @@ public final class XMLSignature extends
public static final String ALGO_ID_SIGNATURE_ECDSA_SHA1 =
"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1";
+ /**Signature - Optional ECDSAwithSHA224 */
+ public static final String ALGO_ID_SIGNATURE_ECDSA_SHA224 =
+ "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha224";
+
/**Signature - Optional ECDSAwithSHA256 */
public static final String ALGO_ID_SIGNATURE_ECDSA_SHA256 =
"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256";
Added: santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java?rev=1597058&view=auto
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java (added)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java Fri May 23 10:59:50 2014
@@ -0,0 +1,227 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package javax.xml.crypto.test.dsig;
+
+import java.lang.reflect.Constructor;
+import java.security.Key;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.Provider;
+import java.security.Security;
+import java.util.Collections;
+
+import javax.xml.crypto.KeySelector;
+import javax.xml.crypto.dom.DOMStructure;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.XMLObject;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.dom.DOMValidateContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.test.KeySelectors;
+import javax.xml.parsers.DocumentBuilder;
+
+import org.apache.xml.security.utils.XMLUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+/**
+ * Test signing using all available PublicKey signing algorithms
+ */
+public class PKSignatureAlgorithmTest extends org.junit.Assert {
+
+ private KeySelector kvks;
+ private CanonicalizationMethod withoutComments;
+ private DigestMethod sha1;
+ private SignatureMethod rsaSha1, rsaSha256, rsaSha384, rsaSha512, rsaRipemd160;
+ private SignatureMethod ecdsaSha1, ecdsaSha224, ecdsaSha256, ecdsaSha384, ecdsaSha512;
+ private XMLSignatureFactory fac;
+ private DocumentBuilder db;
+ private KeyPair rsaKeyPair, ecKeyPair;
+ private KeyInfo rsaki, ecki;
+
+ static {
+ Security.insertProviderAt
+ (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+ }
+
+ public PKSignatureAlgorithmTest() throws Exception {
+ //
+ // If the BouncyCastle provider is not installed, then try to load it
+ // via reflection.
+ //
+ if (Security.getProvider("BC") == null) {
+ Constructor<?> cons = null;
+ try {
+ Class<?> c = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
+ cons = c.getConstructor(new Class[] {});
+ } catch (Exception e) {
+ //ignore
+ }
+ if (cons == null) {
+ // BouncyCastle is not available so just return
+ return;
+ } else {
+ Provider provider = (java.security.Provider)cons.newInstance();
+ Security.insertProviderAt(provider, 2);
+ }
+ }
+
+ db = XMLUtils.createDocumentBuilder(false);
+ // create common objects
+ fac = XMLSignatureFactory.getInstance();
+ withoutComments = fac.newCanonicalizationMethod
+ (CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null);
+
+ // Digest Methods
+ sha1 = fac.newDigestMethod(DigestMethod.SHA1, null);
+
+ rsaSha1 = fac.newSignatureMethod("http://www.w3.org/2000/09/xmldsig#rsa-sha1", null);
+ rsaSha256 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", null);
+ rsaSha384 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#rsa-sha384", null);
+ rsaSha512 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#rsa-sha512", null);
+ rsaRipemd160 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#rsa-ripemd160", null);
+
+ ecdsaSha1 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1", null);
+ ecdsaSha224 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha224", null);
+ ecdsaSha256 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256", null);
+ ecdsaSha384 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384", null);
+ ecdsaSha512 = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512", null);
+
+ kvks = new KeySelectors.KeyValueKeySelector();
+
+ rsaKeyPair = KeyPairGenerator.getInstance("RSA").genKeyPair();
+ ecKeyPair = KeyPairGenerator.getInstance("EC").genKeyPair();
+
+ KeyInfoFactory kifac = fac.getKeyInfoFactory();
+ rsaki = kifac.newKeyInfo(Collections.singletonList
+ (kifac.newKeyValue(rsaKeyPair.getPublic())));
+ ecki = kifac.newKeyInfo(Collections.singletonList
+ (kifac.newKeyValue(ecKeyPair.getPublic())));
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA1() throws Exception {
+ test_create_signature_enveloping(rsaSha1, sha1, rsaki,
+ rsaKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA_256() throws Exception {
+ test_create_signature_enveloping(rsaSha256, sha1, rsaki,
+ rsaKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA_384() throws Exception {
+ test_create_signature_enveloping(rsaSha384, sha1, rsaki,
+ rsaKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA_512() throws Exception {
+ test_create_signature_enveloping(rsaSha512, sha1, rsaki,
+ rsaKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testRSA_RIPEMD160() throws Exception {
+ test_create_signature_enveloping(rsaRipemd160, sha1, rsaki,
+ rsaKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA1() throws Exception {
+ test_create_signature_enveloping(ecdsaSha1, sha1, ecki,
+ ecKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA224() throws Exception {
+ test_create_signature_enveloping(ecdsaSha224, sha1, ecki,
+ ecKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA256() throws Exception {
+ test_create_signature_enveloping(ecdsaSha256, sha1, ecki,
+ ecKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA384() throws Exception {
+ test_create_signature_enveloping(ecdsaSha384, sha1, ecki,
+ ecKeyPair.getPrivate(), kvks);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA512() throws Exception {
+ test_create_signature_enveloping(ecdsaSha512, sha1, ecki,
+ ecKeyPair.getPrivate(), kvks);
+ }
+
+ private void test_create_signature_enveloping(
+ SignatureMethod sm, DigestMethod dm, KeyInfo ki, Key signingKey, KeySelector ks
+ ) throws Exception {
+
+ // create reference
+ Reference ref = fac.newReference("#DSig.Object_1", dm, null,
+ XMLObject.TYPE, null);
+
+ // create SignedInfo
+ SignedInfo si = fac.newSignedInfo(withoutComments, sm,
+ Collections.singletonList(ref));
+
+ Document doc = db.newDocument();
+ // create Objects
+ Element webElem = doc.createElementNS(null, "Web");
+ Text text = doc.createTextNode("up up and away");
+ webElem.appendChild(text);
+ XMLObject obj = fac.newXMLObject(Collections.singletonList
+ (new DOMStructure(webElem)), "DSig.Object_1", "text/xml", null);
+
+ // create XMLSignature
+ XMLSignature sig = fac.newXMLSignature
+ (si, ki, Collections.singletonList(obj), null, null);
+
+ DOMSignContext dsc = new DOMSignContext(signingKey, doc);
+ dsc.setDefaultNamespacePrefix("dsig");
+
+ sig.sign(dsc);
+ TestUtils.validateSecurityOrEncryptionElement(doc.getDocumentElement());
+
+ // XMLUtils.outputDOM(doc.getDocumentElement(), System.out);
+
+ DOMValidateContext dvc = new DOMValidateContext
+ (ks, doc.getDocumentElement());
+ XMLSignature sig2 = fac.unmarshalXMLSignature(dvc);
+
+ assertTrue(sig.equals(sig2));
+ assertTrue(sig2.validate(dvc));
+ }
+
+}
Added: santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/org/apache/xml/security/test/dom/algorithms/PKSignatureAlgorithmTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/org/apache/xml/security/test/dom/algorithms/PKSignatureAlgorithmTest.java?rev=1597058&view=auto
==============================================================================
--- santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/org/apache/xml/security/test/dom/algorithms/PKSignatureAlgorithmTest.java (added)
+++ santuario/xml-security-java/branches/1.5.x-fixes/src/test/java/org/apache/xml/security/test/dom/algorithms/PKSignatureAlgorithmTest.java Fri May 23 10:59:50 2014
@@ -0,0 +1,341 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.xml.security.test.dom.algorithms;
+
+import java.io.InputStream;
+import java.lang.reflect.Constructor;
+import java.security.Key;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.Provider;
+import java.security.Security;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.test.dom.DSNamespaceContext;
+import org.apache.xml.security.transforms.Transforms;
+import org.apache.xml.security.utils.XMLUtils;
+import org.junit.Assert;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * A test to make sure that the various Public Key Signature algorithms are working
+ */
+public class PKSignatureAlgorithmTest extends org.junit.Assert {
+
+ private KeyPair rsaKeyPair, ecKeyPair;
+
+ static {
+ org.apache.xml.security.Init.init();
+ }
+
+ public PKSignatureAlgorithmTest() throws Exception {
+ //
+ // If the BouncyCastle provider is not installed, then try to load it
+ // via reflection.
+ //
+ if (Security.getProvider("BC") == null) {
+ Constructor<?> cons = null;
+ try {
+ Class<?> c = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
+ cons = c.getConstructor(new Class[] {});
+ } catch (Exception e) {
+ //ignore
+ }
+ if (cons == null) {
+ // BouncyCastle is not available so just return
+ return;
+ } else {
+ Provider provider = (java.security.Provider)cons.newInstance();
+ Security.insertProviderAt(provider, 2);
+ }
+ }
+
+ rsaKeyPair = KeyPairGenerator.getInstance("RSA").genKeyPair();
+ ecKeyPair = KeyPairGenerator.getInstance("EC").genKeyPair();
+ }
+
+ @org.junit.Test
+ public void testRSA_MD5() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_NOT_RECOMMENDED_RSA_MD5, document, localNames, rsaKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, rsaKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA1() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1, document, localNames, rsaKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, rsaKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA_256() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256, document, localNames, rsaKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, rsaKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA_384() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA384, document, localNames, rsaKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, rsaKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testRSA_SHA_512() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA512, document, localNames, rsaKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, rsaKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testRSA_RIPEMD160() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_RSA_RIPEMD160, document, localNames, rsaKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, rsaKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA1() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1, document, localNames, ecKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, ecKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA_224() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA224, document, localNames, ecKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, ecKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA_256() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA256, document, localNames, ecKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, ecKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA_384() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA384, document, localNames, ecKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, ecKeyPair.getPublic(), localNames);
+ }
+
+ @org.junit.Test
+ public void testECDSA_SHA_512() throws Exception {
+ // Read in plaintext document
+ InputStream sourceDocument =
+ this.getClass().getClassLoader().getResourceAsStream(
+ "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+ DocumentBuilder builder = XMLUtils.createDocumentBuilder(false);
+ Document document = builder.parse(sourceDocument);
+
+ List<String> localNames = new ArrayList<String>();
+ localNames.add("PaymentInfo");
+
+ sign(XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA512, document, localNames, ecKeyPair.getPrivate());
+ // XMLUtils.outputDOM(document, System.out);
+ verify(document, ecKeyPair.getPublic(), localNames);
+ }
+
+ private XMLSignature sign(
+ String algorithm,
+ Document document,
+ List<String> localNames,
+ Key signingKey
+ ) throws Exception {
+ String c14nMethod = "http://www.w3.org/2001/10/xml-exc-c14n#";
+ XMLSignature sig = new XMLSignature(document, "", algorithm, c14nMethod);
+
+ Element root = document.getDocumentElement();
+ root.appendChild(sig.getElement());
+
+ XPathFactory xpf = XPathFactory.newInstance();
+ XPath xpath = xpf.newXPath();
+ xpath.setNamespaceContext(new DSNamespaceContext());
+
+ for (String localName : localNames) {
+ String expression = "//*[local-name()='" + localName + "']";
+ NodeList elementsToSign =
+ (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
+ for (int i = 0; i < elementsToSign.getLength(); i++) {
+ Element elementToSign = (Element)elementsToSign.item(i);
+ Assert.assertNotNull(elementToSign);
+ String id = UUID.randomUUID().toString();
+ elementToSign.setAttributeNS(null, "Id", id);
+ elementToSign.setIdAttributeNS(null, "Id", true);
+
+ Transforms transforms = new Transforms(document);
+ transforms.addTransform(c14nMethod);
+ String digestMethod = "http://www.w3.org/2000/09/xmldsig#sha1";
+ sig.addDocument("#" + id, transforms, digestMethod);
+ }
+ }
+
+ sig.sign(signingKey);
+
+ String expression = "//ds:Signature[1]";
+ Element sigElement =
+ (Element) xpath.evaluate(expression, document, XPathConstants.NODE);
+ Assert.assertNotNull(sigElement);
+
+ return sig;
+ }
+
+ private void verify(
+ Document document,
+ Key key,
+ List<String> localNames
+ ) throws Exception {
+ XPathFactory xpf = XPathFactory.newInstance();
+ XPath xpath = xpf.newXPath();
+ xpath.setNamespaceContext(new DSNamespaceContext());
+
+ String expression = "//dsig:Signature[1]";
+ Element sigElement =
+ (Element) xpath.evaluate(expression, document, XPathConstants.NODE);
+ Assert.assertNotNull(sigElement);
+
+ for (String name : localNames) {
+ expression = "//*[local-name()='" + name + "']";
+ Element signedElement =
+ (Element) xpath.evaluate(expression, document, XPathConstants.NODE);
+ Assert.assertNotNull(signedElement);
+ signedElement.setIdAttributeNS(null, "Id", true);
+ }
+
+ XMLSignature signature = new XMLSignature(sigElement, "");
+
+ Assert.assertTrue(signature.checkSignatureValue(key));
+ }
+
+}