//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Security.Tokens { using System.Collections.ObjectModel; using System.Diagnostics; using System.Globalization; using System.ServiceModel.Diagnostics; using System.Text; public class SupportingTokenParameters { Collection signed = new Collection(); Collection signedEncrypted = new Collection(); Collection endorsing = new Collection(); Collection signedEndorsing = new Collection(); SupportingTokenParameters(SupportingTokenParameters other) { if (other == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("other"); foreach (SecurityTokenParameters p in other.signed) this.signed.Add((SecurityTokenParameters)p.Clone()); foreach (SecurityTokenParameters p in other.signedEncrypted) this.signedEncrypted.Add((SecurityTokenParameters)p.Clone()); foreach (SecurityTokenParameters p in other.endorsing) this.endorsing.Add((SecurityTokenParameters)p.Clone()); foreach (SecurityTokenParameters p in other.signedEndorsing) this.signedEndorsing.Add((SecurityTokenParameters)p.Clone()); } public SupportingTokenParameters() { // empty } public Collection Endorsing { get { return this.endorsing; } } public Collection SignedEndorsing { get { return this.signedEndorsing; } } public Collection Signed { get { return this.signed; } } public Collection SignedEncrypted { get { return this.signedEncrypted; } } public void SetKeyDerivation(bool requireDerivedKeys) { foreach (SecurityTokenParameters t in this.endorsing) { if (t.HasAsymmetricKey) { t.RequireDerivedKeys = false; } else { t.RequireDerivedKeys = requireDerivedKeys; } } foreach (SecurityTokenParameters t in this.signedEndorsing) { if (t.HasAsymmetricKey) { t.RequireDerivedKeys = false; } else { t.RequireDerivedKeys = requireDerivedKeys; } } } internal bool IsSetKeyDerivation(bool requireDerivedKeys) { foreach (SecurityTokenParameters t in this.endorsing) if (t.RequireDerivedKeys != requireDerivedKeys) return false; foreach (SecurityTokenParameters t in this.signedEndorsing) if (t.RequireDerivedKeys != requireDerivedKeys) return false; return true; } public override string ToString() { StringBuilder sb = new StringBuilder(); int k; if (this.endorsing.Count == 0) sb.AppendLine("No endorsing tokens."); else for (k = 0; k < this.endorsing.Count; k++) { sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Endorsing[{0}]", k.ToString(CultureInfo.InvariantCulture))); sb.AppendLine(" " + this.endorsing[k].ToString().Trim().Replace("\n", "\n ")); } if (this.signed.Count == 0) sb.AppendLine("No signed tokens."); else for (k = 0; k < this.signed.Count; k++) { sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "Signed[{0}]", k.ToString(CultureInfo.InvariantCulture))); sb.AppendLine(" " + this.signed[k].ToString().Trim().Replace("\n", "\n ")); } if (this.signedEncrypted.Count == 0) sb.AppendLine("No signed encrypted tokens."); else for (k = 0; k < this.signedEncrypted.Count; k++) { sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "SignedEncrypted[{0}]", k.ToString(CultureInfo.InvariantCulture))); sb.AppendLine(" " + this.signedEncrypted[k].ToString().Trim().Replace("\n", "\n ")); } if (this.signedEndorsing.Count == 0) sb.AppendLine("No signed endorsing tokens."); else for (k = 0; k < this.signedEndorsing.Count; k++) { sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "SignedEndorsing[{0}]", k.ToString(CultureInfo.InvariantCulture))); sb.AppendLine(" " + this.signedEndorsing[k].ToString().Trim().Replace("\n", "\n ")); } return sb.ToString().Trim(); } public SupportingTokenParameters Clone() { SupportingTokenParameters parameters = this.CloneCore(); if (parameters == null || parameters.GetType() != this.GetType()) { TraceUtility.TraceEvent( TraceEventType.Error, TraceCode.Security, SR.GetString(SR.CloneNotImplementedCorrectly, new object[] { this.GetType(), (parameters != null) ? parameters.ToString() : "null" })); } return parameters; } protected virtual SupportingTokenParameters CloneCore() { return new SupportingTokenParameters(this); } internal bool IsEmpty() { return signed.Count == 0 && signedEncrypted.Count == 0 && endorsing.Count == 0 && signedEndorsing.Count == 0; } } }