Esempio n. 1
0
        /// <summary>
        /// Initializes an instance of <see cref="EnvelopedSignatureReader"/>
        /// </summary>
        /// <param name="reader">a <see cref="XmlReader"/> pointing to XML that may contain an enveloped signature.</param>
        /// <remarks>If a &lt;Signature> element is found, the <see cref="Signature"/> will be set.</remarks>
        /// <exception cref="ArgumentNullException">if <paramref name="reader"/> is null.</exception>
        public EnvelopedSignatureReader(XmlReader reader)
        {
            if (reader == null)
            {
                throw LogArgumentNullException(nameof(reader));
            }

            _tokenStreamReader = new XmlTokenStreamReader(CreateDictionaryReader(reader));
            InnerReader        = _tokenStreamReader;
        }
        /// <summary>
        /// Initializes a new instance of <see cref="XmlTokenStreamReader"/> for creating a <see cref="XmlTokenStream"/>.
        /// </summary>
        /// <param name="reader">an <see cref="XmlDictionaryReader"/> to capture the <see cref="XmlTokenStream"/>.</param>
        /// <exception cref="ArgumentNullException">if <paramref name="reader"/> if null.</exception>
        /// <exception cref="ArgumentException">if <paramref name="reader"/>.IsStartElement() is false.</exception>
        public XmlTokenStreamReader(XmlDictionaryReader reader)
        {
            if (reader == null)
            {
                throw LogArgumentNullException(nameof(reader));
            }

            if (!reader.IsStartElement())
            {
                throw LogExceptionMessage(new ArgumentException(FormatInvariant(LogMessages.IDX30026, reader.NodeType)));
            }

            // When multiple signed elements are being processed, the EnvelopedSignatureReader always creates a new XmlTokenStreamReader.
            // This creates a chain of readers.
            // The outer reader need to record the position of its 'Signature' element.
            // When calculating the digest all inner 'Signatures' are considered as inner text.
            // This allows for embedded signed elements.
            _innerTokenStreamReader = reader as XmlTokenStreamReader;
            TokenStream             = new XmlTokenStream();
            InnerReader             = reader;
            Record();
        }