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/16 20:43:25 UTC
svn commit: r414881 -
/xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithm.java
Author: raul
Date: Fri Jun 16 11:43:24 2006
New Revision: 414881
URL: http://svn.apache.org/viewvc?rev=414881&view=rev
Log:
Has different signer one for signing another for verifying.
Modified:
xml/security/trunk/src/org/apache/xml/security/algorithms/SignatureAlgorithm.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=414881&r1=414880&r2=414881&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 Fri Jun 16 11:43:24 2006
@@ -49,12 +49,21 @@
/** All available algorithm classes are registered here */
static HashMap _algorithmHash = null;
- static ThreadLocal instances=new ThreadLocal() {
+ static ThreadLocal instancesSigning=new ThreadLocal() {
protected Object initialValue() {
return new HashMap();
};
};
- static ThreadLocal keys=new ThreadLocal();
+
+ static ThreadLocal instancesVerify=new ThreadLocal() {
+ protected Object initialValue() {
+ return new HashMap();
+ };
+ };
+
+ static ThreadLocal keysSigning=new ThreadLocal();
+ static ThreadLocal keysVerify=new ThreadLocal();
+// boolean isForSigning=false;
/** Field _signatureAlgorithm */
protected SignatureAlgorithmSpi _signatureAlgorithm = null;
@@ -68,26 +77,39 @@
*/
public SignatureAlgorithm(Document doc, String algorithmURI)
throws XMLSecurityException {
-
super(doc, algorithmURI);
-
- this._signatureAlgorithm = getInstance(algorithmURI);
+ this._signatureAlgorithm = getInstanceForSigning(algorithmURI);
}
- private SignatureAlgorithmSpi getInstance(String algorithmURI) throws XMLSignatureException {
- SignatureAlgorithmSpi result=(SignatureAlgorithmSpi) ((Map)instances.get()).get(algorithmURI);
+ private SignatureAlgorithmSpi getInstanceForSigning(String algorithmURI) throws XMLSignatureException {
+ SignatureAlgorithmSpi result=(SignatureAlgorithmSpi) ((Map)instancesSigning.get()).get(algorithmURI);
+ if (result!=null) {
+ result.reset();
+ return result;
+ }
+ result=buildSigner(algorithmURI, result);
+ ((Map)instancesSigning.get()).put(algorithmURI,result);
+ return result;
+ }
+ private SignatureAlgorithmSpi getInstanceForVerify(String algorithmURI) throws XMLSignatureException {
+ SignatureAlgorithmSpi result=(SignatureAlgorithmSpi) ((Map)instancesVerify.get()).get(algorithmURI);
if (result!=null) {
result.reset();
return result;
}
- try {
+ result=buildSigner(algorithmURI, result);
+ ((Map)instancesVerify.get()).put(algorithmURI,result);
+ return result;
+ }
+
+ private SignatureAlgorithmSpi buildSigner(String algorithmURI, SignatureAlgorithmSpi result) throws XMLSignatureException {
+ try {
Class implementingClass =
SignatureAlgorithm.getImplementingClass(algorithmURI);
if (log.isDebugEnabled())
log.debug("Create URI \"" + algorithmURI + "\" class \""
+ implementingClass + "\"");
- result=(SignatureAlgorithmSpi) implementingClass.newInstance();
- ((Map)instances.get()).put(algorithmURI,result);
+ result=(SignatureAlgorithmSpi) implementingClass.newInstance();
return result;
} catch (IllegalAccessException ex) {
Object exArgs[] = { algorithmURI, ex.getMessage() };
@@ -136,10 +158,9 @@
public SignatureAlgorithm(Element element, String BaseURI)
throws XMLSecurityException {
- super(element, BaseURI);
-
+ super(element, BaseURI);
String algorithmURI = this.getURI();
- this._signatureAlgorithm = getInstance(algorithmURI);
+ this._signatureAlgorithm = getInstanceForVerify(algorithmURI);
this._signatureAlgorithm
.engineGetContextFromElement(this._constructionElement);
@@ -219,11 +240,12 @@
* @param signingKey
* @throws XMLSignatureException
*/
- public void initSign(Key signingKey) throws XMLSignatureException {
- if ((keys.get())==signingKey) {
+ public void initSign(Key signingKey) throws XMLSignatureException {
+
+ if (keysSigning.get()==signingKey) {
return;
}
- keys.set(signingKey);
+ keysSigning.set(signingKey);
this._signatureAlgorithm.engineInitSign(signingKey);
}
@@ -275,10 +297,10 @@
* @throws XMLSignatureException
*/
public void initVerify(Key verificationKey) throws XMLSignatureException {
- if ((keys.get())==verificationKey) {
+ if (keysVerify.get()==verificationKey) {
return;
}
- keys.set(verificationKey);
+ keysVerify.set(verificationKey);
this._signatureAlgorithm.engineInitVerify(verificationKey);
}