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