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 2020/05/11 12:33:21 UTC

svn commit: r1877579 - in /santuario/xml-security-java/trunk/src/main/java/org/apache: jcp/xml/dsig/internal/dom/ xml/security/algorithms/ xml/security/algorithms/implementations/

Author: coheigea
Date: Mon May 11 12:33:20 2020
New Revision: 1877579

URL: http://svn.apache.org/viewvc?rev=1877579&view=rev
Log:
SANTUARIO-544 - Extract common functions. Thanks to Alanscut <wp...@163.com> for the patch. This closes #31.

Modified:
    santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMStructure.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureBaseRSA.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureDSA.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java?rev=1877579&r1=1877578&r2=1877579&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java Mon May 11 12:33:20 2020
@@ -162,7 +162,7 @@ public final class DOMSignatureProperty
 
         @SuppressWarnings("unchecked")
         List<XMLStructure> ospContent = osp.getContent();
-        return equalsContent(ospContent) &&
+        return equalsContent(content, ospContent) &&
                 target.equals(osp.getTarget()) && idsEqual;
     }
 
@@ -178,30 +178,4 @@ public final class DOMSignatureProperty
         return result;
     }
 
-    private boolean equalsContent(List<XMLStructure> otherContent) {
-        int osize = otherContent.size();
-        if (content.size() != osize) {
-            return false;
-        }
-        for (int i = 0; i < osize; i++) {
-            XMLStructure oxs = otherContent.get(i);
-            XMLStructure xs = content.get(i);
-            if (oxs instanceof javax.xml.crypto.dom.DOMStructure) {
-                if (!(xs instanceof javax.xml.crypto.dom.DOMStructure)) {
-                    return false;
-                }
-                Node onode = ((javax.xml.crypto.dom.DOMStructure)oxs).getNode();
-                Node node = ((javax.xml.crypto.dom.DOMStructure)xs).getNode();
-                if (!DOMUtils.nodesEqual(node, onode)) {
-                    return false;
-                }
-            } else {
-                if (!(xs.equals(oxs))) {
-                    return false;
-                }
-            }
-        }
-
-        return true;
-    }
 }

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMStructure.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMStructure.java?rev=1877579&r1=1877578&r2=1877579&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMStructure.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMStructure.java Mon May 11 12:33:20 2020
@@ -26,6 +26,8 @@ import javax.xml.crypto.XMLStructure;
 import javax.xml.crypto.dom.DOMCryptoContext;
 import org.w3c.dom.Node;
 
+import java.util.List;
+
 /**
  * DOM-based abstract implementation of XMLStructure.
  *
@@ -42,4 +44,31 @@ public abstract class DOMStructure imple
 
     public abstract void marshal(Node parent, String dsPrefix, 
         DOMCryptoContext context) throws MarshalException;
+
+    protected boolean equalsContent(List<XMLStructure> content, List<XMLStructure> otherContent) {
+        int size = content.size();
+        if (size != otherContent.size()) {
+            return false;
+        }
+        for (int i = 0; i < size; i++) {
+            XMLStructure oxs = otherContent.get(i);
+            XMLStructure xs = content.get(i);
+            if (oxs instanceof javax.xml.crypto.dom.DOMStructure) {
+                if (!(xs instanceof javax.xml.crypto.dom.DOMStructure)) {
+                    return false;
+                }
+                Node otherNode = ((javax.xml.crypto.dom.DOMStructure)oxs).getNode();
+                Node node = ((javax.xml.crypto.dom.DOMStructure)xs).getNode();
+                if (!DOMUtils.nodesEqual(node, otherNode)) {
+                    return false;
+                }
+            } else {
+                if (!(xs.equals(oxs))) {
+                    return false;
+                }
+            }
+        }
+
+        return true;
+    }
 }

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java?rev=1877579&r1=1877578&r2=1877579&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMXMLObject.java Mon May 11 12:33:20 2020
@@ -209,7 +209,7 @@ public final class DOMXMLObject extends
                               : mimeType.equals(oxo.getMimeType());
 
         return idsEqual && encodingsEqual && mimeTypesEqual &&
-                equalsContent(oxo.getContent());
+                equalsContent(content, oxo.getContent());
     }
 
     @Override
@@ -229,29 +229,4 @@ public final class DOMXMLObject extends
         return result;
     }
 
-    private boolean equalsContent(List<XMLStructure> otherContent) {
-        if (content.size() != otherContent.size()) {
-            return false;
-        }
-        for (int i = 0, osize = otherContent.size(); i < osize; i++) {
-            XMLStructure oxs = otherContent.get(i);
-            XMLStructure xs = content.get(i);
-            if (oxs instanceof javax.xml.crypto.dom.DOMStructure) {
-                if (!(xs instanceof javax.xml.crypto.dom.DOMStructure)) {
-                    return false;
-                }
-                Node onode = ((javax.xml.crypto.dom.DOMStructure)oxs).getNode();
-                Node node = ((javax.xml.crypto.dom.DOMStructure)xs).getNode();
-                if (!DOMUtils.nodesEqual(node, onode)) {
-                    return false;
-                }
-            } else {
-                if (!(xs.equals(oxs))) {
-                    return false;
-                }
-            }
-        }
-
-        return true;
-    }
 }

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java?rev=1877579&r1=1877578&r2=1877579&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java Mon May 11 12:33:20 2020
@@ -18,8 +18,7 @@
  */
 package org.apache.xml.security.algorithms;
 
-import java.security.Key;
-import java.security.SecureRandom;
+import java.security.*;
 import java.security.spec.AlgorithmParameterSpec;
 
 import org.apache.xml.security.signature.XMLSignatureException;
@@ -171,4 +170,47 @@ public abstract class SignatureAlgorithm
     protected abstract void engineSetHMACOutputLength(int HMACOutputLength)
         throws XMLSignatureException;
 
+    protected static void engineInitVerify(Key publicKey, Signature signatureAlgorithm) throws XMLSignatureException {
+        if (!(publicKey instanceof PublicKey)) {
+            String supplied = null;
+            if (publicKey != null) {
+                supplied = publicKey.getClass().getName();
+            }
+            String needed = PublicKey.class.getName();
+            Object[] exArgs = { supplied, needed };
+
+            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
+        }
+
+        try {
+            signatureAlgorithm.initVerify((PublicKey) publicKey);
+        } catch (InvalidKeyException ex) {
+            throw new XMLSignatureException(ex);
+        }
+    }
+
+    protected static void engineInitSign(Key privateKey, SecureRandom secureRandom, Signature signatureAlgorithm)
+            throws XMLSignatureException {
+        if (!(privateKey instanceof PrivateKey)) {
+            String supplied = null;
+            if (privateKey != null) {
+                supplied = privateKey.getClass().getName();
+            }
+            String needed = PrivateKey.class.getName();
+            Object[] exArgs = { supplied, needed };
+
+            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
+        }
+
+        try {
+            if (secureRandom == null) {
+                signatureAlgorithm.initSign((PrivateKey) privateKey);
+            } else {
+                signatureAlgorithm.initSign((PrivateKey) privateKey, secureRandom);
+            }
+        } catch (InvalidKeyException ex) {
+            throw new XMLSignatureException(ex);
+        }
+    }
+
 }

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureBaseRSA.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureBaseRSA.java?rev=1877579&r1=1877578&r2=1877579&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureBaseRSA.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureBaseRSA.java Mon May 11 12:33:20 2020
@@ -19,13 +19,10 @@
 package org.apache.xml.security.algorithms.implementations;
 
 import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
 import java.security.Key;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
 import java.security.Provider;
-import java.security.PublicKey;
 import java.security.SecureRandom;
 import java.security.Signature;
 import java.security.SignatureException;
@@ -79,11 +76,7 @@ public abstract class SignatureBaseRSA e
                 this.signatureAlgorithm = Signature.getInstance(algorithmID, provider);
             }
 
-        } catch (NoSuchAlgorithmException ex) {
-            Object[] exArgs = {algorithmID, ex.getLocalizedMessage()};
-            throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-
-        } catch (NoSuchProviderException ex) {
+        } catch (NoSuchAlgorithmException | NoSuchProviderException ex) {
             Object[] exArgs = {algorithmID, ex.getLocalizedMessage()};
             throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
         }
@@ -110,22 +103,7 @@ public abstract class SignatureBaseRSA e
 
     /** {@inheritDoc} */
     protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-        if (!(publicKey instanceof PublicKey)) {
-            String supplied = null;
-            if (publicKey != null) {
-                supplied = publicKey.getClass().getName();
-            }
-            String needed = PublicKey.class.getName();
-            Object[] exArgs = { supplied, needed };
-
-            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
-        }
-
-        try {
-            this.signatureAlgorithm.initVerify((PublicKey) publicKey);
-        } catch (InvalidKeyException ex) {
-            throw new XMLSignatureException(ex);
-        }
+        engineInitVerify(publicKey, this.signatureAlgorithm);
     }
 
     /** {@inheritDoc} */
@@ -140,26 +118,7 @@ public abstract class SignatureBaseRSA e
     /** {@inheritDoc} */
     protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
         throws XMLSignatureException {
-        if (!(privateKey instanceof PrivateKey)) {
-            String supplied = null;
-            if (privateKey != null) {
-                supplied = privateKey.getClass().getName();
-            }
-            String needed = PrivateKey.class.getName();
-            Object[] exArgs = { supplied, needed };
-
-            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
-        }
-
-        try {
-            if (secureRandom == null) {
-                this.signatureAlgorithm.initSign((PrivateKey) privateKey);
-            } else {
-                this.signatureAlgorithm.initSign((PrivateKey) privateKey, secureRandom);
-            }
-        } catch (InvalidKeyException ex) {
-            throw new XMLSignatureException(ex);
-        }
+        engineInitSign(privateKey, secureRandom, this.signatureAlgorithm);
     }
 
     /** {@inheritDoc} */

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureDSA.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureDSA.java?rev=1877579&r1=1877578&r2=1877579&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureDSA.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureDSA.java Mon May 11 12:33:20 2020
@@ -20,13 +20,10 @@ package org.apache.xml.security.algorith
 
 import java.io.IOException;
 import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
 import java.security.Key;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
 import java.security.Provider;
-import java.security.PublicKey;
 import java.security.SecureRandom;
 import java.security.Signature;
 import java.security.SignatureException;
@@ -90,11 +87,7 @@ public class SignatureDSA extends Signat
                 this.signatureAlgorithm = Signature.getInstance(algorithmID, provider);
             }
 
-        } catch (NoSuchAlgorithmException ex) {
-            Object[] exArgs = {algorithmID, ex.getLocalizedMessage()};
-            throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-
-        } catch (NoSuchProviderException ex) {
+        } catch (NoSuchAlgorithmException | NoSuchProviderException ex) {
             Object[] exArgs = {algorithmID, ex.getLocalizedMessage()};
             throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
         }
@@ -134,22 +127,7 @@ public class SignatureDSA extends Signat
      * {@inheritDoc}
      */
     protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-        if (!(publicKey instanceof PublicKey)) {
-            String supplied = null;
-            if (publicKey != null) {
-                supplied = publicKey.getClass().getName();
-            }
-            String needed = PublicKey.class.getName();
-            Object[] exArgs = { supplied, needed };
-
-            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
-        }
-
-        try {
-            this.signatureAlgorithm.initVerify((PublicKey) publicKey);
-        } catch (InvalidKeyException ex) {
-            throw new XMLSignatureException(ex);
-        }
+        engineInitVerify(publicKey, this.signatureAlgorithm);
         size = ((DSAKey)publicKey).getParams().getQ().bitLength();
     }
 
@@ -171,26 +149,7 @@ public class SignatureDSA extends Signat
      */
     protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
         throws XMLSignatureException {
-        if (!(privateKey instanceof PrivateKey)) {
-            String supplied = null;
-            if (privateKey != null) {
-                supplied = privateKey.getClass().getName();
-            }
-            String needed = PrivateKey.class.getName();
-            Object[] exArgs = { supplied, needed };
-
-            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
-        }
-
-        try {
-            if (secureRandom == null) {
-                this.signatureAlgorithm.initSign((PrivateKey) privateKey);
-            } else {
-                this.signatureAlgorithm.initSign((PrivateKey) privateKey, secureRandom);
-            }
-        } catch (InvalidKeyException ex) {
-            throw new XMLSignatureException(ex);
-        }
+        engineInitSign(privateKey, secureRandom, this.signatureAlgorithm);
         size = ((DSAKey)privateKey).getParams().getQ().bitLength();
     }
 

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java?rev=1877579&r1=1877578&r2=1877579&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/implementations/SignatureECDSA.java Mon May 11 12:33:20 2020
@@ -19,16 +19,7 @@
 package org.apache.xml.security.algorithms.implementations;
 
 import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.Signature;
-import java.security.SignatureException;
+import java.security.*;
 import java.security.spec.AlgorithmParameterSpec;
 
 import org.apache.xml.security.algorithms.JCEMapper;
@@ -108,11 +99,7 @@ public abstract class SignatureECDSA ext
                 this.signatureAlgorithm = Signature.getInstance(algorithmID, provider);
             }
 
-        } catch (java.security.NoSuchAlgorithmException ex) {
-            Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
-            throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-
-        } catch (NoSuchProviderException ex) {
+        } catch (NoSuchAlgorithmException | NoSuchProviderException ex) {
             Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
             throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
         }
@@ -145,23 +132,7 @@ public abstract class SignatureECDSA ext
 
     /** {@inheritDoc} */
     protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-
-        if (!(publicKey instanceof PublicKey)) {
-            String supplied = null;
-            if (publicKey != null) {
-                supplied = publicKey.getClass().getName();
-            }
-            String needed = PublicKey.class.getName();
-            Object[] exArgs = { supplied, needed };
-
-            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
-        }
-
-        try {
-            this.signatureAlgorithm.initVerify((PublicKey) publicKey);
-        } catch (InvalidKeyException ex) {
-            throw new XMLSignatureException(ex);
-        }
+        engineInitVerify(publicKey, signatureAlgorithm);
     }
 
     /** {@inheritDoc} */
@@ -178,26 +149,7 @@ public abstract class SignatureECDSA ext
     /** {@inheritDoc} */
     protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
         throws XMLSignatureException {
-        if (!(privateKey instanceof PrivateKey)) {
-            String supplied = null;
-            if (privateKey != null) {
-                supplied = privateKey.getClass().getName();
-            }
-            String needed = PrivateKey.class.getName();
-            Object[] exArgs = { supplied, needed };
-
-            throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
-        }
-
-        try {
-            if (secureRandom == null) {
-                this.signatureAlgorithm.initSign((PrivateKey) privateKey);
-            } else {
-                this.signatureAlgorithm.initSign((PrivateKey) privateKey, secureRandom);
-            }
-        } catch (InvalidKeyException ex) {
-            throw new XMLSignatureException(ex);
-        }
+        engineInitSign(privateKey, secureRandom, this.signatureAlgorithm);
     }
 
     /** {@inheritDoc} */