Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Security / Cryptography / ICspAsymmetricAlgorithm.cs / 1 / ICspAsymmetricAlgorithm.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // ICspAsymmetricAlgorithm.cs // namespace System.Security.Cryptography { using System.Security.AccessControl; using System.Security.Permissions; [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public enum KeyNumber { Exchange = 1, Signature = 2 } [System.Runtime.InteropServices.ComVisible(true)] public sealed class CspKeyContainerInfo { private CspParameters m_parameters; private bool m_randomKeyContainer; private CspKeyContainerInfo () {} internal CspKeyContainerInfo (CspParameters parameters, bool randomKeyContainer) { KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.NoFlags); KeyContainerPermissionAccessEntry entry = new KeyContainerPermissionAccessEntry(parameters, KeyContainerPermissionFlags.Open); kp.AccessEntries.Add(entry); kp.Demand(); m_parameters = new CspParameters(parameters); if (m_parameters.KeyNumber == -1) { if (m_parameters.ProviderType == Constants.PROV_RSA_FULL) m_parameters.KeyNumber = Constants.AT_KEYEXCHANGE; else if (m_parameters.ProviderType == Constants.PROV_DSS_DH) m_parameters.KeyNumber = Constants.AT_SIGNATURE; } m_randomKeyContainer = randomKeyContainer; } public CspKeyContainerInfo (CspParameters parameters) : this (parameters, false) {} public bool MachineKeyStore { get { return (m_parameters.Flags & CspProviderFlags.UseMachineKeyStore) == CspProviderFlags.UseMachineKeyStore ? true : false; } } public string ProviderName { get { return m_parameters.ProviderName; } } public int ProviderType { get { return m_parameters.ProviderType; } } public string KeyContainerName { get { return m_parameters.KeyContainerName; } } public string UniqueKeyContainerName { get { if (Utils.Win2KCrypto == 0) throw new NotSupportedException(Environment.GetResourceString("NotSupported_Method")); SafeProvHandle safeProvHandle = SafeProvHandle.InvalidHandle; int hr = Utils._OpenCSP(m_parameters, Constants.CRYPT_SILENT, ref safeProvHandle); if (hr != Constants.S_OK) throw new CryptographicException(Environment.GetResourceString("Cryptography_CSP_NotFound")); string uniqueContainerName = (string) Utils._GetProviderParameter(safeProvHandle, m_parameters.KeyNumber, Constants.CLR_UNIQUE_CONTAINER); safeProvHandle.Dispose(); return uniqueContainerName; } } public KeyNumber KeyNumber { get { return (KeyNumber) m_parameters.KeyNumber; } } public bool Exportable { get { if (Utils.Win2KCrypto == 0) throw new NotSupportedException(Environment.GetResourceString("NotSupported_Method")); // Assume hardware keys are not exportable. if (this.HardwareDevice) return false; SafeProvHandle safeProvHandle = SafeProvHandle.InvalidHandle; int hr = Utils._OpenCSP(m_parameters, Constants.CRYPT_SILENT, ref safeProvHandle); if (hr != Constants.S_OK) throw new CryptographicException(Environment.GetResourceString("Cryptography_CSP_NotFound")); byte[] isExportable = (byte[]) Utils._GetProviderParameter(safeProvHandle, m_parameters.KeyNumber, Constants.CLR_EXPORTABLE); safeProvHandle.Dispose(); return (isExportable[0] == 1); } } public bool HardwareDevice { get { SafeProvHandle safeProvHandle = SafeProvHandle.InvalidHandle; CspParameters parameters = new CspParameters(m_parameters); parameters.KeyContainerName = null; parameters.Flags = (parameters.Flags & CspProviderFlags.UseMachineKeyStore) != 0 ? CspProviderFlags.UseMachineKeyStore : 0; uint flags = 0; if (Utils.Win2KCrypto == 1) flags |= Constants.CRYPT_VERIFYCONTEXT; int hr = Utils._OpenCSP(parameters, flags, ref safeProvHandle); if (hr != Constants.S_OK) throw new CryptographicException(Environment.GetResourceString("Cryptography_CSP_NotFound")); byte[] isHardwareDevice = (byte[]) Utils._GetProviderParameter(safeProvHandle, parameters.KeyNumber, Constants.CLR_HARDWARE); safeProvHandle.Dispose(); return (isHardwareDevice[0] == 1); } } public bool Removable { get { SafeProvHandle safeProvHandle = SafeProvHandle.InvalidHandle; CspParameters parameters = new CspParameters(m_parameters); parameters.KeyContainerName = null; parameters.Flags = (parameters.Flags & CspProviderFlags.UseMachineKeyStore) != 0 ? CspProviderFlags.UseMachineKeyStore : 0; uint flags = 0; if (Utils.Win2KCrypto == 1) flags |= Constants.CRYPT_VERIFYCONTEXT; int hr = Utils._OpenCSP(parameters, flags, ref safeProvHandle); if (hr != Constants.S_OK) throw new CryptographicException(Environment.GetResourceString("Cryptography_CSP_NotFound")); byte[] isRemovable = (byte[]) Utils._GetProviderParameter(safeProvHandle, parameters.KeyNumber, Constants.CLR_REMOVABLE); safeProvHandle.Dispose(); return (isRemovable[0] == 1); } } public bool Accessible { get { if (Utils.Win2KCrypto == 0) throw new NotSupportedException(Environment.GetResourceString("NotSupported_Method")); // This method will pop-up a UI for hardware keys. SafeProvHandle safeProvHandle = SafeProvHandle.InvalidHandle; int hr = Utils._OpenCSP(m_parameters, Constants.CRYPT_SILENT, ref safeProvHandle); if (hr != Constants.S_OK) return false; byte[] isAccessible = (byte[]) Utils._GetProviderParameter(safeProvHandle, m_parameters.KeyNumber, Constants.CLR_ACCESSIBLE); safeProvHandle.Dispose(); return (isAccessible[0] == 1); } } public bool Protected { get { // Assume hardware keys are protected. if (this.HardwareDevice == true) return true; if (Utils.Win2KCrypto == 0) throw new NotSupportedException(Environment.GetResourceString("NotSupported_Method")); SafeProvHandle safeProvHandle = SafeProvHandle.InvalidHandle; int hr = Utils._OpenCSP(m_parameters, Constants.CRYPT_SILENT, ref safeProvHandle); if (hr != Constants.S_OK) throw new CryptographicException(Environment.GetResourceString("Cryptography_CSP_NotFound")); byte[] isProtected = (byte[]) Utils._GetProviderParameter(safeProvHandle, m_parameters.KeyNumber, Constants.CLR_PROTECTED); safeProvHandle.Dispose(); return (isProtected[0] == 1); } } public CryptoKeySecurity CryptoKeySecurity { get { if (Utils.Win2KCrypto == 0) throw new NotSupportedException(Environment.GetResourceString("NotSupported_Method")); KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.NoFlags); KeyContainerPermissionAccessEntry entry = new KeyContainerPermissionAccessEntry(m_parameters, KeyContainerPermissionFlags.ChangeAcl | KeyContainerPermissionFlags.ViewAcl); kp.AccessEntries.Add(entry); kp.Demand(); SafeProvHandle safeProvHandle = SafeProvHandle.InvalidHandle; int hr = Utils._OpenCSP(m_parameters, Constants.CRYPT_SILENT, ref safeProvHandle); if (hr != Constants.S_OK) throw new CryptographicException(Environment.GetResourceString("Cryptography_CSP_NotFound")); using (safeProvHandle) { return Utils.GetKeySetSecurityInfo(safeProvHandle, AccessControlSections.All); } } } public bool RandomlyGenerated { get { return m_randomKeyContainer; } } } [System.Runtime.InteropServices.ComVisible(true)] public interface ICspAsymmetricAlgorithm { CspKeyContainerInfo CspKeyContainerInfo { get; } byte[] ExportCspBlob (bool includePrivateParameters); void ImportCspBlob (byte[] rawData); } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- QuaternionAnimationBase.cs
- MetadataArtifactLoaderCompositeFile.cs
- Int32Animation.cs
- CommandDevice.cs
- WebPartAddingEventArgs.cs
- HatchBrush.cs
- Stacktrace.cs
- MonthCalendar.cs
- WebRequestModuleElementCollection.cs
- XmlSchemaSet.cs
- DrawingBrush.cs
- AnnotationObservableCollection.cs
- MgmtConfigurationRecord.cs
- FlowNode.cs
- TreeViewImageKeyConverter.cs
- RequestSecurityTokenResponse.cs
- X509Utils.cs
- BooleanAnimationBase.cs
- ObfuscateAssemblyAttribute.cs
- CommandPlan.cs
- XmlEntity.cs
- ResizingMessageFilter.cs
- TextEditorMouse.cs
- HttpChannelHelper.cs
- ExpressionParser.cs
- OneWayChannelListener.cs
- ExpressionNode.cs
- ProxyAttribute.cs
- SafeMILHandle.cs
- UniqueIdentifierService.cs
- TemplateControlBuildProvider.cs
- recordstatefactory.cs
- ProviderMetadataCachedInformation.cs
- AuthenticationServiceManager.cs
- MemoryStream.cs
- GregorianCalendar.cs
- XmlnsDefinitionAttribute.cs
- IgnoreSectionHandler.cs
- OutputScope.cs
- DetailsViewDeletedEventArgs.cs
- AddInAdapter.cs
- UIElementParagraph.cs
- LinearQuaternionKeyFrame.cs
- BaseParser.cs
- DesignerSerializationOptionsAttribute.cs
- LineInfo.cs
- DataBindingExpressionBuilder.cs
- MachinePropertyVariants.cs
- HideDisabledControlAdapter.cs
- SettingsBindableAttribute.cs
- WebServiceClientProxyGenerator.cs
- LassoHelper.cs
- TabControlEvent.cs
- SimpleBitVector32.cs
- FieldNameLookup.cs
- _PooledStream.cs
- ISessionStateStore.cs
- CompilerWrapper.cs
- StrongTypingException.cs
- MasterPageBuildProvider.cs
- EmbossBitmapEffect.cs
- ComboBoxAutomationPeer.cs
- ArrayConverter.cs
- HttpContextBase.cs
- FormsAuthenticationUser.cs
- ServiceModelSecurityTokenRequirement.cs
- SmiEventStream.cs
- EntityProviderFactory.cs
- ProfileGroupSettings.cs
- X509SecurityToken.cs
- JournalEntryListConverter.cs
- FocusChangedEventArgs.cs
- SecurityRuntime.cs
- DataGridTableStyleMappingNameEditor.cs
- DictionaryEntry.cs
- CollectionBase.cs
- CustomError.cs
- MemoryPressure.cs
- control.ime.cs
- PropertyDescriptorCollection.cs
- ModelPerspective.cs
- DirectionalLight.cs
- XmlSchemaSimpleContent.cs
- dbenumerator.cs
- ConcurrentBag.cs
- PathGradientBrush.cs
- SqlNotificationRequest.cs
- DocumentDesigner.cs
- SuspendDesigner.cs
- ReverseQueryOperator.cs
- ServiceOperationParameter.cs
- BindStream.cs
- XmlHierarchicalEnumerable.cs
- GatewayDefinition.cs
- validationstate.cs
- TraceUtils.cs
- COM2PictureConverter.cs
- InvalidPropValue.cs
- ApplicationServiceManager.cs
- AbsoluteQuery.cs