Author: atsushi
Date: 2006-12-05 11:30:07 -0500 (Tue, 05 Dec 2006)
New Revision: 69051

Modified:
   trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
   
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
   trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog
   
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
   trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
   trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs
   
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
   
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
Log:
2006-12-05  Atsushi Emomoto  <[EMAIL PROTECTED]>

        * WSSecurityTokenSerializer.cs :
          Added EncryptedKeyIdentifier clause writer.
          Fixed thumbprint writer. WS-Security X509 Certificate Token Profile
          does allows direct cetificate info only with IssuerSerial.

        * Constants.cs : added WS-Security X509 thumbprint identifier
          value type.

        * MessageSecurityUtility.cs : u:Timestamp will be encrypted/signed,
          thus move it in front of encryption/signing.

        * WSSecurityTokenSerializerTest.cs : added test for
          X509ThumbprintKeyIdentifierClause writer. Removed some NotWorking.



Modified: trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
===================================================================
--- trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog 
2006-12-05 16:27:05 UTC (rev 69050)
+++ trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog 
2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,8 @@
+2006-12-05  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * Constants.cs : added WS-Security X509 thumbprint identifier
+         value type.
+
 2006-12-04  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * EnvelopeVersion.cs : added Soap12UltimateReceiver to be used in

Modified: trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs
===================================================================
--- trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs      
2006-12-05 16:27:05 UTC (rev 69050)
+++ trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs      
2006-12-05 16:30:07 UTC (rev 69051)
@@ -39,6 +39,8 @@
 
                public const string WSSX509Token = 
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3";;
 
+               public const string WssX509ThumbptintValueType = 
"http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1";;
+
                public const string XmlDsig = 
"http://www.w3.org/2000/09/xmldsig#";;
 
                public const string WSSSamlToken = 
"http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1";;

Modified: 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
===================================================================
--- 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog    
    2006-12-05 16:27:05 UTC (rev 69050)
+++ 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog    
    2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,8 @@
+2006-12-05  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * MessageSecurityUtility.cs : u:Timestamp will be encrypted/signed,
+         thus move it in front of encryption/signing.
+
 2006-12-04  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * TransactionFlowBindingElement.cs : OnOpen()/OnClose() should not

Modified: 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
===================================================================
--- 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
        2006-12-05 16:27:05 UTC (rev 69050)
+++ 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
        2006-12-05 16:30:07 UTC (rev 69051)
@@ -120,7 +120,7 @@
                                encToken.ResolveKeyIdentifierClause (encClause);
                        AsymmetricSecurityKey signKey = (AsymmetricSecurityKey) 
                                signToken.ResolveKeyIdentifierClause 
(signClause);
-                       string messageId = "uuid:" + Guid.NewGuid ();
+                       string messageId = "urn:uuid:" + Guid.NewGuid ();
                        int identForMessageId = 1;
 
                        msg.Headers.Add (MessageHeader.CreateHeader 
("MessageID", msg.Version.Addressing.Namespace, messageId));
@@ -148,6 +148,20 @@
 
                        SecurityAlgorithmSuite suite = 
element.DefaultAlgorithmSuite;
 
+                       // wss:Security
+                       WSSecurityMessageHeader header =
+                               new WSSecurityMessageHeader (serializer);
+                       // wss:Security/wsu:Timestamp
+                       if (element.IncludeTimestamp) {
+                               WsuTimestamp timestamp = new WsuTimestamp ();
+                               timestamp.Id = messageId + "-" + 
identForMessageId++;
+                               timestamp.Created = DateTime.Now;
+                               // FIXME: on service side, use 
element.LocalServiceSettings.TimestampValidityDuration
+                               timestamp.Expires = timestamp.Created.Add 
(element.LocalClientSettings.TimestampValidityDuration);
+                               header.Contents.Add (timestamp);
+                       }
+                       msg.Headers.Add (header);
+
                        // FIXME: it needs to choose message parts by 
                        // ChannelProtectionRequirements.
                        XmlElement body = doc.SelectSingleNode 
("/s:Envelope/s:Body/*", nsmgr) as XmlElement;
@@ -224,21 +238,9 @@
 
                        Message ret = Message.CreateMessage (msg.Version, 
msg.Headers.Action, new XmlNodeReader (doc.SelectSingleNode 
("/s:Envelope/s:Body/*", nsmgr) as XmlElement));
 
-                       WSSecurityMessageHeader header =
-                               new WSSecurityMessageHeader (serializer);
                        ret.Headers.Clear ();
                        ret.Headers.CopyHeadersFrom (msg);
 
-                       // wsu:Timestamp
-                       if (element.IncludeTimestamp) {
-                               WsuTimestamp timestamp = new WsuTimestamp ();
-                               timestamp.Id = messageId + "-" + 
identForMessageId++;
-                               timestamp.Created = DateTime.Now;
-                               // FIXME: on service side, use 
element.LocalServiceSettings.TimestampValidityDuration
-                               timestamp.Expires = timestamp.Created.Add 
(element.LocalClientSettings.TimestampValidityDuration);
-                               header.Contents.Add (timestamp);
-                       }
-
                        if (sig != null && msgIncludesToken)
                                header.Contents.Add (signToken);
                        if (signToken != encToken && msgIncludesToken)
@@ -252,8 +254,6 @@
                        else if (sig != null)
                                header.Contents.Add (sig);
 
-                       ret.Headers.Add (header);
-
                        return ret;
                }
 
@@ -305,6 +305,11 @@
                        edata.Id = GenerateId (doc);
                        edata.Type = EncryptedXml.XmlEncElementUrl;
                        edata.EncryptionMethod = new EncryptionMethod 
(suite.DefaultEncryptionAlgorithm);
+                       // FIXME: here wsse:DigestMethod should be embedded 
+                       // inside EncryptionMethod. Since it is not possible 
+                       // with S.S.C.Xml.EncryptionMethod, we will have to
+                       // build our own XML encryption classes.
+
                        edata.KeyInfo.AddClause (new KeyInfoEncryptedKey 
(ekey));
                        edata.KeyInfo = new KeyInfo ();
                        SecurityTokenReferenceKeyInfo encKeyInfo = new 
SecurityTokenReferenceKeyInfo (encClause, serializer, doc);

Modified: 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog
===================================================================
--- 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog    
    2006-12-05 16:27:05 UTC (rev 69050)
+++ 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog    
    2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,10 @@
+2006-12-05  Atsushi Emomoto  <[EMAIL PROTECTED]>
+
+       * WSSecurityTokenSerializer.cs :
+         Added EncryptedKeyIdentifier clause writer.
+         Fixed thumbprint writer. WS-Security X509 Certificate Token Profile
+         does allows direct cetificate info only with IssuerSerial.
+
 2006-10-12  Atsushi Emomoto  <[EMAIL PROTECTED]>
 
        * SecurityAlgorithmSuite.cs : added some overrides in impl. class

Modified: 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
===================================================================
--- 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
     2006-12-05 16:27:05 UTC (rev 69050)
+++ 
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
     2006-12-05 16:30:07 UTC (rev 69051)
@@ -30,6 +30,7 @@
 using System.IdentityModel.Selectors;
 using System.IdentityModel.Tokens;
 using System.Security.Cryptography.X509Certificates;
+using System.Security.Cryptography.Xml;
 using System.ServiceModel.Security.Tokens;
 using System.Xml;
 
@@ -318,6 +319,8 @@
                                WriteX509IssuerSerialKeyIdentifierClause 
(writer, (X509IssuerSerialKeyIdentifierClause) keyIdentifierClause);
                        else if (keyIdentifierClause is 
X509ThumbprintKeyIdentifierClause)
                                WriteX509ThumbprintKeyIdentifierClause (writer, 
(X509ThumbprintKeyIdentifierClause) keyIdentifierClause);
+                       else if (keyIdentifierClause is 
EncryptedKeyIdentifierClause)
+                               WriteEncryptedKeyIdentifierClause (writer, 
(EncryptedKeyIdentifierClause) keyIdentifierClause);
                        else
                                throw new NotImplementedException 
(String.Format ("Security key identifier clause '{0}' is not either implemented 
or supported.", keyIdentifierClause.GetType ()));
                }
@@ -343,12 +346,11 @@
                        XmlWriter w, X509ThumbprintKeyIdentifierClause ic)
                {
                        w.WriteStartElement ("o", "SecurityTokenReference", 
Constants.WssNamespace);
-                       w.WriteStartElement ("X509Data", Constants.XmlDsig);
-                       w.WriteStartElement ("X509Thumbprint", 
Constants.XmlDsig);
+                       w.WriteStartElement ("o", "KeyIdentifier", 
Constants.WssNamespace);
+                       w.WriteAttributeString ("ValueType", 
Constants.WssX509ThumbptintValueType);
                        w.WriteString (Convert.ToBase64String 
(ic.GetX509Thumbprint ()));
                        w.WriteEndElement ();
                        w.WriteEndElement ();
-                       w.WriteEndElement ();
                }
 
                void WriteLocalIdKeyIdentifierClause (
@@ -361,6 +363,21 @@
                        w.WriteEndElement ();
                }
 
+               void WriteEncryptedKeyIdentifierClause (
+                       XmlWriter w, EncryptedKeyIdentifierClause ic)
+               {
+                       w.WriteStartElement ("e", "EncryptedKey", 
EncryptedXml.XmlEncNamespaceUrl);
+                       w.WriteStartElement ("EncryptionMethod", 
EncryptedXml.XmlEncNamespaceUrl);
+                       w.WriteAttributeString ("Algorithm", 
ic.EncryptionMethod);
+                       w.WriteEndElement ();
+                       w.WriteStartElement ("CipherData", 
EncryptedXml.XmlEncNamespaceUrl);
+                       w.WriteStartElement ("CipherValue", 
EncryptedXml.XmlEncNamespaceUrl);
+                       w.WriteString (Convert.ToBase64String 
(ic.GetEncryptedKey ()));
+                       w.WriteEndElement ();
+                       w.WriteEndElement ();
+                       w.WriteEndElement ();
+               }
+
                [MonoTODO]
                protected override void WriteTokenCore (
                        XmlWriter writer, SecurityToken token)

Modified: 
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
===================================================================
--- 
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
   2006-12-05 16:27:05 UTC (rev 69050)
+++ 
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
   2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,8 @@
+2006-12-05  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * WSSecurityTokenSerializerTest.cs : added test for
+         X509ThumbprintKeyIdentifierClause writer. Removed some NotWorking.
+
 2006-10-12  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * WSSecurityTokenSerializerTest.cs : added test for writing

Modified: 
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
===================================================================
--- 
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
    2006-12-05 16:27:05 UTC (rev 69050)
+++ 
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
    2006-12-05 16:30:07 UTC (rev 69051)
@@ -212,7 +212,17 @@
                }
 
                [Test]
-               [Category ("NotWorking")]
+               public void WriteX509ThumbprintKeyIdentifierClause1 ()
+               {
+                       StringWriter sw = new StringWriter ();
+                       X509ThumbprintKeyIdentifierClause ic = new 
X509ThumbprintKeyIdentifierClause (cert);
+                       using (XmlWriter w = XmlWriter.Create (sw, 
GetWriterSettings ())) {
+                               
WSSecurityTokenSerializer.DefaultInstance.WriteKeyIdentifierClause (w, ic);
+                       }
+                       Assert.AreEqual ("<o:SecurityTokenReference 
xmlns:o=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\";><o:KeyIdentifier
 
ValueType=\"http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1\";>GQ3YHlGQhDF1bvMixHliX4uLjlY=</o:KeyIdentifier></o:SecurityTokenReference>",
 sw.ToString ());
+               }
+
+               [Test]
                public void WriteEncryptedKeyIdentifierClause ()
                {
                        StringWriter sw = new StringWriter ();

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to