You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			170 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			170 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|   | //------------------------------------------------------------ | ||
|  | // Copyright (c) Microsoft Corporation.  All rights reserved. | ||
|  | //------------------------------------------------------------ | ||
|  | 
 | ||
|  | namespace System.ServiceModel.Security | ||
|  | { | ||
|  |     using System; | ||
|  |     using System.ServiceModel; | ||
|  |     using System.Collections; | ||
|  |     using System.Collections.Generic; | ||
|  |     using System.Diagnostics; | ||
|  |     using System.Globalization; | ||
|  |     using System.IO; | ||
|  |     using System.Text; | ||
|  |     using System.Threading; | ||
|  |     using System.Xml; | ||
|  |     using System.IdentityModel.Claims; | ||
|  |     using System.IdentityModel.Policy; | ||
|  |     using System.IdentityModel.Tokens; | ||
|  |     using System.Security.Cryptography.X509Certificates; | ||
|  |     using HexBinary = System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary; | ||
|  |     using System.ServiceModel.Channels; | ||
|  |     using System.ServiceModel.Security; | ||
|  |     using System.ServiceModel.Security.Tokens; | ||
|  |     using System.Runtime.Serialization; | ||
|  |     using KeyIdentifierEntry = WSSecurityTokenSerializer.KeyIdentifierEntry; | ||
|  |     using KeyIdentifierClauseEntry = WSSecurityTokenSerializer.KeyIdentifierClauseEntry; | ||
|  |     using StrEntry = WSSecurityTokenSerializer.StrEntry; | ||
|  |     using TokenEntry = WSSecurityTokenSerializer.TokenEntry; | ||
|  | 
 | ||
|  |     class WSSecureConversationDec2005 : WSSecureConversation | ||
|  |     { | ||
|  |         SecurityStateEncoder securityStateEncoder; | ||
|  |         IList<Type> knownClaimTypes; | ||
|  | 
 | ||
|  |         public WSSecureConversationDec2005(WSSecurityTokenSerializer tokenSerializer, SecurityStateEncoder securityStateEncoder, IEnumerable<Type> knownTypes, | ||
|  |             int maxKeyDerivationOffset, int maxKeyDerivationLabelLength, int maxKeyDerivationNonceLength) | ||
|  |             : base(tokenSerializer, maxKeyDerivationOffset, maxKeyDerivationLabelLength, maxKeyDerivationNonceLength) | ||
|  |         { | ||
|  |             if (securityStateEncoder != null) | ||
|  |             { | ||
|  |                 this.securityStateEncoder = securityStateEncoder; | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 this.securityStateEncoder = new DataProtectionSecurityStateEncoder(); | ||
|  |             } | ||
|  | 
 | ||
|  |             this.knownClaimTypes = new List<Type>(); | ||
|  |             if (knownTypes != null) | ||
|  |             { | ||
|  |                 // Clone this collection. | ||
|  |                 foreach (Type knownType in knownTypes) | ||
|  |                 { | ||
|  |                     this.knownClaimTypes.Add(knownType); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public override SecureConversationDictionary SerializerDictionary | ||
|  |         { | ||
|  |             get { return DXD.SecureConversationDec2005Dictionary; } | ||
|  |         } | ||
|  | 
 | ||
|  |         public override void PopulateTokenEntries(IList<TokenEntry> tokenEntryList) | ||
|  |         { | ||
|  |             base.PopulateTokenEntries(tokenEntryList); | ||
|  |             tokenEntryList.Add(new SecurityContextTokenEntryDec2005(this, this.securityStateEncoder, this.knownClaimTypes)); | ||
|  |         } | ||
|  | 
 | ||
|  |         public override string DerivationAlgorithm | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 return SecurityAlgorithms.Psha1KeyDerivationDec2005; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         class SecurityContextTokenEntryDec2005 : SecurityContextTokenEntry | ||
|  |         { | ||
|  |             public SecurityContextTokenEntryDec2005(WSSecureConversationDec2005 parent, SecurityStateEncoder securityStateEncoder, IList<Type> knownClaimTypes) | ||
|  |                 : base(parent, securityStateEncoder, knownClaimTypes) | ||
|  |             { | ||
|  |             } | ||
|  | 
 | ||
|  |             protected override bool CanReadGeneration(XmlDictionaryReader reader) | ||
|  |             { | ||
|  |                 return reader.IsStartElement(DXD.SecureConversationDec2005Dictionary.Instance, DXD.SecureConversationDec2005Dictionary.Namespace); | ||
|  |             } | ||
|  | 
 | ||
|  |             protected override bool CanReadGeneration(XmlElement element) | ||
|  |             { | ||
|  |                 return (element.LocalName == DXD.SecureConversationDec2005Dictionary.Instance.Value && | ||
|  |                     element.NamespaceURI == DXD.SecureConversationDec2005Dictionary.Namespace.Value); | ||
|  |             } | ||
|  | 
 | ||
|  |             protected override UniqueId ReadGeneration(XmlDictionaryReader reader) | ||
|  |             { | ||
|  |                 return reader.ReadElementContentAsUniqueId(); | ||
|  |             } | ||
|  | 
 | ||
|  |             protected override UniqueId ReadGeneration(XmlElement element) | ||
|  |             { | ||
|  |                 return XmlHelper.ReadTextElementAsUniqueId(element); | ||
|  |             } | ||
|  | 
 | ||
|  |             protected override void WriteGeneration(XmlDictionaryWriter writer, SecurityContextSecurityToken sct) | ||
|  |             { | ||
|  |                 // serialize the generation | ||
|  |                 if (sct.KeyGeneration != null) | ||
|  |                 { | ||
|  |                     writer.WriteStartElement(DXD.SecureConversationDec2005Dictionary.Prefix.Value, | ||
|  |                         DXD.SecureConversationDec2005Dictionary.Instance, | ||
|  |                         DXD.SecureConversationDec2005Dictionary.Namespace); | ||
|  |                     XmlHelper.WriteStringAsUniqueId(writer, sct.KeyGeneration); | ||
|  |                     writer.WriteEndElement(); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public class DriverDec2005 : Driver | ||
|  |         { | ||
|  |             public DriverDec2005() | ||
|  |             { | ||
|  |             } | ||
|  | 
 | ||
|  |             protected override SecureConversationDictionary DriverDictionary | ||
|  |             { | ||
|  |                 get { return DXD.SecureConversationDec2005Dictionary; } | ||
|  |             } | ||
|  | 
 | ||
|  |             public override XmlDictionaryString CloseAction | ||
|  |             { | ||
|  |                 get { return DXD.SecureConversationDec2005Dictionary.RequestSecurityContextClose; } | ||
|  |             } | ||
|  | 
 | ||
|  |             public override XmlDictionaryString CloseResponseAction | ||
|  |             { | ||
|  |                 get { return DXD.SecureConversationDec2005Dictionary.RequestSecurityContextCloseResponse; } | ||
|  |             } | ||
|  | 
 | ||
|  |             public override bool IsSessionSupported | ||
|  |             { | ||
|  |                 get { return true; } | ||
|  |             } | ||
|  | 
 | ||
|  |             public override XmlDictionaryString RenewAction | ||
|  |             { | ||
|  |                 get { return DXD.SecureConversationDec2005Dictionary.RequestSecurityContextRenew; } | ||
|  |             } | ||
|  | 
 | ||
|  |             public override XmlDictionaryString RenewResponseAction | ||
|  |             { | ||
|  |                 get { return DXD.SecureConversationDec2005Dictionary.RequestSecurityContextRenewResponse; } | ||
|  |             } | ||
|  | 
 | ||
|  |             public override XmlDictionaryString Namespace | ||
|  |             { | ||
|  |                 get { return DXD.SecureConversationDec2005Dictionary.Namespace; } | ||
|  |             } | ||
|  | 
 | ||
|  |             public override string TokenTypeUri | ||
|  |             { | ||
|  |                 get { return DXD.SecureConversationDec2005Dictionary.SecurityContextTokenType.Value; } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 |