// Decompiled with JetBrains decompiler // Type: Microsoft.InfoCards.RequestSecurityTokenSerializer // Assembly: infocard, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // MVID: 516D8B44-4448-4D2C-8B8E-FFBB3FFE472B // Assembly location: C:\Users\Administrateur\Downloads\Virusshare-00000-msil\Virus.Win32.Expiro.w-69bb73081eac86b8cf86f45e33515d0095855636967076e2b593d7a30cd80a07.exe using Microsoft.InfoCards.Diagnostics; using System; using System.Collections.Generic; using System.Globalization; using System.IdentityModel.Tokens; using System.IO; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Security.Tokens; using System.Xml; namespace Microsoft.InfoCards { internal class RequestSecurityTokenSerializer { private XmlWriter m_writer; private ProtocolProfile m_profile; public XmlWriter Writer => this.m_writer; public ProtocolProfile Profile => this.m_profile; private XmlNames.IWSTrust WSTrust => this.Profile.WSTrust; private XmlNames.IWSPolicy WSPolicy => this.Profile.WSPolicy; private string WSTPrefix => this.Profile.WSTrust.DefaultPrefix; private string WSIPrefix => "wsid"; private string WSPPrefix => this.Profile.WSPolicy.DefaultPrefix; private string DSIGPrefix => "dsig"; public RequestSecurityTokenSerializer(XmlWriter writer, ProtocolProfile profile) { this.m_writer = writer; this.m_profile = profile; } public void WriteClaimElement(string claimUri, bool bIsOptionalClaim) { this.Writer.WriteStartElement(this.WSIPrefix, "ClaimType", "http://schemas.xmlsoap.org/ws/2005/05/identity"); this.Writer.WriteAttributeString("Uri", claimUri); if (bIsOptionalClaim) this.Writer.WriteAttributeString("Optional", "true"); this.Writer.WriteEndElement(); } public void WriteClaimsElement( Dictionary disclosedClaims, string[] requiredClaims, string[] optionalClaims) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.ClaimsElement, this.WSTrust.Namespace); this.Writer.WriteAttributeString(this.WSTrust.Dialect, "http://schemas.xmlsoap.org/ws/2005/05/identity"); if (disclosedClaims != null) { foreach (KeyValuePair disclosedClaim in disclosedClaims) this.WriteClaimElement(disclosedClaim.Key, disclosedClaim.Value); } else { foreach (string requiredClaim in requiredClaims) this.WriteClaimElement(requiredClaim, false); foreach (string optionalClaim in optionalClaims) this.WriteClaimElement(optionalClaim, true); } this.Writer.WriteEndElement(); } public void WriteRequestTypeElement(string requestType) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.RequestType, this.WSTrust.Namespace); this.Writer.WriteString(requestType); this.Writer.WriteEndElement(); } public void WritePPIDElement(byte[] ppid) { this.Writer.WriteStartElement("ClientPseudonym", "http://schemas.xmlsoap.org/ws/2005/05/identity"); this.Writer.WriteStartElement("PPID", "http://schemas.xmlsoap.org/ws/2005/05/identity"); this.Writer.WriteBase64(ppid, 0, ppid.Length); this.Writer.WriteEndElement(); this.Writer.WriteEndElement(); } public void WriteAppliesToElement(EndpointAddress address, AddressingVersion version) { this.Writer.WriteStartElement(this.WSPPrefix, this.WSPolicy.AppliesTo, this.WSPolicy.Namespace); address.WriteTo(version, this.Writer); this.Writer.WriteEndElement(); } public void WriteKeySizeElement(string keySize) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.KeySize, this.WSTrust.Namespace); this.Writer.WriteString(keySize); this.Writer.WriteEndElement(); } public void WriteKeyTypeElement(string keyType) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.KeyType, this.WSTrust.Namespace); this.Writer.WriteString(keyType); this.Writer.WriteEndElement(); } public void WriteUseKeyElement(XmlElement useKey) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.UseKey, this.WSTrust.Namespace); this.Writer.WriteStartElement(this.DSIGPrefix, "KeyInfo", "http://www.w3.org/2000/09/xmldsig#"); this.Writer.WriteStartElement(this.DSIGPrefix, "KeyValue", "http://www.w3.org/2000/09/xmldsig#"); useKey.WriteContentTo(this.Writer); this.Writer.WriteEndElement(); this.Writer.WriteEndElement(); this.Writer.WriteEndElement(); } public void WriteBinarySecretElement(BinarySecretSecurityToken bst) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.Entropy, this.WSTrust.Namespace); this.Profile.TokenSerializer.WriteToken(this.Writer, (SecurityToken) bst); this.Writer.WriteEndElement(); } public void WriteInfoCardReferenceElement(InfoCard card) { this.Writer.WriteStartElement(this.WSIPrefix, "InformationCardReference", "http://schemas.xmlsoap.org/ws/2005/05/identity"); this.Writer.WriteStartElement(this.WSIPrefix, "CardId", "http://schemas.xmlsoap.org/ws/2005/05/identity"); this.Writer.WriteString(card.Id.ToString()); this.Writer.WriteEndElement(); this.Writer.WriteStartElement(this.WSIPrefix, "CardVersion", "http://schemas.xmlsoap.org/ws/2005/05/identity"); this.Writer.WriteString(card.Epoch.ToString((IFormatProvider) CultureInfo.InvariantCulture)); this.Writer.WriteEndElement(); this.Writer.WriteEndElement(); } public void WriteDisplayTokenElement(CultureInfo displayCulture) { this.Writer.WriteStartElement(this.WSIPrefix, "RequestDisplayToken", "http://schemas.xmlsoap.org/ws/2005/05/identity"); this.Writer.WriteAttributeString("xml", "lang", (string) null, displayCulture.TwoLetterISOLanguageName); this.Writer.WriteEndElement(); } public void WriteTokenTypeElement(string tokenType) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.TokenType, this.WSTrust.Namespace); this.Writer.WriteString(tokenType); this.Writer.WriteEndElement(); } public void WriteEncryptionAlgorithmElement(string encryptionAlgorithm) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.EncryptionAlgorithm, this.WSTrust.Namespace); this.Writer.WriteString(encryptionAlgorithm); this.Writer.WriteEndElement(); } public void WriteSignWithElement(string signWith) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.SignWith, this.WSTrust.Namespace); this.Writer.WriteString(signWith); this.Writer.WriteEndElement(); } public void WriteEncryptWithElement(string encryptWith) { this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.EncryptWith, this.WSTrust.Namespace); this.Writer.WriteString(encryptWith); this.Writer.WriteEndElement(); } public void WriteKeyWrapAlgorithmElement(string keyWrapAlgorithm) { InfoCardTrace.Assert(this.WSTrust.Version == XmlNames.WSSpecificationVersion.WSTrustOasis2007, "KeyWrapAlgorithm element is valid in WS-Trust 1.3 only"); this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.KeyWrapAlgorithm, this.WSTrust.Namespace); this.Writer.WriteString(keyWrapAlgorithm); this.Writer.WriteEndElement(); } public void WriteUnprocessedPolicyElements(MemoryStream unprocessedElements) { unprocessedElements.Seek(0L, SeekOrigin.Begin); XmlReader reader = XmlReader.Create((Stream) unprocessedElements, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }); while (!reader.EOF) this.Writer.WriteNode(reader, true); } public void WriteSecondaryParametersElement(string policyXml) { InfoCardTrace.Assert(this.WSTrust.Version == XmlNames.WSSpecificationVersion.WSTrustOasis2007, "SecondaryParameters element is valid in WS-Trust 1.3 only"); this.Writer.WriteStartElement(this.WSTPrefix, this.WSTrust.SecondaryParameters, this.WSTrust.Namespace); XmlReader reader = XmlReader.Create((TextReader) new StringReader(policyXml), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }); while (!reader.EOF) this.Writer.WriteNode(reader, true); this.Writer.WriteEndElement(); } } }