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());
}
/**