Author: ruchithf
Date: Fri Oct 26 01:42:05 2007
New Revision: 588561

URL: http://svn.apache.org/viewvc?rev=588561&view=rev
Log:
Applied patche in RAMPART-94
Thanks Nandana


Modified:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.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/builder/SymmetricBindingBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartSender.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
    webservices/rampart/trunk/java/modules/rampart-integration/pom.xml
    
webservices/rampart/trunk/java/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
    
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/builders/EncryptedPartsBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java
    
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
    
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java
 Fri Oct 26 01:42:05 2007
@@ -16,8 +16,10 @@
 
 package org.apache.rampart;
 
+import org.apache.rahas.EncryptedKeyToken;
 import org.apache.rahas.Token;
 import org.apache.rahas.TokenStorage;
+import org.apache.rahas.TrustException;
 import org.apache.ws.security.WSPasswordCallback;
 import org.w3c.dom.Element;
 
@@ -45,10 +47,11 @@
 
             if (callbacks[i] instanceof WSPasswordCallback) {
                 WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
+                String id = pc.getIdentifer();
+                
                 if((pc.getUsage() == WSPasswordCallback.SECURITY_CONTEXT_TOKEN 
|| 
                         pc.getUsage() == WSPasswordCallback.CUSTOM_TOKEN) &&
                         this.store != null) {
-                    String id = pc.getIdentifer();
                     Token tok;
                     try {
                         //Pick up the token from the token store
@@ -62,6 +65,25 @@
                         e.printStackTrace();
                         throw new IOException(e.getMessage());
                     }
+                } else if (pc.getUsage() == 
WSPasswordCallback.ENCRYPTED_KEY_TOKEN){
+                       try {
+                               String[] tokenIdentifiers = 
this.store.getTokenIdentifiers();
+                               Token tok;
+                               for (int j = 0 ; j < tokenIdentifiers.length ; 
j++) {
+                                       
+                                               tok = 
this.store.getToken(tokenIdentifiers[j]);
+                                               
+                                               if (tok instanceof 
EncryptedKeyToken &&
+                                                               
((EncryptedKeyToken)tok).getSHA1().equals(id)){                                 
                        
+                                                   pc.setKey(tok.getSecret());
+                                                   
pc.setCustomToken((Element)tok.getToken());
+                                               }
+                               }
+                               
+                       } catch (TrustException e) {
+                               e.printStackTrace();
+                               throw new IOException(e.getMessage());
+                       }
                 } else {
                     //Handle other types of callbacks with the usual handler
                     if(this.handler != null) {

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=588561&r1=588560&r2=588561&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 26 01:42:05 2007
@@ -60,6 +60,7 @@
 import org.apache.ws.security.message.WSSecSignatureConfirmation;
 import org.apache.ws.security.message.WSSecTimestamp;
 import org.apache.ws.security.message.WSSecUsernameToken;
+import org.apache.ws.security.message.token.SecurityTokenReference;
 import org.apache.ws.security.util.WSSecurityUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -317,40 +318,7 @@
                     endSuppTokMap.put(token, endSuppTok);
                     
                 } else if(token instanceof X509Token) {
-                    //Get the to be added
-                    if(token.isDerivedKeys()) {
-                        //We have to use an EncryptedKey
-                        try {
-                            WSSecEncryptedKey encrKey = this
-                                    .getEncryptedKeyBuilder(rmd, token);
-                            
-                            Element bstElem = 
encrKey.getBinarySecurityTokenElement();
-                            if(bstElem != null) {
-                               Element siblingElem = RampartUtil
-                                        .insertSiblingAfter(rmd, 
this.getInsertionLocation(),
-                                                bstElem);
-                               this.setInsertionLocation(siblingElem);
-                            }
-                            
-                            Element siblingElem = RampartUtil
-                                    .insertSiblingAfter(rmd, 
-                                            this.getInsertionLocation(),
-                                            encrKey.getEncryptedKeyElement());
-                            
-                            this.setInsertionLocation(siblingElem);
-                            
-                            Date now = new Date();
-                            endSuppTok =  
-                                new org.apache.rahas.Token(encrKey.getId(), 
-                                        
(OMElement)encrKey.getEncryptedKeyElement(),
-                                        now, new Date(now.getTime() + 300000));
-                            
-                            endSuppTokMap.put(token, endSuppTok);
-                            
-                        } catch (TrustException e) {
-                            throw new 
RampartException("errorCreatingRahasToken", e);
-                        }
-                    } else {
+
                         //We have to use a cert
                         //Prepare X509 signature
                         WSSecSignature sig = this.getSignatureBuider(rmd, 
token);
@@ -361,7 +329,7 @@
                             this.setInsertionLocation(bstElem);
                         }
                         endSuppTokMap.put(token, sig);
-                    }
+                        
                 } else if(token instanceof UsernameToken) {
                     WSSecUsernameToken utBuilder = addUsernameToken(rmd);
                     
@@ -485,6 +453,7 @@
     protected byte[] doSymmSignature(RampartMessageData rmd, Token 
policyToken, org.apache.rahas.Token tok, Vector sigParts) throws 
RampartException {
         
         Document doc = rmd.getDocument();
+        
         RampartPolicyData rpd = rmd.getPolicyData();
         
         if(policyToken.isDerivedKeys() || policyToken instanceof 
SecureConversationToken) {
@@ -498,6 +467,15 @@
                 if(ref != null) {
                     dkSign.setExternalKey(tok.getSecret(), (Element) 
                             doc.importNode((Element) ref, true));
+                } else if (!rmd.isInitiator() && policyToken.isDerivedKeys()) 
{ 
+                       
+                       // If the Encrypted key used to create the derived key 
is not
+                       // attached use key identifier as defined in WSS1.1 
section
+                       // 7.7 Encrypted Key reference
+                       SecurityTokenReference tokenRef = new 
SecurityTokenReference(doc);
+                       tokenRef.setKeyIdentifierEncKeySHA1(tok.getSecret());   
                
+                       dkSign.setExternalKey(tok.getSecret(), 
tokenRef.getElement());
+                
                 } else {
                     dkSign.setExternalKey(tok.getSecret(), tok.getId());
                 }
@@ -525,7 +503,8 @@
                 
                 //Do signature
                 dkSign.computeSignature();
-                
+
+
                 //Add elements to header
                 this.setInsertionLocation(RampartUtil
                         .insertSiblingAfter(rmd, 
@@ -537,6 +516,7 @@
                         this.getInsertionLocation(), 
                         dkSign.getSignatureElement()));
 
+
                 return dkSign.getSignatureValue();
                 
             } catch (ConversationException e) {
@@ -554,11 +534,18 @@
                 // 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);
+                       if (rmd.isInitiator()) {
+                           
sig.setCustomTokenValueType(WSConstants.ENC_KEY_VALUE_TYPE_NS
+                                                 + 
WSConstants.ENC_KEY_VALUE_TYPE);
+                           
sig.setKeyIdentifierType(WSConstants.CUSTOM_SYMM_SIGNING);
+                       } else {
+                               
sig.setKeyIdentifierType(WSConstants.ENCRYPTED_KEY_SHA1_IDENTIFIER);
+                       }
+                    
                 } else {
                                    
sig.setCustomTokenValueType(WSConstants.WSS_SAML_NS
                                           + WSConstants.SAML_ASSERTION_ID);
+                       
sig.setKeyIdentifierType(WSConstants.CUSTOM_SYMM_SIGNING);
                 }
                 
                 //Hack to handle reference id issues
@@ -571,7 +558,6 @@
                 sig.setSecretKey(tok.getSecret());
                 
sig.setSignatureAlgorithm(rpd.getAlgorithmSuite().getAsymmetricSignature());
                 
sig.setSignatureAlgorithm(rpd.getAlgorithmSuite().getSymmetricSignature());
-                sig.setKeyIdentifierType(WSConstants.CUSTOM_SYMM_SIGNING);
                 sig.prepare(rmd.getDocument(), 
RampartUtil.getSignatureCrypto(rpd
                         .getRampartConfig(), rmd.getCustomClassLoader()),
                         rmd.getSecHeader());
@@ -596,6 +582,7 @@
 
         }
     }
+    
     
     /**
      * Get hold of the token from the token storage

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
 Fri Oct 26 01:42:05 2007
@@ -33,20 +33,38 @@
 import org.apache.ws.secpolicy.model.SupportingToken;
 import org.apache.ws.secpolicy.model.Token;
 import org.apache.ws.secpolicy.model.X509Token;
+import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSEncryptionPart;
+import org.apache.ws.security.WSSecurityEngineResult;
 import org.apache.ws.security.WSSecurityException;
 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.WSSecDKEncrypt;
 import org.apache.ws.security.message.WSSecEncrypt;
 import org.apache.ws.security.message.WSSecEncryptedKey;
+import org.apache.ws.security.message.token.SecurityTokenReference;
+import org.apache.ws.security.util.Base64;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
+
+import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Vector;
 
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
 
 public class SymmetricBindingBuilder extends BindingBuilder {
 
@@ -117,7 +135,11 @@
                 tokenId = rmd.getSecConvTokenId();
                 log.debug("SCT Id : " + tokenId);
             } else if (encryptionToken instanceof X509Token) {
-                tokenId = setupEncryptedKey(rmd, encryptionToken);
+               if (rmd.isInitiator()) {
+                       tokenId = setupEncryptedKey(rmd, encryptionToken);
+               } else {
+                       tokenId = getEncryptedKey(rmd);
+               }
             } //TODO SAMLToken
             
             if(tokenId == null || tokenId.length() == 0) {
@@ -151,12 +173,10 @@
                     (rmd.isInitiator() && 
Constants.INCLUDE_ALWAYS_TO_RECIPIENT.equals(encryptionToken.getInclusion()))) {
                 encrTokenElement = RampartUtil.appendChildToSecHeader(rmd, 
tok.getToken());
                 attached = true;
+            } else if(encryptionToken instanceof X509Token && 
rmd.isInitiator()) {
+               encrTokenElement = RampartUtil.appendChildToSecHeader(rmd, 
tok.getToken());
             }
             
-            //In the X509 case we MUST add the EncryptedKey
-            if(encryptionToken instanceof X509Token) {
-               RampartUtil.appendChildToSecHeader(rmd, tok.getToken());
-            }
             Document doc = rmd.getDocument();
 
             if(encryptionToken.isDerivedKeys()) {
@@ -200,7 +220,11 @@
                 encr.setDocument(doc);
                 // SymmKey is already encrypted, no need to do it again
                 encr.setEncryptSymmKey(false);
-
+                // Use key identifier in the KeyInfo in server side
+                if (!rmd.isInitiator()) {
+                       encr.setUseKeyIdentifier(true);
+                       
encr.setKeyIdentifierType(WSConstants.ENCRYPTED_KEY_SHA1_IDENTIFIER);
+                }
                 
                 try {
                        
@@ -219,7 +243,12 @@
                t1 = System.currentTimeMillis();
             }
             
-            this.setInsertionLocation(encrTokenElement);
+            // Sometimes encryption token is not included in the the message
+            if (encrTokenElement != null) {
+                this.setInsertionLocation(encrTokenElement);
+            } else if (timestampElement != null) {
+               this.setInsertionLocation(timestampElement);
+            }
 
             HashMap sigSuppTokMap = null;
             HashMap endSuppTokMap = null;
@@ -255,14 +284,13 @@
             } else {
                 addSignatureConfirmation(rmd, sigParts);
             }
-            
+                       
             //Sign the message
             //We should use the same key in the case of EncryptBeforeSig
             signatureValues.add(this.doSymmSignature(rmd, encryptionToken, 
tok, sigParts));
 
             this.mainSigId = 
RampartUtil.addWsuIdToElement((OMElement)this.getInsertionLocation());
             
-            
             if(rmd.isInitiator()) {
                 //Do endorsed signatures
                 Vector endSigVals = this.doEndorsedSignatures(rmd, 
endSuppTokMap);
@@ -361,7 +389,11 @@
             } else if(sigToken instanceof IssuedToken) {
                 sigTokId = rmd.getIssuedSignatureTokenId();
             } else if(sigToken instanceof X509Token) {
-                sigTokId = setupEncryptedKey(rmd, sigToken);
+               if (rmd.isInitiator()) {
+                       sigTokId = setupEncryptedKey(rmd, sigToken);
+               } else {
+                       sigTokId = getEncryptedKey(rmd);
+               }
             }
         } else {
             throw new RampartException("signatureTokenMissing");
@@ -381,13 +413,8 @@
             sigTokElem = RampartUtil.appendChildToSecHeader(rmd, 
                                                             sigTok.getToken());
             this.setInsertionLocation(sigTokElem);
-        }
-        
-
-        
-        //In the X509 case we MUST add the EncryptedKey
-        if(sigToken instanceof X509Token) {
-            sigTokElem = RampartUtil.appendChildToSecHeader(rmd, 
sigTok.getToken());
+        } else if ( rmd.isInitiator() && sigToken instanceof X509Token) {
+               sigTokElem = RampartUtil.appendChildToSecHeader(rmd, 
sigTok.getToken());
             
             //Set the insertion location
             this.setInsertionLocation(sigTokElem);
@@ -494,6 +521,15 @@
                     dkEncr.setExternalKey(encrTok.getSecret(), (Element) doc
                             .importNode((Element) 
encrTok.getUnattachedReference(),
                                     true));
+                } else if (!rmd.isInitiator() && encrToken.isDerivedKeys()) { 
+                       
+                       // If the Encrypted key used to create the derived key 
is not
+                       // attached use key identifier as defined in WSS1.1 
section
+                       // 7.7 Encrypted Key reference
+                       SecurityTokenReference tokenRef = new 
SecurityTokenReference(doc);
+                       
tokenRef.setKeyIdentifierEncKeySHA1(encrTok.getSecret());               
+                       dkEncr.setExternalKey(encrTok.getSecret(), 
tokenRef.getElement());
+                       
                 } else {
                     dkEncr.setExternalKey(encrTok.getSecret(), 
encrTok.getId());
                 }
@@ -530,13 +566,20 @@
                     encrTokId = encrTokId.substring(1);
                 }
                 encr.setEncKeyId(encrTokId);
+                
                 encr.setEphemeralKey(encrTok.getSecret());
                 RampartUtil.setEncryptionUser(rmd, encr);
                 encr.setDocument(doc);
                 encr.setEncryptSymmKey(false);
+                // Use key identifier in the KeyInfo in server side
+                if (!rmd.isInitiator()) {
+                       encr.setUseKeyIdentifier(true);
+                       
encr.setKeyIdentifierType(WSConstants.ENCRYPTED_KEY_SHA1_IDENTIFIER);
+                }
                 encr.prepare(doc, RampartUtil.getEncryptionCrypto(rpd
                         .getRampartConfig(), rmd.getCustomClassLoader()));
                 
+                
                 //Encrypt, get hold of the ref list and add it
                 refList = encr.encryptForExternalRef(null, encrParts);
 
@@ -575,6 +618,7 @@
             WSSecEncryptedKey encrKey = this.getEncryptedKeyBuilder(rmd, 
                                                                 sigToken);
             String id = encrKey.getId();
+            byte[] secret = encrKey.getEphemeralKey();
             //Create a rahas token from this info and store it so we can use
             //it in the next steps
     
@@ -582,12 +626,18 @@
             Date expires = new Date();
             //TODO make this lifetime configurable ???
             expires.setTime(System.currentTimeMillis() + 300000);
-            org.apache.rahas.Token tempTok = new org.apache.rahas.Token(
+            org.apache.rahas.EncryptedKeyToken tempTok = new 
org.apache.rahas.EncryptedKeyToken(
                             id, 
                             (OMElement) encrKey.getEncryptedKeyElement(),
                             created, 
                             expires);
-            tempTok.setSecret(encrKey.getEphemeralKey());
+            
+            
+            tempTok.setSecret(secret);
+            
+            // Set the SHA1 value of the encrypted key, this is used when the 
encrypted
+            // key is referenced via a key identifier of type EncryptedKeySHA1
+            tempTok.setSHA1(getSHA1(secret));
             
             rmd.getTokenStorage().add(tempTok);
             
@@ -605,6 +655,65 @@
             throw new RampartException("errorInAddingTokenIntoStore");
         }
     }
+    
+    private String getSHA1(byte[] secret) throws RampartException{
+        
+       MessageDigest sha = null;
+        try {
+            sha = MessageDigest.getInstance("SHA-1");
+        } catch (NoSuchAlgorithmException e1) {
+            throw new RampartException("noSHA1availabe", e1);
+        }
+        sha.reset();
+        sha.update(secret);
+        byte[] data = sha.digest();
+        
+        return Base64.encode(data);
+    }
+    
+    private String getEncryptedKey(RampartMessageData rmd ) throws 
RampartException {
+       
+       Vector results = 
(Vector)rmd.getMsgContext().getProperty(WSHandlerConstants.RECV_RESULTS);
+       
+        for (int i = 0; i < results.size(); i++) {
+            WSHandlerResult rResult =
+                    (WSHandlerResult) results.get(i);
+
+            Vector wsSecEngineResults = rResult.getResults();
+            
+            for (int j = 0; j < wsSecEngineResults.size(); j++) {
+                WSSecurityEngineResult wser =
+                        (WSSecurityEngineResult) wsSecEngineResults.get(j);
+                Integer actInt = 
(Integer)wser.get(WSSecurityEngineResult.TAG_ACTION);
+                if (actInt.intValue() == WSConstants.ENCR) {
+                    
+                       if 
(wser.get(WSSecurityEngineResult.TAG_ENCRYPTED_KEY_ID) != null) {
+                               
+                               try {
+                                       
+                                       String encryptedKeyID = 
(String)wser.get(WSSecurityEngineResult.TAG_ENCRYPTED_KEY_ID);
+                                       
+                               Date created = new Date();
+                               Date expires = new Date();
+                               expires.setTime(System.currentTimeMillis() + 
300000);
+                               org.apache.rahas.Token tempTok = new 
org.apache.rahas.Token(encryptedKeyID,created,expires);
+                               
tempTok.setSecret((byte[])wser.getDecryptedKey());
+                               
+                               rmd.getTokenStorage().add(tempTok);
+                               
+                               return encryptedKeyID;
+                        
+                               } catch (TrustException e) {
+                                       throw new 
RampartException("errorInAddingTokenIntoStore");
+                               }
+                               
+                       }
+                }
+            }
+        }
+       return null;
+    }
+    
     
     /**
      * Setup the required tokens

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
 Fri Oct 26 01:42:05 2007
@@ -21,9 +21,11 @@
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.description.HandlerDescription;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.Handler;
+import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.rampart.RampartConstants;
@@ -31,6 +33,7 @@
 import org.apache.rampart.RampartException;
 import org.apache.ws.secpolicy.WSSPolicyException;
 import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.WSSecurityEngineResult;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.ws.security.handler.WSHandlerConstants;
 import org.apache.ws.security.handler.WSHandlerResult;

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartSender.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartSender.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartSender.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartSender.java
 Fri Oct 26 01:42:05 2007
@@ -57,8 +57,8 @@
         
         if (!msgContext.isEngaged(WSSHandlerConstants.SECURITY_MODULE_NAME)) {
           return InvocationResponse.CONTINUE;        
-        }
-        
+        }        
+
         MessageBuilder builder = new MessageBuilder();
         try {
             builder.build(msgContext);

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java
 Fri Oct 26 01:42:05 2007
@@ -228,7 +228,7 @@
             rpd.setEncryptBody(sep.isBody());
             while (it.hasNext()) {
                 Header header = (Header) it.next();
-                rpd.setEncryptedParts(header.getNamespace(), header.getName());
+                rpd.setEncryptedParts(header.getNamespace(), 
header.getName(),"Header");
             }
         }
     }

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
 Fri Oct 26 01:42:05 2007
@@ -277,6 +277,23 @@
                 "Element");
         encryptedParts.add(wep);
     }
+    
+    /**
+     * @param namespace
+     *            The namespace of the part.
+     * @param element
+     *            The part's element name.
+     * @param modifier 
+     *            The type of encryption 
+     *            Element,Content,Header
+     */
+    public void setEncryptedParts(String namespace, String element, 
+                                                      String modifier) {
+        WSEncryptionPart wep = new WSEncryptionPart(element, namespace,
+                modifier);
+        encryptedParts.add(wep);
+    }
+    
 
     /**
      * @return Returns the encryptBody.

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
 Fri Oct 26 01:42:05 2007
@@ -16,8 +16,10 @@
 
 package org.apache.rampart.util;
 
+import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
@@ -28,6 +30,8 @@
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
+import org.apache.axiom.soap.impl.dom.SOAPHeaderBlockImpl;
+import org.apache.axiom.soap.impl.dom.factory.DOMSOAPFactory;
 import org.apache.rampart.handler.WSSHandlerConstants;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.xml.security.utils.XMLUtils;
@@ -173,8 +177,44 @@
                 if(soapHeader != null) {
                     Iterator headerBlocs = soapHeader.getChildElements();
                     while (headerBlocs.hasNext()) {
-                        SOAPHeaderBlock element = (SOAPHeaderBlock) 
headerBlocs.next();
-                        if(element.isProcessed()) {
+                       
+                       OMElement element = (OMElement)headerBlocs.next();
+                       SOAPHeaderBlock header = null;
+                       
+                       if (element instanceof SOAPHeaderBlock) {
+                            header = (SOAPHeaderBlock) element;
+                            
+                        // If a header block is not an instance of 
SOAPHeaderBlock, it means that
+                        // it is a header we have added in rampart eg. 
EncryptedHeader and should
+                        // be converted to SOAPHeaderBlock for processing
+                       } else {
+                               header = 
soapHeader.addHeaderBlock(element.getLocalName(), element.getNamespace());
+                               Iterator attrIter = element.getAllAttributes();
+                               while (attrIter.hasNext()) {
+                                       OMAttribute attr = 
(OMAttribute)attrIter.next();
+                                       
header.addAttribute(attr.getLocalName(), attr.getAttributeValue(), 
attr.getNamespace());
+                               }
+                               Iterator nsIter  = 
element.getAllDeclaredNamespaces();
+                               while (nsIter.hasNext()) {
+                                       OMNamespace ns =  (OMNamespace) 
nsIter.next();
+                                       header.declareNamespace(ns);
+                               }
+                               Iterator children = element.getChildElements();
+                               while (children.hasNext()) {
+                                       OMNode child = (OMNode)children.next();
+                                       child.detach();
+                                       header.addChild(child);
+                               }
+                               
+                               element.detach();
+                               
+                               soapHeader.build();
+                               
+                               header.setProcessed();
+                               
+                       }
+                       
+                        if(header.isProcessed()) {
                             processedHeaderQNames.add(element.getQName());
                         }
                     }
@@ -198,6 +238,7 @@
                 }
                 
                 envelope.build();
+                
                 return envelope;
 
             } catch (FactoryConfigurationError e) {

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=588561&r1=588560&r2=588561&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 26 01:42:05 2007
@@ -51,6 +51,7 @@
 import org.apache.ws.security.WSPasswordCallback;
 import org.apache.ws.security.WSSecurityEngineResult;
 import org.apache.ws.security.WSSecurityException;
+import org.apache.ws.security.WSUsernameTokenPrincipal;
 import org.apache.ws.security.components.crypto.Crypto;
 import org.apache.ws.security.components.crypto.CryptoFactory;
 import org.apache.ws.security.conversation.ConversationConstants;
@@ -815,6 +816,13 @@
             Object resultsObj = 
rmd.getMsgContext().getProperty(WSHandlerConstants.RECV_RESULTS);
             if(resultsObj != null) {
                 
encrKeyBuilder.setUseThisCert(getReqSigCert((Vector)resultsObj));
+                 
+                //TODO This is a hack, this should not come under 
USE_REQ_SIG_CERT
+                if(encrKeyBuilder.isCertSet()) {
+                       
encrKeyBuilder.setUserInfo(getUsername((Vector)resultsObj));
+                }
+                       
+                
             } else {
                 throw new RampartException("noSecurityResults");
             }
@@ -900,6 +908,41 @@
         return null;
     }
     
+    /**
+     * Scan through <code>WSHandlerResult<code> vector for a Username token 
and return
+     * the username if a Username Token found 
+     * @param results
+     * @return
+     */
+    
+    public static String getUsername(Vector results) {
+        /*
+         * Scan the results for a matching actor. Use results only if the
+         * receiving Actor and the sending Actor match.
+         */
+         for (int i = 0; i < results.size(); i++) {
+             WSHandlerResult rResult =
+                     (WSHandlerResult) results.get(i);
+
+             Vector wsSecEngineResults = rResult.getResults();
+             /*
+             * Scan the results for a username token. Use the username
+             * of this token to set the alias for the encryption user
+             */
+             for (int j = 0; j < wsSecEngineResults.size(); j++) {
+                 WSSecurityEngineResult wser =
+                         (WSSecurityEngineResult) wsSecEngineResults.get(j);
+                 Integer actInt = 
(Integer)wser.get(WSSecurityEngineResult.TAG_ACTION);
+                 if (actInt.intValue() == WSConstants.UT) {
+                        WSUsernameTokenPrincipal principal = 
(WSUsernameTokenPrincipal)wser.get(WSSecurityEngineResult.TAG_PRINCIPAL);
+                     return principal.getName();
+                 }
+             }
+         }
+         
+         return null;
+    }  
+    
     public static String getRequestEncryptedKeyId(Vector results) {
         
         for (int i = 0; i < results.size(); i++) {
@@ -991,6 +1034,5 @@
        
        return retElem;
     }
-    
 
 }

Modified: webservices/rampart/trunk/java/modules/rampart-integration/pom.xml
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-integration/pom.xml?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-integration/pom.xml 
(original)
+++ webservices/rampart/trunk/java/modules/rampart-integration/pom.xml Fri Oct 
26 01:42:05 2007
@@ -246,6 +246,12 @@
                                       
tofile="target/temp-ramp/META-INF/services.xml"/>
                                 <jar 
jarfile="target/test-resources/rampart_service_repo/services/SecureService13.aar"
                                      basedir="target/temp-ramp"/>
+                               <!-- Service 14 -->
+                               <copy overwrite="yes"
+                                      
file="src/test/resources/rampart/services-14.xml"
+                                      
tofile="target/temp-ramp/META-INF/services.xml"/>
+                                <jar 
jarfile="target/test-resources/rampart_service_repo/services/SecureService14.aar"
+                                     basedir="target/temp-ramp"/>
                                 <!-- Service SC-1 -->
                                 <copy overwrite="yes"
                                       
file="src/test/resources/rampart/issuer.properties"
@@ -675,7 +681,12 @@
             <groupId>org.apache.rampart</groupId>
             <artifactId>rampart-core</artifactId>
             <version>${pom.version}</version>
-        </dependency>
+        </dependency>   
+       <!--dependency>
+                       <groupId>javax.jms</groupId>
+                       <artifactId>jms</artifactId>
+                       <version>1.1</version>
+        </dependency-->
     </dependencies>
 
     <reporting>

Modified: 
webservices/rampart/trunk/java/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
 Fri Oct 26 01:42:05 2007
@@ -74,7 +74,7 @@
                         "Unlimited Strength Jurisdiction Policy !!!");
             }
             
-            for (int i = 1; i <= 13; i++) { //<-The number of tests we have
+            for (int i = 1; i <= 14; i++) { //<-The number of tests we have
                 if(!basic256Supported && (i == 3 || i == 4 || i ==5)) {
                     //Skip the Basic256 tests
                     continue;

Modified: 
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/builders/EncryptedPartsBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/builders/EncryptedPartsBuilder.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/builders/EncryptedPartsBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/builders/EncryptedPartsBuilder.java
 Fri Oct 26 01:42:05 2007
@@ -66,6 +66,8 @@
             OMAttribute namespaceAttribute = element.getAttribute(NAMESPACE);
             header.setNamespace(namespaceAttribute.getAttributeValue());
             
+            parent.addHeader(header);
+            
         } else if (BODY.equals(name)) {
             parent.setBody(true);            
         }        

Modified: 
webservices/rampart/trunk/java/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java
 Fri Oct 26 01:42:05 2007
@@ -17,6 +17,7 @@
 package org.apache.rampart;
 
 import java.util.ArrayList;
+import java.util.Vector;
 
 import javax.xml.namespace.QName;
 
@@ -26,7 +27,7 @@
 import org.apache.ws.security.conversation.ConversationConstants;
 
 public class SymmetricBindingBuilderTest extends MessageBuilderTestBase {
-
+       
        public void testSymmBinding() {
                
         try {
@@ -56,34 +57,32 @@
         }
        }
        
-       public void testSymmBindingServerSide() {
-               
-        try {
-            MessageContext ctx = getMsgCtx();
-            
-            ctx.setServerSide(true);
-            String policyXml = 
"test-resources/policy/rampart-symm-binding-1.xml";
-            Policy policy = this.loadPolicy(policyXml);
-            
-            ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
-            
-            MessageBuilder builder = new MessageBuilder();
-            builder.build(ctx);
-            
-            ArrayList list = new ArrayList();
-            
-            list.add(new QName(WSConstants.WSU_NS, 
WSConstants.TIMESTAMP_TOKEN_LN));
-            list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
-            list.add(new QName(WSConstants.ENC_NS, WSConstants.REF_LIST_LN));
-            list.add(new QName(WSConstants.SIG_NS, WSConstants.SIG_LN));
-            
-            this.verifySecHeader(list.iterator(), ctx.getEnvelope());
-            
-        } catch(Exception e) {
-            e.printStackTrace();
-            fail(e.getMessage());
-        }
-       }
+//     public void testSymmBindingServerSide() {
+//             
+//        try {
+//            MessageContext ctx = getMsgCtx();
+//            
+//            ctx.setServerSide(true);
+//            String policyXml = 
"test-resources/policy/rampart-symm-binding-1.xml";
+//            Policy policy = this.loadPolicy(policyXml);
+//            
+//            ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
+//            
+//            MessageBuilder builder = new MessageBuilder();
+//            builder.build(ctx);
+//            
+//            ArrayList list = new ArrayList();
+//            
+//            list.add(new QName(WSConstants.WSU_NS, 
WSConstants.TIMESTAMP_TOKEN_LN));
+//            list.add(new QName(WSConstants.SIG_NS, WSConstants.SIG_LN));
+//            
+//            this.verifySecHeader(list.iterator(), ctx.getEnvelope());
+//            
+//        } catch(Exception e) {
+//            e.printStackTrace();
+//            fail(e.getMessage());
+//        }
+//     }
        
        public void testSymmBindingWithDK() {
                
@@ -165,8 +164,8 @@
             
             list.add(new QName(WSConstants.WSU_NS, 
WSConstants.TIMESTAMP_TOKEN_LN));
             list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
-            list.add(new QName(WSConstants.ENC_NS, WSConstants.REF_LIST_LN));
             list.add(new QName(WSConstants.SIG_NS, WSConstants.SIG_LN));
+            list.add(new QName(WSConstants.ENC_NS, WSConstants.REF_LIST_LN));
             
             this.verifySecHeader(list.iterator(), ctx.getEnvelope());
             
@@ -195,9 +194,10 @@
             list.add(new QName(WSConstants.WSU_NS, 
WSConstants.TIMESTAMP_TOKEN_LN));
             list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
             list.add(new QName(ConversationConstants.WSC_NS_05_02, 
ConversationConstants.DERIVED_KEY_TOKEN_LN));
-            list.add(new QName(WSConstants.ENC_NS, WSConstants.REF_LIST_LN));
-            list.add(new QName(ConversationConstants.WSC_NS_05_02, 
ConversationConstants.DERIVED_KEY_TOKEN_LN));
             list.add(new QName(WSConstants.SIG_NS, WSConstants.SIG_LN));
+            list.add(new QName(ConversationConstants.WSC_NS_05_02, 
ConversationConstants.DERIVED_KEY_TOKEN_LN));
+            list.add(new QName(WSConstants.ENC_NS, WSConstants.REF_LIST_LN));
+
             
             this.verifySecHeader(list.iterator(), ctx.getEnvelope());
             

Modified: 
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
 Fri Oct 26 01:42:05 2007
@@ -122,6 +122,13 @@
      */
     private String issuerAddress;
     
+    
+    public Token(String id, Date created, Date expires) {
+       this.id = id;
+       this.created = created;
+       this.expires = expires;
+    }
+    
     public Token(String id,
                  OMElement tokenElem,
                  Date created,

Modified: 
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java?rev=588561&r1=588560&r2=588561&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java
 Fri Oct 26 01:42:05 2007
@@ -121,9 +121,11 @@
             client.getServiceContext().setProperty(RAMPART_POLICY, 
issuerPolicy);
             client.getOptions().setSoapVersionURI(this.soapVersion); 
             client.engageModule("addressing");
+            client.engageModule("rampart");
 
             //Process the STS and service policy policy
             this.processPolicy(issuerPolicy, servicePolicy);
+            
             OMElement response = client.sendReceive(rstQn,
                                                     
createIssueRequest(requestType, appliesTo));
 


Reply via email to