EncryptedKey.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / ManagedLibraries / Security / System / Security / Cryptography / Xml / EncryptedKey.cs / 5 / EncryptedKey.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 

// 
// EncryptedKey.cs 
//
// This object implements the EncryptedKey element. 
//
// 04/01/2002
//
 
namespace System.Security.Cryptography.Xml
{ 
    using System; 
    using System.Collections;
    using System.Xml; 

    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
    public sealed class EncryptedKey : EncryptedType {
        private string m_recipient; 
        private string m_carriedKeyName;
        private ReferenceList m_referenceList; 
 
        public EncryptedKey () {}
 
        public string Recipient {
            get {
                // an unspecified value for an XmlAttribute is String.Empty
                if (m_recipient == null) 
                    m_recipient = String.Empty;
                return m_recipient; 
            } 
            set {
                m_recipient = value; 
                m_cachedXml = null;
            }
        }
 
       public string CarriedKeyName {
            get { return m_carriedKeyName; } 
            set { 
                m_carriedKeyName = value;
                m_cachedXml = null; 
            }
        }

        public ReferenceList ReferenceList { 
            get {
                if (m_referenceList == null) 
                    m_referenceList = new ReferenceList(); 
                return m_referenceList;
            } 
        }

        public void AddReference (DataReference dataReference) {
            ReferenceList.Add(dataReference); 
        }
 
        public void AddReference (KeyReference keyReference) { 
            ReferenceList.Add(keyReference);
        } 

        public override void LoadXml (XmlElement value) {
            if (value == null)
                throw new ArgumentNullException("value"); 

            XmlNamespaceManager nsm = new XmlNamespaceManager(value.OwnerDocument.NameTable); 
            nsm.AddNamespace("enc", EncryptedXml.XmlEncNamespaceUrl); 
            nsm.AddNamespace("ds",SignedXml.XmlDsigNamespaceUrl);
 
            this.Id = Utils.GetAttribute(value, "Id", EncryptedXml.XmlEncNamespaceUrl);
            this.Type = Utils.GetAttribute(value, "Type", EncryptedXml.XmlEncNamespaceUrl);
            this.MimeType = Utils.GetAttribute(value, "MimeType", EncryptedXml.XmlEncNamespaceUrl);
            this.Encoding = Utils.GetAttribute(value, "Encoding", EncryptedXml.XmlEncNamespaceUrl); 
            this.Recipient = Utils.GetAttribute(value, "Recipient", EncryptedXml.XmlEncNamespaceUrl);
 
            XmlNode encryptionMethodNode = value.SelectSingleNode("enc:EncryptionMethod", nsm); 

            // EncryptionMethod 
            this.EncryptionMethod = new EncryptionMethod();
            if (encryptionMethodNode != null)
                this.EncryptionMethod.LoadXml(encryptionMethodNode as XmlElement);
 
            // Key Info
            this.KeyInfo = new KeyInfo(); 
            XmlNode keyInfoNode = value.SelectSingleNode("ds:KeyInfo", nsm); 
            if (keyInfoNode != null)
                this.KeyInfo.LoadXml(keyInfoNode as XmlElement); 

            // CipherData
            XmlNode cipherDataNode = value.SelectSingleNode("enc:CipherData", nsm);
            if (cipherDataNode == null) 
                throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Xml_MissingCipherData"));
 
            this.CipherData = new CipherData(); 
            this.CipherData.LoadXml(cipherDataNode as XmlElement);
 
            // EncryptionProperties
            XmlNode encryptionPropertiesNode = value.SelectSingleNode("enc:EncryptionProperties", nsm);
            if (encryptionPropertiesNode != null) {
                // Select the EncryptionProperty elements inside the EncryptionProperties element 
                XmlNodeList encryptionPropertyNodes = encryptionPropertiesNode.SelectNodes("enc:EncryptionProperty", nsm);
                if (encryptionPropertyNodes != null) { 
                    foreach (XmlNode node in encryptionPropertyNodes) { 
                        EncryptionProperty ep = new EncryptionProperty();
                        ep.LoadXml(node as XmlElement); 
                        this.EncryptionProperties.Add(ep);
                    }
                }
            } 

            // CarriedKeyName 
            XmlNode carriedKeyNameNode = value.SelectSingleNode("enc:CarriedKeyName", nsm); 
            if (carriedKeyNameNode != null) {
                this.CarriedKeyName = carriedKeyNameNode.InnerText; 
            }

            // ReferenceList
            XmlNode referenceListNode = value.SelectSingleNode("enc:ReferenceList", nsm); 
            if (referenceListNode != null) {
                // Select the DataReference elements inside the ReferenceList element 
                XmlNodeList dataReferenceNodes = referenceListNode.SelectNodes("enc:DataReference", nsm); 
                if (dataReferenceNodes != null) {
                    foreach (XmlNode node in dataReferenceNodes) { 
                        DataReference dr = new DataReference();
                        dr.LoadXml(node as XmlElement);
                        this.ReferenceList.Add(dr);
                    } 
                }
                // Select the KeyReference elements inside the ReferenceList element 
                XmlNodeList keyReferenceNodes = referenceListNode.SelectNodes("enc:KeyReference", nsm); 
                if (keyReferenceNodes != null) {
                    foreach (XmlNode node in keyReferenceNodes) { 
                        KeyReference kr = new KeyReference();
                        kr.LoadXml(node as XmlElement);
                        this.ReferenceList.Add(kr);
                    } 
                }
            } 
 
            // Save away the cached value
            m_cachedXml = value; 
        }

        public override XmlElement GetXml () {
            if (CacheValid) return m_cachedXml; 

            XmlDocument document = new XmlDocument(); 
            document.PreserveWhitespace = true; 
            return GetXml(document);
        } 

        internal XmlElement GetXml (XmlDocument document) {
            // Create the EncryptedKey element
            XmlElement encryptedKeyElement = (XmlElement) document.CreateElement("EncryptedKey", EncryptedXml.XmlEncNamespaceUrl); 

            // Deal with attributes 
            if (!String.IsNullOrEmpty(this.Id)) 
                encryptedKeyElement.SetAttribute("Id", this.Id);
            if (!String.IsNullOrEmpty(this.Type)) 
                encryptedKeyElement.SetAttribute("Type", this.Type);
            if (!String.IsNullOrEmpty(this.MimeType))
                encryptedKeyElement.SetAttribute("MimeType", this.MimeType);
            if (!String.IsNullOrEmpty(this.Encoding)) 
                encryptedKeyElement.SetAttribute("Encoding", this.Encoding);
            if (!String.IsNullOrEmpty(this.Recipient)) 
                encryptedKeyElement.SetAttribute("Recipient", this.Recipient); 

            // EncryptionMethod 
            if (this.EncryptionMethod != null)
                encryptedKeyElement.AppendChild(this.EncryptionMethod.GetXml(document));

            // KeyInfo 
            if (this.KeyInfo.Count > 0)
                encryptedKeyElement.AppendChild(this.KeyInfo.GetXml(document)); 
 
            // CipherData
            if (this.CipherData == null) 
                throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Xml_MissingCipherData"));
            encryptedKeyElement.AppendChild(this.CipherData.GetXml(document));

            // EncryptionProperties 
            if (this.EncryptionProperties.Count > 0) {
                XmlElement encryptionPropertiesElement = document.CreateElement("EncryptionProperties", EncryptedXml.XmlEncNamespaceUrl); 
                for (int index = 0; index < this.EncryptionProperties.Count; index++) { 
                    EncryptionProperty ep = this.EncryptionProperties.Item(index);
                    encryptionPropertiesElement.AppendChild(ep.GetXml(document)); 
                }
                encryptedKeyElement.AppendChild(encryptionPropertiesElement);
            }
 
            // ReferenceList
            if (this.ReferenceList.Count > 0) { 
                XmlElement referenceListElement = document.CreateElement("ReferenceList", EncryptedXml.XmlEncNamespaceUrl); 
                for (int index = 0; index < this.ReferenceList.Count; index++) {
                    referenceListElement.AppendChild(this.ReferenceList[index].GetXml(document)); 
                }
                encryptedKeyElement.AppendChild(referenceListElement);
            }
 
            // CarriedKeyName
            if (this.CarriedKeyName != null) { 
                XmlElement carriedKeyNameElement = (XmlElement) document.CreateElement("CarriedKeyName", EncryptedXml.XmlEncNamespaceUrl); 
                XmlText carriedKeyNameText = document.CreateTextNode(this.CarriedKeyName);
                carriedKeyNameElement.AppendChild(carriedKeyNameText); 
                encryptedKeyElement.AppendChild(carriedKeyNameElement);
            }

            return encryptedKeyElement; 
        }
    } 
 
    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
    public sealed class ReferenceList : IList { 
        private ArrayList m_references;

        public ReferenceList() {
            m_references = new ArrayList(); 
        }
 
        public IEnumerator GetEnumerator() { 
            return m_references.GetEnumerator();
        } 

        public int Count {
            get { return m_references.Count; }
        } 

        public int Add(Object value) { 
            if (value == null) 
                throw new ArgumentNullException("value");
 
            if (!(value is DataReference) && !(value is KeyReference))
                throw new ArgumentException(SecurityResources.GetResourceString("Cryptography_Xml_IncorrectObjectType"), "value");

            return m_references.Add(value); 
        }
 
        public void Clear() { 
            m_references.Clear();
        } 

        public bool Contains(Object value) {
            return m_references.Contains(value);
        } 

        public int IndexOf(Object value) { 
            return m_references.IndexOf(value); 
        }
 
        public void Insert(int index, Object value) {
            if (value == null)
                throw new ArgumentNullException("value");
 
            if (!(value is DataReference) && !(value is KeyReference))
                throw new ArgumentException(SecurityResources.GetResourceString("Cryptography_Xml_IncorrectObjectType"), "value"); 
 
            m_references.Insert(index, value);
        } 

        public void Remove(Object value) {
            m_references.Remove(value);
        } 

        public void RemoveAt(int index) { 
            m_references.RemoveAt(index); 
        }
 
        public EncryptedReference Item(int index) {
            return (EncryptedReference) m_references[index];
        }
 
        [System.Runtime.CompilerServices.IndexerName ("ItemOf")]
        public EncryptedReference this[int index] { 
            get { 
                return this.Item(index);
            } 
            set {
                ((IList) this)[index] = value;
            }
        } 

        ///  
        Object IList.this[int index] { 
            get { return m_references[index]; }
            set { 
                if (value == null)
                    throw new ArgumentNullException("value");

                if (!(value is DataReference) && !(value is KeyReference)) 
                    throw new ArgumentException(SecurityResources.GetResourceString("Cryptography_Xml_IncorrectObjectType"), "value");
 
                m_references[index] = value; 
            }
        } 

        public void CopyTo(Array array, int index) {
            m_references.CopyTo(array, index);
        } 

        Boolean IList.IsFixedSize { 
            get { return m_references.IsFixedSize; } 
        }
 
        Boolean IList.IsReadOnly {
            get { return m_references.IsReadOnly; }
        }
 
        public Object SyncRoot {
            get { return m_references.SyncRoot; } 
        } 

        public bool IsSynchronized { 
            get { return m_references.IsSynchronized; }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 

// 
// EncryptedKey.cs 
//
// This object implements the EncryptedKey element. 
//
// 04/01/2002
//
 
namespace System.Security.Cryptography.Xml
{ 
    using System; 
    using System.Collections;
    using System.Xml; 

    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
    public sealed class EncryptedKey : EncryptedType {
        private string m_recipient; 
        private string m_carriedKeyName;
        private ReferenceList m_referenceList; 
 
        public EncryptedKey () {}
 
        public string Recipient {
            get {
                // an unspecified value for an XmlAttribute is String.Empty
                if (m_recipient == null) 
                    m_recipient = String.Empty;
                return m_recipient; 
            } 
            set {
                m_recipient = value; 
                m_cachedXml = null;
            }
        }
 
       public string CarriedKeyName {
            get { return m_carriedKeyName; } 
            set { 
                m_carriedKeyName = value;
                m_cachedXml = null; 
            }
        }

        public ReferenceList ReferenceList { 
            get {
                if (m_referenceList == null) 
                    m_referenceList = new ReferenceList(); 
                return m_referenceList;
            } 
        }

        public void AddReference (DataReference dataReference) {
            ReferenceList.Add(dataReference); 
        }
 
        public void AddReference (KeyReference keyReference) { 
            ReferenceList.Add(keyReference);
        } 

        public override void LoadXml (XmlElement value) {
            if (value == null)
                throw new ArgumentNullException("value"); 

            XmlNamespaceManager nsm = new XmlNamespaceManager(value.OwnerDocument.NameTable); 
            nsm.AddNamespace("enc", EncryptedXml.XmlEncNamespaceUrl); 
            nsm.AddNamespace("ds",SignedXml.XmlDsigNamespaceUrl);
 
            this.Id = Utils.GetAttribute(value, "Id", EncryptedXml.XmlEncNamespaceUrl);
            this.Type = Utils.GetAttribute(value, "Type", EncryptedXml.XmlEncNamespaceUrl);
            this.MimeType = Utils.GetAttribute(value, "MimeType", EncryptedXml.XmlEncNamespaceUrl);
            this.Encoding = Utils.GetAttribute(value, "Encoding", EncryptedXml.XmlEncNamespaceUrl); 
            this.Recipient = Utils.GetAttribute(value, "Recipient", EncryptedXml.XmlEncNamespaceUrl);
 
            XmlNode encryptionMethodNode = value.SelectSingleNode("enc:EncryptionMethod", nsm); 

            // EncryptionMethod 
            this.EncryptionMethod = new EncryptionMethod();
            if (encryptionMethodNode != null)
                this.EncryptionMethod.LoadXml(encryptionMethodNode as XmlElement);
 
            // Key Info
            this.KeyInfo = new KeyInfo(); 
            XmlNode keyInfoNode = value.SelectSingleNode("ds:KeyInfo", nsm); 
            if (keyInfoNode != null)
                this.KeyInfo.LoadXml(keyInfoNode as XmlElement); 

            // CipherData
            XmlNode cipherDataNode = value.SelectSingleNode("enc:CipherData", nsm);
            if (cipherDataNode == null) 
                throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Xml_MissingCipherData"));
 
            this.CipherData = new CipherData(); 
            this.CipherData.LoadXml(cipherDataNode as XmlElement);
 
            // EncryptionProperties
            XmlNode encryptionPropertiesNode = value.SelectSingleNode("enc:EncryptionProperties", nsm);
            if (encryptionPropertiesNode != null) {
                // Select the EncryptionProperty elements inside the EncryptionProperties element 
                XmlNodeList encryptionPropertyNodes = encryptionPropertiesNode.SelectNodes("enc:EncryptionProperty", nsm);
                if (encryptionPropertyNodes != null) { 
                    foreach (XmlNode node in encryptionPropertyNodes) { 
                        EncryptionProperty ep = new EncryptionProperty();
                        ep.LoadXml(node as XmlElement); 
                        this.EncryptionProperties.Add(ep);
                    }
                }
            } 

            // CarriedKeyName 
            XmlNode carriedKeyNameNode = value.SelectSingleNode("enc:CarriedKeyName", nsm); 
            if (carriedKeyNameNode != null) {
                this.CarriedKeyName = carriedKeyNameNode.InnerText; 
            }

            // ReferenceList
            XmlNode referenceListNode = value.SelectSingleNode("enc:ReferenceList", nsm); 
            if (referenceListNode != null) {
                // Select the DataReference elements inside the ReferenceList element 
                XmlNodeList dataReferenceNodes = referenceListNode.SelectNodes("enc:DataReference", nsm); 
                if (dataReferenceNodes != null) {
                    foreach (XmlNode node in dataReferenceNodes) { 
                        DataReference dr = new DataReference();
                        dr.LoadXml(node as XmlElement);
                        this.ReferenceList.Add(dr);
                    } 
                }
                // Select the KeyReference elements inside the ReferenceList element 
                XmlNodeList keyReferenceNodes = referenceListNode.SelectNodes("enc:KeyReference", nsm); 
                if (keyReferenceNodes != null) {
                    foreach (XmlNode node in keyReferenceNodes) { 
                        KeyReference kr = new KeyReference();
                        kr.LoadXml(node as XmlElement);
                        this.ReferenceList.Add(kr);
                    } 
                }
            } 
 
            // Save away the cached value
            m_cachedXml = value; 
        }

        public override XmlElement GetXml () {
            if (CacheValid) return m_cachedXml; 

            XmlDocument document = new XmlDocument(); 
            document.PreserveWhitespace = true; 
            return GetXml(document);
        } 

        internal XmlElement GetXml (XmlDocument document) {
            // Create the EncryptedKey element
            XmlElement encryptedKeyElement = (XmlElement) document.CreateElement("EncryptedKey", EncryptedXml.XmlEncNamespaceUrl); 

            // Deal with attributes 
            if (!String.IsNullOrEmpty(this.Id)) 
                encryptedKeyElement.SetAttribute("Id", this.Id);
            if (!String.IsNullOrEmpty(this.Type)) 
                encryptedKeyElement.SetAttribute("Type", this.Type);
            if (!String.IsNullOrEmpty(this.MimeType))
                encryptedKeyElement.SetAttribute("MimeType", this.MimeType);
            if (!String.IsNullOrEmpty(this.Encoding)) 
                encryptedKeyElement.SetAttribute("Encoding", this.Encoding);
            if (!String.IsNullOrEmpty(this.Recipient)) 
                encryptedKeyElement.SetAttribute("Recipient", this.Recipient); 

            // EncryptionMethod 
            if (this.EncryptionMethod != null)
                encryptedKeyElement.AppendChild(this.EncryptionMethod.GetXml(document));

            // KeyInfo 
            if (this.KeyInfo.Count > 0)
                encryptedKeyElement.AppendChild(this.KeyInfo.GetXml(document)); 
 
            // CipherData
            if (this.CipherData == null) 
                throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Xml_MissingCipherData"));
            encryptedKeyElement.AppendChild(this.CipherData.GetXml(document));

            // EncryptionProperties 
            if (this.EncryptionProperties.Count > 0) {
                XmlElement encryptionPropertiesElement = document.CreateElement("EncryptionProperties", EncryptedXml.XmlEncNamespaceUrl); 
                for (int index = 0; index < this.EncryptionProperties.Count; index++) { 
                    EncryptionProperty ep = this.EncryptionProperties.Item(index);
                    encryptionPropertiesElement.AppendChild(ep.GetXml(document)); 
                }
                encryptedKeyElement.AppendChild(encryptionPropertiesElement);
            }
 
            // ReferenceList
            if (this.ReferenceList.Count > 0) { 
                XmlElement referenceListElement = document.CreateElement("ReferenceList", EncryptedXml.XmlEncNamespaceUrl); 
                for (int index = 0; index < this.ReferenceList.Count; index++) {
                    referenceListElement.AppendChild(this.ReferenceList[index].GetXml(document)); 
                }
                encryptedKeyElement.AppendChild(referenceListElement);
            }
 
            // CarriedKeyName
            if (this.CarriedKeyName != null) { 
                XmlElement carriedKeyNameElement = (XmlElement) document.CreateElement("CarriedKeyName", EncryptedXml.XmlEncNamespaceUrl); 
                XmlText carriedKeyNameText = document.CreateTextNode(this.CarriedKeyName);
                carriedKeyNameElement.AppendChild(carriedKeyNameText); 
                encryptedKeyElement.AppendChild(carriedKeyNameElement);
            }

            return encryptedKeyElement; 
        }
    } 
 
    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
    public sealed class ReferenceList : IList { 
        private ArrayList m_references;

        public ReferenceList() {
            m_references = new ArrayList(); 
        }
 
        public IEnumerator GetEnumerator() { 
            return m_references.GetEnumerator();
        } 

        public int Count {
            get { return m_references.Count; }
        } 

        public int Add(Object value) { 
            if (value == null) 
                throw new ArgumentNullException("value");
 
            if (!(value is DataReference) && !(value is KeyReference))
                throw new ArgumentException(SecurityResources.GetResourceString("Cryptography_Xml_IncorrectObjectType"), "value");

            return m_references.Add(value); 
        }
 
        public void Clear() { 
            m_references.Clear();
        } 

        public bool Contains(Object value) {
            return m_references.Contains(value);
        } 

        public int IndexOf(Object value) { 
            return m_references.IndexOf(value); 
        }
 
        public void Insert(int index, Object value) {
            if (value == null)
                throw new ArgumentNullException("value");
 
            if (!(value is DataReference) && !(value is KeyReference))
                throw new ArgumentException(SecurityResources.GetResourceString("Cryptography_Xml_IncorrectObjectType"), "value"); 
 
            m_references.Insert(index, value);
        } 

        public void Remove(Object value) {
            m_references.Remove(value);
        } 

        public void RemoveAt(int index) { 
            m_references.RemoveAt(index); 
        }
 
        public EncryptedReference Item(int index) {
            return (EncryptedReference) m_references[index];
        }
 
        [System.Runtime.CompilerServices.IndexerName ("ItemOf")]
        public EncryptedReference this[int index] { 
            get { 
                return this.Item(index);
            } 
            set {
                ((IList) this)[index] = value;
            }
        } 

        ///  
        Object IList.this[int index] { 
            get { return m_references[index]; }
            set { 
                if (value == null)
                    throw new ArgumentNullException("value");

                if (!(value is DataReference) && !(value is KeyReference)) 
                    throw new ArgumentException(SecurityResources.GetResourceString("Cryptography_Xml_IncorrectObjectType"), "value");
 
                m_references[index] = value; 
            }
        } 

        public void CopyTo(Array array, int index) {
            m_references.CopyTo(array, index);
        } 

        Boolean IList.IsFixedSize { 
            get { return m_references.IsFixedSize; } 
        }
 
        Boolean IList.IsReadOnly {
            get { return m_references.IsReadOnly; }
        }
 
        public Object SyncRoot {
            get { return m_references.SyncRoot; } 
        } 

        public bool IsSynchronized { 
            get { return m_references.IsSynchronized; }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK