Certificate.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 / Orcas / SP / wpf / src / Base / MS / Internal / IO / Packaging / Certificate.cs / 1 / Certificate.cs

                            //------------------------------------------------------------------------------ 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//  
//
// Description: 
//  Handles serialization to/from X509 Certificate part (X509v3 = ASN.1 DER format) 
//
// History: 
//  03/22/2004: BruceMac: Initial Implementation
//
//-----------------------------------------------------------------------------
 
using System;
using System.Diagnostics;                               // for Assert 
using System.Security.Cryptography.X509Certificates; 
using System.Windows;                                   // For Exception strings - SRID
using System.IO.Packaging; 
using System.IO;                                        // for Stream
using MS.Internal;                                      // For ContentType

namespace MS.Internal.IO.Packaging 
{
    ///  
    /// CertificatePart 
    /// 
    internal class CertificatePart 
    {
        #region Internal Members
        //-----------------------------------------------------
        // 
        //  Internal Properties
        // 
        //----------------------------------------------------- 
        /// 
        /// Type of relationship to a Certificate Part 
        /// 
        static internal string RelationshipType
        {
            get 
            {
                return _certificatePartRelationshipType; 
            } 
        }
 
        /// 
        /// Prefix of auto-generated Certificate Part names
        /// 
        static internal string PartNamePrefix 
        {
            get 
            { 
                return _certificatePartNamePrefix;
            } 
        }

        /// 
        /// Extension of Certificate Part file names 
        /// 
        static internal string PartNameExtension 
        { 
            get
            { 
                return _certificatePartNameExtension;
            }
        }
 
        /// 
        /// ContentType of Certificate Parts 
        ///  
        static internal ContentType ContentType
        { 
            get
            {
                return _certificatePartContentType;
            } 
        }
 
        internal Uri Uri 
        {
            get 
            {
                return _part.Uri;
            }
        } 

        //------------------------------------------------------ 
        // 
        //  Internal Methods
        // 
        //-----------------------------------------------------
        /// 
        /// Certificate to associate with this Certificate Part
        ///  
        /// 
        /// stream is too large 
        internal X509Certificate2 GetCertificate() 
        {
            // lazy init 
            if (_certificate == null)
            {
                // obtain from the part
                using (Stream s = _part.GetStream()) 
                {
                    if (s.Length > 0) 
                    { 
                        // throw if stream is beyond any reasonable length
                        if (s.Length > _maximumCertificateStreamLength) 
                            throw new FileFormatException(SR.Get(SRID.CorruptedData));

                        // X509Certificate constructor desires a byte array
                        Byte[] byteArray = new Byte[s.Length]; 
                        PackagingUtilities.ReliableRead(s, byteArray, 0, (int)s.Length);
                        _certificate = new X509Certificate2(byteArray); 
                    } 
                }
            } 
            return _certificate;
        }

        internal void SetCertificate(X509Certificate2 certificate) 
        {
            if (certificate == null) 
                throw new ArgumentNullException("certificate"); 

            _certificate = certificate; 

            // persist to the part
            Byte[] byteArray = _certificate.GetRawCertData();
 
            // FileMode.Create will ensure that the stream will shrink if overwritten
            using (Stream s = _part.GetStream(FileMode.Create, FileAccess.Write)) 
            { 
                s.Write(byteArray, 0, byteArray.Length);
            } 
        }

        /// 
        /// CertificatePart constructor 
        /// 
        internal CertificatePart(Package container, Uri partName) 
        { 
            if (container == null)
                throw new ArgumentNullException("container"); 

            if (partName == null)
                throw new ArgumentNullException("partName");
 
            partName = PackUriHelper.ValidatePartUri(partName);
 
            // create if not found 
            if (container.PartExists(partName))
            { 
                // open the part
                _part = container.GetPart(partName);

                // ensure the part is of the expected type 
                if (_part.ValidatedContentType.AreTypeAndSubTypeEqual(_certificatePartContentType) == false)
                    throw new FileFormatException(SR.Get(SRID.CertificatePartContentTypeMismatch)); 
            } 
            else
            { 
                // create the part
                _part = container.CreatePart(partName, _certificatePartContentType.ToString());
            }
        } 

        //------------------------------------------------------ 
        // 
        //  Private Fields
        // 
        //------------------------------------------------------
        private PackagePart             _part;          // part that houses the certificate
        private X509Certificate2       _certificate;   // certificate itself
 
        // certificate part constants
        private static readonly ContentType _certificatePartContentType = 
            new ContentType("application/vnd.openxmlformats-package.digital-signature-certificate"); 
        private static readonly string _certificatePartNamePrefix = "/package/services/digital-signature/certificate/";
        private static readonly string _certificatePartNameExtension = ".cer"; 
        private static readonly string _certificatePartRelationshipType = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/certificate";
        private static long             _maximumCertificateStreamLength = 0x40000;   // 4MB
        #endregion Private Members
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------ 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//  
//
// Description: 
//  Handles serialization to/from X509 Certificate part (X509v3 = ASN.1 DER format) 
//
// History: 
//  03/22/2004: BruceMac: Initial Implementation
//
//-----------------------------------------------------------------------------
 
using System;
using System.Diagnostics;                               // for Assert 
using System.Security.Cryptography.X509Certificates; 
using System.Windows;                                   // For Exception strings - SRID
using System.IO.Packaging; 
using System.IO;                                        // for Stream
using MS.Internal;                                      // For ContentType

namespace MS.Internal.IO.Packaging 
{
    ///  
    /// CertificatePart 
    /// 
    internal class CertificatePart 
    {
        #region Internal Members
        //-----------------------------------------------------
        // 
        //  Internal Properties
        // 
        //----------------------------------------------------- 
        /// 
        /// Type of relationship to a Certificate Part 
        /// 
        static internal string RelationshipType
        {
            get 
            {
                return _certificatePartRelationshipType; 
            } 
        }
 
        /// 
        /// Prefix of auto-generated Certificate Part names
        /// 
        static internal string PartNamePrefix 
        {
            get 
            { 
                return _certificatePartNamePrefix;
            } 
        }

        /// 
        /// Extension of Certificate Part file names 
        /// 
        static internal string PartNameExtension 
        { 
            get
            { 
                return _certificatePartNameExtension;
            }
        }
 
        /// 
        /// ContentType of Certificate Parts 
        ///  
        static internal ContentType ContentType
        { 
            get
            {
                return _certificatePartContentType;
            } 
        }
 
        internal Uri Uri 
        {
            get 
            {
                return _part.Uri;
            }
        } 

        //------------------------------------------------------ 
        // 
        //  Internal Methods
        // 
        //-----------------------------------------------------
        /// 
        /// Certificate to associate with this Certificate Part
        ///  
        /// 
        /// stream is too large 
        internal X509Certificate2 GetCertificate() 
        {
            // lazy init 
            if (_certificate == null)
            {
                // obtain from the part
                using (Stream s = _part.GetStream()) 
                {
                    if (s.Length > 0) 
                    { 
                        // throw if stream is beyond any reasonable length
                        if (s.Length > _maximumCertificateStreamLength) 
                            throw new FileFormatException(SR.Get(SRID.CorruptedData));

                        // X509Certificate constructor desires a byte array
                        Byte[] byteArray = new Byte[s.Length]; 
                        PackagingUtilities.ReliableRead(s, byteArray, 0, (int)s.Length);
                        _certificate = new X509Certificate2(byteArray); 
                    } 
                }
            } 
            return _certificate;
        }

        internal void SetCertificate(X509Certificate2 certificate) 
        {
            if (certificate == null) 
                throw new ArgumentNullException("certificate"); 

            _certificate = certificate; 

            // persist to the part
            Byte[] byteArray = _certificate.GetRawCertData();
 
            // FileMode.Create will ensure that the stream will shrink if overwritten
            using (Stream s = _part.GetStream(FileMode.Create, FileAccess.Write)) 
            { 
                s.Write(byteArray, 0, byteArray.Length);
            } 
        }

        /// 
        /// CertificatePart constructor 
        /// 
        internal CertificatePart(Package container, Uri partName) 
        { 
            if (container == null)
                throw new ArgumentNullException("container"); 

            if (partName == null)
                throw new ArgumentNullException("partName");
 
            partName = PackUriHelper.ValidatePartUri(partName);
 
            // create if not found 
            if (container.PartExists(partName))
            { 
                // open the part
                _part = container.GetPart(partName);

                // ensure the part is of the expected type 
                if (_part.ValidatedContentType.AreTypeAndSubTypeEqual(_certificatePartContentType) == false)
                    throw new FileFormatException(SR.Get(SRID.CertificatePartContentTypeMismatch)); 
            } 
            else
            { 
                // create the part
                _part = container.CreatePart(partName, _certificatePartContentType.ToString());
            }
        } 

        //------------------------------------------------------ 
        // 
        //  Private Fields
        // 
        //------------------------------------------------------
        private PackagePart             _part;          // part that houses the certificate
        private X509Certificate2       _certificate;   // certificate itself
 
        // certificate part constants
        private static readonly ContentType _certificatePartContentType = 
            new ContentType("application/vnd.openxmlformats-package.digital-signature-certificate"); 
        private static readonly string _certificatePartNamePrefix = "/package/services/digital-signature/certificate/";
        private static readonly string _certificatePartNameExtension = ".cer"; 
        private static readonly string _certificatePartRelationshipType = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/certificate";
        private static long             _maximumCertificateStreamLength = 0x40000;   // 4MB
        #endregion Private Members
    } 
}

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

                        

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