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/20 13:12:05 UTC

svn commit: r1596196 - in /santuario/xml-security-java/trunk/src: main/java/org/apache/jcp/xml/dsig/internal/dom/ main/java/org/apache/xml/security/algorithms/ main/java/org/apache/xml/security/resource/ test/java/javax/xml/crypto/test/dsig/ test/java/...

Author: coheigea
Date: Tue May 20 11:12:04 2014
New Revision: 1596196

URL: http://svn.apache.org/r1596196
Log:
[SANTUARIO-389] - Add support + testing for SHA-224 digest algorithm

Modified:
    santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMDigestMethod.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/resource/config.xml
    santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/algorithms/DigestAlgorithmTest.java

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMDigestMethod.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMDigestMethod.java?rev=1596196&r1=1596195&r2=1596196&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMDigestMethod.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMDigestMethod.java Tue May 20 11:12:04 2014
@@ -40,6 +40,8 @@ import org.w3c.dom.Element;
 public abstract class DOMDigestMethod extends BaseStructure 
     implements DigestMethod {
 
+    static final String SHA224 =
+        "http://www.w3.org/2001/04/xmldsig-more#sha224"; // see RFC 4051
     static final String SHA384 =
         "http://www.w3.org/2001/04/xmldsig-more#sha384"; // see RFC 4051
     private DigestMethodParameterSpec params;
@@ -85,6 +87,8 @@ public abstract class DOMDigestMethod ex
         String alg = DOMUtils.getAttributeValue(dmElem, "Algorithm");
         if (alg.equals(DigestMethod.SHA1)) {
             return new SHA1(dmElem);
+        } else if (alg.equals(SHA224)) {
+            return new SHA224(dmElem);
         } else if (alg.equals(DigestMethod.SHA256)) {
             return new SHA256(dmElem);
         } else if (alg.equals(SHA384)) {
@@ -229,6 +233,24 @@ public abstract class DOMDigestMethod ex
             return "SHA-1";
         }
     }
+    
+    static final class SHA224 extends DOMDigestMethod {
+        SHA224(AlgorithmParameterSpec params)
+            throws InvalidAlgorithmParameterException {
+            super(params);
+        }
+        SHA224(Element dmElem) throws MarshalException {
+            super(dmElem);
+        }
+        @Override
+        public String getAlgorithm() {
+            return SHA224;
+        }
+        @Override
+        String getMessageDigestAlgorithm() {
+            return "SHA-224";
+        }
+    }
 
     static final class SHA256 extends DOMDigestMethod {
         SHA256(AlgorithmParameterSpec params)

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java?rev=1596196&r1=1596195&r2=1596196&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Tue May 20 11:12:04 2014
@@ -225,6 +225,8 @@ public final class DOMXMLSignatureFactor
         }
         if (algorithm.equals(DigestMethod.SHA1)) {
             return new DOMDigestMethod.SHA1(params);
+        } else if (algorithm.equals(DOMDigestMethod.SHA224)) {
+            return new DOMDigestMethod.SHA224(params);
         } else if (algorithm.equals(DigestMethod.SHA256)) {
             return new DOMDigestMethod.SHA256(params);
         } else if (algorithm.equals(DOMDigestMethod.SHA384)) {

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java?rev=1596196&r1=1596195&r2=1596196&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/JCEMapper.java Tue May 20 11:12:04 2014
@@ -67,6 +67,10 @@ public class JCEMapper {
             new Algorithm("SHA-1", "SHA-1", "MessageDigest")
         );
         algorithmsMap.put(
+            MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA224, 
+            new Algorithm("SHA-224", "SHA-224", "MessageDigest")
+        );
+        algorithmsMap.put(
             MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA256, 
             new Algorithm("SHA-256", "SHA-256", "MessageDigest")
         );

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java?rev=1596196&r1=1596195&r2=1596196&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java Tue May 20 11:12:04 2014
@@ -40,6 +40,9 @@ public class MessageDigestAlgorithm exte
         Constants.MoreAlgorithmsSpecNS + "md5";
     /** Digest - Required SHA1*/
     public static final String ALGO_ID_DIGEST_SHA1 = Constants.SignatureSpecNS + "sha1";
+    /** Message Digest - OPTIONAL SHA224*/
+    public static final String ALGO_ID_DIGEST_SHA224 =
+        Constants.MoreAlgorithmsSpecNS + "sha224";
     /** Message Digest - RECOMMENDED SHA256*/
     public static final String ALGO_ID_DIGEST_SHA256 = 
         EncryptionConstants.EncryptionSpecNS + "sha256";

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/resource/config.xml
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/resource/config.xml?rev=1596196&r1=1596195&r2=1596196&view=diff
==============================================================================
Binary files - no diff available.

Modified: santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java?rev=1596196&r1=1596195&r2=1596196&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java Tue May 20 11:12:04 2014
@@ -54,7 +54,7 @@ public class SignatureDigestMethodTest e
 
     private KeySelector kvks;
     private CanonicalizationMethod withoutComments;
-    private DigestMethod sha1, sha256, sha384, sha512, ripemd160;
+    private DigestMethod sha1, sha224, sha256, sha384, sha512, ripemd160;
     private SignatureMethod rsaSha1;
     private KeyInfo rsaki;
     private XMLSignatureFactory fac;
@@ -94,6 +94,7 @@ public class SignatureDigestMethodTest e
         withoutComments = fac.newCanonicalizationMethod
             (CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null);
         sha1 = fac.newDigestMethod(DigestMethod.SHA1, null);
+        sha224 = fac.newDigestMethod("http://www.w3.org/2001/04/xmldsig-more#sha224", null);
         sha256 = fac.newDigestMethod(DigestMethod.SHA256, null);
         sha384 = fac.newDigestMethod("http://www.w3.org/2001/04/xmldsig-more#sha384", null);
         sha512 = fac.newDigestMethod(DigestMethod.SHA512, null);
@@ -114,6 +115,12 @@ public class SignatureDigestMethodTest e
         test_create_signature_enveloping(rsaSha1, sha1, rsaki,
                                          TestUtils.getPrivateKey("RSA"), kvks);
     }
+  
+    @org.junit.Test
+    public void testSHA224() throws Exception {
+        test_create_signature_enveloping(rsaSha1, sha224, rsaki,
+                                         TestUtils.getPrivateKey("RSA"), kvks);
+    }
     
     @org.junit.Test
     public void testSHA256() throws Exception {
@@ -121,7 +128,6 @@ public class SignatureDigestMethodTest e
                                          TestUtils.getPrivateKey("RSA"), kvks);
     }
     
-    
     @org.junit.Test
     public void testSHA384() throws Exception {
         test_create_signature_enveloping(rsaSha1, sha384, rsaki,

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/algorithms/DigestAlgorithmTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/algorithms/DigestAlgorithmTest.java?rev=1596196&r1=1596195&r2=1596196&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/algorithms/DigestAlgorithmTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/dom/algorithms/DigestAlgorithmTest.java Tue May 20 11:12:04 2014
@@ -79,6 +79,24 @@ public class DigestAlgorithmTest extends
     }
     
     @org.junit.Test
+    public void testSHA224() throws Exception {
+        Document doc = XMLUtils.createDocumentBuilder(false).newDocument();
+        
+        MessageDigestAlgorithm digestAlgorithm = 
+            MessageDigestAlgorithm.getInstance(doc, MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA224);
+        assertEquals(MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA224, digestAlgorithm.getAlgorithmURI());
+        
+        byte[] digest = digestAlgorithm.digest("test-string".getBytes());
+        assertNotNull(digest);
+        assertTrue(digest.length > 0);
+        
+        // Now compare against a JDK MessageDigest Object
+        MessageDigest md = MessageDigest.getInstance("SHA-224");
+        byte[] digest2 = md.digest("test-string".getBytes());
+        assertTrue(Arrays.equals(digest, digest2));
+    }
+    
+    @org.junit.Test
     public void testSHA256() throws Exception {
         Document doc = XMLUtils.createDocumentBuilder(false).newDocument();