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.