180 lines
6.4 KiB
C#
180 lines
6.4 KiB
C#
//-----------------------------------------------------------------------------
|
|
// 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<SecurityTokenParameters> signed = new Collection<SecurityTokenParameters>();
|
|
Collection<SecurityTokenParameters> signedEncrypted = new Collection<SecurityTokenParameters>();
|
|
Collection<SecurityTokenParameters> endorsing = new Collection<SecurityTokenParameters>();
|
|
Collection<SecurityTokenParameters> signedEndorsing = new Collection<SecurityTokenParameters>();
|
|
|
|
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<SecurityTokenParameters> Endorsing
|
|
{
|
|
get
|
|
{
|
|
return this.endorsing;
|
|
}
|
|
}
|
|
|
|
public Collection<SecurityTokenParameters> SignedEndorsing
|
|
{
|
|
get
|
|
{
|
|
return this.signedEndorsing;
|
|
}
|
|
}
|
|
|
|
public Collection<SecurityTokenParameters> Signed
|
|
{
|
|
get
|
|
{
|
|
return this.signed;
|
|
}
|
|
}
|
|
|
|
public Collection<SecurityTokenParameters> 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;
|
|
}
|
|
}
|
|
}
|