internal abstract SecurityTimestamp ReadTimestamp(XmlDictionaryReader reader, string digestAlgorithm, SignatureResourcePool resourcePool);
internal override SecurityTimestamp ReadTimestamp(XmlDictionaryReader reader, string digestAlgorithm, SignatureResourcePool resourcePool) { DateTime maxUtcDateTime; byte[] buffer; bool flag = (digestAlgorithm != null) && reader.CanCanonicalize; HashStream stream = null; reader.MoveToStartElement(System.ServiceModel.XD.UtilityDictionary.Timestamp, System.ServiceModel.XD.UtilityDictionary.Namespace); if (flag) { stream = resourcePool.TakeHashStream(digestAlgorithm); reader.StartCanonicalization(stream, false, null); } string attribute = reader.GetAttribute(System.ServiceModel.XD.UtilityDictionary.IdAttribute, System.ServiceModel.XD.UtilityDictionary.Namespace); reader.ReadStartElement(); reader.ReadStartElement(System.ServiceModel.XD.UtilityDictionary.CreatedElement, System.ServiceModel.XD.UtilityDictionary.Namespace); DateTime creationTimeUtc = reader.ReadContentAsDateTime().ToUniversalTime(); reader.ReadEndElement(); if (reader.IsStartElement(System.ServiceModel.XD.UtilityDictionary.ExpiresElement, System.ServiceModel.XD.UtilityDictionary.Namespace)) { reader.ReadStartElement(); maxUtcDateTime = reader.ReadContentAsDateTime().ToUniversalTime(); reader.ReadEndElement(); } else { maxUtcDateTime = System.ServiceModel.Security.SecurityUtils.MaxUtcDateTime; } reader.ReadEndElement(); if (flag) { reader.EndCanonicalization(); buffer = stream.FlushHashAndGetValue(); } else { buffer = null; } return(new SecurityTimestamp(creationTimeUtc, maxUtcDateTime, attribute, digestAlgorithm, buffer)); }