Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Security / Cryptography / ECDiffieHellmanCngPublicKey.cs / 1305376 / ECDiffieHellmanCngPublicKey.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== using System; using System.Runtime.Serialization; using System.Security; using System.Security.Permissions; using System.Diagnostics.Contracts; namespace System.Security.Cryptography { ////// Public key used to do key exchange with the ECDiffieHellmanCng algorithm /// [Serializable] [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class ECDiffieHellmanCngPublicKey : ECDiffieHellmanPublicKey { [NonSerialized] private CngKey m_key; private CngKeyBlobFormat m_format; ////// Wrap a CNG key /// //// [System.Security.SecurityCritical] internal ECDiffieHellmanCngPublicKey(CngKey key) : base(key.Export(CngKeyBlobFormat.EccPublicBlob)) { Contract.Requires(key != null && key.AlgorithmGroup == CngAlgorithmGroup.ECDiffieHellman); Contract.Ensures(m_format != null); m_format = CngKeyBlobFormat.EccPublicBlob; // // We need to make a copy of the key to prevent the situation where the ECDiffieHellmanCng algorithm // object is disposed (this disposing its key) before the ECDiffieHellmanCngPublic key is disposed. // // Accessing the handle in partial trust is safe because we're not exposing it back out to user code // new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert(); m_key = CngKey.Open(key.Handle, key.IsEphemeral ? CngKeyHandleOpenOptions.EphemeralKey : CngKeyHandleOpenOptions.None); CodeAccessPermission.RevertAssert(); } ///// /// Format the key blob is expressed in /// public CngKeyBlobFormat BlobFormat { get { Contract.Ensures(Contract.Result() != null); Contract.Assert(m_format != null); return m_format; } } /// /// Clean up the key /// protected override void Dispose(bool disposing) { try { if (disposing) { if (m_key != null) { m_key.Dispose(); } } } finally { base.Dispose(disposing); } } ////// Hydrate a public key from a blob /// //// [System.Security.SecurityCritical] public static ECDiffieHellmanPublicKey FromByteArray(byte[] publicKeyBlob, CngKeyBlobFormat format) { if (publicKeyBlob == null) { throw new ArgumentNullException("publicKeyBlob"); } if (format == null) { throw new ArgumentNullException("format"); } using (CngKey imported = CngKey.Import(publicKeyBlob, format)) { if (imported.AlgorithmGroup != CngAlgorithmGroup.ECDiffieHellman) { throw new ArgumentException(SR.GetString(SR.Cryptography_ArgECDHRequiresECDHKey)); } return new ECDiffieHellmanCngPublicKey(imported); } } ///// /// Hydrate a public key from XML /// /// See code:System.Security.Cryptography.Rfc4050KeyFormatter#RFC4050ECKeyFormat for information /// about the XML format used. /// //// [System.Security.SecurityCritical] public static ECDiffieHellmanCngPublicKey FromXmlString(string xml) { if (xml == null) { throw new ArgumentNullException("xml"); } using (CngKey imported = Rfc4050KeyFormatter.FromXml(xml)) { if (imported.AlgorithmGroup != CngAlgorithmGroup.ECDiffieHellman) { throw new ArgumentException(SR.GetString(SR.Cryptography_ArgECDHRequiresECDHKey), "xml"); } return new ECDiffieHellmanCngPublicKey(imported); } } ///// /// Import the public key into CNG /// ///public CngKey Import() { Contract.Ensures(Contract.Result () != null); Contract.Assert(m_format != null); return CngKey.Import(ToByteArray(), BlobFormat); } /// /// Convert the key blob to XML /// /// See code:System.Security.Cryptography.Rfc4050KeyFormatter#RFC4050ECKeyFormat for information /// about the XML format used. /// public override string ToXmlString() { Contract.Ensures(!String.IsNullOrEmpty(Contract.Result())); if (m_key == null) { m_key = Import(); } return Rfc4050KeyFormatter.ToXml(m_key); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== using System; using System.Runtime.Serialization; using System.Security; using System.Security.Permissions; using System.Diagnostics.Contracts; namespace System.Security.Cryptography { /// /// Public key used to do key exchange with the ECDiffieHellmanCng algorithm /// [Serializable] [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class ECDiffieHellmanCngPublicKey : ECDiffieHellmanPublicKey { [NonSerialized] private CngKey m_key; private CngKeyBlobFormat m_format; ////// Wrap a CNG key /// //// [System.Security.SecurityCritical] internal ECDiffieHellmanCngPublicKey(CngKey key) : base(key.Export(CngKeyBlobFormat.EccPublicBlob)) { Contract.Requires(key != null && key.AlgorithmGroup == CngAlgorithmGroup.ECDiffieHellman); Contract.Ensures(m_format != null); m_format = CngKeyBlobFormat.EccPublicBlob; // // We need to make a copy of the key to prevent the situation where the ECDiffieHellmanCng algorithm // object is disposed (this disposing its key) before the ECDiffieHellmanCngPublic key is disposed. // // Accessing the handle in partial trust is safe because we're not exposing it back out to user code // new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert(); m_key = CngKey.Open(key.Handle, key.IsEphemeral ? CngKeyHandleOpenOptions.EphemeralKey : CngKeyHandleOpenOptions.None); CodeAccessPermission.RevertAssert(); } ///// /// Format the key blob is expressed in /// public CngKeyBlobFormat BlobFormat { get { Contract.Ensures(Contract.Result() != null); Contract.Assert(m_format != null); return m_format; } } /// /// Clean up the key /// protected override void Dispose(bool disposing) { try { if (disposing) { if (m_key != null) { m_key.Dispose(); } } } finally { base.Dispose(disposing); } } ////// Hydrate a public key from a blob /// //// [System.Security.SecurityCritical] public static ECDiffieHellmanPublicKey FromByteArray(byte[] publicKeyBlob, CngKeyBlobFormat format) { if (publicKeyBlob == null) { throw new ArgumentNullException("publicKeyBlob"); } if (format == null) { throw new ArgumentNullException("format"); } using (CngKey imported = CngKey.Import(publicKeyBlob, format)) { if (imported.AlgorithmGroup != CngAlgorithmGroup.ECDiffieHellman) { throw new ArgumentException(SR.GetString(SR.Cryptography_ArgECDHRequiresECDHKey)); } return new ECDiffieHellmanCngPublicKey(imported); } } ///// /// Hydrate a public key from XML /// /// See code:System.Security.Cryptography.Rfc4050KeyFormatter#RFC4050ECKeyFormat for information /// about the XML format used. /// //// [System.Security.SecurityCritical] public static ECDiffieHellmanCngPublicKey FromXmlString(string xml) { if (xml == null) { throw new ArgumentNullException("xml"); } using (CngKey imported = Rfc4050KeyFormatter.FromXml(xml)) { if (imported.AlgorithmGroup != CngAlgorithmGroup.ECDiffieHellman) { throw new ArgumentException(SR.GetString(SR.Cryptography_ArgECDHRequiresECDHKey), "xml"); } return new ECDiffieHellmanCngPublicKey(imported); } } ///// /// Import the public key into CNG /// ///public CngKey Import() { Contract.Ensures(Contract.Result () != null); Contract.Assert(m_format != null); return CngKey.Import(ToByteArray(), BlobFormat); } /// /// Convert the key blob to XML /// /// See code:System.Security.Cryptography.Rfc4050KeyFormatter#RFC4050ECKeyFormat for information /// about the XML format used. /// public override string ToXmlString() { Contract.Ensures(!String.IsNullOrEmpty(Contract.Result())); if (m_key == null) { m_key = Import(); } return Rfc4050KeyFormatter.ToXml(m_key); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DetailsViewRow.cs
- VBCodeProvider.cs
- FaultPropagationRecord.cs
- StrongNameHelpers.cs
- WebBrowserUriTypeConverter.cs
- HttpAsyncResult.cs
- ProfileParameter.cs
- RelationshipNavigation.cs
- DrawingBrush.cs
- ButtonRenderer.cs
- StateItem.cs
- OrderedDictionary.cs
- CapacityStreamGeometryContext.cs
- HtmlListAdapter.cs
- TransformerTypeCollection.cs
- InternalTypeHelper.cs
- FreezableCollection.cs
- _NegotiateClient.cs
- XD.cs
- SmtpNegotiateAuthenticationModule.cs
- JavaScriptObjectDeserializer.cs
- IndexedString.cs
- ToolStripSplitStackLayout.cs
- TabItemAutomationPeer.cs
- SortDescriptionCollection.cs
- X509RawDataKeyIdentifierClause.cs
- CrossAppDomainChannel.cs
- PolyLineSegment.cs
- Parser.cs
- ErasingStroke.cs
- RuleInfoComparer.cs
- OleDbErrorCollection.cs
- SpeechUI.cs
- sitestring.cs
- SQLInt32.cs
- SqlDataSourceFilteringEventArgs.cs
- XmlToDatasetMap.cs
- __Error.cs
- Exception.cs
- _OSSOCK.cs
- CultureSpecificStringDictionary.cs
- PeerTransportElement.cs
- CompilationLock.cs
- RijndaelManagedTransform.cs
- PassportAuthenticationEventArgs.cs
- TextEndOfSegment.cs
- FixedNode.cs
- TreeViewImageIndexConverter.cs
- HttpServerProtocol.cs
- BamlResourceDeserializer.cs
- XPathQilFactory.cs
- ToolStripDropDownItem.cs
- NameScope.cs
- AdCreatedEventArgs.cs
- OracleNumber.cs
- BitmapFrame.cs
- Stroke.cs
- AuthenticationManager.cs
- METAHEADER.cs
- Zone.cs
- SafeViewOfFileHandle.cs
- LightweightCodeGenerator.cs
- ReadOnlyDataSourceView.cs
- KnownTypeAttribute.cs
- ADMembershipProvider.cs
- ArraySegment.cs
- MsmqIntegrationElement.cs
- UrlMappingsModule.cs
- ConfigurationHelpers.cs
- tibetanshape.cs
- SchemaConstraints.cs
- AnimationClockResource.cs
- UriSchemeKeyedCollection.cs
- HtmlMeta.cs
- DataGridViewCell.cs
- CheckedListBox.cs
- MemberMaps.cs
- GlyphCache.cs
- TextDecorationUnitValidation.cs
- DataGridViewRowStateChangedEventArgs.cs
- BindStream.cs
- PropertyDescriptor.cs
- TCEAdapterGenerator.cs
- ReflectionUtil.cs
- ClientTarget.cs
- FramingFormat.cs
- AssemblyAttributes.cs
- WeakReferenceList.cs
- entitydatasourceentitysetnameconverter.cs
- StyleXamlTreeBuilder.cs
- DirectoryNotFoundException.cs
- UserControlDocumentDesigner.cs
- Parsers.cs
- Model3DGroup.cs
- OperationInfo.cs
- TablePattern.cs
- HttpCachePolicy.cs
- ExpressionBindingCollection.cs
- DragEvent.cs
- ArrayTypeMismatchException.cs