2 // KeyPairPersistenceTest.cs: Unit tests for keypair persistence
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2004 Novell (http://www.novell.com)
10 using NUnit
.Framework
;
13 using System
.Security
.Cryptography
;
15 using Mono
.Security
.Cryptography
;
17 namespace MonoTests
.Mono
.Security
.Cryptography
{
20 public class KeyPairPersistenceTest
: Assertion
{
23 [ExpectedException (typeof (ArgumentNullException
))]
24 public void Constructor_Null ()
26 KeyPairPersistence kpp
= new KeyPairPersistence (null);
29 private void Compare (KeyPairPersistence saved
, KeyPairPersistence loaded
)
31 // Note: there is an additional Environement.NewLine
32 // at the end of the loaded string - that's why we do
33 // not use AssertEquals (for strings)
34 Assert ("Filename", loaded
.Filename
.StartsWith (saved
.Filename
));
35 Assert ("KeyValue", loaded
.KeyValue
.StartsWith (saved
.KeyValue
));
36 Assert ("Parameters.KeyContainerName", loaded
.Parameters
.KeyContainerName
.StartsWith (saved
.Parameters
.KeyContainerName
));
37 AssertEquals ("Parameters.KeyNumber", saved
.Parameters
.KeyNumber
, loaded
.Parameters
.KeyNumber
);
38 Assert ("Parameters.ProviderName", loaded
.Parameters
.ProviderName
.StartsWith (saved
.Parameters
.ProviderName
));
39 AssertEquals ("Parameters.ProviderType", saved
.Parameters
.ProviderType
, loaded
.Parameters
.ProviderType
);
43 public void CspType ()
45 CspParameters cp
= new CspParameters (-1);
46 KeyPairPersistence kpp
= new KeyPairPersistence (cp
, "<keypair/>");
49 Assert ("Save-Exists", File
.Exists (kpp
.Filename
));
50 // we didn't supply a name so we can't load it back
53 Assert ("Remove-!Exists", !File
.Exists (kpp
.Filename
));
57 public void CspTypeProvider ()
59 CspParameters cp
= new CspParameters (-2, "Provider");
60 KeyPairPersistence kpp
= new KeyPairPersistence (cp
, "<keypair/>");
63 Assert ("Save-Exists", File
.Exists (kpp
.Filename
));
64 // we didn't supply a name so we can't load it back
67 Assert ("Remove-!Exists", !File
.Exists (kpp
.Filename
));
71 public void CspTypeProviderContainer ()
73 CspParameters cp
= new CspParameters (-3, "Provider", "Container");
74 KeyPairPersistence kpp
= new KeyPairPersistence (cp
, "<keypair/>");
77 Assert ("Save-Exists", File
.Exists (kpp
.Filename
));
78 KeyPairPersistence kpp2
= new KeyPairPersistence (cp
);
79 Assert ("Load", kpp2
.Load ());
83 Assert ("Remove-!Exists", !File
.Exists (kpp
.Filename
));
87 public void CspTypeProviderContainerKeyNumber ()
89 CspParameters cp
= new CspParameters (-4, "Provider", "Container");
91 KeyPairPersistence kpp
= new KeyPairPersistence (cp
, "<keypair/>");
94 Assert ("Save-Exists", File
.Exists (kpp
.Filename
));
95 KeyPairPersistence kpp2
= new KeyPairPersistence (cp
);
96 Assert ("Load", kpp2
.Load ());
100 Assert ("Remove-!Exists", !File
.Exists (kpp
.Filename
));
104 public void CspFlagsDefault ()
106 CspParameters cp
= new CspParameters (-5, "Provider", "Container");
107 cp
.Flags
= CspProviderFlags
.UseDefaultKeyContainer
;
108 KeyPairPersistence kpp
= new KeyPairPersistence (cp
, "<keypair/>");
111 Assert ("Save-Exists", File
.Exists (kpp
.Filename
));
112 KeyPairPersistence kpp2
= new KeyPairPersistence (cp
);
113 Assert ("Load", kpp2
.Load ());
117 Assert ("Remove-!Exists", !File
.Exists (kpp
.Filename
));
121 public void CspFlagsMachine ()
123 CspParameters cp
= new CspParameters (-6, "Provider", "Container");
124 cp
.Flags
= CspProviderFlags
.UseMachineKeyStore
;
125 KeyPairPersistence kpp
= new KeyPairPersistence (cp
, "<keypair/>");
129 Assert ("Save-Exists", File
.Exists (kpp
.Filename
));
130 KeyPairPersistence kpp2
= new KeyPairPersistence (cp
);
131 Assert ("Load", kpp2
.Load ());
135 Assert ("Remove-!Exists", !File
.Exists (kpp
.Filename
));
137 catch (CryptographicException ce
) {
138 // not everyone can write to the machine store
139 if (!(ce
.InnerException
is UnauthorizedAccessException
))
145 public void CspFlagsDefaultMachine ()
147 CspParameters cp
= new CspParameters (-7, "Provider", "Container");
148 cp
.Flags
= CspProviderFlags
.UseDefaultKeyContainer
| CspProviderFlags
.UseMachineKeyStore
;
149 KeyPairPersistence kpp
= new KeyPairPersistence (cp
, "<keypair/>");
153 Assert ("Save-Exists", File
.Exists (kpp
.Filename
));
154 KeyPairPersistence kpp2
= new KeyPairPersistence (cp
);
155 Assert ("Load", kpp2
.Load ());
159 Assert ("Remove-!Exists", !File
.Exists (kpp
.Filename
));
161 catch (CryptographicException ce
) {
162 // not everyone can write to the machine store
163 if (!(ce
.InnerException
is UnauthorizedAccessException
))
169 public void CspNoChangesPermitted ()
171 CspParameters cp
= new CspParameters (-8, "Provider", "Container");
173 cp
.Flags
= CspProviderFlags
.UseMachineKeyStore
;
175 KeyPairPersistence kpp
= new KeyPairPersistence (cp
);
176 CspParameters copy
= kpp
.Parameters
;
177 copy
.Flags
= CspProviderFlags
.UseDefaultKeyContainer
;
178 copy
.KeyContainerName
= "NewContainerName";
180 copy
.ProviderName
= "NewProviderName";
181 copy
.ProviderType
= -9;
183 Assert ("Flags", cp
.Flags
!= copy
.Flags
);
184 Assert ("KeyContainerName", cp
.KeyContainerName
!= copy
.KeyContainerName
);
185 Assert ("KeyNumber", cp
.KeyNumber
!= copy
.KeyNumber
);
186 Assert ("ProviderName", cp
.ProviderName
!= copy
.ProviderName
);
187 Assert ("ProviderType", cp
.ProviderType
!= copy
.ProviderType
);