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));
            }