Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TypeDescriptionProviderAttribute.cs
- XmlDocumentFragment.cs
- HwndSourceParameters.cs
- SimpleWorkerRequest.cs
- CodeLinePragma.cs
- TextServicesPropertyRanges.cs
- WebPartEditorOkVerb.cs
- TaskExtensions.cs
- PageTheme.cs
- ProgressBarHighlightConverter.cs
- MimeTypeMapper.cs
- WebCategoryAttribute.cs
- EntityDataSourceDesignerHelper.cs
- fixedPageContentExtractor.cs
- CheckoutException.cs
- AspNetCompatibilityRequirementsMode.cs
- WS2007HttpBinding.cs
- DecoderFallback.cs
- CredentialCache.cs
- InArgumentConverter.cs
- Intellisense.cs
- XmlSecureResolver.cs
- HideDisabledControlAdapter.cs
- keycontainerpermission.cs
- NativeMethods.cs
- BlockUIContainer.cs
- Message.cs
- DataGridItemCollection.cs
- DataGridViewCellEventArgs.cs
- CellIdBoolean.cs
- EventDescriptor.cs
- NonSerializedAttribute.cs
- QueryStack.cs
- PostBackOptions.cs
- ToolStripPanel.cs
- RSAPKCS1SignatureDeformatter.cs
- ConsumerConnectionPointCollection.cs
- ParallelRangeManager.cs
- WebAdminConfigurationHelper.cs
- JavaScriptObjectDeserializer.cs
- WebPartZoneCollection.cs
- ScrollItemPattern.cs
- GraphicsContext.cs
- QuadraticBezierSegment.cs
- PrintPageEvent.cs
- CodeMethodReturnStatement.cs
- DynamicFilterExpression.cs
- ExecutionContext.cs
- designeractionlistschangedeventargs.cs
- DragDropHelper.cs
- DataGridColumnReorderingEventArgs.cs
- TableLayoutPanel.cs
- Filter.cs
- NextPreviousPagerField.cs
- DataGridViewSortCompareEventArgs.cs
- DependencyObjectProvider.cs
- NullRuntimeConfig.cs
- prompt.cs
- DataGridViewToolTip.cs
- MsmqIntegrationSecurityMode.cs
- DefaultEventAttribute.cs
- FormViewUpdateEventArgs.cs
- ElementFactory.cs
- DocumentPageViewAutomationPeer.cs
- RecognizerStateChangedEventArgs.cs
- SessionStateModule.cs
- BinHexEncoder.cs
- FontStretchConverter.cs
- CompModHelpers.cs
- BamlWriter.cs
- SafeLibraryHandle.cs
- DataControlFieldTypeEditor.cs
- LogConverter.cs
- InstancePersistenceCommand.cs
- HorizontalAlignConverter.cs
- DecimalConstantAttribute.cs
- LogEntrySerialization.cs
- SafeRightsManagementSessionHandle.cs
- SmiContext.cs
- ProfilePropertyNameValidator.cs
- SqlStatistics.cs
- TextBlockAutomationPeer.cs
- IsolatedStorageException.cs
- SQLConvert.cs
- XmlQueryStaticData.cs
- BaseDataList.cs
- InstanceCreationEditor.cs
- SetterBase.cs
- ValidatingReaderNodeData.cs
- CheckedListBox.cs
- HttpCookieCollection.cs
- EncryptedData.cs
- httpserverutility.cs
- TdsParserSessionPool.cs
- QilUnary.cs
- DeflateStream.cs
- QilGeneratorEnv.cs
- ScopeElementCollection.cs
- XmlLoader.cs
- invalidudtexception.cs