mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-22 11:26:11 +00:00
213 lines
8.3 KiB
C#
213 lines
8.3 KiB
C#
|
// 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<string, bool> 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<string, bool> 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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|