Author: giger
Date: Wed Jan 29 13:53:52 2014
New Revision: 1562443

URL: http://svn.apache.org/r1562443
Log:
WSS-490 - Derived Endorsing policy validation error

Modified:
    
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java

Modified: 
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java?rev=1562443&r1=1562442&r2=1562443&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/impl/InboundWSSecurityContextImpl.java
 Wed Jan 29 13:53:52 2014
@@ -46,6 +46,7 @@ import org.apache.xml.security.stax.secu
 import org.apache.xml.security.stax.securityEvent.TokenSecurityEvent;
 import org.apache.xml.security.stax.securityToken.InboundSecurityToken;
 import org.apache.xml.security.stax.securityToken.SecurityToken;
+import org.apache.xml.security.stax.securityToken.SecurityTokenConstants;
 
 /**
  * Concrete security context implementation
@@ -519,7 +520,9 @@ public class InboundWSSecurityContextImp
             if 
(WSSecurityEventConstants.SignedElement.equals(securityEvent.getSecurityEventType()))
 {
                 SignedElementSecurityEvent signedElementSecurityEvent = 
(SignedElementSecurityEvent) securityEvent;
                 if (signedElementSecurityEvent.isSigned()
-                        && 
signedElementSecurityEvent.getSecurityToken().getId().equals(tokenSecurityEvent.getSecurityToken().getId())
+                        && 
matchesTokenOrWrappedTokenId(tokenSecurityEvent.getSecurityToken(),
+                        signedElementSecurityEvent.getSecurityToken().getId(),
+                        SecurityTokenConstants.TokenUsage_Signature)
                         && WSSUtils.pathMatches(elementPath, 
signedElementSecurityEvent.getElementPath(), true, false)) {
                     return true;
                 }
@@ -528,6 +531,22 @@ public class InboundWSSecurityContextImp
         return false;
     }
 
+    private boolean matchesTokenOrWrappedTokenId(
+            SecurityToken securityToken, String id,
+            SecurityTokenConstants.TokenUsage tokenUsage) throws 
XMLSecurityException {
+        if (securityToken.getId().equals(id) && 
securityToken.getTokenUsages().contains(tokenUsage)) {
+            return true;
+        }
+        List<? extends SecurityToken> wrappedTokens = 
securityToken.getWrappedTokens();
+        for (int i = 0; i < wrappedTokens.size(); i++) {
+            boolean match = matchesTokenOrWrappedTokenId(wrappedTokens.get(i), 
id, tokenUsage);
+            if (match) {
+                return match;
+            }
+        }
+        return false;
+    }
+
     private boolean encryptsElement(TokenSecurityEvent<? extends 
SecurityToken> tokenSecurityEvent, List<QName> elementPath,
                                     Deque<SecurityEvent> securityEventDeque) 
throws XMLSecurityException {
         for (Iterator<SecurityEvent> iterator = securityEventDeque.iterator(); 
iterator.hasNext(); ) {


Reply via email to