You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by co...@apache.org on 2012/08/22 18:25:26 UTC

svn commit: r1376125 [2/3] - in /webservices/wss4j/trunk: ws-security-common/src/main/java/org/apache/ws/security/common/bsp/ ws-security-dom/src/main/java/org/apache/ws/security/dom/ ws-security-dom/src/main/java/org/apache/ws/security/dom/bsp/ ws-sec...

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/EncryptedKeyProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/EncryptedKeyProcessor.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/EncryptedKeyProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/EncryptedKeyProcessor.java Wed Aug 22 16:25:23 2012
@@ -19,15 +19,29 @@
 
 package org.apache.ws.security.dom.processor;
 
+import java.security.PrivateKey;
+import java.security.cert.X509Certificate;
+import java.security.spec.MGF1ParameterSpec;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.OAEPParameterSpec;
+import javax.crypto.spec.PSource;
+
+import org.apache.ws.security.common.bsp.BSPRule;
+import org.apache.ws.security.common.crypto.Crypto;
+import org.apache.ws.security.common.crypto.CryptoType;
+import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.dom.WSConstants;
 import org.apache.ws.security.dom.WSDataRef;
 import org.apache.ws.security.dom.WSDocInfo;
 import org.apache.ws.security.dom.WSSecurityEngineResult;
-import org.apache.ws.security.common.crypto.Crypto;
-import org.apache.ws.security.common.crypto.CryptoType;
-import org.apache.ws.security.common.ext.WSSecurityException;
+import org.apache.ws.security.dom.bsp.BSPEnforcer;
 import org.apache.ws.security.dom.handler.RequestData;
-import org.apache.ws.security.dom.message.token.SecurityTokenReference;
 import org.apache.ws.security.dom.str.EncryptedKeySTRParser;
 import org.apache.ws.security.dom.str.STRParser;
 import org.apache.ws.security.dom.util.WSSecurityUtil;
@@ -39,19 +53,6 @@ import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.Text;
 
-import javax.crypto.Cipher;
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.OAEPParameterSpec;
-import javax.crypto.spec.PSource;
-
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-import java.security.spec.MGF1ParameterSpec;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
 public class EncryptedKeyProcessor implements Processor {
     private static org.apache.commons.logging.Log log = 
         org.apache.commons.logging.LogFactory.getLog(EncryptedKeyProcessor.class);
@@ -80,9 +81,10 @@ public class EncryptedKeyProcessor imple
                 WSSecurityException.ErrorCode.UNSUPPORTED_ALGORITHM, "noEncAlgo"
             );
         }
-        if (data.getWssConfig().isWsiBSPCompliant()) {
-            checkBSPCompliance(elem, encryptedKeyTransportMethod);
-        }
+            
+        // Check BSP Compliance
+        checkBSPCompliance(elem, encryptedKeyTransportMethod, data.getBSPEnforcer());
+        
         Cipher cipher = WSSecurityUtil.getCipherInstance(encryptedKeyTransportMethod);
         //
         // Now lookup CipherValue.
@@ -251,29 +253,20 @@ public class EncryptedKeyProcessor imple
             );
         if (keyInfo != null) {
             Element strElement = null;
-            if (data.getWssConfig().isWsiBSPCompliant()) {
-                int result = 0;
-                Node node = keyInfo.getFirstChild();
-                while (node != null) {
-                    if (Node.ELEMENT_NODE == node.getNodeType()) {
-                        result++;
-                        strElement = (Element)node;
-                    }
-                    node = node.getNextSibling();
-                }
-                if (result != 1) {
-                    throw new WSSecurityException(
-                        WSSecurityException.ErrorCode.INVALID_SECURITY, "invalidDataRef"
-                    );
+
+            int result = 0;
+            Node node = keyInfo.getFirstChild();
+            while (node != null) {
+                if (Node.ELEMENT_NODE == node.getNodeType()) {
+                    result++;
+                    strElement = (Element)node;
                 }
-            } else {
-                 strElement = 
-                    WSSecurityUtil.getDirectChildElement(
-                        keyInfo,
-                        SecurityTokenReference.SECURITY_TOKEN_REFERENCE,
-                        WSConstants.WSSE_NS
-                    );
+                node = node.getNextSibling();
             }
+            if (result != 1) {
+                data.getBSPEnforcer().handleBSPRule(BSPRule.R5424);
+            }
+
             if (strElement == null || strParser == null) {
                 throw new WSSecurityException(
                     WSSecurityException.ErrorCode.INVALID_SECURITY, "noSecTokRef"
@@ -400,38 +393,30 @@ public class EncryptedKeyProcessor imple
      * A method to check that the EncryptedKey is compliant with the BSP spec.
      * @throws WSSecurityException
      */
-    private void checkBSPCompliance(Element elem, String encAlgo) throws WSSecurityException {
+    private void checkBSPCompliance(
+        Element elem, String encAlgo, BSPEnforcer bspEnforcer
+    ) throws WSSecurityException {
         String attribute = elem.getAttribute("Type");
         if (attribute != null && !"".equals(attribute)) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.FAILED_CHECK, "badAttribute", new Object[]{attribute}
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R3209);
         }
         attribute = elem.getAttribute("MimeType");
         if (attribute != null && !"".equals(attribute)) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.FAILED_CHECK, "badAttribute", new Object[]{attribute}
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5622);
         }
         attribute = elem.getAttribute("Encoding");
         if (attribute != null && !"".equals(attribute)) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.FAILED_CHECK, "badAttribute", new Object[]{attribute}
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5623);
         }
         attribute = elem.getAttribute("Recipient");
         if (attribute != null && !"".equals(attribute)) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.FAILED_CHECK, "badAttribute", new Object[]{attribute}
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5602);
         }
         
         // EncryptionAlgorithm must be RSA15, or RSAOEP.
         if (!WSConstants.KEYTRANSPORT_RSA15.equals(encAlgo)
             && !WSConstants.KEYTRANSPORT_RSAOEP.equals(encAlgo)) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.INVALID_SECURITY, "badEncAlgo", new Object[]{encAlgo}
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5621);
         }
     }
   

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/ReferenceListProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/ReferenceListProcessor.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/ReferenceListProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/ReferenceListProcessor.java Wed Aug 22 16:25:23 2012
@@ -30,7 +30,9 @@ import org.apache.ws.security.dom.WSCons
 import org.apache.ws.security.dom.WSDataRef;
 import org.apache.ws.security.dom.WSDocInfo;
 import org.apache.ws.security.dom.WSSecurityEngineResult;
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.ext.WSSecurityException;
+import org.apache.ws.security.dom.bsp.BSPEnforcer;
 import org.apache.ws.security.dom.handler.RequestData;
 import org.apache.ws.security.dom.message.CallbackLookup;
 import org.apache.ws.security.dom.message.DOMCallbackLookup;
@@ -143,9 +145,8 @@ public class ReferenceListProcessor impl
             throw new WSSecurityException(WSSecurityException.ErrorCode.INVALID_SECURITY, "noKeyinfo");
         }
         // Check BSP compliance
-        if (data.getWssConfig().isWsiBSPCompliant()) {
-            checkBSPCompliance(keyInfoElement, symEncAlgo);
-        }
+        checkBSPCompliance(keyInfoElement, symEncAlgo, data.getBSPEnforcer());
+        
         //
         // Try to get a security reference token, if none found try to get a
         // shared key using a KeyName.
@@ -183,7 +184,8 @@ public class ReferenceListProcessor impl
      */
     private static void checkBSPCompliance(
         Element keyInfoElement, 
-        String encAlgo
+        String encAlgo,
+        BSPEnforcer bspEnforcer
     ) throws WSSecurityException {
         // We can only have one token reference
         int result = 0;
@@ -197,23 +199,17 @@ public class ReferenceListProcessor impl
             node = node.getNextSibling();
         }
         if (result != 1) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.INVALID_SECURITY, "invalidDataRef"
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5424);
         }
         
         if (!WSConstants.WSSE_NS.equals(child.getNamespaceURI()) || 
             !SecurityTokenReference.SECURITY_TOKEN_REFERENCE.equals(child.getLocalName())) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.INVALID_SECURITY, "noSecTokRef"
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5426);
         }
         
         // EncryptionAlgorithm cannot be null
         if (encAlgo == null) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.UNSUPPORTED_ALGORITHM, "noEncAlgo"
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5601);
         }
         // EncryptionAlgorithm must be 3DES, or AES128, or AES256
         if (!WSConstants.TRIPLE_DES.equals(encAlgo)
@@ -221,9 +217,7 @@ public class ReferenceListProcessor impl
             && !WSConstants.AES_128_GCM.equals(encAlgo)
             && !WSConstants.AES_256.equals(encAlgo)
             && !WSConstants.AES_256_GCM.equals(encAlgo)) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.INVALID_SECURITY, "badEncAlgo", new Object[]{encAlgo}
-            );
+            bspEnforcer.handleBSPRule(BSPRule.R5620);
         }
     }
 

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureConfirmationProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureConfirmationProcessor.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureConfirmationProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureConfirmationProcessor.java Wed Aug 22 16:25:23 2012
@@ -44,20 +44,11 @@ public class SignatureConfirmationProces
         //
         // Decode SignatureConfirmation, just store in result
         //
-        SignatureConfirmation sigConf = new SignatureConfirmation(elem);
-        String id = sigConf.getID();
-        // A wsu:Id is required as per the BSP spec
-        if (data.getWssConfig().isWsiBSPCompliant() && (id == null || "".equals(id))) {
-            throw new WSSecurityException(
-                WSSecurityException.ErrorCode.INVALID_SECURITY, 
-                "requiredElementNoID", 
-                new Object[] {elem.getLocalName()}
-            );
-        }
-        
+        SignatureConfirmation sigConf = new SignatureConfirmation(elem, data.getBSPEnforcer());
+
         WSSecurityEngineResult result = 
             new WSSecurityEngineResult(WSConstants.SC, sigConf);
-        result.put(WSSecurityEngineResult.TAG_ID, id);
+        result.put(WSSecurityEngineResult.TAG_ID, sigConf.getID());
         wsDocInfo.addResult(result);
         wsDocInfo.addTokenElement(elem);
         return java.util.Collections.singletonList(result);

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureProcessor.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/SignatureProcessor.java Wed Aug 22 16:25:23 2012
@@ -615,7 +615,7 @@ public class SignatureProcessor implemen
                 if (sibling instanceof Element 
                     && WSConstants.TIMESTAMP_TOKEN_LN.equals(((Element)sibling).getLocalName())
                     && WSConstants.WSU_NS.equals(((Element)sibling).getNamespaceURI())) {
-                    timeStamp = new Timestamp((Element)sibling, requestData.getWssConfig().isWsiBSPCompliant());
+                    timeStamp = new Timestamp((Element)sibling, requestData.getBSPEnforcer());
                     break;
                 }
                 sibling = sibling.getNextSibling();

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/TimestampProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/TimestampProcessor.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/TimestampProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/TimestampProcessor.java Wed Aug 22 16:25:23 2012
@@ -19,20 +19,19 @@
 
 package org.apache.ws.security.dom.processor;
 
+import java.util.List;
+
+import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.dom.WSConstants;
 import org.apache.ws.security.dom.WSDocInfo;
-import org.apache.ws.security.dom.WSSConfig;
 import org.apache.ws.security.dom.WSSecurityEngine;
 import org.apache.ws.security.dom.WSSecurityEngineResult;
-import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.dom.handler.RequestData;
 import org.apache.ws.security.dom.message.token.Timestamp;
 import org.apache.ws.security.dom.validate.Credential;
 import org.apache.ws.security.dom.validate.Validator;
 import org.w3c.dom.Element;
 
-import java.util.List;
-
 public class TimestampProcessor implements Processor {
     private static org.apache.commons.logging.Log log = 
         org.apache.commons.logging.LogFactory.getLog(TimestampProcessor.class);
@@ -48,8 +47,7 @@ public class TimestampProcessor implemen
         //
         // Decode Timestamp, add the found time (created/expiry) to result
         //
-        WSSConfig config = data.getWssConfig();
-        Timestamp timestamp = new Timestamp(elem, config.isWsiBSPCompliant());
+        Timestamp timestamp = new Timestamp(elem, data.getBSPEnforcer());
         Credential credential = new Credential();
         credential.setTimestamp(timestamp);
         

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/UsernameTokenProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/UsernameTokenProcessor.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/UsernameTokenProcessor.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/processor/UsernameTokenProcessor.java Wed Aug 22 16:25:23 2012
@@ -19,6 +19,9 @@
 
 package org.apache.ws.security.dom.processor;
 
+import java.util.List;
+
+import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.dom.SAMLTokenPrincipal;
 import org.apache.ws.security.dom.WSConstants;
 import org.apache.ws.security.dom.WSDocInfo;
@@ -27,15 +30,12 @@ import org.apache.ws.security.dom.WSSecu
 import org.apache.ws.security.dom.WSSecurityEngineResult;
 import org.apache.ws.security.dom.WSUsernameTokenPrincipal;
 import org.apache.ws.security.dom.cache.ReplayCache;
-import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.dom.handler.RequestData;
 import org.apache.ws.security.dom.message.token.UsernameToken;
 import org.apache.ws.security.dom.validate.Credential;
 import org.apache.ws.security.dom.validate.Validator;
 import org.w3c.dom.Element;
 
-import java.util.List;
-
 public class UsernameTokenProcessor implements Processor {
     private static org.apache.commons.logging.Log log = 
         org.apache.commons.logging.LogFactory.getLog(UsernameTokenProcessor.class);
@@ -72,7 +72,7 @@ public class UsernameTokenProcessor impl
             action = WSConstants.UT_NOPASSWORD;
             if (token.isDerivedKey()) {
                 token.setRawPassword(data);
-                secretKey = token.getDerivedKey();
+                secretKey = token.getDerivedKey(data.getBSPEnforcer());
             } 
         }
         WSSecurityEngineResult result = new WSSecurityEngineResult(action, token);
@@ -119,19 +119,18 @@ public class UsernameTokenProcessor impl
         RequestData data
     ) throws WSSecurityException {
         boolean allowNamespaceQualifiedPasswordTypes = false;
-        boolean bspCompliant = true;
         WSSConfig wssConfig = data.getWssConfig();
         if (wssConfig != null) {
             allowNamespaceQualifiedPasswordTypes = 
                 wssConfig.getAllowNamespaceQualifiedPasswordTypes();
-            bspCompliant = wssConfig.isWsiBSPCompliant();
         }
         
         //
         // Parse and validate the UsernameToken element
         //
         UsernameToken ut = 
-            new UsernameToken(token, allowNamespaceQualifiedPasswordTypes, bspCompliant);
+            new UsernameToken(token, allowNamespaceQualifiedPasswordTypes, 
+                    data.getBSPEnforcer());
         
         // Test for replay attacks
         ReplayCache replayCache = data.getNonceReplayCache();

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/EncryptedKeySTRParser.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/EncryptedKeySTRParser.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/EncryptedKeySTRParser.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/EncryptedKeySTRParser.java Wed Aug 22 16:25:23 2012
@@ -131,7 +131,7 @@ public class EncryptedKeySTRParser imple
             // at this point ... check token type: Binary
             QName el = new QName(bstElement.getNamespaceURI(), bstElement.getLocalName());
             if (el.equals(WSSecurityEngine.BINARY_TOKEN)) {
-                X509Security token = new X509Security(bstElement);
+                X509Security token = new X509Security(bstElement, data.getBSPEnforcer());
                 if (bspCompliant) {
                     BSPEnforcer.checkBinarySecurityBSPCompliance(secRef, token);
                 }

Modified: webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/SecurityTokenRefSTRParser.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/SecurityTokenRefSTRParser.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/SecurityTokenRefSTRParser.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/ws/security/dom/str/SecurityTokenRefSTRParser.java Wed Aug 22 16:25:23 2012
@@ -338,7 +338,7 @@ public class SecurityTokenRefSTRParser i
                 (UsernameToken)result.get(WSSecurityEngineResult.TAG_USERNAME_TOKEN);
 
             usernameToken.setRawPassword(data);
-            secretKey = usernameToken.getDerivedKey();
+            secretKey = usernameToken.getDerivedKey(data.getBSPEnforcer());
         } 
     }
     

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/handler/SignatureConfirmationTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/handler/SignatureConfirmationTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/handler/SignatureConfirmationTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/handler/SignatureConfirmationTest.java Wed Aug 22 16:25:23 2012
@@ -19,17 +19,23 @@
 
 package org.apache.ws.security.dom.handler;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.security.auth.callback.CallbackHandler;
+
+import org.apache.ws.security.common.bsp.BSPRule;
+import org.apache.ws.security.common.crypto.Crypto;
+import org.apache.ws.security.common.crypto.CryptoFactory;
+import org.apache.ws.security.common.ext.WSSecurityException;
+import org.apache.ws.security.common.util.XMLUtils;
 import org.apache.ws.security.dom.WSConstants;
-import org.apache.ws.security.dom.WSSConfig;
 import org.apache.ws.security.dom.WSSecurityEngine;
 import org.apache.ws.security.dom.WSSecurityEngineResult;
 import org.apache.ws.security.dom.common.CustomHandler;
 import org.apache.ws.security.dom.common.KeystoreCallbackHandler;
 import org.apache.ws.security.dom.common.SOAPUtil;
-import org.apache.ws.security.common.crypto.Crypto;
-import org.apache.ws.security.common.crypto.CryptoFactory;
-import org.apache.ws.security.common.ext.WSSecurityException;
-import org.apache.ws.security.common.util.XMLUtils;
 import org.apache.ws.security.dom.message.WSSecHeader;
 import org.apache.ws.security.dom.message.token.SignatureConfirmation;
 import org.apache.ws.security.dom.util.WSSecurityUtil;
@@ -37,11 +43,6 @@ import org.apache.xml.security.utils.Bas
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import java.util.List;
-import java.util.ArrayList;
-
-import javax.security.auth.callback.CallbackHandler;
-
 /**
  * A set of test-cases for SignatureConfirmation.
  */
@@ -278,23 +279,19 @@ public class SignatureConfirmationTest e
         }
         
         // Verify the results
-        
-        // Turn off BSP spec compliance
         WSSecurityEngine newEngine = new WSSecurityEngine();
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        newEngine.setWssConfig(config);
-        newEngine.processSecurityHeader(doc, null, callbackHandler, crypto);
-        
-        // Now turn on BSP spec compliance
-        config.setWsiBSPCompliant(true);
-        newEngine.setWssConfig(config);
         try {
             newEngine.processSecurityHeader(doc, null, callbackHandler, crypto);
             fail("Failure expected on a request with no wsu:Id");
         } catch (WSSecurityException ex) {
-            assertTrue(ex.getMessage().contains("wsu:Id"));
+            // expected
         }
+        
+        RequestData data = new RequestData();
+        data.setCallbackHandler(callbackHandler);
+        data.setSigVerCrypto(crypto);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R5441));
+        newEngine.processSecurityHeader(doc, "", data);
     }
     
     

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/EncryptionTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/EncryptionTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/EncryptionTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/EncryptionTest.java Wed Aug 22 16:25:23 2012
@@ -30,6 +30,7 @@ import org.apache.ws.security.dom.common
 import org.apache.ws.security.dom.common.KeystoreCallbackHandler;
 import org.apache.ws.security.dom.common.SecretKeyCallbackHandler;
 import org.apache.ws.security.dom.common.SOAPUtil;
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.crypto.Crypto;
 import org.apache.ws.security.common.crypto.CryptoFactory;
 import org.apache.ws.security.common.ext.WSSecurityException;
@@ -48,6 +49,7 @@ import javax.crypto.SecretKey;
 import javax.security.auth.callback.CallbackHandler;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -585,23 +587,20 @@ public class EncryptionTest extends org.
         if (LOG.isDebugEnabled()) {
             LOG.debug(outputString);
         }
-        
-        // Turn off BSP compliance
+
         WSSecurityEngine newEngine = new WSSecurityEngine();
-        WSSConfig wssConfig = WSSConfig.getNewInstance();
-        wssConfig.setWsiBSPCompliant(false);
-        newEngine.setWssConfig(wssConfig);
-        newEngine.processSecurityHeader(encryptedDoc, null, keystoreCallbackHandler, crypto);
-        
-        // Now turn on BSP compliance
-        wssConfig.setWsiBSPCompliant(true);
-        newEngine.setWssConfig(wssConfig);
         try {
             newEngine.processSecurityHeader(encryptedDoc, null, keystoreCallbackHandler, crypto);
             fail("Failure expected on a bad attribute type");
         } catch (WSSecurityException ex) {
-            assertTrue(ex.getMessage().contains("bad attribute"));
+            // expected
         }
+        
+        RequestData data = new RequestData();
+        data.setCallbackHandler(keystoreCallbackHandler);
+        data.setDecCrypto(crypto);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R3209));
+        newEngine.processSecurityHeader(encryptedDoc, "", data);
     }
     
     /**

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/SignatureEncryptionTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/SignatureEncryptionTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/SignatureEncryptionTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/SignatureEncryptionTest.java Wed Aug 22 16:25:23 2012
@@ -28,6 +28,8 @@ import org.apache.ws.security.dom.WSSecu
 import org.apache.ws.security.dom.common.KeystoreCallbackHandler;
 import org.apache.ws.security.dom.common.SOAPUtil;
 import org.apache.ws.security.dom.common.SecretKeyCallbackHandler;
+import org.apache.ws.security.dom.handler.RequestData;
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.crypto.Crypto;
 import org.apache.ws.security.common.crypto.CryptoFactory;
 import org.apache.ws.security.common.util.XMLUtils;
@@ -37,6 +39,7 @@ import org.w3c.dom.Document;
 import javax.security.auth.callback.CallbackHandler;
 import javax.xml.crypto.dsig.SignatureMethod;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.ArrayList;
 
@@ -356,10 +359,13 @@ public class SignatureEncryptionTest ext
         SecretKeyCallbackHandler secretKeyCallbackHandler = new SecretKeyCallbackHandler();
         secretKeyCallbackHandler.setOutboundSecret(key);
         WSSecurityEngine engine = new WSSecurityEngine();
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        engine.setWssConfig(config);
-        engine.processSecurityHeader(doc, null, secretKeyCallbackHandler, crypto);
+        RequestData data = new RequestData();
+        data.setCallbackHandler(secretKeyCallbackHandler);
+        data.setSigVerCrypto(crypto);
+        data.setDecCrypto(crypto);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R5426));
+        
+        engine.processSecurityHeader(doc, "", data);
         if (LOG.isDebugEnabled()) {
             String outputString = 
                 XMLUtils.PrettyDocumentToString(doc);

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/TimestampTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/TimestampTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/TimestampTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/TimestampTest.java Wed Aug 22 16:25:23 2012
@@ -23,7 +23,10 @@ import org.apache.ws.security.dom.WSCons
 import org.apache.ws.security.dom.WSSConfig;
 import org.apache.ws.security.dom.WSSecurityEngineResult;
 import org.apache.ws.security.dom.WSSecurityEngine;
+import org.apache.ws.security.dom.bsp.BSPEnforcer;
 import org.apache.ws.security.dom.common.SOAPUtil;
+import org.apache.ws.security.dom.handler.RequestData;
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.common.util.XMLUtils;
 import org.apache.ws.security.dom.message.token.Timestamp;
@@ -34,6 +37,8 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -76,7 +81,7 @@ public class TimestampTest extends org.j
             (Timestamp)actionResult.get(WSSecurityEngineResult.TAG_TIMESTAMP);
         assertTrue(receivedTimestamp != null);
         
-        Timestamp clone = new Timestamp(receivedTimestamp.getElement());
+        Timestamp clone = new Timestamp(receivedTimestamp.getElement(), new BSPEnforcer(true));
         assertTrue(clone.equals(receivedTimestamp));
         assertTrue(clone.hashCode() == receivedTimestamp.hashCode());
     }
@@ -297,13 +302,13 @@ public class TimestampTest extends org.j
                 WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.CREATED_LN
             );
         Date createdDate = new Date();
-        long currentTime = createdDate.getTime() + 300000;
+        long currentTime = createdDate.getTime();
         createdDate.setTime(currentTime);
         elementCreated.appendChild(doc.createTextNode(zulu.format(createdDate)));
         timestampElement.appendChild(elementCreated);
         
         Date expiresDate = new Date();
-        expiresDate.setTime(expiresDate.getTime() -300000);
+        expiresDate.setTime(expiresDate.getTime() - 300000);
 
         Element elementExpires =
             doc.createElementNS(
@@ -326,7 +331,7 @@ public class TimestampTest extends org.j
             verify(doc, WSSConfig.getNewInstance());
             fail("The timestamp validation should have failed");
         } catch (WSSecurityException ex) {
-            assertTrue(ex.getErrorCode() == WSSecurityException.ErrorCode.MESSAGE_EXPIRED); 
+            //
         }
     }
     
@@ -358,7 +363,6 @@ public class TimestampTest extends org.j
         // Do some processing
         //
         WSSConfig wssConfig = WSSConfig.getNewInstance();
-        wssConfig.setWsiBSPCompliant(true);
         try {
             verify(createdDoc, wssConfig);
             fail("Expected failure on multiple timestamps");
@@ -366,9 +370,7 @@ public class TimestampTest extends org.j
             // expected
         }
         
-        // Turn off BSP compliance and the test should pass
-        wssConfig.setWsiBSPCompliant(false);
-        verify(createdDoc, wssConfig);
+        verify(createdDoc, Collections.singletonList(BSPRule.R3227));
     }
     
     /**
@@ -393,8 +395,6 @@ public class TimestampTest extends org.j
                 WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.CREATED_LN
             );
         Date createdDate = new Date();
-        long currentTime = createdDate.getTime() + 300000;
-        createdDate.setTime(currentTime);
         elementCreated.appendChild(doc.createTextNode(zulu.format(createdDate)));
         timestampElement.appendChild(elementCreated);
         timestampElement.appendChild(elementCreated.cloneNode(true));
@@ -415,6 +415,8 @@ public class TimestampTest extends org.j
         } catch (WSSecurityException ex) {
             // expected
         }
+        
+        verify(doc, Collections.singletonList(BSPRule.R3203));
     }
     
     /**
@@ -454,14 +456,17 @@ public class TimestampTest extends org.j
         //
         // Do some processing
         //
-        WSSConfig wssConfig = WSSConfig.getNewInstance();
-        wssConfig.setWsiBSPCompliant(true);
         try {
-            verify(doc, wssConfig);
+            verify(doc, WSSConfig.getNewInstance());
             fail("The timestamp validation should have failed on no Created element");
         } catch (WSSecurityException ex) {
             // expected
         }
+        
+        List<BSPRule> rules = new ArrayList<BSPRule>();
+        rules.add(BSPRule.R3203);
+        rules.add(BSPRule.R3221);
+        verify(doc, rules);
     }
     
     /**
@@ -479,18 +484,27 @@ public class TimestampTest extends org.j
             doc.createElementNS(
                 WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.TIMESTAMP_TOKEN_LN
             );
-
+        
         DateFormat zulu = new XmlSchemaDateFormat();
         Element elementCreated =
             doc.createElementNS(
-                WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.EXPIRES_LN
+                WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.CREATED_LN
             );
         Date createdDate = new Date();
-        long currentTime = createdDate.getTime() + 300000;
+        long currentTime = createdDate.getTime();
         createdDate.setTime(currentTime);
         elementCreated.appendChild(doc.createTextNode(zulu.format(createdDate)));
         timestampElement.appendChild(elementCreated);
-        timestampElement.appendChild(elementCreated.cloneNode(true));
+
+        zulu = new XmlSchemaDateFormat();
+        Element elementExpires =
+            doc.createElementNS(
+                WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.EXPIRES_LN
+            );
+        createdDate.setTime(currentTime + 300000);
+        elementExpires.appendChild(doc.createTextNode(zulu.format(createdDate)));
+        timestampElement.appendChild(elementExpires);
+        timestampElement.appendChild(elementExpires.cloneNode(true));
 
         secHeader.getSecurityHeader().appendChild(timestampElement);
         
@@ -508,6 +522,8 @@ public class TimestampTest extends org.j
         } catch (WSSecurityException ex) {
             // expected
         }
+        
+        verify(doc, Collections.singletonList(BSPRule.R3224));
     }
     
     /**
@@ -531,17 +547,17 @@ public class TimestampTest extends org.j
             doc.createElementNS(
                 WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.EXPIRES_LN
             );
-        Date createdDate = new Date();
-        long currentTime = createdDate.getTime() + 300000;
-        createdDate.setTime(currentTime);
-        elementCreated.appendChild(doc.createTextNode(zulu.format(createdDate)));
+        Date expiresDate = new Date();
+        long currentTime = expiresDate.getTime() + 300000;
+        expiresDate.setTime(currentTime);
+        elementCreated.appendChild(doc.createTextNode(zulu.format(expiresDate)));
         timestampElement.appendChild(elementCreated);
         
         Element elementExpires =
             doc.createElementNS(
                 WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.CREATED_LN
             );
-        elementExpires.appendChild(doc.createTextNode(zulu.format(createdDate)));
+        elementExpires.appendChild(doc.createTextNode(zulu.format(new Date())));
         timestampElement.appendChild(elementExpires);
 
         secHeader.getSecurityHeader().appendChild(timestampElement);
@@ -554,14 +570,14 @@ public class TimestampTest extends org.j
         //
         // Do some processing
         //
-        WSSConfig wssConfig = WSSConfig.getNewInstance();
-        wssConfig.setWsiBSPCompliant(true);
         try {
-            verify(doc, wssConfig);
+            verify(doc, WSSConfig.getNewInstance());
             fail("The timestamp validation should have failed");
         } catch (WSSecurityException ex) {
             // expected
         }
+        
+        verify(doc, Collections.singletonList(BSPRule.R3221));
     }
     
     
@@ -600,7 +616,6 @@ public class TimestampTest extends org.j
         // is rejecting the Timestamp
         //
         WSSConfig wssConfig = WSSConfig.getNewInstance();
-        wssConfig.setWsiBSPCompliant(true);
         wssConfig.setValidator(WSSecurityEngine.TIMESTAMP, new NoOpValidator());
         try {
             verify(doc, wssConfig);
@@ -650,18 +665,16 @@ public class TimestampTest extends org.j
         // Do some processing
         //
         WSSConfig wssConfig = WSSConfig.getNewInstance();
-        wssConfig.setWsiBSPCompliant(true);
         wssConfig.setValidator(WSSecurityEngine.TIMESTAMP, new NoOpValidator());
         try {
-            verify(doc, wssConfig);
+            verify(doc, WSSConfig.getNewInstance());
             fail("The timestamp validation should have failed");
         } catch (WSSecurityException ex) {
             //
         }
         
         // Now it should pass...
-        wssConfig.setWsiBSPCompliant(false);
-        verify(doc, wssConfig);
+        verify(doc, wssConfig, Collections.singletonList(BSPRule.R3225));
     }
     
 
@@ -685,14 +698,20 @@ public class TimestampTest extends org.j
         DateFormat zulu = new XmlSchemaDateFormat();
         Element elementCreated =
             doc.createElementNS(
-                WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.EXPIRES_LN
+                WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.CREATED_LN
             );
         Date createdDate = new Date();
-        long currentTime = createdDate.getTime() + 300000;
-        createdDate.setTime(currentTime);
         elementCreated.appendChild(doc.createTextNode(zulu.format(createdDate)));
         timestampElement.appendChild(elementCreated);
         
+        Element elementExpires =
+            doc.createElementNS(
+                WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + WSConstants.EXPIRES_LN
+            );
+        createdDate.setTime(createdDate.getTime() + 300000);
+        elementExpires.appendChild(doc.createTextNode(zulu.format(createdDate)));
+        timestampElement.appendChild(elementExpires);
+        
         Element elementCustom =
             doc.createElementNS(
                 WSConstants.WSU_NS, WSConstants.WSU_PREFIX + ":" + "Custom"
@@ -709,33 +728,52 @@ public class TimestampTest extends org.j
         //
         // Do some processing
         //
-        WSSConfig wssConfig = WSSConfig.getNewInstance();
-        wssConfig.setWsiBSPCompliant(true);
         try {
-            verify(doc, wssConfig);
+            verify(doc, WSSConfig.getNewInstance());
             fail("The timestamp validation should have failed");
         } catch (WSSecurityException ex) {
             //
         }
         
         // Now it should pass...
-        wssConfig.setWsiBSPCompliant(false);
-        verify(doc, wssConfig);
+        verify(doc, Collections.singletonList(BSPRule.R3222));
     }
     
     /**
      * Verifies the soap envelope
-     * 
-     * @param env soap envelope
-     * @param wssConfig
-     * @throws java.lang.Exception Thrown when there is a problem in verification
      */
     private List<WSSecurityEngineResult> verify(
         Document doc, WSSConfig wssConfig
     ) throws Exception {
         WSSecurityEngine secEngine = new WSSecurityEngine();
-        secEngine.setWssConfig(wssConfig);
-        return secEngine.processSecurityHeader(doc, null, null, null);
+        RequestData requestData = new RequestData();
+        requestData.setWssConfig(wssConfig);
+        return secEngine.processSecurityHeader(doc, "", requestData);
+    }
+    
+    /**
+     * Verifies the soap envelope
+     */
+    private List<WSSecurityEngineResult> verify(
+        Document doc, List<BSPRule> ignoredRules
+    ) throws Exception {
+        WSSecurityEngine secEngine = new WSSecurityEngine();
+        RequestData requestData = new RequestData();
+        requestData.setIgnoredBSPRules(ignoredRules);
+        return secEngine.processSecurityHeader(doc, "", requestData);
+    }
+    
+    /**
+     * Verifies the soap envelope
+     */
+    private List<WSSecurityEngineResult> verify(
+        Document doc, WSSConfig wssConfig, List<BSPRule> ignoredRules
+    ) throws Exception {
+        WSSecurityEngine secEngine = new WSSecurityEngine();
+        RequestData requestData = new RequestData();
+        requestData.setWssConfig(wssConfig);
+        requestData.setIgnoredBSPRules(ignoredRules);
+        return secEngine.processSecurityHeader(doc, "", requestData);
     }
     
     

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UTDerivedKeyTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UTDerivedKeyTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UTDerivedKeyTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UTDerivedKeyTest.java Wed Aug 22 16:25:23 2012
@@ -26,6 +26,8 @@ import org.apache.ws.security.dom.WSSecu
 import org.apache.ws.security.dom.common.EncodedPasswordCallbackHandler;
 import org.apache.ws.security.dom.common.SOAPUtil;
 import org.apache.ws.security.dom.common.UsernamePasswordCallbackHandler;
+import org.apache.ws.security.dom.handler.RequestData;
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.crypto.Crypto;
 import org.apache.ws.security.common.crypto.CryptoFactory;
 import org.apache.ws.security.common.ext.WSSecurityException;
@@ -40,6 +42,7 @@ import javax.security.auth.callback.Call
 
 import java.security.MessageDigest;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -657,12 +660,13 @@ public class UTDerivedKeyTest extends or
         } catch (WSSecurityException ex) {
             // expected
         }
-        
-        // Turn off BSP compliance and it should work
-        config.setWsiBSPCompliant(false);
-        WSSecurityEngine newEngine = new WSSecurityEngine();
-        newEngine.setWssConfig(config);
-        newEngine.processSecurityHeader(doc, null, callbackHandler, crypto);
+
+        RequestData data = new RequestData();
+        data.setCallbackHandler(callbackHandler);
+        data.setDecCrypto(crypto);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R4218));
+        WSSecurityEngine engine = new WSSecurityEngine();
+        engine.processSecurityHeader(doc, "", data);
     }
 
     

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UsernameTokenTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UsernameTokenTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UsernameTokenTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/UsernameTokenTest.java Wed Aug 22 16:25:23 2012
@@ -23,10 +23,12 @@ import org.apache.ws.security.dom.WSSecu
 import org.apache.ws.security.dom.WSSecurityEngine;
 import org.apache.ws.security.dom.WSConstants;
 import org.apache.ws.security.dom.WSSConfig;
+import org.apache.ws.security.dom.bsp.BSPEnforcer;
 import org.apache.ws.security.dom.common.CustomHandler;
 import org.apache.ws.security.dom.common.EncodedPasswordCallbackHandler;
 import org.apache.ws.security.dom.common.UsernamePasswordCallbackHandler;
 import org.apache.ws.security.dom.common.SOAPUtil;
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.ext.WSPasswordCallback;
 import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.common.util.XMLUtils;
@@ -42,6 +44,7 @@ import javax.security.auth.callback.Call
 import javax.security.auth.callback.UnsupportedCallbackException;
 import java.io.IOException;
 import java.security.MessageDigest;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -134,7 +137,8 @@ public class UsernameTokenTest extends o
             (UsernameToken) actionResult.get(WSSecurityEngineResult.TAG_USERNAME_TOKEN);
         assertTrue(receivedToken != null);
         
-        UsernameToken clone = new UsernameToken(receivedToken.getElement());
+        UsernameToken clone = 
+            new UsernameToken(receivedToken.getElement(), false, new BSPEnforcer());
         assertTrue(clone.equals(receivedToken));
         assertTrue(clone.hashCode() == receivedToken.hashCode());
     }
@@ -271,7 +275,8 @@ public class UsernameTokenTest extends o
             (UsernameToken) actionResult.get(WSSecurityEngineResult.TAG_USERNAME_TOKEN);
         assertTrue(receivedToken != null);
         
-        UsernameToken clone = new UsernameToken(receivedToken.getElement());
+        UsernameToken clone = 
+            new UsernameToken(receivedToken.getElement(), false, new BSPEnforcer());
         assertTrue(clone.equals(receivedToken));
         assertTrue(clone.hashCode() == receivedToken.hashCode());
     }
@@ -357,10 +362,10 @@ public class UsernameTokenTest extends o
         } catch (WSSecurityException ex) {
             // expected
         }
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        newEngine.setWssConfig(config);
-        newEngine.processSecurityHeader(doc, null, callbackHandler, null);
+        RequestData data = new RequestData();
+        data.setCallbackHandler(callbackHandler);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R4201));
+        newEngine.processSecurityHeader(doc, "", data);
     }
     
     /**
@@ -739,10 +744,11 @@ public class UsernameTokenTest extends o
         } catch (WSSecurityException ex) {
             // expected
         }
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        newEngine.setWssConfig(config);
-        newEngine.processSecurityHeader(doc, null, callbackHandler, null);
+
+        RequestData data = new RequestData();
+        data.setCallbackHandler(callbackHandler);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R4225));
+        newEngine.processSecurityHeader(doc, "", data);
     }
     
     /**
@@ -781,10 +787,11 @@ public class UsernameTokenTest extends o
         } catch (WSSecurityException ex) {
             // expected
         }
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        newEngine.setWssConfig(config);
-        newEngine.processSecurityHeader(doc, null, callbackHandler, null);
+        
+        RequestData data = new RequestData();
+        data.setCallbackHandler(callbackHandler);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R4223));
+        newEngine.processSecurityHeader(doc, "", data);
     }
     
     /**
@@ -823,10 +830,11 @@ public class UsernameTokenTest extends o
         } catch (WSSecurityException ex) {
             // expected
         }
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        newEngine.setWssConfig(config);
-        newEngine.processSecurityHeader(doc, null, callbackHandler, null);
+        
+        RequestData data = new RequestData();
+        data.setCallbackHandler(callbackHandler);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R4222));
+        newEngine.processSecurityHeader(doc, "", data);
     }
     
     /**
@@ -866,10 +874,11 @@ public class UsernameTokenTest extends o
         } catch (WSSecurityException ex) {
             // expected
         }
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        newEngine.setWssConfig(config);
-        newEngine.processSecurityHeader(doc, null, callbackHandler, null);
+        
+        RequestData data = new RequestData();
+        data.setCallbackHandler(callbackHandler);
+        data.setIgnoredBSPRules(Collections.singletonList(BSPRule.R4221));
+        newEngine.processSecurityHeader(doc, "", data);
     }
     
     /**

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/BinarySecurityTokenTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/BinarySecurityTokenTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/BinarySecurityTokenTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/BinarySecurityTokenTest.java Wed Aug 22 16:25:23 2012
@@ -23,6 +23,7 @@ import org.apache.ws.security.dom.WSSCon
 import org.apache.ws.security.dom.WSSecurityEngine;
 import org.apache.ws.security.dom.WSConstants;
 import org.apache.ws.security.dom.WSSecurityEngineResult;
+import org.apache.ws.security.dom.bsp.BSPEnforcer;
 import org.apache.ws.security.dom.common.SOAPUtil;
 import org.apache.ws.security.common.crypto.Crypto;
 import org.apache.ws.security.common.crypto.CryptoFactory;
@@ -86,7 +87,7 @@ public class BinarySecurityTokenTest ext
             (BinarySecurity)actionResult.get(WSSecurityEngineResult.TAG_BINARY_SECURITY_TOKEN);
         assertNotNull(token);
         
-        BinarySecurity clone = new BinarySecurity(token.getElement());
+        BinarySecurity clone = new BinarySecurity(token.getElement(), new BSPEnforcer(true));
         assertTrue(clone.equals(token));
         assertTrue(clone.hashCode() == token.hashCode());
     }

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/WCFUsernameTokenTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/WCFUsernameTokenTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/WCFUsernameTokenTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/message/token/WCFUsernameTokenTest.java Wed Aug 22 16:25:23 2012
@@ -19,16 +19,23 @@
 
 package org.apache.ws.security.dom.message.token;
 
-import org.apache.ws.security.dom.WSSecurityEngine;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.security.auth.callback.CallbackHandler;
+
+import org.apache.ws.security.common.bsp.BSPRule;
+import org.apache.ws.security.common.ext.WSSecurityException;
+import org.apache.ws.security.common.util.XMLUtils;
 import org.apache.ws.security.dom.WSSConfig;
+import org.apache.ws.security.dom.WSSecurityEngine;
+import org.apache.ws.security.dom.WSSecurityEngineResult;
 import org.apache.ws.security.dom.common.SOAPUtil;
 import org.apache.ws.security.dom.common.UsernamePasswordCallbackHandler;
-import org.apache.ws.security.common.ext.WSSecurityException;
-import org.apache.ws.security.common.util.XMLUtils;
+import org.apache.ws.security.dom.handler.RequestData;
 import org.w3c.dom.Document;
 
-import javax.security.auth.callback.CallbackHandler;
-
 
 /**
  * A test-case for WSS-199 - "Add support for WCF non-standard Username Tokens"
@@ -57,15 +64,8 @@ public class WCFUsernameTokenTest extend
         + "<value xmlns=\"\">15</value>" + "</add>" 
         + "</SOAP-ENV:Body>\r\n       \r\n" + "</SOAP-ENV:Envelope>";
     
-    private WSSecurityEngine secEngine = new WSSecurityEngine();
     private CallbackHandler callbackHandler = new UsernamePasswordCallbackHandler();
     
-    public WCFUsernameTokenTest() {
-        WSSConfig config = WSSConfig.getNewInstance();
-        config.setWsiBSPCompliant(false);
-        secEngine.setWssConfig(config);
-    }
-
     /**
      * Test that adds a UserNameToken with a namespace qualified type. This should fail
      * as WSS4J rejects these tokens by default.
@@ -103,23 +103,46 @@ public class WCFUsernameTokenTest extend
                 XMLUtils.PrettyDocumentToString(doc);
             LOG.debug(outputString);
         }
-        WSSConfig wssConfig = secEngine.getWssConfig();
-        wssConfig.setAllowNamespaceQualifiedPasswordTypes(true);
-        secEngine.setWssConfig(wssConfig);
-        verify(doc);
+        
+        WSSConfig config = WSSConfig.getNewInstance();
+        config.setAllowNamespaceQualifiedPasswordTypes(true);
+        verify(doc, config, Collections.singletonList(BSPRule.R4201));
     }
     
     
     /**
      * Verifies the soap envelope
-     * 
-     * @param env soap envelope
-     * @throws java.lang.Exception Thrown when there is a problem in verification
      */
-    private void verify(Document doc) throws Exception {
-        LOG.info("Before verifying UsernameToken....");
-        secEngine.processSecurityHeader(doc, null, callbackHandler, null);
-        LOG.info("After verifying UsernameToken....");
+    private List<WSSecurityEngineResult> verify(Document doc) throws Exception {
+        return verify(doc, new ArrayList<BSPRule>(0));
+    }
+    
+    /**
+     * Verifies the soap envelope
+     */
+    private List<WSSecurityEngineResult> verify(
+        Document doc, List<BSPRule> ignoredRules
+    ) throws Exception {
+        WSSecurityEngine secEngine = new WSSecurityEngine();
+        RequestData requestData = new RequestData();
+        requestData.setIgnoredBSPRules(ignoredRules);
+        requestData.setCallbackHandler(callbackHandler);
+        return secEngine.processSecurityHeader(doc, "", requestData);
     }
+    
+    /**
+     * Verifies the soap envelope
+     */
+    private List<WSSecurityEngineResult> verify(
+        Document doc, WSSConfig wssConfig, List<BSPRule> ignoredRules
+    ) throws Exception {
+        WSSecurityEngine secEngine = new WSSecurityEngine();
+        RequestData requestData = new RequestData();
+        requestData.setWssConfig(wssConfig);
+        requestData.setIgnoredBSPRules(ignoredRules);
+        requestData.setCallbackHandler(callbackHandler);
+        return secEngine.processSecurityHeader(doc, "", requestData);
+    }
+    
 
 }

Modified: webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/misc/FaultCodeTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/misc/FaultCodeTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/misc/FaultCodeTest.java (original)
+++ webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/ws/security/dom/misc/FaultCodeTest.java Wed Aug 22 16:25:23 2012
@@ -21,6 +21,7 @@ package org.apache.ws.security.dom.misc;
 
 import org.apache.ws.security.dom.WSConstants;
 import org.apache.ws.security.dom.WSSecurityEngine;
+import org.apache.ws.security.dom.bsp.BSPEnforcer;
 import org.apache.ws.security.dom.common.SOAPUtil;
 import org.apache.ws.security.common.crypto.Crypto;
 import org.apache.ws.security.common.crypto.CryptoFactory;
@@ -169,7 +170,7 @@ public class FaultCodeTest extends org.j
         builder.build(doc, secHeader);
         
         try {
-            new UsernameToken(doc.getDocumentElement());
+            new UsernameToken(doc.getDocumentElement(), false, new BSPEnforcer());
             fail("Failure expected on an invalid security token");
         } catch (WSSecurityException ex) {
             assertTrue(ex.getErrorCode() == WSSecurityException.ErrorCode.INVALID_SECURITY_TOKEN);

Modified: webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/AsymmetricBindingIntegrationTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/AsymmetricBindingIntegrationTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/AsymmetricBindingIntegrationTest.java (original)
+++ webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/AsymmetricBindingIntegrationTest.java Wed Aug 22 16:25:23 2012
@@ -21,6 +21,7 @@ package org.apache.ws.security.policy.st
 import org.opensaml.common.SAMLVersion;
 import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.common.saml.builder.SAML2Constants;
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.crypto.CryptoType;
 import org.apache.ws.security.common.crypto.Merlin;
 import org.apache.ws.security.policy.stax.PolicyEnforcer;
@@ -967,8 +968,8 @@ public class AsymmetricBindingIntegratio
         inSecurityProperties.setCallbackHandler(new CallbackHandlerImpl());
         inSecurityProperties.loadSignatureVerificationKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
         inSecurityProperties.loadDecryptionKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5421);
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5420);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5421);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5420);
 
         PolicyEnforcer policyEnforcer = buildAndStartPolicyEngine(policyString);
         inSecurityProperties.addInputProcessor(new PolicyInputProcessor(policyEnforcer, inSecurityProperties));
@@ -1083,9 +1084,9 @@ public class AsymmetricBindingIntegratio
         inSecurityProperties.setCallbackHandler(new CallbackHandlerImpl());
         inSecurityProperties.loadSignatureVerificationKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
         inSecurityProperties.loadDecryptionKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5404);
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5423);
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5412);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5404);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5423);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5412);
 
         PolicyEnforcer policyEnforcer = buildAndStartPolicyEngine(policyString);
         inSecurityProperties.addInputProcessor(new PolicyInputProcessor(policyEnforcer, inSecurityProperties));
@@ -1200,7 +1201,7 @@ public class AsymmetricBindingIntegratio
         inSecurityProperties.setCallbackHandler(new CallbackHandlerImpl());
         inSecurityProperties.loadSignatureVerificationKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
         inSecurityProperties.loadDecryptionKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5420);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5420);
 
         PolicyEnforcer policyEnforcer = buildAndStartPolicyEngine(policyString);
         inSecurityProperties.addInputProcessor(new PolicyInputProcessor(policyEnforcer, inSecurityProperties));

Modified: webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/TransportBindingIntegrationTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/TransportBindingIntegrationTest.java?rev=1376125&r1=1376124&r2=1376125&view=diff
==============================================================================
--- webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/TransportBindingIntegrationTest.java (original)
+++ webservices/wss4j/trunk/ws-security-policy-stax/src/test/java/org/apache/ws/security/policy/stax/test/TransportBindingIntegrationTest.java Wed Aug 22 16:25:23 2012
@@ -18,6 +18,7 @@
  */
 package org.apache.ws.security.policy.stax.test;
 
+import org.apache.ws.security.common.bsp.BSPRule;
 import org.apache.ws.security.common.ext.WSSecurityException;
 import org.apache.ws.security.policy.stax.PolicyEnforcer;
 import org.apache.ws.security.policy.stax.PolicyInputProcessor;
@@ -919,7 +920,7 @@ public class TransportBindingIntegration
         inSecurityProperties.setCallbackHandler(new CallbackHandlerImpl());
         inSecurityProperties.loadSignatureVerificationKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
         inSecurityProperties.loadDecryptionKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5421);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5421);
 
         PolicyEnforcer policyEnforcer = buildAndStartPolicyEngine(policyString);
         inSecurityProperties.addInputProcessor(new PolicyInputProcessor(policyEnforcer, null));
@@ -1034,9 +1035,9 @@ public class TransportBindingIntegration
         inSecurityProperties.setCallbackHandler(new CallbackHandlerImpl());
         inSecurityProperties.loadSignatureVerificationKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
         inSecurityProperties.loadDecryptionKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5404);
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5423);
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5412);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5404);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5423);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5412);
 
         PolicyEnforcer policyEnforcer = buildAndStartPolicyEngine(policyString);
         inSecurityProperties.addInputProcessor(new PolicyInputProcessor(policyEnforcer, null));
@@ -1151,7 +1152,7 @@ public class TransportBindingIntegration
         inSecurityProperties.setCallbackHandler(new CallbackHandlerImpl());
         inSecurityProperties.loadSignatureVerificationKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
         inSecurityProperties.loadDecryptionKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
-        inSecurityProperties.addIgnoreBSPRule(WSSConstants.BSPRule.R5420);
+        inSecurityProperties.addIgnoreBSPRule(BSPRule.R5420);
 
         PolicyEnforcer policyEnforcer = buildAndStartPolicyEngine(policyString);
         inSecurityProperties.addInputProcessor(new PolicyInputProcessor(policyEnforcer, null));