You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by ra...@apache.org on 2006/06/12 00:58:34 UTC

svn commit: r413543 - in /xml/security/trunk/src/org/apache/xml/security/algorithms: SignatureAlgorithm.java SignatureAlgorithmSpi.java implementations/IntegrityHmac.java

Author: raul
Date: Sun Jun 11 15:58:33 2006
New Revision: 413543

URL: http://svn.apache.org/viewvc?rev=413543&view=rev
Log:
Optimization to not create instances of Signature objects, but mantain one for thread. 
Also don't change the key if it was already used.

Modified:
    xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithm.java
    xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java
    xml/security/trunk/src/org/apache/xml/security/algorithms/implementations/IntegrityHmac.java

Modified: xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithm.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithm.java?rev=413543&r1=413542&r2=413543&view=diff
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithm.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithm.java Sun Jun 11 15:58:33 2006
@@ -21,6 +21,7 @@
 import java.security.SecureRandom;
 import java.security.spec.AlgorithmParameterSpec;
 import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.xml.security.algorithms.implementations.IntegrityHmac;
 import org.apache.xml.security.exceptions.AlgorithmAlreadyRegisteredException;
@@ -47,6 +48,13 @@
 
    /** All available algorithm classes are registered here */
    static HashMap _algorithmHash = null;
+   
+   static ThreadLocal instances=new ThreadLocal() {
+	   protected Object initialValue() {
+		   return new HashMap();
+	   };
+   };
+   static ThreadLocal keys=new ThreadLocal();
 
    /** Field _signatureAlgorithm */
    protected SignatureAlgorithmSpi _signatureAlgorithm = null;
@@ -63,15 +71,24 @@
 
       super(doc, algorithmURI);
 
-      try {
+      this._signatureAlgorithm = getInstance(algorithmURI);
+   }
+
+   private SignatureAlgorithmSpi getInstance(String algorithmURI) throws XMLSignatureException {
+	   SignatureAlgorithmSpi result=(SignatureAlgorithmSpi) ((Map)instances.get()).get(algorithmURI);
+	   if (result!=null) {
+		   result.reset();
+		   return result;
+	   }
+ 	try {
          Class implementingClass =
             SignatureAlgorithm.getImplementingClass(algorithmURI);
          if (log.isDebugEnabled())
          	log.debug("Create URI \"" + algorithmURI + "\" class \""
                    + implementingClass + "\"");
-
-         this._signatureAlgorithm =
-            (SignatureAlgorithmSpi) implementingClass.newInstance();
+         result=(SignatureAlgorithmSpi) implementingClass.newInstance();
+         ((Map)instances.get()).put(algorithmURI,result);
+         return   result;
       }  catch (IllegalAccessException ex) {
          Object exArgs[] = { algorithmURI, ex.getMessage() };
 
@@ -88,7 +105,7 @@
          throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
                                          ex);
       }
-   }
+}
 
    /**
     * Constructor SignatureAlgorithm
@@ -122,35 +139,11 @@
       super(element, BaseURI);
 
       String algorithmURI = this.getURI();
+      this._signatureAlgorithm  = getInstance(algorithmURI);
 
-      try {
-         Class implementingClass =
-            SignatureAlgorithm.getImplementingClass(algorithmURI);
-         if (log.isDebugEnabled())
-         	log.debug("Create URI \"" + algorithmURI + "\" class \""
-                   + implementingClass + "\"");
-
-         this._signatureAlgorithm =
-            (SignatureAlgorithmSpi) implementingClass.newInstance();
-
-         this._signatureAlgorithm
-            .engineGetContextFromElement(this._constructionElement);
-      }  catch (IllegalAccessException ex) {
-         Object exArgs[] = { algorithmURI, ex.getMessage() };
-
-         throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
-                                         ex);
-      } catch (InstantiationException ex) {
-         Object exArgs[] = { algorithmURI, ex.getMessage() };
+      this._signatureAlgorithm
+      .engineGetContextFromElement(this._constructionElement);
 
-         throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
-                                         ex);
-      } catch (NullPointerException ex) {
-         Object exArgs[] = { algorithmURI, ex.getMessage() };
-
-         throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
-                                         ex);
-      }
    }
 
    /**
@@ -227,7 +220,11 @@
     * @throws XMLSignatureException
     */
    public void initSign(Key signingKey) throws XMLSignatureException {
-      this._signatureAlgorithm.engineInitSign(signingKey);
+       if ((keys.get())==signingKey) {
+    	   return;
+       }
+       keys.set(signingKey);
+	   this._signatureAlgorithm.engineInitSign(signingKey);
    }
 
    /**
@@ -278,7 +275,11 @@
     * @throws XMLSignatureException
     */
    public void initVerify(Key verificationKey) throws XMLSignatureException {
-      this._signatureAlgorithm.engineInitVerify(verificationKey);
+	   if ((keys.get())==verificationKey) {
+    	   return;
+       }
+       keys.set(verificationKey);
+	   this._signatureAlgorithm.engineInitVerify(verificationKey);
    }
 
    /**

Modified: xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java?rev=413543&r1=413542&r2=413543&view=diff
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithmSpi.java Sun Jun 11 15:58:33 2006
@@ -157,28 +157,13 @@
    protected abstract void engineSetParameter(AlgorithmParameterSpec params)
       throws XMLSignatureException;
 
-   /** Field _doc */
-   Document _doc = null;
-
-   /**
-    * Method engineSetDocument
-    *
-    * @param doc
-    */
-   protected void engineSetDocument(Document doc) {
-      this._doc = doc;
-   }
-
-   /** Field _constructionElement */
-   Element _constructionElement = null;
-
+   
    /**
     * Method engineGetContextFromElement
     *
     * @param element
     */
    protected void engineGetContextFromElement(Element element) {
-      this._constructionElement = element;
    }
 
    /**
@@ -189,4 +174,7 @@
     */
    protected abstract void engineSetHMACOutputLength(int HMACOutputLength)
       throws XMLSignatureException;
+
+    public void reset() {
+	}
 }

Modified: xml/security/trunk/src/org/apache/xml/security/algorithms/implementations/IntegrityHmac.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/algorithms/implementations/IntegrityHmac.java?rev=413543&r1=413542&r2=413543&view=diff
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/algorithms/implementations/IntegrityHmac.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/algorithms/implementations/IntegrityHmac.java Sun Jun 11 15:58:33 2006
@@ -95,6 +95,10 @@
       throw new XMLSignatureException("empty");
    }
 
+   public void reset() {
+	   _HMACOutputLength=0;
+   }
+
    /**
     * Proxy method for {@link java.security.Signature#verify(byte[])}
     * which is executed on the internal {@link java.security.Signature} object.