1 //
2 // X509SubjectKeyIdentifierExtensionTest.cs
3 //	- NUnit tests for X509SubjectKeyIdentifierExtension
4 //
5 // Author:
6 //	Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 // Copyright (C) 2005, 2006 Novell, Inc (http://www.novell.com)
9 //
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:
17 //
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 //
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.
28 //
29 
30 
31 using NUnit.Framework;
32 
33 using System;
34 using System.Security.Cryptography;
35 using System.Security.Cryptography.X509Certificates;
36 using System.Text;
37 
38 namespace MonoTests.System.Security.Cryptography.X509Certificates {
39 
40 	[TestFixture]
41 	public class X509SubjectKeyIdentifierExtensionTest {
42 
43 		private const string oid = "2.5.29.14";
44 		private const string fname = "Subject Key Identifier";
45 
46 		private PublicKey pk1;
47 
48 		[TestFixtureSetUp]
FixtureSetUp()49 		public void FixtureSetUp ()
50 		{
51 			pk1 = new X509Certificate2 (Encoding.ASCII.GetBytes (X509Certificate2Test.base64_cert)).PublicKey;
52 		}
53 
54 		[Test]
ConstructorEmpty()55 		public void ConstructorEmpty ()
56 		{
57 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ();
58 			Assert.IsFalse (ski.Critical, "Critical");
59 			Assert.IsNull (ski.RawData, "RawData");
60 			Assert.AreEqual (oid, ski.Oid.Value, "Oid.Value");
61 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
62 			//Assert.AreEqual (fname, ski.Oid.FriendlyName, "Oid.FriendlyName");
63 			Assert.AreEqual (String.Empty, ski.Format (true), "Format(true)");
64 			Assert.AreEqual (String.Empty, ski.Format (false), "Format(false)");
65 		}
66 
67 		[Test]
ConstructorEmpty_SubjectKeyIdentifier()68 		public void ConstructorEmpty_SubjectKeyIdentifier ()
69 		{
70 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ();
71 			Assert.IsNull (ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
72 		}
73 
74 		[Test]
ConstructorAsnEncodedData()75 		public void ConstructorAsnEncodedData ()
76 		{
77 			AsnEncodedData aed = new AsnEncodedData (new byte[] { 0x04, 0x08, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF });
78 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (aed, true);
79 			Assert.IsTrue (ski.Critical, "Critical");
80 			Assert.AreEqual (oid, ski.Oid.Value, "Oid.Value");
81 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
82 			//Assert.AreEqual (fname, ski.Oid.FriendlyName, "Oid.FriendlyName");
83 			Assert.AreEqual ("04-08-01-23-45-67-89-AB-CD-EF", BitConverter.ToString (ski.RawData), "RawData");
84 			Assert.AreEqual ("0123456789ABCDEF", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
85 			Assert.AreEqual ("01 23 45 67 89 ab cd ef" + Environment.NewLine, ski.Format (true), "Format(true)");
86 			Assert.AreEqual ("01 23 45 67 89 ab cd ef", ski.Format (false), "Format(false)");
87 		}
88 
89 		[Test]
90 		[ExpectedException (typeof (CryptographicException))]
ConstructorAsnEncodedData_BadAsn()91 		public void ConstructorAsnEncodedData_BadAsn ()
92 		{
93 			AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[0]);
94 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (aed, true);
95 			Assert.AreEqual (String.Empty, ski.Format (true), "Format(true)");
96 			Assert.AreEqual (String.Empty, ski.Format (false), "Format(false)");
97 			string s = ski.SubjectKeyIdentifier;
98 		}
99 
100 		[Test]
101 		[ExpectedException (typeof (CryptographicException))]
ConstructorAsnEncodedData_BadAsnTag()102 		public void ConstructorAsnEncodedData_BadAsnTag ()
103 		{
104 			AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[] { 0x05, 0x00 });
105 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (aed, true);
106 			Assert.AreEqual ("0500", ski.Format (true), "Format(true)");
107 			Assert.AreEqual ("0500", ski.Format (false), "Format(false)");
108 			string s = ski.SubjectKeyIdentifier;
109 		}
110 
111 		[Test]
112 		[ExpectedException (typeof (CryptographicException))]
ConstructorAsnEncodedData_BadAsnLength()113 		public void ConstructorAsnEncodedData_BadAsnLength ()
114 		{
115 			AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[] { 0x30, 0x01 });
116 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (aed, true);
117 			Assert.AreEqual ("3001", ski.Format (true), "Format(true)");
118 			Assert.AreEqual ("3001", ski.Format (false), "Format(false)");
119 			string s = ski.SubjectKeyIdentifier;
120 		}
121 
122 		[Test]
ConstructorAsnEncodedData_SmallestValid()123 		public void ConstructorAsnEncodedData_SmallestValid ()
124 		{
125 			AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[] { 0x04, 0x00 });
126 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (aed, true);
127 			Assert.AreEqual (String.Empty, ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
128 			Assert.AreEqual ("04-00", BitConverter.ToString (ski.RawData), "RawData");
129 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
130 			//Assert.AreEqual ("Information Not Available", ski.Format (true), "Format(true)");
131 			//Assert.AreEqual ("Information Not Available", ski.Format (false), "Format(false)");
132 		}
133 
134 		[Test]
135 		[ExpectedException (typeof (NullReferenceException))]
ConstructorAsnEncodedData_Null()136 		public void ConstructorAsnEncodedData_Null ()
137 		{
138 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ((AsnEncodedData)null, true);
139 		}
140 
141 		[Test]
142 		[ExpectedException (typeof (ArgumentNullException))]
ConstructorByteArray_Null()143 		public void ConstructorByteArray_Null ()
144 		{
145 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ((byte[])null, true);
146 		}
147 
148 		[Test]
149 		[ExpectedException (typeof (ArgumentException))]
ConstructorByteArray_Empty()150 		public void ConstructorByteArray_Empty ()
151 		{
152 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (new byte[0], true);
153 		}
154 
155 		[Test]
ConstructorByteArray_20()156 		public void ConstructorByteArray_20 ()
157 		{
158 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (new byte[20], true);
159 			Assert.IsTrue (ski.Critical, "Critical");
160 			Assert.AreEqual ("04-14-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00", BitConverter.ToString (ski.RawData), "RawData");
161 			Assert.AreEqual (oid, ski.Oid.Value, "Oid.Value");
162 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
163 			//Assert.AreEqual (fname, ski.Oid.FriendlyName, "Oid.FriendlyName");
164 			Assert.AreEqual ("0000000000000000000000000000000000000000", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
165 			Assert.AreEqual ("00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" + Environment.NewLine, ski.Format (true), "Format(true)");
166 			Assert.AreEqual ("00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00", ski.Format (false), "Format(false)");
167 		}
168 
169 		[Test]
170 		[ExpectedException (typeof (ArgumentNullException))]
ConstructorString_Null()171 		public void ConstructorString_Null ()
172 		{
173 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ((String)null, true);
174 		}
175 
176 		[Test]
177 		[ExpectedException (typeof (ArgumentException))]
ConstructorString_Empty()178 		public void ConstructorString_Empty ()
179 		{
180 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (String.Empty, true);
181 		}
182 
183 		[Test]
184 		[ExpectedException (typeof (ArgumentException))]
ConstructorString_Single()185 		public void ConstructorString_Single ()
186 		{
187 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("f", false);
188 		}
189 
190 		[Test]
ConstructorString()191 		public void ConstructorString ()
192 		{
193 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("ffFFfFFf", false);
194 			Assert.IsFalse (ski.Critical, "Critical");
195 			Assert.AreEqual ("04-04-FF-FF-FF-FF", BitConverter.ToString (ski.RawData), "RawData");
196 			Assert.AreEqual (oid, ski.Oid.Value, "Oid.Value");
197 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
198 			//Assert.AreEqual (fname, ski.Oid.FriendlyName, "Oid.FriendlyName");
199 			Assert.AreEqual ("FFFFFFFF", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
200 			Assert.AreEqual ("ff ff ff ff" + Environment.NewLine, ski.Format (true), "Format(true)");
201 			Assert.AreEqual ("ff ff ff ff", ski.Format (false), "Format(false)");
202 		}
203 
204 		[Test]
ConstructorString_NotHex()205 		public void ConstructorString_NotHex ()
206 		{
207 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("Mono::", true);
208 			Assert.IsTrue (ski.Critical, "Critical");
209 			Assert.AreEqual ("04-03-FF-FF-FF", BitConverter.ToString (ski.RawData), "RawData");
210 			Assert.AreEqual (oid, ski.Oid.Value, "Oid.Value");
211 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
212 			//Assert.AreEqual (fname, ski.Oid.FriendlyName, "Oid.FriendlyName");
213 			Assert.AreEqual ("FFFFFF", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
214 			Assert.AreEqual ("ff ff ff" + Environment.NewLine, ski.Format (true), "Format(true)");
215 			Assert.AreEqual ("ff ff ff", ski.Format (false), "Format(false)");
216 		}
217 
218 		[Test]
219 		[ExpectedException (typeof (ArgumentNullException))]
ConstructorPublicKey_Null()220 		public void ConstructorPublicKey_Null ()
221 		{
222 			new X509SubjectKeyIdentifierExtension ((PublicKey)null, true);
223 		}
224 
225 		[Test]
226 		[ExpectedException (typeof (ArgumentNullException))]
ConstructorPublicKeyHash_Null()227 		public void ConstructorPublicKeyHash_Null ()
228 		{
229 			new X509SubjectKeyIdentifierExtension (null, X509SubjectKeyIdentifierHashAlgorithm.Sha1, true);
230 		}
231 
232 		[Test]
233 		[ExpectedException (typeof (ArgumentException))]
ConstructorPublicKeyHash_BadX509SubjectKeyIdentifierHashAlgorithm()234 		public void ConstructorPublicKeyHash_BadX509SubjectKeyIdentifierHashAlgorithm ()
235 		{
236 			new X509SubjectKeyIdentifierExtension (pk1, (X509SubjectKeyIdentifierHashAlgorithm)Int32.MinValue, true);
237 		}
238 
239 		[Test]
ConstructorPublicKeyHash_Critical()240 		public void ConstructorPublicKeyHash_Critical ()
241 		{
242 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, true);
243 			Assert.IsTrue (ski.Critical, "Critical");
244 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
245 			Assert.AreEqual ("4A0200E2E8D33DBA05FC37BDC36DCF47212D77D1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
246 			Assert.AreEqual ("04-14-4A-02-00-E2-E8-D3-3D-BA-05-FC-37-BD-C3-6D-CF-47-21-2D-77-D1", BitConverter.ToString (ski.RawData), "RawData");
247 		}
248 
249 		[Test]
ConstructorPublicKeyHash_Sha1_Critical()250 		public void ConstructorPublicKeyHash_Sha1_Critical ()
251 		{
252 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, X509SubjectKeyIdentifierHashAlgorithm.Sha1, true);
253 			Assert.IsTrue (ski.Critical, "Critical");
254 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
255 			Assert.AreEqual ("4A0200E2E8D33DBA05FC37BDC36DCF47212D77D1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
256 			Assert.AreEqual ("04-14-4A-02-00-E2-E8-D3-3D-BA-05-FC-37-BD-C3-6D-CF-47-21-2D-77-D1", BitConverter.ToString (ski.RawData), "RawData");
257 		}
258 
259 		[Test]
ConstructorPublicKeyHash_ShortSha1_Critical()260 		public void ConstructorPublicKeyHash_ShortSha1_Critical ()
261 		{
262 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, X509SubjectKeyIdentifierHashAlgorithm.ShortSha1, true);
263 			Assert.IsTrue (ski.Critical, "Critical");
264 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
265 			Assert.AreEqual ("436DCF47212D77D1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
266 			Assert.AreEqual ("04-08-43-6D-CF-47-21-2D-77-D1", BitConverter.ToString (ski.RawData), "RawData");
267 		}
268 
269 		[Test]
ConstructorPublicKeyHash_CapiSha1_Critical()270 		public void ConstructorPublicKeyHash_CapiSha1_Critical ()
271 		{
272 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, X509SubjectKeyIdentifierHashAlgorithm.CapiSha1, true);
273 			Assert.IsTrue (ski.Critical, "Critical");
274 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
275 			Assert.AreEqual ("0E73CE0E2E059378FC782707EBF0B4E7AEA652E1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
276 			Assert.AreEqual ("04-14-0E-73-CE-0E-2E-05-93-78-FC-78-27-07-EB-F0-B4-E7-AE-A6-52-E1", BitConverter.ToString (ski.RawData), "RawData");
277 		}
278 
279 		[Test]
ConstructorPublicKeyHash()280 		public void ConstructorPublicKeyHash ()
281 		{
282 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, false);
283 			Assert.IsFalse (ski.Critical, "Critical");
284 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
285 			Assert.AreEqual ("4A0200E2E8D33DBA05FC37BDC36DCF47212D77D1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
286 			Assert.AreEqual ("04-14-4A-02-00-E2-E8-D3-3D-BA-05-FC-37-BD-C3-6D-CF-47-21-2D-77-D1", BitConverter.ToString (ski.RawData), "RawData");
287 		}
288 
289 		[Test]
ConstructorPublicKeyHash_Sha1()290 		public void ConstructorPublicKeyHash_Sha1 ()
291 		{
292 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, X509SubjectKeyIdentifierHashAlgorithm.Sha1, false);
293 			Assert.IsFalse (ski.Critical, "Critical");
294 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
295 			Assert.AreEqual ("4A0200E2E8D33DBA05FC37BDC36DCF47212D77D1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
296 			Assert.AreEqual ("04-14-4A-02-00-E2-E8-D3-3D-BA-05-FC-37-BD-C3-6D-CF-47-21-2D-77-D1", BitConverter.ToString (ski.RawData), "RawData");
297 		}
298 
299 		[Test]
ConstructorPublicKeyHash_ShortSha1()300 		public void ConstructorPublicKeyHash_ShortSha1 ()
301 		{
302 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, X509SubjectKeyIdentifierHashAlgorithm.ShortSha1, false);
303 			Assert.IsFalse (ski.Critical, "Critical");
304 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
305 			Assert.AreEqual ("436DCF47212D77D1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
306 			Assert.AreEqual ("04-08-43-6D-CF-47-21-2D-77-D1", BitConverter.ToString (ski.RawData), "RawData");
307 		}
308 
309 		[Test]
ConstructorPublicKeyHash_CapiSha1()310 		public void ConstructorPublicKeyHash_CapiSha1 ()
311 		{
312 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension (pk1, X509SubjectKeyIdentifierHashAlgorithm.CapiSha1, false);
313 			Assert.IsFalse (ski.Critical, "Critical");
314 			Assert.AreEqual ("2.5.29.14", ski.Oid.Value, "Oid");
315 			Assert.AreEqual ("0E73CE0E2E059378FC782707EBF0B4E7AEA652E1", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
316 			Assert.AreEqual ("04-14-0E-73-CE-0E-2E-05-93-78-FC-78-27-07-EB-F0-B4-E7-AE-A6-52-E1", BitConverter.ToString (ski.RawData), "RawData");
317 		}
318 
319 		[Test]
320 		[ExpectedException (typeof (ArgumentNullException))]
WrongExtension_X509KeyUsageExtension()321 		public void WrongExtension_X509KeyUsageExtension ()
322 		{
323 			X509KeyUsageExtension ku = new X509KeyUsageExtension ();
324 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ();
325 			ski.CopyFrom (ku);
326 		}
327 
328 		[Test]
WrongExtension_X509Extension()329 		public void WrongExtension_X509Extension ()
330 		{
331 			X509Extension ex = new X509Extension ("1.2.3", new byte[0], true);
332 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("www.go-mono.com", false); // odd length
333 			Assert.IsFalse (ski.Critical, "Critical");
334 			Assert.AreEqual ("FFFFFFFFFFFFFF", ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
335 			Assert.AreEqual ("ff ff ff ff ff ff ff" + Environment.NewLine, ski.Format (true), "Format(true)");
336 			Assert.AreEqual ("ff ff ff ff ff ff ff", ski.Format (false), "Format(false)");
337 
338 			ski.CopyFrom (ex);
339 			Assert.IsTrue (ski.Critical, "Critical");
340 			Assert.AreEqual (String.Empty, BitConverter.ToString (ski.RawData), "RawData");
341 			Assert.AreEqual ("1.2.3", ski.Oid.Value, "Oid.Value");
342 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
343 			//Assert.IsNull (ski.Oid.FriendlyName, "Oid.FriendlyName");
344 			Assert.AreEqual (String.Empty, ski.Format (true), "Format(true)");
345 			Assert.AreEqual (String.Empty, ski.Format (false), "Format(false)");
346 		}
347 
348 		[Test]
349 		[ExpectedException (typeof (CryptographicException))]
WrongExtension_X509Extension_CertificateAuthority()350 		public void WrongExtension_X509Extension_CertificateAuthority ()
351 		{
352 			X509Extension ex = new X509Extension ("1.2.3", new byte[0], true);
353 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ();
354 			ski.CopyFrom (ex);
355 			string s = ski.SubjectKeyIdentifier;
356 		}
357 
358 		[Test]
359 		[ExpectedException (typeof (ArgumentException))]
WrongAsnEncodedData()360 		public void WrongAsnEncodedData ()
361 		{
362 			AsnEncodedData aed = new AsnEncodedData (new byte[0]);
363 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("www.mono-project.com", false);
364 			ski.CopyFrom (aed); // note: not the same behaviour than using the constructor!
365 		}
366 
367 		[Test]
368 		[ExpectedException (typeof (ArgumentNullException))]
CopyFrom_Null()369 		public void CopyFrom_Null ()
370 		{
371 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ();
372 			ski.CopyFrom (null);
373 		}
374 
375 		[Test]
CopyFrom_Self()376 		public void CopyFrom_Self ()
377 		{
378 			X509SubjectKeyIdentifierExtension ski = new X509SubjectKeyIdentifierExtension ("ff", true);
379 			Assert.IsTrue (ski.Critical, "Critical");
380 			byte[] raw = ski.RawData;
381 			Assert.AreEqual ("04-01-FF", BitConverter.ToString (raw), "RawData");
382 
383 			AsnEncodedData aed = new AsnEncodedData (raw);
384 			X509SubjectKeyIdentifierExtension copy = new X509SubjectKeyIdentifierExtension (aed, false);
385 			Assert.IsFalse (copy.Critical, "Critical");
386 			Assert.AreEqual ("04-01-FF", BitConverter.ToString (copy.RawData), "copy.RawData");
387 			Assert.AreEqual (oid, copy.Oid.Value, "Oid.Value");
388 			// FIXME: Don't expect that FriendlyName is English. This test fails under non-English Windows.
389 			//Assert.AreEqual (fname, copy.Oid.FriendlyName, "Oid.FriendlyName");
390 			Assert.AreEqual ("FF", copy.SubjectKeyIdentifier, "SubjectKeyIdentifier");
391 		}
392 
393 #if !MOBILE
394 		[Test]
CreateViaCryptoConfig()395 		public void CreateViaCryptoConfig ()
396 		{
397 			// extensions can be created with CryptoConfig
398 			AsnEncodedData aed = new AsnEncodedData (new byte[] { 0x04, 0x00 });
399 			X509SubjectKeyIdentifierExtension ski = (X509SubjectKeyIdentifierExtension) CryptoConfig.CreateFromName (oid, new object[2] { aed, true });
400 			Assert.AreEqual (String.Empty, ski.SubjectKeyIdentifier, "SubjectKeyIdentifier");
401 			Assert.AreEqual ("04-00", BitConverter.ToString (ski.RawData), "RawData");
402 		}
403 #endif
404 	}
405 }
406 
407