public override void ReadFrom(XmlDictionaryReader reader, TransformFactory transformFactory, DictionaryManager dictionaryManager) { this.SendSide = false; if (reader.CanCanonicalize) { this.CanonicalStream = new MemoryStream(); reader.StartCanonicalization(this.CanonicalStream, false, null); } reader.MoveToStartElement(dictionaryManager.XmlSignatureDictionary.SignedInfo, dictionaryManager.XmlSignatureDictionary.Namespace); this.prefix = reader.Prefix; this.Id = reader.GetAttribute(dictionaryManager.UtilityDictionary.IdAttribute, null); reader.Read(); ReadCanonicalizationMethod(reader, dictionaryManager); ReadSignatureMethod(reader, dictionaryManager); while (reader.IsStartElement(dictionaryManager.XmlSignatureDictionary.Reference, dictionaryManager.XmlSignatureDictionary.Namespace)) { Reference reference = new Reference(dictionaryManager); reference.ReadFrom(reader, transformFactory, dictionaryManager); AddReference(reference); } reader.ReadEndElement(); // SignedInfo if (reader.CanCanonicalize) reader.EndCanonicalization(); string[] inclusivePrefixes = GetInclusivePrefixes(); if (inclusivePrefixes != null) { // Clear the canonicalized stream. We cannot use this while inclusive prefixes are // specified. this.CanonicalStream = null; this.context = new Dictionary<string, string>(inclusivePrefixes.Length); for (int i = 0; i < inclusivePrefixes.Length; i++) { this.context.Add(inclusivePrefixes[i], reader.LookupNamespace(inclusivePrefixes[i])); } } }
public override void ReadFrom(XmlDictionaryReader reader, TransformFactory transformFactory, DictionaryManager dictionaryManager) { reader.MoveToStartElement(XmlSignatureConstants.Elements.SignedInfo, XmlSignatureConstants.Namespace); SendSide = false; _defaultNamespace = reader.LookupNamespace(String.Empty); _bufferedStream = new MemoryStream(); XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = Encoding.UTF8; settings.NewLineHandling = NewLineHandling.None; using (XmlWriter bufferWriter = XmlTextWriter.Create(_bufferedStream, settings)) { bufferWriter.WriteNode(reader, true); bufferWriter.Flush(); } _bufferedStream.Position = 0; // // We are creating a XmlDictionaryReader with a hard-coded Max XmlDictionaryReaderQuotas. This is a reader that we // are creating over an already buffered content. The content was initially read off user provided XmlDictionaryReader // with the correct quotas and hence we know the data is valid. // Note: effectiveReader will close _bufferedStream on Dispose. // using (XmlDictionaryReader effectiveReader = XmlDictionaryReader.CreateTextReader(_bufferedStream, XmlDictionaryReaderQuotas.Max)) { CanonicalStream = new MemoryStream(); effectiveReader.StartCanonicalization(CanonicalStream, false, null); effectiveReader.MoveToStartElement(XmlSignatureConstants.Elements.SignedInfo, XmlSignatureConstants.Namespace); Prefix = effectiveReader.Prefix; Id = effectiveReader.GetAttribute(WSSecurityUtilityConstants.Attributes.Id, null); effectiveReader.Read(); ReadCanonicalizationMethod(effectiveReader, DictionaryManager); ReadSignatureMethod(effectiveReader, DictionaryManager); while (effectiveReader.IsStartElement(XmlSignatureConstants.Elements.Reference, XmlSignatureConstants.Namespace)) { Reference reference = new Reference(DictionaryManager); reference.ReadFrom(effectiveReader, transformFactory, DictionaryManager); AddReference(reference); } effectiveReader.ReadEndElement(); effectiveReader.EndCanonicalization(); } string[] inclusivePrefixes = GetInclusivePrefixes(); if (inclusivePrefixes != null) { // Clear the canonicalized stream. We cannot use this while inclusive prefixes are // specified. CanonicalStream = null; Context = new Dictionary<string, string>(inclusivePrefixes.Length); for (int i = 0; i < inclusivePrefixes.Length; i++) { Context.Add(inclusivePrefixes[i], reader.LookupNamespace(inclusivePrefixes[i])); } } }
public void AddReference(Reference reference) { reference.ResourcePool = this.ResourcePool; this.references.Add(reference); }