/// <summary> /// Initializes an instance of <see cref="EnvelopedSignatureWriter"/>. The returned writer can be directly used /// to write the envelope. The signature will be automatically generated when /// the envelope is completed. /// </summary> /// <param name="writer">Writer to wrap/</param> /// <param name="signingCredentials">SigningCredentials to be used to generate the signature.</param> /// <param name="referenceId">The reference Id of the envelope.</param> /// <param name="inclusivePrefixList">inclusive prefix list to use for exclusive canonicalization.</param> /// <exception cref="ArgumentNullException">if <paramref name="writer"/> is null.</exception> /// <exception cref="ArgumentNullException">if <paramref name="signingCredentials"/> is null.</exception> /// <exception cref="ArgumentNullException">if <paramref name="referenceId"/> is null or Empty.</exception> public EnvelopedSignatureWriter(XmlWriter writer, SigningCredentials signingCredentials, string referenceId, string inclusivePrefixList) { _originalWriter = writer ?? throw LogArgumentNullException(nameof(writer)); _signingCredentials = signingCredentials ?? throw LogArgumentNullException(nameof(signingCredentials)); if (string.IsNullOrEmpty(referenceId)) { throw LogArgumentNullException(nameof(referenceId)); } _inclusiveNamespacesPrefixList = inclusivePrefixList; _referenceUri = referenceId; _writerStream = new MemoryStream(); _canonicalStream = new MemoryStream(); InnerWriter = CreateTextWriter(_writerStream, Encoding.UTF8, false); InnerWriter.StartCanonicalization(_canonicalStream, false, XmlUtil.TokenizeInclusiveNamespacesPrefixList(_inclusiveNamespacesPrefixList)); _signaturePosition = -1; }