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
- BindingCompleteEventArgs.cs
- EventLogEntry.cs
- ManagedWndProcTracker.cs
- IDispatchConstantAttribute.cs
- WebServiceEnumData.cs
- TimeSpanConverter.cs
- XmlSchemaAppInfo.cs
- IgnoreDataMemberAttribute.cs
- DynamicDocumentPaginator.cs
- DataGridViewComboBoxCell.cs
- PageThemeCodeDomTreeGenerator.cs
- CheckBox.cs
- Pointer.cs
- SqlClientFactory.cs
- ProfileGroupSettings.cs
- SqlConnectionHelper.cs
- RangeValueProviderWrapper.cs
- Ipv6Element.cs
- BitmapEffectGroup.cs
- ToolboxBitmapAttribute.cs
- SafeFileMapViewHandle.cs
- DelegatingConfigHost.cs
- TransformerConfigurationWizardBase.cs
- RawAppCommandInputReport.cs
- ArrayTypeMismatchException.cs
- MSAAWinEventWrap.cs
- ButtonAutomationPeer.cs
- TextEditorSelection.cs
- InternalsVisibleToAttribute.cs
- Converter.cs
- MaxMessageSizeStream.cs
- UriExt.cs
- EntryWrittenEventArgs.cs
- PointConverter.cs
- ImageMetadata.cs
- HttpModuleCollection.cs
- ActiveXSite.cs
- DrawingState.cs
- NetSectionGroup.cs
- ISCIIEncoding.cs
- SafeProcessHandle.cs
- TableLayoutColumnStyleCollection.cs
- sqlcontext.cs
- ParameterSubsegment.cs
- LogRecordSequence.cs
- DiagnosticTraceSource.cs
- DayRenderEvent.cs
- ActivationServices.cs
- TypedReference.cs
- WebHeaderCollection.cs
- RenderContext.cs
- formatter.cs
- HijriCalendar.cs
- TypeSystem.cs
- _HelperAsyncResults.cs
- RoleServiceManager.cs
- SqlCachedBuffer.cs
- CorrelationKeyCalculator.cs
- RowTypePropertyElement.cs
- CodeSnippetExpression.cs
- TypeToArgumentTypeConverter.cs
- DataGridViewCellCollection.cs
- BrushConverter.cs
- TextUtf8RawTextWriter.cs
- ConnectionPoolManager.cs
- ThrowHelper.cs
- TransformProviderWrapper.cs
- NameScope.cs
- QilFunction.cs
- dbdatarecord.cs
- RegistrationServices.cs
- Matrix3D.cs
- TextEmbeddedObject.cs
- SqlInfoMessageEvent.cs
- BCLDebug.cs
- DomainConstraint.cs
- ButtonBase.cs
- Thumb.cs
- SelectionRangeConverter.cs
- SqlGenericUtil.cs
- Tablet.cs
- MaskedTextBox.cs
- IteratorDescriptor.cs
- ProjectionRewriter.cs
- CssClassPropertyAttribute.cs
- LogManagementAsyncResult.cs
- DeploymentSection.cs
- WebHttpSecurityModeHelper.cs
- EdmItemError.cs
- MonikerSyntaxException.cs
- KeyBinding.cs
- OperatorExpressions.cs
- StandardOleMarshalObject.cs
- sqlinternaltransaction.cs
- SecurityProtocol.cs
- NavigationWindow.cs
- AlphaSortedEnumConverter.cs
- RadioButtonPopupAdapter.cs
- DefaultClaimSet.cs
- XmlTextReaderImplHelpers.cs