2 // X509EnhancedKeyUsageExtensionTest.cs
3 // - NUnit tests for X509EnhancedKeyUsageExtension
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using NUnit.Framework;
35 using System.Security.Cryptography;
36 using System.Security.Cryptography.X509Certificates;
38 namespace MonoTests.System.Security.Cryptography.X509Certificates {
41 public class X509EnhancedKeyUsageExtensionTest {
43 private const string oid = "2.5.29.37";
44 private const string fname = "Enhanced Key Usage";
47 public void ConstructorEmpty ()
49 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
50 Assert.IsFalse (eku.Critical, "Critical");
51 Assert.IsNull (eku.RawData, "RawData");
52 Assert.AreEqual (oid, eku.Oid.Value, "Oid.Value");
53 Assert.AreEqual (fname, eku.Oid.FriendlyName, "Oid.FriendlyName");
54 Assert.AreEqual (String.Empty, eku.Format (true), "Format(true)");
55 Assert.AreEqual (String.Empty, eku.Format (false), "Format(false)");
59 [ExpectedException (typeof (NullReferenceException))]
60 [Category ("NotWorking")] // MS bug reported as http://lab.msdn.microsoft.com/ProductFeedback/viewfeedback.aspx?feedbackid=34cdc5e9-c7f9-4f55-b390-288bfef6e44e
61 public void ConstructorEmpty_EnhancedKeyUsages ()
63 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
64 Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
68 public void ConstructorAsnEncodedData ()
70 AsnEncodedData aed = new AsnEncodedData (new byte[] { 0x30, 0x05, 0x06, 0x03, 0x2A, 0x03, 0x04 });
71 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
72 Assert.IsTrue (eku.Critical, "Critical");
73 Assert.AreEqual (7, eku.RawData.Length, "RawData"); // original Oid ignored
74 Assert.AreEqual (oid, eku.Oid.Value, "Oid.Value");
75 Assert.AreEqual (fname, eku.Oid.FriendlyName, "Oid.FriendlyName");
76 Assert.AreEqual (1, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
77 Assert.AreEqual ("1.2.3.4", eku.EnhancedKeyUsages[0].Value, "EnhancedKeyUsages Oid");
78 Assert.AreEqual ("Unknown Key Usage (1.2.3.4)" + Environment.NewLine, eku.Format (true), "Format(true)");
79 Assert.AreEqual ("Unknown Key Usage (1.2.3.4)", eku.Format (false), "Format(false)");
83 [ExpectedException (typeof (CryptographicException))]
84 public void ConstructorAsnEncodedData_BadAsn ()
86 AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[0]);
87 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
88 Assert.AreEqual (String.Empty, eku.Format (true), "Format(true)");
89 Assert.AreEqual (String.Empty, eku.Format (false), "Format(false)");
90 OidCollection oc = eku.EnhancedKeyUsages;
94 [ExpectedException (typeof (CryptographicException))]
95 public void ConstructorAsnEncodedData_BadAsnTag ()
97 AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[] { 0x05, 0x00 });
98 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
99 OidCollection oc = eku.EnhancedKeyUsages;
103 [ExpectedException (typeof (CryptographicException))]
104 public void ConstructorAsnEncodedData_BadAsnLength ()
106 AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[] { 0x30, 0x01 });
107 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
108 OidCollection oc = eku.EnhancedKeyUsages;
112 [ExpectedException (typeof (NullReferenceException))]
113 public void ConstructorAsnEncodedData_Null ()
115 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ((AsnEncodedData)null, true);
119 [ExpectedException (typeof (ArgumentNullException))]
120 public void ConstructorOidCollection_Null ()
122 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ((OidCollection)null, true);
126 public void ConstructorOidCollection ()
128 OidCollection oc = new OidCollection ();
129 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (oc, true);
130 Assert.AreEqual ("30-00", BitConverter.ToString (eku.RawData), "RawData");
131 Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "Count 0");
132 Assert.AreEqual ("Information Not Available", eku.Format (true), "Format(true)");
133 Assert.AreEqual ("Information Not Available", eku.Format (false), "Format(false)");
134 oc.Add (new Oid ("1.2.3.4"));
135 Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "Count still 0");
136 int n = eku.EnhancedKeyUsages.Add (new Oid ("1.2.3"));
137 Assert.AreEqual (0, n, "Add");
138 Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "Count again 0"); // readonly!
139 Assert.AreEqual (1, oc.Count, "Count 1 - oc");
140 Assert.AreEqual ("1.2.3.4", oc [0].Value, "Value - oc");
142 oc.Add (new Oid ("1.3.6.1.5.5.7.3.1"));
143 eku = new X509EnhancedKeyUsageExtension (oc, true);
144 Assert.AreEqual (2, eku.EnhancedKeyUsages.Count, "Count 2");
145 Assert.AreEqual ("1.2.3.4", eku.EnhancedKeyUsages[0].Value, "Value - 1");
146 Assert.AreEqual ("1.3.6.1.5.5.7.3.1", eku.EnhancedKeyUsages[1].Value, "Value - 2");
147 Assert.AreEqual ("Unknown Key Usage (1.2.3.4)" + Environment.NewLine + "Server Authentication (1.3.6.1.5.5.7.3.1)" + Environment.NewLine,
148 eku.Format (true), "Format(true)");
149 Assert.AreEqual ("Unknown Key Usage (1.2.3.4), Server Authentication (1.3.6.1.5.5.7.3.1)", eku.Format (false), "Format(false)");
153 [ExpectedException (typeof (ArgumentNullException))]
154 public void WrongExtension_X509EnhancedKeyUsageExtension ()
156 X509KeyUsageExtension ku = new X509KeyUsageExtension ();
157 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
162 public void WrongExtension_X509Extension ()
164 X509Extension ex = new X509Extension ("1.2.3", new byte[0], true);
165 OidCollection oc = new OidCollection ();
166 oc.Add (new Oid ("1.2.3.4"));
167 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (oc, false);
168 Assert.AreEqual (1, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
169 Assert.IsFalse (eku.Critical, "Critical");
171 Assert.IsTrue (eku.Critical, "Critical");
172 Assert.AreEqual (String.Empty, BitConverter.ToString (eku.RawData), "RawData");
173 Assert.AreEqual ("1.2.3", eku.Oid.Value, "Oid.Value");
174 Assert.IsNull (eku.Oid.FriendlyName, "Oid.FriendlyName");
178 [ExpectedException (typeof (CryptographicException))]
179 public void WrongExtension_X509Extension_KeyUsages ()
181 X509Extension ex = new X509Extension ("1.2.3", new byte[0], true);
182 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
184 Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
188 [ExpectedException (typeof (ArgumentException))]
189 public void WrongAsnEncodedData ()
191 AsnEncodedData aed = new AsnEncodedData (new byte[0]);
192 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (new OidCollection (), true);
193 eku.CopyFrom (aed); // note: not the same behaviour than using the constructor!
197 [ExpectedException (typeof (ArgumentException))]
198 // [ExpectedException (typeof (ArgumentNullException))]
199 public void CopyFrom_Null ()
201 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
206 public void CopyFrom_Self ()
208 OidCollection oc = new OidCollection ();
209 oc.Add (new Oid ("1.2.3.4"));
210 X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (oc, true);
211 Assert.IsTrue (eku.Critical, "Critical");
212 byte[] raw = eku.RawData;
213 Assert.AreEqual ("30-05-06-03-2A-03-04", BitConverter.ToString (raw), "RawData");
215 AsnEncodedData aed = new AsnEncodedData (raw);
216 X509EnhancedKeyUsageExtension copy = new X509EnhancedKeyUsageExtension (aed, false);
217 Assert.IsFalse (copy.Critical, "Critical");
218 Assert.AreEqual (7, copy.RawData.Length, "RawData"); // original Oid ignored
219 Assert.AreEqual (oid, copy.Oid.Value, "Oid.Value");
220 Assert.AreEqual (fname, copy.Oid.FriendlyName, "Oid.FriendlyName");
221 Assert.AreEqual (1, copy.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
222 Assert.AreEqual ("1.2.3.4", copy.EnhancedKeyUsages[0].Value, "EnhancedKeyUsages Oid");