internal void ValidateFreshness(TimeSpan timeToLive, TimeSpan allowedClockSkew) { DateTime now = DateTime.UtcNow; // check that the message has not expired if (ExpiryTimeUtc <= TimeoutHelper.Subtract(now, allowedClockSkew)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Format(SR.TimeStampHasExpiryTimeInPast, ExpiryTimeUtc.ToString(DefaultFormat, CultureInfo.CurrentCulture), now.ToString(DefaultFormat, CultureInfo.CurrentCulture), allowedClockSkew))); } // check that creation time is not in the future (modulo clock skew) if (CreationTimeUtc >= TimeoutHelper.Add(now, allowedClockSkew)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Format(SR.TimeStampHasCreationTimeInFuture, CreationTimeUtc.ToString(DefaultFormat, CultureInfo.CurrentCulture), now.ToString(DefaultFormat, CultureInfo.CurrentCulture), allowedClockSkew))); } // check that the creation time is not more than timeToLive in the past if (CreationTimeUtc <= TimeoutHelper.Subtract(now, TimeoutHelper.Add(timeToLive, allowedClockSkew))) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Format(SR.TimeStampWasCreatedTooLongAgo, CreationTimeUtc.ToString(DefaultFormat, CultureInfo.CurrentCulture), now.ToString(DefaultFormat, CultureInfo.CurrentCulture), timeToLive, allowedClockSkew))); } // this is a fresh timestamp }
/// <summary> /// Internal method that checks if the timestamp is fresh with respect to the /// timeToLive and allowedClockSkew values passed in. /// Throws if the timestamp is stale. /// </summary> /// <param name="timeToLive"></param> /// <param name="allowedClockSkew"></param> internal void ValidateRangeAndFreshness(TimeSpan timeToLive, TimeSpan allowedClockSkew) { // Check that the creation time is less than expiry time if (CreationTimeUtc >= ExpiryTimeUtc) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Format(SR.TimeStampHasCreationAheadOfExpiry, CreationTimeUtc.ToString(DefaultFormat, CultureInfo.CurrentCulture), ExpiryTimeUtc.ToString(DefaultFormat, CultureInfo.CurrentCulture)))); } ValidateFreshness(timeToLive, allowedClockSkew); }