1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 using System.Diagnostics; 7 using System.Security.Cryptography; 8 using Internal.NativeCrypto; 9 10 namespace System.Security.Cryptography 11 { 12 public sealed class CspParameters 13 { 14 public int ProviderType; 15 public string ProviderName; 16 public string KeyContainerName; 17 public int KeyNumber; 18 private int _flags; 19 private IntPtr _parentWindowHandle; 20 21 /// <summary> 22 /// Flag property 23 /// </summary> 24 public CspProviderFlags Flags 25 { 26 get 27 { 28 return (CspProviderFlags)_flags; 29 } 30 set 31 { 32 int allFlags = 0x00FF; // this should change if more values are added to CspProviderFlags 33 Debug.Assert((CspProviderFlags.UseMachineKeyStore | 34 CspProviderFlags.UseDefaultKeyContainer | 35 CspProviderFlags.UseNonExportableKey | 36 CspProviderFlags.UseExistingKey | 37 CspProviderFlags.UseArchivableKey | 38 CspProviderFlags.UseUserProtectedKey | 39 CspProviderFlags.NoPrompt | 40 CspProviderFlags.CreateEphemeralKey) == (CspProviderFlags)allFlags, "allFlags does not match all CspProviderFlags"); 41 42 int flags = (int)value; 43 if ((flags & ~allFlags) != 0) 44 { 45 throw new ArgumentException(SR.Format(SR.Arg_EnumIllegalVal, nameof(value))); 46 } 47 _flags = flags; 48 } 49 } 50 51 [CLSCompliantAttribute(false)] 52 public SecureString KeyPassword { get; set; } 53 CspParameters()54 public CspParameters() : this(CapiHelper.DefaultRsaProviderType, null, null) { } 55 CspParameters(int dwTypeIn)56 public CspParameters(int dwTypeIn) : this(dwTypeIn, null, null) { } CspParameters(int dwTypeIn, string strProviderNameIn)57 public CspParameters(int dwTypeIn, string strProviderNameIn) : this(dwTypeIn, strProviderNameIn, null) { } CspParameters(int dwTypeIn, string strProviderNameIn, string strContainerNameIn)58 public CspParameters(int dwTypeIn, string strProviderNameIn, string strContainerNameIn) : 59 this(dwTypeIn, strProviderNameIn, strContainerNameIn, CspProviderFlags.NoFlags) 60 { 61 } 62 CspParameters(int providerType, string providerName, string keyContainerName, CspProviderFlags flags)63 internal CspParameters(int providerType, string providerName, string keyContainerName, CspProviderFlags flags) 64 { 65 ProviderType = providerType; 66 ProviderName = providerName; 67 KeyContainerName = keyContainerName; 68 KeyNumber = -1; 69 Flags = flags; 70 } 71 72 //Copy constructor CspParameters(CspParameters parameters)73 internal CspParameters(CspParameters parameters) 74 { 75 ProviderType = parameters.ProviderType; 76 ProviderName = parameters.ProviderName; 77 KeyContainerName = parameters.KeyContainerName; 78 KeyNumber = parameters.KeyNumber; 79 KeyPassword = parameters.KeyPassword; 80 Flags = parameters.Flags; 81 _parentWindowHandle = parameters._parentWindowHandle; 82 } 83 84 public IntPtr ParentWindowHandle 85 { 86 get 87 { 88 return _parentWindowHandle; 89 } 90 set 91 { 92 _parentWindowHandle = value; 93 } 94 } 95 } 96 } 97