using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Globalization; using System.Runtime; namespace System.ServiceModel.Security { public abstract class NonceCache { TimeSpan cachingTime; int maxCachedNonces; /// /// TThe max timespan after which a Nonce is deleted from the NonceCache. This value should be atleast twice the maxclock Skew added to the replayWindow size. /// public TimeSpan CachingTimeSpan { get { return this.cachingTime; } set { if (value < TimeSpan.Zero) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRange0))); } if (TimeoutHelper.IsTooLarge(value)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.SFxTimeoutOutOfRangeTooBig))); } this.cachingTime = value; } } /// /// The maximum size of the NonceCache. /// public int CacheSize { get { return this.maxCachedNonces; } set { if (value < 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, SR.GetString(SR.ValueMustBeNonNegative))); } this.maxCachedNonces = value; } } public abstract bool TryAddNonce(byte[] nonce); public abstract bool CheckNonce(byte[] nonce); } }