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
- ParentQuery.cs
- BrowserInteropHelper.cs
- RequestCache.cs
- ModifiableIteratorCollection.cs
- TokenBasedSet.cs
- OdbcEnvironment.cs
- KerberosTokenFactoryCredential.cs
- AppSettingsExpressionBuilder.cs
- ProfilePropertySettingsCollection.cs
- Rules.cs
- AliasGenerator.cs
- DataGridTable.cs
- CultureInfoConverter.cs
- JoinSymbol.cs
- TimeSpan.cs
- ReadOnlyDictionary.cs
- SynchronizedInputAdaptor.cs
- LayoutEditorPart.cs
- GridSplitterAutomationPeer.cs
- CodeDOMUtility.cs
- NetworkCredential.cs
- SafeCoTaskMem.cs
- SQLUtility.cs
- RPIdentityRequirement.cs
- xmlformatgeneratorstatics.cs
- documentsequencetextcontainer.cs
- CompiledRegexRunner.cs
- DummyDataSource.cs
- MarkupExtensionSerializer.cs
- DataSvcMapFileSerializer.cs
- Dispatcher.cs
- _NetRes.cs
- _IPv6Address.cs
- SqlRewriteScalarSubqueries.cs
- InputScopeNameConverter.cs
- HttpHandlerAction.cs
- GestureRecognizer.cs
- RequestDescription.cs
- CreatingCookieEventArgs.cs
- TypeElement.cs
- WindowsGraphicsCacheManager.cs
- ManagedIStream.cs
- XamlGridLengthSerializer.cs
- PrtCap_Builder.cs
- AssemblyAttributes.cs
- ScriptReferenceEventArgs.cs
- ISSmlParser.cs
- CultureSpecificStringDictionary.cs
- MergablePropertyAttribute.cs
- BoolExpression.cs
- RecognizedAudio.cs
- DbMetaDataCollectionNames.cs
- MetaTable.cs
- BorderGapMaskConverter.cs
- ToolStripItemCollection.cs
- Fonts.cs
- SmtpLoginAuthenticationModule.cs
- JsonDeserializer.cs
- ResourceDictionary.cs
- PointLight.cs
- TransformedBitmap.cs
- NavigationService.cs
- DataViewListener.cs
- RegexMatch.cs
- TransformDescriptor.cs
- SelectionManager.cs
- TransformerInfoCollection.cs
- WbemProvider.cs
- StringUtil.cs
- LinqDataSourceDeleteEventArgs.cs
- XmlIncludeAttribute.cs
- StrokeFIndices.cs
- BindingNavigator.cs
- EdmFunction.cs
- ScalarType.cs
- BooleanFacetDescriptionElement.cs
- SourceChangedEventArgs.cs
- _ProxyRegBlob.cs
- AddInDeploymentState.cs
- LassoSelectionBehavior.cs
- NotificationContext.cs
- Expressions.cs
- DocumentPropertiesDialog.cs
- sqlser.cs
- NamespaceMapping.cs
- PermissionToken.cs
- SourceElementsCollection.cs
- ListBindingHelper.cs
- PartitionedDataSource.cs
- _HTTPDateParse.cs
- compensatingcollection.cs
- TextEditorParagraphs.cs
- ExpressionEditorAttribute.cs
- xmlsaver.cs
- DataGridViewCellPaintingEventArgs.cs
- TextTreeObjectNode.cs
- AsmxEndpointPickerExtension.cs
- TakeOrSkipWhileQueryOperator.cs
- LiteralSubsegment.cs
- InputLangChangeEvent.cs