Author: coheigea
Date: Fri Jun  3 15:17:32 2011
New Revision: 1131066

URL: http://svn.apache.org/viewvc?rev=1131066&view=rev
Log:
Add hashCode/equals implementations for UsernameTokens and BinarySecurityTokens 
for logical comparison of tokens.

Modified:
    
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/BinarySecurity.java
    
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/UsernameToken.java
    
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/UsernameTokenTest.java
    
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/BinarySecurityTokenTest.java

Modified: 
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/BinarySecurity.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/BinarySecurity.java?rev=1131066&r1=1131065&r2=1131066&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/BinarySecurity.java
 (original)
+++ 
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/BinarySecurity.java
 Fri Jun  3 15:17:32 2011
@@ -19,6 +19,8 @@
 
 package org.apache.ws.security.message.token;
 
+import java.util.Arrays;
+
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.ws.security.util.DOM2Writer;
@@ -237,4 +239,39 @@ public class BinarySecurity {
     public String toString() {
         return DOM2Writer.nodeToString((Node)element);
     }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        byte[] token = getToken();
+        if (token != null) {
+            result = 31 * result + Arrays.hashCode(token);
+        }
+        result = 31 * result + getValueType().hashCode();
+        result = 31 * result + getEncodingType().hashCode();
+        
+        return result;
+    }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (!(object instanceof BinarySecurity)) {
+            return false;
+        }
+        BinarySecurity binarySecurity = (BinarySecurity)object;
+        
+        byte[] token = binarySecurity.getToken();
+        if (!Arrays.equals(token, getToken())) {
+            return false;
+        }
+        String valueType = binarySecurity.getValueType();
+        if (!valueType.equals(getValueType())) {
+            return false;
+        }
+        String encodingType = binarySecurity.getEncodingType();
+        if (!encodingType.equals(getEncodingType())) {
+            return false;
+        }
+        return true;
+    }
 }

Modified: 
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/UsernameToken.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/UsernameToken.java?rev=1131066&r1=1131065&r2=1131066&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/UsernameToken.java
 (original)
+++ 
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/UsernameToken.java
 Fri Jun  3 15:17:32 2011
@@ -44,6 +44,7 @@ import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.Principal;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.text.DateFormat;
@@ -410,7 +411,7 @@ public class UsernameToken {
     public byte[] getSalt() throws WSSecurityException {
         String salt = nodeString(elementSalt);
         if (salt != null) {
-            return Base64.decode(nodeString(elementSalt));
+            return Base64.decode(salt);
         }
         return null;
     }
@@ -855,6 +856,91 @@ public class UsernameToken {
         return saltValue;
     }
 
+    @Override
+    public int hashCode() {
+        int result = 17;
+        String username = getName();
+        if (username != null) {
+            result = 31 * result + username.hashCode();
+        }
+        String password = getPassword();
+        if (password != null) {
+            result = 31 * result + password.hashCode();
+        }
+        String passwordType = getPasswordType();
+        if (passwordType != null) {
+            result = 31 * result + passwordType.hashCode();
+        }
+        String nonce = getNonce();
+        if (nonce != null) {
+            result = 31 * result + nonce.hashCode();
+        }
+        String created = getCreated();
+        if (created != null) {
+            result = 31 * result + created.hashCode();
+        }
+        try {
+            byte[] salt = getSalt();
+            if (salt != null) {
+                result = 31 * result + Arrays.hashCode(salt);
+            }
+        } catch (WSSecurityException ex) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(ex.getMessage(), ex);
+            }
+        }
+        result = 31 * result + Integer.valueOf(getIteration()).hashCode();
+        
+        return result;
+    }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (!(object instanceof UsernameToken)) {
+            return false;
+        }
+        UsernameToken usernameToken = (UsernameToken)object;
+        if (!compare(usernameToken.getName(), getName())) {
+            return false;
+        }
+        if (!compare(usernameToken.getPassword(), getPassword())) {
+            return false;
+        }
+        if (!compare(usernameToken.getPasswordType(), getPasswordType())) {
+            return false;
+        }
+        if (!compare(usernameToken.getNonce(), getNonce())) {
+            return false;
+        }
+        if (!compare(usernameToken.getCreated(), getCreated())) {
+            return false;
+        }
+        try {
+            byte[] salt = usernameToken.getSalt();
+            if (!Arrays.equals(salt, getSalt())) {
+                return false;
+            }
+        } catch (WSSecurityException ex) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(ex.getMessage(), ex);
+            }
+        }
+        int iteration = usernameToken.getIteration();
+        if (iteration != getIteration()) {
+            return false;
+        }
+        return true;
+    }
+    
+    private boolean compare(String item1, String item2) {
+        if (item1 == null && item2 != null) { 
+            return false;
+        } else if (item1 != null && !item1.equals(item2)) {
+            return false;
+        }
+        return true;
+    }
+    
     /**
      * P_hash as defined in RFC 2246 for TLS.
      * 

Modified: 
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/UsernameTokenTest.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/UsernameTokenTest.java?rev=1131066&r1=1131065&r2=1131066&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/UsernameTokenTest.java
 (original)
+++ 
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/UsernameTokenTest.java
 Fri Jun  3 15:17:32 2011
@@ -125,7 +125,17 @@ public class UsernameTokenTest extends o
             LOG.debug(outputString);
         }
         LOG.info("After adding UsernameToken PW Digest....");
-        verify(signedDoc);
+        
+        List<WSSecurityEngineResult> results = verify(signedDoc);
+        WSSecurityEngineResult actionResult =
+            WSSecurityUtil.fetchActionResult(results, WSConstants.UT);
+        UsernameToken receivedToken = 
+            (UsernameToken) 
actionResult.get(WSSecurityEngineResult.TAG_USERNAME_TOKEN);
+        assertTrue(receivedToken != null);
+        
+        UsernameToken clone = new UsernameToken(receivedToken.getElement());
+        assertTrue(clone.equals(receivedToken));
+        assertTrue(clone.hashCode() == receivedToken.hashCode());
     }
     
     /**
@@ -252,7 +262,17 @@ public class UsernameTokenTest extends o
             LOG.debug(outputString);
         }
         LOG.info("After adding UsernameToken PW Text....");
-        verify(signedDoc);
+
+        List<WSSecurityEngineResult> results = verify(signedDoc);
+        WSSecurityEngineResult actionResult =
+            WSSecurityUtil.fetchActionResult(results, WSConstants.UT);
+        UsernameToken receivedToken = 
+            (UsernameToken) 
actionResult.get(WSSecurityEngineResult.TAG_USERNAME_TOKEN);
+        assertTrue(receivedToken != null);
+        
+        UsernameToken clone = new UsernameToken(receivedToken.getElement());
+        assertTrue(clone.equals(receivedToken));
+        assertTrue(clone.hashCode() == receivedToken.hashCode());
     }
     
     /**

Modified: 
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/BinarySecurityTokenTest.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/BinarySecurityTokenTest.java?rev=1131066&r1=1131065&r2=1131066&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/BinarySecurityTokenTest.java
 (original)
+++ 
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/BinarySecurityTokenTest.java
 Fri Jun  3 15:17:32 2011
@@ -84,6 +84,10 @@ public class BinarySecurityTokenTest ext
         BinarySecurity token =
             
(BinarySecurity)actionResult.get(WSSecurityEngineResult.TAG_BINARY_SECURITY_TOKEN);
         assert token != null;
+        
+        BinarySecurity clone = new BinarySecurity(token.getElement());
+        assertTrue(clone.equals(token));
+        assertTrue(clone.hashCode() == token.hashCode());
     }
     
     /**


Reply via email to