Author: coheigea
Date: Mon Mar 30 16:04:38 2009
New Revision: 760024

URL: http://svn.apache.org/viewvc?rev=760024&view=rev
Log:
Backmerged Dan's changes on hashcodes + generating IDs.
 - This has an implication for the Axis WSDOAllSender, where the wssConfig must 
not be created each time a request is made.
 - This is for the scenario that two handlers are chained together...they'll 
have the same ID's if wssConfig is created per handler.

Added:
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WsuIdAllocator.java
      - copied unchanged from r757531, 
webservices/wss4j/trunk/src/org/apache/ws/security/WsuIdAllocator.java
Modified:
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
    
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
    webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java
    webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/axis/security/WSDoAllSender.java
 Mon Mar 30 16:04:38 2009
@@ -25,6 +25,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.ws.axis.security.handler.WSDoAllHandler;
 import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.WSSConfig;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.ws.security.handler.RequestData;
 import org.apache.ws.security.handler.WSHandlerConstants;
@@ -44,6 +45,7 @@
     protected static Log log = 
LogFactory.getLog(WSDoAllSender.class.getName());
     private static Log tlog =
         LogFactory.getLog("org.apache.ws.security.TIME");
+    private static WSSConfig wssConfig = WSSConfig.getNewInstance();
     
     /**
      * Axis calls invoke to handle a message. <p/>
@@ -67,6 +69,7 @@
         }
 
         RequestData reqData = new RequestData();
+        reqData.setWssConfig(wssConfig);
 
         reqData.setMsgContext(mc);
         /*

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfo.java
 Mon Mar 30 16:04:38 2009
@@ -33,20 +33,22 @@
 
 import org.apache.ws.security.components.crypto.Crypto;
 import org.apache.ws.security.processor.Processor;
+
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import java.util.Enumeration;
 import java.util.Vector;
 
 public class WSDocInfo {
-    int hash;
+    Document doc = null;
     Crypto crypto = null;
     Vector bst = null;
     Element assertion = null;
     Vector processors = null;
 
-    public WSDocInfo(int hash) {
-        this.hash = hash;
+    public WSDocInfo(Document doc) {
+        this.doc = doc;
     }
 
     /**
@@ -134,10 +136,10 @@
     }
 
     /**
-     * @return the hash value of the document
+     * @return the document
      */
-    public int getHash() {
-        return hash;
+    public Document getDocument() {
+        return doc;
     }
 
     /**

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSDocInfoStore.java
 Mon Mar 30 16:04:38 2009
@@ -30,32 +30,21 @@
 
 import java.util.Hashtable;
 
+import org.w3c.dom.Document;
+
 public class WSDocInfoStore {
 
     static Hashtable storage = new Hashtable(10);
 
-    public static WSDocInfo lookup(int hash) {
-        Integer intObj = new Integer(hash);
-        return (WSDocInfo) storage.get(intObj);
-    }
-
-    public static void store(WSDocInfo info) {
-        Integer intObj = new Integer(info.getHash());
-        if (storage.containsKey(intObj)) {
-            return;
-        }
-        storage.put(intObj, info);
+    public static WSDocInfo lookup(Document doc) {
+        return (WSDocInfo) storage.get(doc);
     }
 
-    public static void delete(int hash) {
-        Integer intObj = new Integer(hash);
-        WSDocInfo wsInfo = (WSDocInfo) storage.get(intObj);
-        if (wsInfo != null) {
-            storage.remove(intObj);
-        }
+    public static boolean store(WSDocInfo info) {
+        return storage.put(info.getDocument(), info) == null;
     }
 
     public static void delete(WSDocInfo info) {
-        delete(info.getHash());
+        storage.remove(info.getDocument());
     }
 }

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSConfig.java
 Mon Mar 30 16:04:38 2009
@@ -27,6 +27,7 @@
 import org.apache.ws.security.processor.Processor;
 import org.apache.ws.security.transform.STRTransform;
 import org.apache.ws.security.util.Loader;
+import org.apache.ws.security.util.UUIDGenerator;
 import org.apache.xml.security.transforms.Transform;
 
 /**
@@ -194,6 +195,26 @@
      * reject custom token types in the callback handler.
      */
     protected boolean handleCustomPasswordTypes = false;
+    
+    protected WsuIdAllocator idAllocator = new WsuIdAllocator() {
+        int i;
+        private synchronized String next() {
+            return Integer.toString(++i);
+        }
+        public String createId(String prefix, Object o) {
+            if (prefix == null) {
+                return next();
+            }
+            return prefix + next();
+        }
+
+        public String createSecureId(String prefix, Object o) {
+            if (prefix == null) {
+                return UUIDGenerator.getUUID();
+            }
+            return prefix + UUIDGenerator.getUUID();
+        }
+    };
 
     protected HashMap jceProvider = new HashMap(10);
 
@@ -374,6 +395,17 @@
     }
     
     /**
+     * @return Returns the WsuIdAllocator used to generate wsu:Id attributes
+     */
+    public WsuIdAllocator getIdAllocator() {
+        return idAllocator;
+    }
+
+    public void setIdAllocator(WsuIdAllocator idAllocator) {
+        this.idAllocator = idAllocator;
+    }
+
+    /**
      * Associate an action name with a specific action code.
      *
      * This operation allows applications to supply their own

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/WSSecurityEngine.java
 Mon Mar 30 16:04:38 2009
@@ -298,7 +298,7 @@
          * it for retrieval. Store the implementation of signature crypto
          * (no need for encryption --- yet)
          */
-        WSDocInfo wsDocInfo = new 
WSDocInfo(securityHeader.getOwnerDocument().hashCode());
+        WSDocInfo wsDocInfo = new WSDocInfo(securityHeader.getOwnerDocument());
         wsDocInfo.setCrypto(sigCrypto);
 
         NodeList list = securityHeader.getChildNodes();

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSBaseMessage.java
 Mon Mar 30 16:04:38 2009
@@ -205,7 +205,7 @@
         id = bodyElement.getAttributeNS(WSConstants.WSU_NS, "Id");
 
         if ((id == null) || (id.length() == 0)) {
-            id = "id-" + Integer.toString(bodyElement.hashCode());
+            id = wssConfig.getIdAllocator().createId("id-", bodyElement);
             String prefix = WSSecurityUtil.setNamespace(bodyElement,
                     WSConstants.WSU_NS, WSConstants.WSU_PREFIX);
             bodyElement.setAttributeNS(WSConstants.WSU_NS, prefix + ":Id", id);

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSEncryptBody.java
 Mon Mar 30 16:04:38 2009
@@ -346,7 +346,6 @@
             }
             remoteCert = certs[0];
         }
-        String certUri = "EncCertId-" + remoteCert.hashCode();
         if (tlog.isDebugEnabled()) {
             t2 = System.currentTimeMillis();
         }
@@ -429,6 +428,7 @@
 
             case WSConstants.BST_DIRECT_REFERENCE:
                 Reference ref = new Reference(doc);
+                String certUri = 
wssConfig.getIdAllocator().createId("EncCertId-", remoteCert);
                 ref.setURI("#" + certUri);
                 BinarySecurity bstToken = null;
                 bstToken = new X509Security(doc);
@@ -520,7 +520,7 @@
             }
 
             boolean content = modifier.equals("Content") ? true : false;
-            String xencEncryptedDataId = "EncDataId-" + body.hashCode();
+            String xencEncryptedDataId = 
wssConfig.getIdAllocator().createId("EncDataId-", body);
 
             /*
              * Forth step: encrypt data, and set neccessary attributes in

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecBase.java
 Mon Mar 30 16:04:38 2009
@@ -131,7 +131,7 @@
         String id = bodyElement.getAttributeNS(WSConstants.WSU_NS, "Id");
 
         if ((id == null) || (id.length() == 0)) {
-            id = "id-" + Integer.toString(bodyElement.hashCode());
+            id = wssConfig.getIdAllocator().createId("id-", bodyElement);
             String prefix = 
                 WSSecurityUtil.setNamespace(bodyElement, WSConstants.WSU_NS, 
WSConstants.WSU_PREFIX);
             bodyElement.setAttributeNS(WSConstants.WSU_NS, prefix + ":Id", id);

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKEncrypt.java
 Mon Mar 30 16:04:38 2009
@@ -127,7 +127,7 @@
             }
 
             boolean content = modifier.equals("Content") ? true : false;
-            String xencEncryptedDataId = "EncDataId-" + body.hashCode();
+            String xencEncryptedDataId = 
wssConfig.getIdAllocator().createId("EncDataId-", body);
 
             //
             // Fourth step: encrypt data, and set necessary attributes in

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDKSign.java
 Mon Mar 30 16:04:38 2009
@@ -112,7 +112,7 @@
     public void prepare(Document doc, WSSecHeader secHeader)
         throws WSSecurityException, ConversationException {
         super.prepare(doc);
-        wsDocInfo = new WSDocInfo(doc.hashCode());
+        wsDocInfo = new WSDocInfo(doc);
         
         //
         // Get and initialize a XMLSignature element.
@@ -150,15 +150,15 @@
         }
         
         sig.addResourceResolver(EnvelopeIdResolver.getInstance());
-        String sigUri = "Signature-" + sig.hashCode();
+        String sigUri = wssConfig.getIdAllocator().createId("Signature-", sig);
         sig.setId(sigUri);
         
         keyInfo = sig.getKeyInfo();
-        keyInfoUri = "KeyId-" + keyInfo.hashCode();
+        keyInfoUri = wssConfig.getIdAllocator().createSecureId("KeyId-", 
keyInfo);
         keyInfo.setId(keyInfoUri);
         
         secRef = new SecurityTokenReference(doc);
-        strUri = "STRId-" + secRef.hashCode();
+        strUri = wssConfig.getIdAllocator().createSecureId("STRId-", secRef);
         secRef.setID(strUri);
         
         Reference refUt = new Reference(document);
@@ -411,7 +411,7 @@
      * @throws WSSecurityException
      */
     public void computeSignature() throws WSSecurityException {
-        WSDocInfoStore.store(wsDocInfo);
+        boolean remove = WSDocInfoStore.store(wsDocInfo);
         try {
             sig.sign(sig.createSecretKey(derivedKeyBytes));
             signatureValue = sig.getSignatureValue();
@@ -424,7 +424,9 @@
                 WSSecurityException.FAILED_SIGNATURE, null, null, e1
             );
         } finally {
-            WSDocInfoStore.delete(wsDocInfo);
+            if (remove) {
+                WSDocInfoStore.delete(wsDocInfo);
+            }
         }
     }
     

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecDerivedKeyBase.java
 Mon Mar 30 16:04:38 2009
@@ -195,7 +195,7 @@
         
         // Add the DKTs
         dkt = new DerivedKeyToken(this.wscVersion, document);
-        dktId = "derivedKeyId-" + dkt.hashCode();
+        dktId = wssConfig.getIdAllocator().createId("derivedKeyId-", dkt);
         
         dkt.setOffset(offset);
         dkt.setLength(length);

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecEncrypt.java
 Mon Mar 30 16:04:38 2009
@@ -495,7 +495,7 @@
             }
 
             boolean content = modifier.equals("Content") ? true : false;
-            String xencEncryptedDataId = "EncDataId-" + body.hashCode();
+            String xencEncryptedDataId = 
wssConfig.getIdAllocator().createId("EncDataId-", body);
             encPart.setEncId(xencEncryptedDataId);
 
             cloneKeyInfo = true;
@@ -534,7 +534,8 @@
                     String wsuPrefix = 
                         WSSecurityUtil.setNamespace(elem, WSConstants.WSU_NS, 
WSConstants.WSU_PREFIX);
                     elem.setAttributeNS(
-                        WSConstants.WSU_NS, wsuPrefix + ":Id", "EncHeader-" + 
body.hashCode()
+                        WSConstants.WSU_NS, wsuPrefix + ":Id", 
+                        wssConfig.getIdAllocator().createId("EncHeader-", body)
                     );
                     
                     NamedNodeMap map = body.getAttributes();

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignature.java
 Mon Mar 30 16:04:38 2009
@@ -289,7 +289,7 @@
         //
         crypto = cr;
         document = doc;
-        wsDocInfo = new WSDocInfo(doc.hashCode());
+        wsDocInfo = new WSDocInfo(doc);
         wsDocInfo.setCrypto(cr);
 
         //
@@ -314,7 +314,7 @@
                     new Object[] { user, "signature" }
                 );
             }
-            certUri = "CertId-" + certs[0].hashCode();
+            certUri = wssConfig.getIdAllocator().createSecureId("CertId-", 
certs[0]);  
             //
             // If no signature algorithm was set try to detect it according to 
the
             // data stored in the certificate.
@@ -371,17 +371,16 @@
         }
 
         sig.addResourceResolver(EnvelopeIdResolver.getInstance());
-        String sigUri = "Signature-" + sig.hashCode();
-        sig.setId(sigUri);
+        sig.setId(wssConfig.getIdAllocator().createId("Signature-", sig));
 
         keyInfo = sig.getKeyInfo();
-        keyInfoUri = "KeyId-" + keyInfo.hashCode();
+        keyInfoUri = wssConfig.getIdAllocator().createSecureId("KeyId-", 
keyInfo);
         keyInfo.setId(keyInfoUri);
 
         secRef = new SecurityTokenReference(doc);
-        strUri = "STRId-" + secRef.hashCode();
+        strUri = wssConfig.getIdAllocator().createSecureId("STRId-", secRef);
         secRef.setID(strUri);
-
+        
         //
         // Prepare and setup the token references for this Signature
         //
@@ -691,7 +690,7 @@
      * @throws WSSecurityException
      */
     public void computeSignature() throws WSSecurityException {
-        WSDocInfoStore.store(wsDocInfo);
+        boolean remove = WSDocInfoStore.store(wsDocInfo);
         try {
             if (keyIdentifierType == WSConstants.UT_SIGNING ||
                     keyIdentifierType == WSConstants.CUSTOM_SYMM_SIGNING ||
@@ -716,7 +715,9 @@
                 WSSecurityException.FAILED_SIGNATURE, null, null, e1
             );
         } finally {
-            WSDocInfoStore.delete(wsDocInfo);
+            if (remove) {
+                WSDocInfoStore.delete(wsDocInfo);
+            }
         }
 
     }

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecSignatureConfirmation.java
 Mon Mar 30 16:04:38 2009
@@ -65,8 +65,7 @@
      */
     public void prepare(Document doc) {
         sc = new SignatureConfirmation(doc, signatureValue);
-        String scId = "SigConf-" + sc.hashCode();
-        sc.setID(scId);
+        sc.setID(wssConfig.getIdAllocator().createId("SigConf-", sc));
     }
     
     /**

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecTimestamp.java
 Mon Mar 30 16:04:38 2009
@@ -68,7 +68,7 @@
      */
     public void prepare(Document doc) {
         ts = new Timestamp(wssConfig.isPrecisionInMilliSeconds(), doc, 
timeToLive);
-        String tsId = "Timestamp-" + ts.hashCode();
+        String tsId = wssConfig.getIdAllocator().createId("Timestamp-", ts);
         ts.setID(tsId);
     }
 

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSecUsernameToken.java
 Mon Mar 30 16:04:38 2009
@@ -184,8 +184,7 @@
         if (created) {
             ut.addCreated(wssConfig.isPrecisionInMilliSeconds(), doc);
         }
-        String utId = "UsernameToken-" + ut.hashCode();
-        ut.setID(utId);
+        ut.setID(wssConfig.getIdAllocator().createId("UsernameToken-", ut));
     }
 
     /**

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/WSSignEnvelope.java
 Mon Mar 30 16:04:38 2009
@@ -240,7 +240,7 @@
          * Gather some info about the document to process and store it for
          * retrieval
          */
-        WSDocInfo wsDocInfo = new WSDocInfo(doc.hashCode());
+        WSDocInfo wsDocInfo = new WSDocInfo(doc);
         wsDocInfo.setCrypto(crypto);
 
         Element envelope = doc.getDocumentElement();
@@ -261,7 +261,7 @@
                     new Object[] { user, "signature" }
                 );
             }
-            certUri = "CertId-" + certs[0].hashCode();
+            certUri = wssConfig.getIdAllocator().createSecureId("CertId-", 
certs[0]);  
             if (sigAlgo == null) {
                 String pubKeyAlgo = certs[0].getPublicKey().getAlgorithm();
                 log.debug("automatic sig algo detection: " + pubKeyAlgo);
@@ -326,12 +326,12 @@
          */
 
         KeyInfo info = sig.getKeyInfo();
-        String keyInfoUri = "KeyId-" + info.hashCode();
+        String keyInfoUri = 
wssConfig.getIdAllocator().createSecureId("KeyId-", info);
         info.setId(keyInfoUri);
 
         SecurityTokenReference secRef = new SecurityTokenReference(doc);
-        String strUri = "STRId-" + secRef.hashCode();
-        secRef.setID(strUri);
+        String secRefId = wssConfig.getIdAllocator().createSecureId("STRId-", 
info); 
+        secRef.setID(secRefId);
 
         if (tlog.isDebugEnabled()) {
             t1 = System.currentTimeMillis();
@@ -415,7 +415,7 @@
                     transforms = new Transforms(doc);
                     transforms.addTransform(
                             STRTransform.implementedTransformURI, ctx);
-                    sig.addDocument("#" + strUri, transforms);
+                    sig.addDocument("#" + secRefId, transforms);
                 } else if (elemName.equals("Assertion")) { // Assertion
 
                     String id = null;
@@ -521,7 +521,7 @@
             refUt.setValueType(WSConstants.USERNAMETOKEN_NS + 
"#UsernameToken");
             String utId = usernameToken.getId();
             if (utId == null) {
-                utId = "usernameTokenId-" + usernameToken.hashCode();
+                utId = wssConfig.getIdAllocator().createId("usernameTokenId-", 
usernameToken);
                 usernameToken.setId(utId);
             }
             refUt.setURI("#" + utId);
@@ -542,7 +542,7 @@
         }
         info.addUnknownElement(secRef.getElement());
 
-        WSDocInfoStore.store(wsDocInfo);
+        boolean remove = WSDocInfoStore.store(wsDocInfo);
         try {
             if (keyIdentifierType == WSConstants.UT_SIGNING) {
                 sig.sign(sig.createSecretKey(secretKey));
@@ -557,7 +557,9 @@
             throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
                     null, null, e1);
         } finally {
-            WSDocInfoStore.delete(wsDocInfo);
+            if (remove) {
+                WSDocInfoStore.delete(wsDocInfo);
+            }
         }
         if (tlog.isDebugEnabled()) {
             t4 = System.currentTimeMillis();

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/message/token/SecurityContextToken.java
 Mon Mar 30 16:04:38 2009
@@ -18,6 +18,7 @@
 package org.apache.ws.security.message.token;
 
 import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.WSSConfig;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.ws.security.conversation.ConversationConstants;
 import org.apache.ws.security.conversation.ConversationException;
@@ -88,7 +89,7 @@
         
         this.elementIdentifier.appendChild(doc.createTextNode(uuid));
         
-        this.setID("sctId-" + this.element.hashCode());
+        
this.setID(WSSConfig.getDefaultWSConfig().getIdAllocator().createSecureId("sctId-",
 this.element));
     }
 
     /**

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java
 Mon Mar 30 16:04:38 2009
@@ -86,7 +86,7 @@
         if (log.isDebugEnabled()) {
             log.debug("Found signature element");
         }
-        WSDocInfoStore.store(wsDocInfo);
+        boolean remove = WSDocInfoStore.store(wsDocInfo);
         X509Certificate[] returnCert = new X509Certificate[1];
         Set returnElements = new HashSet();
         List protectedElements = new java.util.ArrayList();
@@ -97,12 +97,15 @@
             lastPrincipalFound = 
                 verifyXMLSignature(
                     elem, crypto, returnCert, returnElements,
-                    protectedElements, signatureValue, cb
+                    protectedElements, signatureValue, cb,
+                    wsDocInfo
                 );
         } catch (WSSecurityException ex) {
             throw ex;
         } finally {
-            WSDocInfoStore.delete(wsDocInfo);
+            if (remove) {
+                WSDocInfoStore.delete(wsDocInfo);
+            }
         }
         if (lastPrincipalFound instanceof WSUsernameTokenPrincipal) {
             returnResults.add(
@@ -178,7 +181,8 @@
         Set returnElements,
         List protectedElements,
         byte[][] signatureValue,
-        CallbackHandler cb
+        CallbackHandler cb,
+        WSDocInfo wsDocInfo
     ) throws WSSecurityException {
         if (log.isDebugEnabled()) {
             log.debug("Verify XML Signature");
@@ -227,13 +231,10 @@
                 );
             }
             SecurityTokenReference secRef = new 
SecurityTokenReference((Element) node);
-            int docHash = elem.getOwnerDocument().hashCode();
-            //
             // Here we get some information about the document that is being
             // processed, in particular the crypto implementation, and already
             // detected BST that may be used later during dereferencing.
             //
-            WSDocInfo wsDocInfo = WSDocInfoStore.lookup(docHash);
 
             if (secRef.containsReference()) {
                 Element token = 
secRef.getTokenElement(elem.getOwnerDocument(), wsDocInfo, cb);

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSecSignatureSAML.java
 Mon Mar 30 16:04:38 2009
@@ -233,7 +233,7 @@
          * Gather some info about the document to process and store it for
          * retrieval
          */
-        wsDocInfo = new WSDocInfo(doc.hashCode());
+        wsDocInfo = new WSDocInfo(doc);
 
         X509Certificate[] certs = null;
 
@@ -342,18 +342,18 @@
         }
 
         sig.addResourceResolver(EnvelopeIdResolver.getInstance());
-        String sigUri = "Signature-" + sig.hashCode();
+        String sigUri = wssConfig.getIdAllocator().createId("Signature-", sig);
         sig.setId(sigUri);
 
         keyInfo = sig.getKeyInfo();
-        keyInfoUri = "KeyId-" + keyInfo.hashCode();
+        keyInfoUri = wssConfig.getIdAllocator().createSecureId("KeyId-", 
keyInfo);
         keyInfo.setId(keyInfoUri);
 
         secRef = new SecurityTokenReference(doc);
-        strUri = "STRId-" + secRef.hashCode();
+        strUri = wssConfig.getIdAllocator().createSecureId("STRId-", secRef);
         secRef.setID(strUri);
 
-        certUri = "CertId-" + certs[0].hashCode();
+        certUri = wssConfig.getIdAllocator().createSecureId("CertId-", 
certs[0]);  
 
         /*
          * If the sender vouches, then we must sign the SAML token _and_ at
@@ -368,7 +368,7 @@
         try {
             if (senderVouches) {
                 secRefSaml = new SecurityTokenReference(doc);
-                String strSamlUri = "STRSAMLId-" + secRefSaml.hashCode();
+                String strSamlUri = 
wssConfig.getIdAllocator().createSecureId("STRSAMLId-", secRefSaml);
                 secRefSaml.setID(strSamlUri);
 
                 // Decouple Reference/KeyInfo setup - quick shot here
@@ -594,7 +594,7 @@
      */
     public void computeSignature() throws WSSecurityException {
 
-        WSDocInfoStore.store(wsDocInfo);
+        boolean remove = WSDocInfoStore.store(wsDocInfo);
 
         try {
             if (senderVouches) {
@@ -612,7 +612,9 @@
             throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
                     null, null, e1);
         } finally {
-            WSDocInfoStore.delete(wsDocInfo);
+            if (remove) {
+                WSDocInfoStore.delete(wsDocInfo);
+            }
         }
     }
 }

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/saml/WSSignSAMLEnvelope.java
 Mon Mar 30 16:04:38 2009
@@ -157,7 +157,7 @@
          * Gather some info about the document to process and store it for
          * retrieval
          */
-        WSDocInfo wsDocInfo = new WSDocInfo(doc.hashCode());
+        WSDocInfo wsDocInfo = new WSDocInfo(doc);
 
         Element envelope = doc.getDocumentElement();
         SOAPConstants soapConstants = 
WSSecurityUtil.getSOAPConstants(envelope);
@@ -243,14 +243,14 @@
         }
 
         KeyInfo info = sig.getKeyInfo();
-        String keyInfoUri = "KeyId-" + info.hashCode();
+        String keyInfoUri = 
wssConfig.getIdAllocator().createSecureId("KeyId-", info);
         info.setId(keyInfoUri);
 
         SecurityTokenReference secRef = new SecurityTokenReference(doc);
-        String strUri = "STRId-" + secRef.hashCode();
+        String strUri = wssConfig.getIdAllocator().createSecureId("STRId-", 
secRef);
         secRef.setID(strUri);
 
-        String certUri = "CertId-" + certs[0].hashCode();
+        String certUri = wssConfig.getIdAllocator().createSecureId("CertId-", 
certs[0]);
 
         if (tlog.isDebugEnabled()) {
             t1 = System.currentTimeMillis();
@@ -278,7 +278,7 @@
         try {
             if (senderVouches) {
                 secRefSaml = new SecurityTokenReference(doc);
-                String strSamlUri = "STRSAMLId-" + secRefSaml.hashCode();
+                String strSamlUri = 
wssConfig.getIdAllocator().createSecureId("STRSAMLId-", secRefSaml);
                 secRefSaml.setID(strSamlUri);
                 // Decouple Refernce/KeyInfo setup - quick shot here
                 Reference ref = new Reference(doc);
@@ -418,7 +418,7 @@
         wsDocInfo.setAssertion(samlToken);
         WSSecurityUtil.prependChildElement(securityHeader, samlToken);
 
-        WSDocInfoStore.store(wsDocInfo);
+        boolean remove = WSDocInfoStore.store(wsDocInfo);
         try {
             if (senderVouches) {
                 sig
@@ -435,7 +435,9 @@
             throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
                     null, null, e1);
         } finally {
-            WSDocInfoStore.delete(wsDocInfo);
+            if (remove) {
+                WSDocInfoStore.delete(wsDocInfo);
+            }
         }
         if (tlog.isDebugEnabled()) {
             t4 = System.currentTimeMillis();

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/transform/STRTransform.java
 Mon Mar 30 16:04:38 2009
@@ -30,6 +30,7 @@
 import org.apache.xml.security.c14n.Canonicalizer;
 import org.apache.xml.security.c14n.InvalidCanonicalizerException;
 import org.apache.xml.security.signature.XMLSignatureInput;
+import org.apache.xml.security.transforms.Transform;
 import org.apache.xml.security.transforms.TransformSpi;
 import org.apache.ws.security.util.Base64;
 import org.apache.xml.security.utils.XMLUtils;
@@ -63,7 +64,7 @@
     private static String XMLNS = "xmlns=";
 
     private WSDocInfo wsDocInfo = null;
-
+    
     public boolean wantsOctetStream() {
         return false;
     }
@@ -94,7 +95,8 @@
      * @throws CanonicalizationException
      * @throws InvalidCanonicalizerException
      */
-    protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
+    protected XMLSignatureInput enginePerformTransform(XMLSignatureInput 
input, 
+                                                       Transform 
transformObject)
         throws IOException, CanonicalizationException, 
InvalidCanonicalizerException {
         doDebug = log.isDebugEnabled();
 
@@ -106,17 +108,14 @@
             //
             // Get the main document, that is the complete SOAP request 
document
             //
-            Document thisDoc = this._transformObject.getDocument();
-            int docHash = thisDoc.hashCode();
-            if (doDebug) {
-                log.debug("doc: " + thisDoc.toString() + ", " + docHash);
-            }
+            Document thisDoc = transformObject.getDocument();
+
             //
             // Here we get some information about the document that is being
             // processed, in particular the crypto implementation, and already
             // detected BST that may be used later during dereferencing.
             //
-            wsDocInfo = WSDocInfoStore.lookup(docHash);
+            wsDocInfo = WSDocInfoStore.lookup(thisDoc);
             if (wsDocInfo == null) {
                 throw (new CanonicalizationException("no WSDocInfo found"));
             }
@@ -131,11 +130,11 @@
             // Canonicalizer
             //
             String canonAlgo = null;
-            if (this._transformObject.length(
+            if (transformObject.length(
                 WSConstants.WSSE_NS, "TransformationParameters") == 1) {
                 Element tmpE = 
                     XMLUtils.selectNode(
-                        this._transformObject.getElement().getFirstChild(), 
+                        transformObject.getElement().getFirstChild(), 
                         WSConstants.WSSE_NS,
                         "TransformationParameters", 
                         0

Modified: 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
 (original)
+++ 
webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/util/UUIDGenerator.java
 Mon Mar 30 16:04:38 2009
@@ -20,7 +20,6 @@
 import java.net.UnknownHostException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.util.Date;
 import java.util.Random;
 
 import org.apache.commons.logging.Log;
@@ -49,10 +48,12 @@
         if (baseUUID == null) {
             baseUUID = getInitialUUID();
         }
-        if(++incrementingValue >= Long.MAX_VALUE){
+        long i = ++incrementingValue;
+        if(i >= Long.MAX_VALUE || i < 0){
             incrementingValue = 0;
+            i = 0;
         }
-        return baseUUID + new Date().getTime() + incrementingValue;
+        return baseUUID + System.currentTimeMillis() + i;
     }
 
     protected static String getInitialUUID() {

Modified: webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java 
(original)
+++ webservices/wss4j/branches/1_5_x-fixes/test/wssec/PackageTests.java Mon Mar 
30 16:04:38 2009
@@ -62,6 +62,7 @@
         suite.addTestSuite(TestWSSecurityNew12.class);
         suite.addTestSuite(TestWSSecurityNew13.class);
         suite.addTestSuite(TestWSSecurityNew14.class);
+        suite.addTestSuite(TestWSSecurityNew15.class);
         suite.addTestSuite(TestWSSecurityNew16.class);
         suite.addTestSuite(TestWSSecurityNew17.class);
         suite.addTestSuite(TestWSSecurityNewSOAP12.class);

Modified: 
webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java?rev=760024&r1=760023&r2=760024&view=diff
==============================================================================
--- webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java 
(original)
+++ webservices/wss4j/branches/1_5_x-fixes/test/wssec/TestWSSecurityNew15.java 
Mon Mar 30 16:04:38 2009
@@ -74,7 +74,7 @@
         +   "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"; "
         +   "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\";>" 
         +   "<SOAP-ENV:Body>" 
-        +       "<add 
xmlns=\"http://ws.apache.org/counter/counter_port_type\";>" 
+        +       "<add 
xmlns=\"http://ws.apache.org/counter/counter_port_type/LogTestService2\";>" 
         +           "<value xmlns=\"\">15</value>" 
         +       "</add>" 
         +   "</SOAP-ENV:Body>" 
@@ -209,7 +209,7 @@
         String outputString = 
             org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(doc);
         if (LOG.isDebugEnabled()) {
-            System.out.println("\n" + outputString + "\n");
+            LOG.debug(outputString);
         }
         assertTrue(outputString.indexOf("LogTestService2") > 0 ? true
                 : false);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to