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
- CodeSubDirectoriesCollection.cs
- NamedPermissionSet.cs
- ExceptionRoutedEventArgs.cs
- SchemaSetCompiler.cs
- AmbientLight.cs
- MouseOverProperty.cs
- UnsafeNativeMethods.cs
- TreeNodeBindingDepthConverter.cs
- PeerNameResolver.cs
- SafeSystemMetrics.cs
- TypeUtil.cs
- TcpHostedTransportConfiguration.cs
- CompilerGlobalScopeAttribute.cs
- Hashtable.cs
- XmlWellformedWriter.cs
- ReferenceService.cs
- TreeViewHitTestInfo.cs
- XamlTemplateSerializer.cs
- SqlNode.cs
- CannotUnloadAppDomainException.cs
- DateTimeOffset.cs
- CutCopyPasteHelper.cs
- HMACSHA1.cs
- GeometryHitTestParameters.cs
- DynamicActionMessageFilter.cs
- SignedXml.cs
- SettingsProperty.cs
- GC.cs
- UrlPath.cs
- XmlILConstructAnalyzer.cs
- Calendar.cs
- LongCountAggregationOperator.cs
- ClrProviderManifest.cs
- InternalDispatchObject.cs
- ServiceDescriptionImporter.cs
- QilReplaceVisitor.cs
- RegisteredDisposeScript.cs
- RTLAwareMessageBox.cs
- ByteAnimation.cs
- __Error.cs
- CodeEntryPointMethod.cs
- XmlStreamStore.cs
- BigInt.cs
- CompilerTypeWithParams.cs
- CompiledIdentityConstraint.cs
- GeneralTransform3D.cs
- RenderData.cs
- DeflateStream.cs
- SerializationInfoEnumerator.cs
- ParameterCollection.cs
- PagesChangedEventArgs.cs
- APCustomTypeDescriptor.cs
- DesignerActionVerbItem.cs
- Dispatcher.cs
- ViewManager.cs
- WebRequestModulesSection.cs
- ComboBox.cs
- WMIInterop.cs
- WorkflowInstanceProxy.cs
- QilExpression.cs
- OracleRowUpdatedEventArgs.cs
- MaterialCollection.cs
- ManagementScope.cs
- ApplicationFileCodeDomTreeGenerator.cs
- FieldBuilder.cs
- PointHitTestParameters.cs
- RequestedSignatureDialog.cs
- QueryableDataSourceEditData.cs
- Module.cs
- MenuCommandService.cs
- VectorAnimationBase.cs
- HttpServerVarsCollection.cs
- PropertyCondition.cs
- WebRequestModuleElement.cs
- ColorInterpolationModeValidation.cs
- ExecutionContext.cs
- Attributes.cs
- SqlClientWrapperSmiStream.cs
- DefinitionBase.cs
- RijndaelManaged.cs
- GACMembershipCondition.cs
- VirtualPathUtility.cs
- DBNull.cs
- CodeArgumentReferenceExpression.cs
- CommonDialog.cs
- DataServiceClientException.cs
- Logging.cs
- HttpHandlersSection.cs
- Pkcs7Recipient.cs
- DataGrid.cs
- BindableAttribute.cs
- DateTimeFormatInfoScanner.cs
- GPPOINT.cs
- PropertyToken.cs
- PropertyTabChangedEvent.cs
- WindowsRegion.cs
- DbCommandTree.cs
- XPathDescendantIterator.cs
- ActivityExecutionContextCollection.cs
- HashSetDebugView.cs