//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace System.ServiceModel.Security { using System.IdentityModel.Claims; using System.ServiceModel; using System.IdentityModel.Policy; using System.IdentityModel.Tokens; using System.ServiceModel.Security.Tokens; using System.Xml; using System.Collections.Generic; using ISecurityElement = System.IdentityModel.ISecurityElement; class SendSecurityHeaderElementContainer { List signedSupportingTokens = null; List basicSupportingTokens = null; List endorsingSupportingTokens = null; List endorsingDerivedSupportingTokens = null; List signedEndorsingSupportingTokens = null; List signedEndorsingDerivedSupportingTokens = null; List signatureConfirmations = null; List endorsingSignatures = null; Dictionary securityTokenMappedToIdentifierClause = null; public SecurityTimestamp Timestamp; public SecurityToken PrerequisiteToken; public SecurityToken SourceSigningToken; public SecurityToken DerivedSigningToken; public SecurityToken SourceEncryptionToken; public SecurityToken WrappedEncryptionToken; public SecurityToken DerivedEncryptionToken; public ISecurityElement ReferenceList; public SendSecurityHeaderElement PrimarySignature; void Add(ref List list, T item) { if (list == null) { list = new List(); } list.Add(item); } public SecurityToken[] GetSignedSupportingTokens() { return (this.signedSupportingTokens != null) ? this.signedSupportingTokens.ToArray() : null; } public void AddSignedSupportingToken(SecurityToken token) { Add(ref this.signedSupportingTokens, token); } public List EndorsingSupportingTokens { get { return this.endorsingSupportingTokens; } } public SendSecurityHeaderElement[] GetBasicSupportingTokens() { return (this.basicSupportingTokens != null) ? this.basicSupportingTokens.ToArray() : null; } public void AddBasicSupportingToken(SendSecurityHeaderElement tokenElement) { Add(ref this.basicSupportingTokens, tokenElement); } public SecurityToken[] GetSignedEndorsingSupportingTokens() { return (this.signedEndorsingSupportingTokens != null) ? this.signedEndorsingSupportingTokens.ToArray() : null; } public void AddSignedEndorsingSupportingToken(SecurityToken token) { Add(ref this.signedEndorsingSupportingTokens, token); } public SecurityToken[] GetSignedEndorsingDerivedSupportingTokens() { return (this.signedEndorsingDerivedSupportingTokens != null) ? this.signedEndorsingDerivedSupportingTokens.ToArray() : null; } public void AddSignedEndorsingDerivedSupportingToken(SecurityToken token) { Add(ref this.signedEndorsingDerivedSupportingTokens, token); } public SecurityToken[] GetEndorsingSupportingTokens() { return (this.endorsingSupportingTokens != null) ? this.endorsingSupportingTokens.ToArray() : null; } public void AddEndorsingSupportingToken(SecurityToken token) { Add(ref this.endorsingSupportingTokens, token); } public SecurityToken[] GetEndorsingDerivedSupportingTokens() { return (this.endorsingDerivedSupportingTokens != null) ? this.endorsingDerivedSupportingTokens.ToArray() : null; } public void AddEndorsingDerivedSupportingToken(SecurityToken token) { Add(ref this.endorsingDerivedSupportingTokens, token); } public SendSecurityHeaderElement[] GetSignatureConfirmations() { return (this.signatureConfirmations != null) ? this.signatureConfirmations.ToArray() : null; } public void AddSignatureConfirmation(SendSecurityHeaderElement confirmation) { Add(ref this.signatureConfirmations, confirmation); } public SendSecurityHeaderElement[] GetEndorsingSignatures() { return (this.endorsingSignatures != null) ? this.endorsingSignatures.ToArray() : null; } public void AddEndorsingSignature(SendSecurityHeaderElement signature) { Add(ref this.endorsingSignatures, signature); } public void MapSecurityTokenToStrClause(SecurityToken securityToken, SecurityKeyIdentifierClause keyIdentifierClause) { if (this.securityTokenMappedToIdentifierClause == null) { this.securityTokenMappedToIdentifierClause = new Dictionary(); } if (!this.securityTokenMappedToIdentifierClause.ContainsKey(securityToken)) { this.securityTokenMappedToIdentifierClause.Add(securityToken, keyIdentifierClause); } } public bool TryGetIdentifierClauseFromSecurityToken(SecurityToken securityToken, out SecurityKeyIdentifierClause keyIdentifierClause) { keyIdentifierClause = null; if (securityToken == null || this.securityTokenMappedToIdentifierClause == null || !this.securityTokenMappedToIdentifierClause.TryGetValue(securityToken, out keyIdentifierClause)) { return false; } return true; } } }