Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Security / Cryptography / ICspAsymmetricAlgorithm.cs / 2 / 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.ProviderType == Constants.PROV_RSA_AES)
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);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlDataSourceCommandParser.cs
- SubMenuStyleCollection.cs
- FixedSOMPage.cs
- EdgeProfileValidation.cs
- X509Certificate2Collection.cs
- ListBase.cs
- SecurityDescriptor.cs
- GrammarBuilderWildcard.cs
- SerTrace.cs
- SqlBuilder.cs
- IdentityNotMappedException.cs
- ChannelManager.cs
- PanelDesigner.cs
- HMACSHA384.cs
- UpdatePanelTriggerCollection.cs
- DataServicePagingProviderWrapper.cs
- AudioException.cs
- FrameworkReadOnlyPropertyMetadata.cs
- DataGridViewCellConverter.cs
- SecurityState.cs
- TemplateParser.cs
- PixelShader.cs
- RuntimeCompatibilityAttribute.cs
- MostlySingletonList.cs
- SizeFConverter.cs
- Publisher.cs
- EventWaitHandleSecurity.cs
- MenuEventArgs.cs
- WebPartPersonalization.cs
- NativeWrapper.cs
- XmlReaderDelegator.cs
- PartialCachingControl.cs
- ScriptControl.cs
- Image.cs
- ClientSettingsStore.cs
- SystemNetHelpers.cs
- HeaderLabel.cs
- EventLogPermissionEntry.cs
- SmtpFailedRecipientsException.cs
- SQLMoney.cs
- ManagedIStream.cs
- ToolStripMenuItemDesigner.cs
- ClientConfigPaths.cs
- ChameleonKey.cs
- embossbitmapeffect.cs
- StringSorter.cs
- BitmapEffectGeneralTransform.cs
- AsmxEndpointPickerExtension.cs
- FontDriver.cs
- NameValuePair.cs
- HttpStaticObjectsCollectionWrapper.cs
- RichTextBox.cs
- PropertyEmitter.cs
- Attributes.cs
- RowToParametersTransformer.cs
- BuildProviderAppliesToAttribute.cs
- TransformationRules.cs
- DocumentPageView.cs
- FlowLayoutSettings.cs
- AmbientEnvironment.cs
- TileModeValidation.cs
- TargetException.cs
- LayoutSettings.cs
- TabItemWrapperAutomationPeer.cs
- SqlLiftIndependentRowExpressions.cs
- TransformerTypeCollection.cs
- Utils.cs
- MasterPage.cs
- TableLayoutSettingsTypeConverter.cs
- SapiRecoInterop.cs
- CreateUserErrorEventArgs.cs
- JavaScriptSerializer.cs
- Int16KeyFrameCollection.cs
- ResourceManagerWrapper.cs
- EventHandlerList.cs
- UIntPtr.cs
- TransformCryptoHandle.cs
- BoundField.cs
- ObjectQueryState.cs
- ItemChangedEventArgs.cs
- ClockController.cs
- ResourceIDHelper.cs
- Restrictions.cs
- MenuItemBindingCollection.cs
- OperatingSystem.cs
- bindurihelper.cs
- ImageListStreamer.cs
- VisualStateManager.cs
- XmlText.cs
- FontEmbeddingManager.cs
- LineMetrics.cs
- ToolStripManager.cs
- BooleanExpr.cs
- LineGeometry.cs
- MetadataItemCollectionFactory.cs
- LayoutEvent.cs
- DetailsViewPageEventArgs.cs
- SelectionItemProviderWrapper.cs
- RequestSecurityTokenResponseCollection.cs
- HiddenField.cs