* GenerateResource.cs (CompileResourceFile): Check File.Exists
[mono.git] / mcs / class / Mono.Security / Test / Mono.Security.X509.Extensions / KeyUsageExtensionTest.cs
1 //
2 // KeyUsageExtensionTest.cs - NUnit Test Cases for 
3 //      Mono.Security.X509.Extensions.KeyUsageExtension
4 //
5 // Authors:
6 //      Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 //
10
11 using System;
12 using System.IO;
13
14 using Mono.Security;
15 using Mono.Security.X509;
16 using Mono.Security.X509.Extensions;
17
18 using NUnit.Framework;
19
20 namespace MonoTests.Mono.Security.X509.Extensions {
21
22         [TestFixture]
23         public class KeyUsageExtensionTest {
24
25                 private void Empty (KeyUsageExtension kue)
26                 {
27                         Assert.IsFalse (kue.Critical, "Critical");
28                         Assert.AreEqual ("2.5.29.15", kue.Oid, "Oid");
29                         Assert.IsNotNull (kue.Name, "Name");
30                         Assert.IsFalse (kue.Name == kue.Oid, "Name!=Oid");
31                         Assert.AreEqual (KeyUsages.none, kue.KeyUsage, "KeyUsage");
32                         Assert.IsTrue (kue.Support (KeyUsages.none), "Support(none)");
33                         Assert.IsFalse (kue.Support (KeyUsages.digitalSignature), "Support(digitalSignature)");
34                         Assert.IsFalse (kue.Support (KeyUsages.decipherOnly), "Support(decipherOnly)");
35                 }
36
37                 [Test]
38                 public void Constructor_Empty ()
39                 {
40                         KeyUsageExtension kue = new KeyUsageExtension ();
41                         Empty (kue);
42                 }
43
44                 [Test]
45                 public void Constructor_Extension ()
46                 {
47                         KeyUsageExtension ext = new KeyUsageExtension ();
48                         KeyUsageExtension kue = new KeyUsageExtension (ext);
49                         Empty (kue);
50                 }
51
52                 [Test]
53                 public void Constructor_ASN1 ()
54                 {
55                         KeyUsageExtension ext = new KeyUsageExtension ();
56                         KeyUsageExtension kue = new KeyUsageExtension (ext.ASN1);
57                         Empty (kue);
58                 }
59
60                 [Test]
61                 public void KeyUsage ()
62                 {
63                         KeyUsageExtension kue = new KeyUsageExtension ();
64                         foreach (KeyUsages ku in Enum.GetValues (typeof (KeyUsages))) {
65                                 kue.KeyUsage = ku;
66                                 byte[] rawext = kue.GetBytes ();
67                                 int length = 13;
68                                 if ((int) ku > Byte.MaxValue) {
69                                         length++;
70                                         Assert.AreEqual ((byte) ku, rawext[rawext.Length - 2], ku.ToString () + ".Value2");
71                                         Assert.AreEqual ((byte) ((int) ku >> 8), rawext[rawext.Length - 1], ku.ToString () + ".Value1");
72                                 } else {
73                                         Assert.AreEqual ((byte) ku, rawext[rawext.Length - 1], ku.ToString () + ".Value");
74                                 }
75                                 Assert.AreEqual (length, rawext.Length, ku.ToString () + ".Length");
76                         }
77                 }
78
79                 [Test]
80                 public void KeyUsage_MaxValue ()
81                 {
82                         KeyUsageExtension kue = new KeyUsageExtension ();
83                         kue.KeyUsage = (KeyUsages) Int32.MaxValue;
84                         Assert.IsTrue (kue.Support (KeyUsages.none), "Support(none)");
85                         Assert.IsTrue (kue.Support (KeyUsages.digitalSignature), "Support(digitalSignature)");
86                         Assert.IsTrue (kue.Support (KeyUsages.nonRepudiation), "Support(nonRepudiation)");
87                         Assert.IsTrue (kue.Support (KeyUsages.keyEncipherment), "Support(keyEncipherment)");
88                         Assert.IsTrue (kue.Support (KeyUsages.dataEncipherment), "Support(dataEncipherment)");
89                         Assert.IsTrue (kue.Support (KeyUsages.keyAgreement), "Support(keyAgreement)");
90                         Assert.IsTrue (kue.Support (KeyUsages.keyCertSign), "Support(keyCertSign)");
91                         Assert.IsTrue (kue.Support (KeyUsages.cRLSign), "Support(cRLSign)");
92                         Assert.IsTrue (kue.Support (KeyUsages.encipherOnly), "Support(encipherOnly)");
93                         Assert.IsTrue (kue.Support (KeyUsages.decipherOnly), "Support(decipherOnly)");
94                 }
95
96                 [Test]
97                 public void Critical ()
98                 {
99                         KeyUsageExtension kue = new KeyUsageExtension ();
100                         kue.Critical = true;
101                         foreach (KeyUsages ku in Enum.GetValues (typeof (KeyUsages))) {
102                                 kue.KeyUsage = ku;
103                                 byte[] rawext = kue.GetBytes ();
104                                 int length = 16;
105                                 if ((int) ku > Byte.MaxValue) {
106                                         length++;
107                                         Assert.AreEqual ((byte) ku, rawext[rawext.Length - 2], ku.ToString () + ".Value2");
108                                         Assert.AreEqual ((byte) ((int)ku >> 8), rawext[rawext.Length - 1], ku.ToString () + ".Value1");
109                                 } else {
110                                         Assert.AreEqual ((byte) ku, rawext[rawext.Length - 1], ku.ToString () + ".Value");
111                                 }
112                                 Assert.AreEqual (length, rawext.Length, ku.ToString () + ".Length");
113                                 Assert.AreEqual (1, rawext[7], ku.ToString () + ".Critical.Tag");
114                                 Assert.AreEqual (1, rawext[8], ku.ToString () + ".Critical.Length");
115                                 Assert.AreEqual (255, rawext[9], ku.ToString () + ".Critical.Value");
116                         }
117                 }
118         }
119 }