Author: ruchithf
Date: Fri Oct  5 04:31:25 2007
New Revision: 582216

URL: http://svn.apache.org/viewvc?rev=582216&view=rev
Log:
Fixed RAMPART-91, RAMPART-92 and RAMPART-93 with Nandana's patches.
Thanks Nandana!


Modified:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java?rev=582216&r1=582215&r2=582216&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 Fri Oct  5 04:31:25 2007
@@ -210,7 +210,8 @@
             boolean encrDataFound = false;
             for (Iterator iter = list.iterator(); iter.hasNext();) {
                 WSSecurityEngineResult result = (WSSecurityEngineResult) 
iter.next();
-                if(result.get(WSSecurityEngineResult.TAG_DATA_REF_URIS) != 
null) {
+                ArrayList dataRefURIs = 
(ArrayList)result.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
+                if ( dataRefURIs != null && dataRefURIs.size() != 0) {
                     encrDataFound = true;
                 }
             }

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java?rev=582216&r1=582215&r2=582216&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
 Fri Oct  5 04:31:25 2007
@@ -191,23 +191,9 @@
         Document doc = rmd.getDocument();
         
         WSSecEncryptedKey encrKey = new WSSecEncryptedKey();
-        if(token.getInclusion().equals(Constants.INCLUDE_NEVER)) {
-            Wss10 wss = rpd.getWss11();
-            if(wss == null) {
-                wss = rpd.getWss10();
-            }
-            if(wss.isMustSupportRefKeyIdentifier()) {
-                encrKey.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER);
-            } else if(wss.isMustSupportRefIssuerSerial()) {
-                encrKey.setKeyIdentifierType(WSConstants.ISSUER_SERIAL);
-            } else if(wss instanceof Wss11 && 
((Wss11)wss).isMustSupportRefThumbprint()) {
-                
encrKey.setKeyIdentifierType(WSConstants.THUMBPRINT_IDENTIFIER);
-            }
-        } else {
-            encrKey.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE);
-        }
         
         try {
+               RampartUtil.setKeyIdentifierType(rpd, encrKey, token);
             RampartUtil.setEncryptionUser(rmd, encrKey);
             
encrKey.setKeySize(rpd.getAlgorithmSuite().getMaximumSymmetricKeyLength());
             
encrKey.setKeyEncAlgo(rpd.getAlgorithmSuite().getAsymmetricKeyWrap());
@@ -229,21 +215,8 @@
         sig.setWsConfig(rmd.getConfig());
         
         log.debug("Token inclusion: " + token.getInclusion());
-        if(token.getInclusion().equals(Constants.INCLUDE_NEVER)) {
-            Wss10 wss = rpd.getWss11();
-            if(wss == null) {
-                wss = rpd.getWss10();
-            }
-            if(wss.isMustSupportRefKeyIdentifier()) {
-                sig.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER);
-            } else  if(wss.isMustSupportRefIssuerSerial()) {
-                sig.setKeyIdentifierType(WSConstants.ISSUER_SERIAL);
-            } else if(wss instanceof Wss11 && 
((Wss11)wss).isMustSupportRefThumbprint()) {
-                sig.setKeyIdentifierType(WSConstants.THUMBPRINT_IDENTIFIER);
-            }
-        } else {
-            sig.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE);
-        }
+        
+        RampartUtil.setKeyIdentifierType(rpd, sig, token);
 
         //Get the user
         String user = rpd.getRampartConfig().getUser();
@@ -578,6 +551,16 @@
                 WSSecSignature sig = new WSSecSignature();
                 sig.setWsConfig(rmd.getConfig());
                 
+                // If a EncryptedKeyToken is used, set the correct value type 
to
+                // be used in the wsse:Reference in ds:KeyInfo
+                if(policyToken instanceof X509Token) {
+                    
sig.setCustomTokenValueType(WSConstants.ENC_KEY_VALUE_TYPE_NS
+                                          + WSConstants.ENC_KEY_VALUE_TYPE);
+                } else {
+                                   
sig.setCustomTokenValueType(WSConstants.WSS_SAML_NS
+                                          + WSConstants.SAML_ASSERTION_ID);
+                }
+                
                 //Hack to handle reference id issues
                 //TODO Need a better fix
                 String sigTokId = tok.getId();
@@ -585,8 +568,6 @@
                     sigTokId = sigTokId.substring(1);
                 }
                 sig.setCustomTokenId(sigTokId);
-                sig.setCustomTokenValueType(WSConstants.WSS_SAML_NS +
-                        WSConstants.SAML_ASSERTION_ID);
                 sig.setSecretKey(tok.getSecret());
                 
sig.setSignatureAlgorithm(rpd.getAlgorithmSuite().getAsymmetricSignature());
                 
sig.setSignatureAlgorithm(rpd.getAlgorithmSuite().getSymmetricSignature());

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java?rev=582216&r1=582215&r2=582216&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
 Fri Oct  5 04:31:25 2007
@@ -43,6 +43,8 @@
 import org.apache.ws.secpolicy.Constants;
 import org.apache.ws.secpolicy.model.IssuedToken;
 import org.apache.ws.secpolicy.model.SecureConversationToken;
+import org.apache.ws.secpolicy.model.Wss10;
+import org.apache.ws.secpolicy.model.Wss11;
 import org.apache.ws.secpolicy.model.X509Token;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSEncryptionPart;
@@ -55,6 +57,7 @@
 import org.apache.ws.security.conversation.ConversationException;
 import org.apache.ws.security.handler.WSHandlerConstants;
 import org.apache.ws.security.handler.WSHandlerResult;
+import org.apache.ws.security.message.WSSecBase;
 import org.apache.ws.security.message.WSSecEncryptedKey;
 import org.apache.ws.security.util.Loader;
 import org.jaxen.JaxenException;
@@ -818,6 +821,55 @@
         } else {
             encrKeyBuilder.setUserInfo(encrUser);
         }
+    }
+    
+    /**
+     * Sets the keyIdentifierType of <code>WSSecSignature</code> or 
<code>WSSecEncryptedKey</code> 
+     * according to the given <code>Token</code> and 
<code>RampartPolicyData</code>
+     * First check the requirements specified under Token Assertion and if not 
found check 
+     * the WSS11 and WSS10 assertions
+     */
+    
+    public static void setKeyIdentifierType(RampartPolicyData rpd, WSSecBase 
secBase,org.apache.ws.secpolicy.model.Token token) {
+               
+       if (token.getInclusion().equals(Constants.INCLUDE_NEVER)) {
+                       
+               boolean tokenTypeSet = false;
+               
+               if(token instanceof X509Token) {
+                       X509Token x509Token = (X509Token)token;
+                       
+                       if(x509Token.isRequireIssuerSerialReference()) {
+                               
secBase.setKeyIdentifierType(WSConstants.ISSUER_SERIAL);
+                               tokenTypeSet = true;
+                       } else if (x509Token.isRequireKeyIdentifierReference()) 
{
+                               
secBase.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER);
+                               tokenTypeSet = true;
+                       } else if (x509Token.isRequireThumbprintReference()) {
+                               
secBase.setKeyIdentifierType(WSConstants.THUMBPRINT_IDENTIFIER);
+                               tokenTypeSet = true;
+                       }
+               } 
+               
+               if (!tokenTypeSet) {
+                       Wss10 wss = rpd.getWss11();
+                               if (wss == null) {
+                                       wss = rpd.getWss10();
+                               }
+                               
+                               if (wss.isMustSupportRefKeyIdentifier()) {
+                                       
secBase.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER);
+                               } else if (wss.isMustSupportRefIssuerSerial()) {
+                                       
secBase.setKeyIdentifierType(WSConstants.ISSUER_SERIAL);
+                               } else if (wss instanceof Wss11
+                                               && ((Wss11) 
wss).isMustSupportRefThumbprint()) {
+                                       
secBase.setKeyIdentifierType(WSConstants.THUMBPRINT_IDENTIFIER);
+                               }
+               }
+               
+               } else {
+                       
secBase.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE);
+               }
     }
     
     private static X509Certificate getReqSigCert(Vector results) {


Reply via email to