dims 2005/03/17 02:54:31
Modified: wss4j/src/org/apache/ws/axis/security/conversation
ConversationClientHandler.java
ConversationServerHandler.java
wss4j/src/org/apache/ws/security/conversation
ConversationConstants.java ConversationEngine.java
wss4j/test/secconv/components TestDkEncrypt.java
TestDkSign.java
Log:
Updates from Ruchith Fernando <[EMAIL PROTECTED]>
These fixed the problems (xml sec init. stuff) with the two unit test cases.
* Derived Key Encrypt/Decrypt
* Derived Key Sign/Verify
And there are updates for the two Secure Conversation handlers which
I'm working on to get the existing sample working, so that the guys
working on the WS-RM/SC/T interop can use it as guide.
Revision Changes Path
1.12 +14 -0
ws-fx/wss4j/src/org/apache/ws/axis/security/conversation/ConversationClientHandler.java
Index: ConversationClientHandler.java
===================================================================
RCS file:
/home/cvs/ws-fx/wss4j/src/org/apache/ws/axis/security/conversation/ConversationClientHandler.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ConversationClientHandler.java 16 Oct 2004 07:40:08 -0000 1.11
+++ ConversationClientHandler.java 17 Mar 2005 10:54:31 -0000 1.12
@@ -65,10 +65,12 @@
import org.apache.ws.security.handler.WSHandlerConstants;
import org.apache.ws.security.message.token.SecurityTokenReference;
//import org.apache.ws.security.trust.TrustCommunicator;
+import org.apache.ws.security.transform.STRTransform;
import org.apache.ws.security.trust.TrustConstants;
import org.apache.ws.security.trust.message.token.TokenType;
import org.apache.ws.security.util.StringUtil;
import org.apache.ws.security.util.WSSecurityUtil;
+import org.apache.xml.security.transforms.Transform;
import org.apache.xml.security.utils.XMLUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -126,6 +128,18 @@
int[] actionsInt;
static {
org.apache.xml.security.Init.init();
+ String Id = "BC";
+ if (java.security.Security.getProvider(Id) == null) {
+ log.debug("The provider " + Id
+ + " had to be added to the java.security.Security");
+ java.security.Security.addProvider(new
org.bouncycastle.jce.provider.BouncyCastleProvider());
+ }
+ Transform.init();
+ try {
+ Transform.register(STRTransform.implementedTransformURI,
+ "org.apache.ws.security.transform.STRTransform");
+ } catch (Exception ex) {
+ }
}
public ConversationClientHandler() throws AxisFault {
1.12 +14 -0
ws-fx/wss4j/src/org/apache/ws/axis/security/conversation/ConversationServerHandler.java
Index: ConversationServerHandler.java
===================================================================
RCS file:
/home/cvs/ws-fx/wss4j/src/org/apache/ws/axis/security/conversation/ConversationServerHandler.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ConversationServerHandler.java 9 Mar 2005 22:33:45 -0000 1.11
+++ ConversationServerHandler.java 17 Mar 2005 10:54:31 -0000 1.12
@@ -34,8 +34,10 @@
import org.apache.ws.security.handler.WSHandlerConstants;
import org.apache.ws.security.message.token.Reference;
import org.apache.ws.security.message.token.SecurityTokenReference;
+import org.apache.ws.security.transform.STRTransform;
import org.apache.ws.security.util.StringUtil;
import org.apache.ws.security.util.WSSecurityUtil;
+import org.apache.xml.security.transforms.Transform;
import org.apache.xml.security.utils.XMLUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -85,6 +87,18 @@
static{
org.apache.xml.security.Init.init();
+ String Id = "BC";
+ if (java.security.Security.getProvider(Id) == null) {
+ log.debug("The provider " + Id
+ + " had to be added to the java.security.Security");
+ java.security.Security.addProvider(new
org.bouncycastle.jce.provider.BouncyCastleProvider());
+ }
+ Transform.init();
+ try {
+ Transform.register(STRTransform.implementedTransformURI,
+ "org.apache.ws.security.transform.STRTransform");
+ } catch (Exception ex) {
+ }
}
1.5 +4 -0
ws-fx/wss4j/src/org/apache/ws/security/conversation/ConversationConstants.java
Index: ConversationConstants.java
===================================================================
RCS file:
/home/cvs/ws-fx/wss4j/src/org/apache/ws/security/conversation/ConversationConstants.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ConversationConstants.java 16 Oct 2004 06:06:53 -0000 1.4
+++ ConversationConstants.java 17 Mar 2005 10:54:31 -0000 1.5
@@ -26,6 +26,10 @@
*/
public final static String WSC_NS =
"http://schemas.xmlsoap.org/ws/2004/04/sc";
+
+
+ public final static String VALUE_TYPE_DERIVED_KEY =
"http://schemas.xmlsoap.org/ws/2004/04/security/sc/dk";
+
/**
* Field WSC_PREFIX
1.9 +11 -11
ws-fx/wss4j/src/org/apache/ws/security/conversation/ConversationEngine.java
Index: ConversationEngine.java
===================================================================
RCS file:
/home/cvs/ws-fx/wss4j/src/org/apache/ws/security/conversation/ConversationEngine.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ConversationEngine.java 13 Nov 2004 22:44:18 -0000 1.8
+++ ConversationEngine.java 17 Mar 2005 10:54:31 -0000 1.9
@@ -68,6 +68,8 @@
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
+import com.sun.rsasign.t;
+
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
@@ -340,6 +342,7 @@
try {
if (verifyTrust) {
TrustEngine trstEngine = new TrustEngine(this.trustPropFile);
+
// TODO :: Verify trust......
System.out.println("...........Verifying trust.........");
@@ -399,7 +402,7 @@
throw new ConversationException("noXMLSig");
} catch (XMLSecurityException e2) {
throw new ConversationException("noXMLSig");
- }
+ }
String sigMethodURI = sig.getSignedInfo().getSignatureMethodURI();
//verifying the sinature
if (sigMethodURI.equals(XMLSignature.ALGO_ID_MAC_HMAC_SHA1)) {
@@ -542,7 +545,7 @@
WSSecurityEngine eng = new WSSecurityEngine();
- boolean content = this.isContent(encBodyData);
+ boolean content = this.isContent(encBodyData);//Whether content
encryption or element encryption
if (content) {
encBodyData = (Element) encBodyData.getParentNode();
@@ -579,7 +582,9 @@
String valueType = ref.getValueType();
// System.out.println("ref.getURI()" + ref.getURI());
- if
(valueType.equals("http://schemas.xmlsoap.org/ws/2004/04/security/sc/dk")) {
+ //If the reference type is a derived key token
+ if
(valueType.equals(ConversationConstants.VALUE_TYPE_DERIVED_KEY)) {
+ //Get hold of the DerivedKeyToken 'Element'
Element ele =
WSSecurityUtil.getElementByWsuId(
WSSConfig.getDefaultWSConfig(),
@@ -591,9 +596,9 @@
String uuid = null;
DerivedKeyToken dkToken = null;
try {
- dkToken = new DerivedKeyToken(ele);
+ dkToken = new DerivedKeyToken(ele); //Cover the
'Element' into 'DerivedKeyToken' object
if (dkToken.getSecuityTokenReference() == null) {
- //if dkToken doesn't have a STR
+ //if dkToken doesn't have a STR find a
SecurityContextToken in the SOAP Envelope
SecurityContextToken secContextTk =
ConversationUtil.getSCT(dkToken);
uuid = secContextTk.getIdentifier();
@@ -655,15 +660,13 @@
}
}else{
- throw new ConversationException("Don't know how
to process here");
+ throw new ConversationException("Cannot handle
this type of security token reference: " +
dkToken.getSecuityTokenReference().getReference().getValueType());
}
} //////end :if dkToken has a STR
//TODO :: Ask ruchith to throw correct exception
} catch (WSSecurityException e2) {
- // TODO Auto-generated catch block
e2.printStackTrace();
} catch (ConversationException e2) {
- // TODO Auto-generated catch block
e2.printStackTrace();
}
@@ -1014,9 +1017,6 @@
throw new ConversationException("Cannot find
passwordcallback");
}
-
-
-
}
/**
*
1.4 +29 -13 ws-fx/wss4j/test/secconv/components/TestDkEncrypt.java
Index: TestDkEncrypt.java
===================================================================
RCS file: /home/cvs/ws-fx/wss4j/test/secconv/components/TestDkEncrypt.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestDkEncrypt.java 16 Oct 2004 06:05:00 -0000 1.3
+++ TestDkEncrypt.java 17 Mar 2005 10:54:31 -0000 1.4
@@ -17,15 +17,11 @@
package secconv.components;
import java.io.ByteArrayInputStream;
-import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Vector;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
import javax.xml.parsers.DocumentBuilderFactory;
import junit.framework.Test;
@@ -36,26 +32,25 @@
import org.apache.axis.MessageContext;
import org.apache.axis.client.AxisClient;
import org.apache.axis.configuration.NullProvider;
-//import org.apache.axis.encoding.Callback;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.utils.XMLUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ws.axis.security.conversation.ConvHandlerConstants;
import org.apache.ws.axis.security.util.AxisUtil;
-import org.apache.ws.security.WSPasswordCallback;
import org.apache.ws.security.WSSConfig;
-import org.apache.ws.security.conversation.ConvEngineResult;
import org.apache.ws.security.conversation.ConversationEngine;
import org.apache.ws.security.conversation.ConversationManager;
import org.apache.ws.security.conversation.ConversationUtil;
import org.apache.ws.security.conversation.DerivedKeyCallbackHandler;
-import org.apache.ws.security.conversation.DerivedKeyTokenAdder;
import org.apache.ws.security.conversation.message.info.DerivedKeyInfo;
import org.apache.ws.security.conversation.message.info.SecurityContextInfo;
import
org.apache.ws.security.conversation.message.token.SecurityContextToken;
import org.apache.ws.security.message.token.SecurityTokenReference;
+import org.apache.ws.security.transform.STRTransform;
import org.apache.ws.security.util.WSSecurityUtil;
+import org.apache.xml.security.transforms.Transform;
+import org.apache.xml.security.utils.EncryptionConstants;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -86,7 +81,19 @@
HashMap config;
static{
- org.apache.xml.security.Init.init();
+ org.apache.xml.security.Init.init();
+ String Id = "BC";
+ if (java.security.Security.getProvider(Id) == null) {
+ log.debug("The provider " + Id
+ + " had to be added to the java.security.Security");
+ java.security.Security.addProvider(new
org.bouncycastle.jce.provider.BouncyCastleProvider());
+ }
+ Transform.init();
+ try {
+ Transform.register(STRTransform.implementedTransformURI,
+ "org.apache.ws.security.transform.STRTransform");
+ } catch (Exception ex) {
+ }
}
//sharedSecret = "SriLankaSriLankaSriLanka".getBytes();
@@ -184,6 +191,7 @@
*/
public void testPerformDkEncrypt() throws Exception {
+
SOAPEnvelope unsignedEnvelope = message.getSOAPEnvelope();
SOAPEnvelope envelope = null;
@@ -217,7 +225,8 @@
SecurityTokenReference secTokRef =
dkInfo.getSecTokRef2DkToken();
//manager.performDK_ENCR(ConversationUtil.generateIdentifier(uuid,
dkInfo.getId()), "", true, doc, secTokRef, dkcbHandler);
- manager.performDK_ENCR(ConversationUtil.generateIdentifier(uuid,
dkInfo.getId()), "", true, doc, secTokRef, dkcbHandler, null,
"http://www.w3.org/2001/04/xmlenc#tripledes-cbc");
+
+ manager.performDK_ENCR(ConversationUtil.generateIdentifier(uuid,
dkInfo.getId()), "", true, doc, secTokRef, dkcbHandler, null,
EncryptionConstants.ALGO_ID_BLOCKCIPHER_TRIPLEDES);
manager.addDkToken(doc, dkInfo);
@@ -233,7 +242,14 @@
XMLUtils.PrettyElementToWriter(
signedMsg.getSOAPEnvelope().getAsDOM(),
new PrintWriter(System.out));
- verifyDkSign(doc);
+ dkDecrypt(doc);
+
+ System.out.println("----------------Dercypted
Messsage----------------");
+ signedMsg = (Message) AxisUtil.toSOAPMessage(doc);
+
+ XMLUtils.PrettyElementToWriter(
+ signedMsg.getSOAPEnvelope().getAsDOM(),
+ new PrintWriter(System.out));
}
/**
@@ -243,12 +259,12 @@
* @param doc
* @throws Exception Thrown when there is a problem in verification
*/
- private void verifyDkSign(Document doc)
+ private void dkDecrypt(Document doc)
throws Exception {
log.info("Before verifying the derived key signature");
ConversationEngine engine = new ConversationEngine(config);
Vector results = engine.processSecConvHeader(doc, "",
dkcbHandler,null);
-
+
}
}
1.5 +15 -9 ws-fx/wss4j/test/secconv/components/TestDkSign.java
Index: TestDkSign.java
===================================================================
RCS file: /home/cvs/ws-fx/wss4j/test/secconv/components/TestDkSign.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TestDkSign.java 16 Oct 2004 06:05:00 -0000 1.4
+++ TestDkSign.java 17 Mar 2005 10:54:31 -0000 1.5
@@ -17,15 +17,11 @@
package secconv.components;
import java.io.ByteArrayInputStream;
-import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Vector;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
import javax.xml.parsers.DocumentBuilderFactory;
import junit.framework.Test;
@@ -42,18 +38,16 @@
import org.apache.commons.logging.LogFactory;
import org.apache.ws.axis.security.conversation.ConvHandlerConstants;
import org.apache.ws.axis.security.util.AxisUtil;
-import org.apache.ws.security.WSPasswordCallback;
import org.apache.ws.security.WSSConfig;
-import org.apache.ws.security.conversation.ConvEngineResult;
import org.apache.ws.security.conversation.ConversationEngine;
import org.apache.ws.security.conversation.ConversationManager;
-import org.apache.ws.security.conversation.ConversationUtil;
import org.apache.ws.security.conversation.DerivedKeyCallbackHandler;
-import org.apache.ws.security.conversation.DerivedKeyTokenAdder;
import org.apache.ws.security.conversation.message.info.DerivedKeyInfo;
import org.apache.ws.security.conversation.message.info.SecurityContextInfo;
import
org.apache.ws.security.conversation.message.token.SecurityContextToken;
+import org.apache.ws.security.transform.STRTransform;
import org.apache.ws.security.util.WSSecurityUtil;
+import org.apache.xml.security.transforms.Transform;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -84,7 +78,19 @@
HashMap config;
static{
- org.apache.xml.security.Init.init();
+ org.apache.xml.security.Init.init();
+ String Id = "BC";
+ if (java.security.Security.getProvider(Id) == null) {
+ log.debug("The provider " + Id
+ + " had to be added to the java.security.Security");
+ java.security.Security.addProvider(new
org.bouncycastle.jce.provider.BouncyCastleProvider());
+ }
+ Transform.init();
+ try {
+ Transform.register(STRTransform.implementedTransformURI,
+ "org.apache.ws.security.transform.STRTransform");
+ } catch (Exception ex) {
+ }
}
//sharedSecret = "SriLankaSriLankaSriLanka".getBytes();