Author: coheigea
Date: Wed Jun 24 11:10:44 2015
New Revision: 1687238

URL: http://svn.apache.org/r1687238
Log:
Some refactoring of previous commits

Modified:
    
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionAction.java
    
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java

Modified: 
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionAction.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionAction.java?rev=1687238&r1=1687237&r2=1687238&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionAction.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/action/EncryptionAction.java
 Wed Jun 24 11:10:44 2015
@@ -21,9 +21,9 @@ package org.apache.wss4j.dom.action;
 
 import java.security.cert.X509Certificate;
 
+import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
 
-import org.apache.wss4j.dom.WSConstants;
 import org.apache.wss4j.common.EncryptionActionToken;
 import org.apache.wss4j.common.SecurityActionToken;
 import org.apache.wss4j.common.crypto.Crypto;
@@ -94,10 +94,19 @@ public class EncryptionAction implements
             || !encryptionToken.isEncSymmetricEncryptionKey() && ephemeralKey 
== null) {
             CallbackHandler callbackHandler = 
                 handler.getPasswordCallbackHandler(reqData);
-            WSPasswordCallback passwordCallback = 
-                handler.getPasswordCB(encryptionToken.getUser(), 
WSConstants.ENCR, callbackHandler, reqData);
-            ephemeralKey = passwordCallback.getKey();
-            byte[] encryptedKey = passwordCallback.getEncryptedSecret();
+            // Get secret key for encryption from a CallbackHandler
+            WSPasswordCallback pwcb = 
+                new WSPasswordCallback(encryptionToken.getUser(), 
WSPasswordCallback.SECRET_KEY);
+            pwcb.setAlgorithm(wsEncrypt.getSymmetricEncAlgorithm());
+            try {
+                callbackHandler.handle(new Callback[] {pwcb});
+            } catch (Exception e) {
+                throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e,
+                        "empty", new Object[] {"WSHandler: password callback 
failed"});
+            }
+            
+            ephemeralKey = pwcb.getKey();
+            byte[] encryptedKey = pwcb.getEncryptedSecret();
             wsEncrypt.setEncryptedEphemeralKey(encryptedKey);
         }
         wsEncrypt.setEphemeralKey(ephemeralKey);

Modified: 
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java?rev=1687238&r1=1687237&r2=1687238&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/EncryptedKeyProcessor.java
 Wed Jun 24 11:10:44 2015
@@ -145,28 +145,30 @@ public class EncryptedKeyProcessor imple
         
         X509Certificate[] certs = null;
         STRParser.REFERENCE_TYPE referenceType = null;
-        if 
(SecurityTokenReference.SECURITY_TOKEN_REFERENCE.equals(keyInfoChildElement.getLocalName())
 
-            && 
WSConstants.WSSE_NS.equals(keyInfoChildElement.getNamespaceURI())) {
-            STRParserParameters parameters = new STRParserParameters();
-            parameters.setData(data);
-            parameters.setWsDocInfo(wsDocInfo);
-            parameters.setStrElement(keyInfoChildElement);
-            
-            STRParser strParser = new EncryptedKeySTRParser();
-            STRParserResult parserResult = 
strParser.parseSecurityTokenReference(parameters);
-
-            certs = parserResult.getCertificates();
-            referenceType = parserResult.getCertificatesReferenceType();
-        } else {
-            certs = getCertificatesFromX509Data(keyInfoChildElement, data);
-        }
-        
         boolean symmetricKeyWrap = 
isSymmetricKeyWrap(encryptedKeyTransportMethod);
-        if (!symmetricKeyWrap && (certs == null || certs.length < 1 || 
certs[0] == null)) {
-            throw new WSSecurityException(
+        if (!symmetricKeyWrap) {
+            if 
(SecurityTokenReference.SECURITY_TOKEN_REFERENCE.equals(keyInfoChildElement.getLocalName())
 
+                && 
WSConstants.WSSE_NS.equals(keyInfoChildElement.getNamespaceURI())) {
+                STRParserParameters parameters = new STRParserParameters();
+                parameters.setData(data);
+                parameters.setWsDocInfo(wsDocInfo);
+                parameters.setStrElement(keyInfoChildElement);
+                
+                STRParser strParser = new EncryptedKeySTRParser();
+                STRParserResult parserResult = 
strParser.parseSecurityTokenReference(parameters);
+
+                certs = parserResult.getCertificates();
+                referenceType = parserResult.getCertificatesReferenceType();
+            } else {
+                certs = getCertificatesFromX509Data(keyInfoChildElement, data);
+            }
+            
+            if (certs == null || certs.length < 1 || certs[0] == null) {
+                throw new WSSecurityException(
                                           
WSSecurityException.ErrorCode.FAILURE,
                                           "noCertsFound", 
                                           new Object[] {"decryption (KeyId)"});
+            }
         }
 
         // Check for compliance against the defined AlgorithmSuite
@@ -197,9 +199,31 @@ public class EncryptedKeyProcessor imple
         
         Cipher cipher = null;
         if (symmetricKeyWrap) {
+            // See if we have a KeyName
+            String keyName = "";
+            if (keyInfoChildElement != null) {
+                Element keyNmElem = 
+                    XMLUtils.getDirectChildElement(
+                        keyInfoChildElement, "KeyName", WSConstants.SIG_NS
+                    );
+                if (keyNmElem != null) {
+                    keyName = XMLUtils.getElementText(keyNmElem);
+                }
+            }
+            
             // Get secret key for decryption from a CallbackHandler
-            WSPasswordCallback pwcb = new WSPasswordCallback("", 
WSPasswordCallback.SECRET_KEY);
+            WSPasswordCallback pwcb = new WSPasswordCallback(keyName, 
WSPasswordCallback.SECRET_KEY);
             pwcb.setEncryptedSecret(encryptedEphemeralKey);
+            
+            // Get the (first) encryption algorithm
+            String uri = getFirstDataRefURI(refList);
+            if (uri != null) {
+                Element ee = 
+                    
EncryptionUtils.findEncryptedDataElement(refList.getOwnerDocument(), 
+                                                                    wsDocInfo, 
uri);
+                String algorithmURI = X509Util.getEncAlgo(ee);
+                pwcb.setAlgorithm(algorithmURI);
+            }
             try {
                 data.getCallbackHandler().handle(new Callback[] {pwcb});
             } catch (Exception e) {


Reply via email to