Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / SafeCryptHandles.cs / 1305376 / SafeCryptHandles.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IdentityModel { using System.ComponentModel; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Security.Cryptography; using System.ServiceModel.Diagnostics; using Microsoft.Win32.SafeHandles; class SafeProvHandle : SafeHandleZeroOrMinusOneIsInvalid { SafeProvHandle() : base(true) { } // 0 is an Invalid Handle SafeProvHandle(IntPtr handle) : base(true) { DiagnosticUtility.DebugAssert(handle == IntPtr.Zero, "SafeProvHandle constructor can only be called with IntPtr.Zero."); SetHandle(handle); } internal static SafeProvHandle InvalidHandle { get { return new SafeProvHandle(IntPtr.Zero); } } protected override bool ReleaseHandle() { // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. #pragma warning suppress 56523 // We are not interested in throwing an exception here if CloseHandle fails. return NativeMethods.CryptReleaseContext(handle, 0); } } class SafeKeyHandle : SafeHandleZeroOrMinusOneIsInvalid { SafeProvHandle provHandle = null; SafeKeyHandle() : base(true) { } // 0 is an Invalid Handle SafeKeyHandle(IntPtr handle) : base(true) { DiagnosticUtility.DebugAssert(handle == IntPtr.Zero, "SafeKeyHandle constructor can only be called with IntPtr.Zero."); SetHandle(handle); } internal static SafeKeyHandle InvalidHandle { get { return new SafeKeyHandle(IntPtr.Zero); } } protected override bool ReleaseHandle() { // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. #pragma warning suppress 56523 // We are not interested in throwing an exception here if CloseHandle fails. bool ret = NativeMethods.CryptDestroyKey(handle); if (this.provHandle != null) { this.provHandle.DangerousRelease(); this.provHandle = null; } return ret; } internal static unsafe SafeKeyHandle SafeCryptImportKey(SafeProvHandle provHandle, void* pbDataPtr, int cbData) { bool b = false; int err = 0; SafeKeyHandle keyHandle = null; RuntimeHelpers.PrepareConstrainedRegions(); try { provHandle.DangerousAddRef(ref b); } catch (Exception e) { if (b) { provHandle.DangerousRelease(); b = false; } if (!(e is ObjectDisposedException)) throw; } finally { if (b) { b = NativeMethods.CryptImportKey(provHandle, pbDataPtr, (uint)cbData, IntPtr.Zero, 0, out keyHandle); if (!b) { err = Marshal.GetLastWin32Error(); provHandle.DangerousRelease(); } else { // Take ownership of AddRef. Will Release at Close. keyHandle.provHandle = provHandle; } } } if (!b) { Utility.CloseInvalidOutSafeHandle(keyHandle); string reason = (err != 0) ? new Win32Exception(err).Message : String.Empty; throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.AESCryptImportKeyFailed, reason))); } return keyHandle; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IdentityModel { using System.ComponentModel; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Security.Cryptography; using System.ServiceModel.Diagnostics; using Microsoft.Win32.SafeHandles; class SafeProvHandle : SafeHandleZeroOrMinusOneIsInvalid { SafeProvHandle() : base(true) { } // 0 is an Invalid Handle SafeProvHandle(IntPtr handle) : base(true) { DiagnosticUtility.DebugAssert(handle == IntPtr.Zero, "SafeProvHandle constructor can only be called with IntPtr.Zero."); SetHandle(handle); } internal static SafeProvHandle InvalidHandle { get { return new SafeProvHandle(IntPtr.Zero); } } protected override bool ReleaseHandle() { // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. #pragma warning suppress 56523 // We are not interested in throwing an exception here if CloseHandle fails. return NativeMethods.CryptReleaseContext(handle, 0); } } class SafeKeyHandle : SafeHandleZeroOrMinusOneIsInvalid { SafeProvHandle provHandle = null; SafeKeyHandle() : base(true) { } // 0 is an Invalid Handle SafeKeyHandle(IntPtr handle) : base(true) { DiagnosticUtility.DebugAssert(handle == IntPtr.Zero, "SafeKeyHandle constructor can only be called with IntPtr.Zero."); SetHandle(handle); } internal static SafeKeyHandle InvalidHandle { get { return new SafeKeyHandle(IntPtr.Zero); } } protected override bool ReleaseHandle() { // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. #pragma warning suppress 56523 // We are not interested in throwing an exception here if CloseHandle fails. bool ret = NativeMethods.CryptDestroyKey(handle); if (this.provHandle != null) { this.provHandle.DangerousRelease(); this.provHandle = null; } return ret; } internal static unsafe SafeKeyHandle SafeCryptImportKey(SafeProvHandle provHandle, void* pbDataPtr, int cbData) { bool b = false; int err = 0; SafeKeyHandle keyHandle = null; RuntimeHelpers.PrepareConstrainedRegions(); try { provHandle.DangerousAddRef(ref b); } catch (Exception e) { if (b) { provHandle.DangerousRelease(); b = false; } if (!(e is ObjectDisposedException)) throw; } finally { if (b) { b = NativeMethods.CryptImportKey(provHandle, pbDataPtr, (uint)cbData, IntPtr.Zero, 0, out keyHandle); if (!b) { err = Marshal.GetLastWin32Error(); provHandle.DangerousRelease(); } else { // Take ownership of AddRef. Will Release at Close. keyHandle.provHandle = provHandle; } } } if (!b) { Utility.CloseInvalidOutSafeHandle(keyHandle); string reason = (err != 0) ? new Win32Exception(err).Message : String.Empty; throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.AESCryptImportKeyFailed, reason))); } return keyHandle; } } } // 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
- NetSectionGroup.cs
- ClientRuntimeConfig.cs
- ClassHandlersStore.cs
- NullRuntimeConfig.cs
- AnimationLayer.cs
- WorkflowInstanceUnhandledExceptionRecord.cs
- ToolStripDesignerUtils.cs
- Pens.cs
- PasswordPropertyTextAttribute.cs
- TraceProvider.cs
- Padding.cs
- TemplateControlBuildProvider.cs
- RedistVersionInfo.cs
- ProcessModelInfo.cs
- ProjectedWrapper.cs
- GridViewColumnHeaderAutomationPeer.cs
- FrameworkTextComposition.cs
- TextParagraphCache.cs
- WebBrowserUriTypeConverter.cs
- KeyToListMap.cs
- _NestedSingleAsyncResult.cs
- PeerApplicationLaunchInfo.cs
- OutgoingWebRequestContext.cs
- LongTypeConverter.cs
- PersonalizationProviderCollection.cs
- ErrorWrapper.cs
- ProjectionPlanCompiler.cs
- RayHitTestParameters.cs
- StringComparer.cs
- ExecutionEngineException.cs
- TrackingStringDictionary.cs
- TypeInfo.cs
- EnumerationRangeValidationUtil.cs
- WebPart.cs
- ConfigurationLocation.cs
- SelectionPattern.cs
- SpellerError.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- ReachVisualSerializerAsync.cs
- ArrayElementGridEntry.cs
- TrackingProvider.cs
- MenuStrip.cs
- CounterSampleCalculator.cs
- Dictionary.cs
- CodeGenHelper.cs
- ModelFactory.cs
- MexHttpBindingCollectionElement.cs
- ManipulationInertiaStartingEventArgs.cs
- HostExecutionContextManager.cs
- XPathDocument.cs
- CharacterShapingProperties.cs
- ITreeGenerator.cs
- ServiceHostFactory.cs
- AttachedPropertyBrowsableAttribute.cs
- DataPointer.cs
- RoleManagerEventArgs.cs
- XPathException.cs
- CounterCreationDataConverter.cs
- DataServiceStreamProviderWrapper.cs
- PlanCompilerUtil.cs
- SystemThemeKey.cs
- TabControlCancelEvent.cs
- ImageBrush.cs
- UnrecognizedAssertionsBindingElement.cs
- NavigatorOutput.cs
- SQLBinary.cs
- DecoderFallback.cs
- HandledEventArgs.cs
- AmbientLight.cs
- SettingsPropertyIsReadOnlyException.cs
- DataSourceView.cs
- CategoryNameCollection.cs
- TemplateBindingExtension.cs
- ToolStripControlHost.cs
- _NtlmClient.cs
- AutoResetEvent.cs
- OutputCacheProviderCollection.cs
- ProcessHost.cs
- CustomExpressionEventArgs.cs
- TypeToken.cs
- FixedSOMImage.cs
- AuthenticatedStream.cs
- Tracking.cs
- BaseDataListDesigner.cs
- TextBreakpoint.cs
- TextPointer.cs
- AppDomainGrammarProxy.cs
- FragmentQuery.cs
- SafeNativeMethodsMilCoreApi.cs
- CredentialCache.cs
- DispatcherObject.cs
- CaseInsensitiveComparer.cs
- MustUnderstandBehavior.cs
- ProtocolsSection.cs
- TraceProvider.cs
- GiveFeedbackEventArgs.cs
- XmlDataProvider.cs
- XmlDataDocument.cs
- SqlClientMetaDataCollectionNames.cs
- EventWaitHandleSecurity.cs