* FileSystemInfo.cs: corrected COM visibility of UTC properties
[mono.git] / mcs / class / Mono.Security / Mono.Security.X509.Extensions / ExtendedKeyUsageExtension.cs
1 //
2 // ExtendedKeyUsageExtension.cs: Handles X.509 ExtendedKeyUsage extensions.
3 //
4 // Author:
5 //      Sebastien Pouliot (spouliot@motus.com)
6 //
7 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
8 //
9
10 using System;
11 using System.Collections;
12 using System.Text;
13
14 using Mono.Security;
15 using Mono.Security.X509;
16
17 namespace Mono.Security.X509.Extensions {
18
19         /*
20          * id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
21          * 
22          * ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
23          * 
24          * KeyPurposeId ::= OBJECT IDENTIFIER
25          */
26
27         public class ExtendedKeyUsageExtension : X509Extension {
28
29                 private ArrayList keyPurpose;
30
31                 public ExtendedKeyUsageExtension () : base () 
32                 {
33                         extnOid = "2.5.29.37";
34                         keyPurpose = new ArrayList ();
35                 }
36
37                 public ExtendedKeyUsageExtension (ASN1 asn1) : base (asn1) {}
38
39                 public ExtendedKeyUsageExtension (X509Extension extension) : base (extension) {}
40
41                 protected override void Decode () 
42                 {
43                         keyPurpose = new ArrayList ();
44                         ASN1 sequence = new ASN1 (extnValue.Value);
45                         if (sequence.Tag != 0x30)
46                                 throw new ArgumentException ("Invalid ExtendedKeyUsage extension");
47                         // for every policy OID
48                         for (int i=0; i < sequence.Count; i++)
49                                 keyPurpose.Add (ASN1Convert.ToOID (sequence [i]));
50                 }
51
52                 protected override void Encode () 
53                 {
54                         if (extnValue == null) {
55                                 extnValue = new ASN1 (0x30);
56                                 foreach (string oid in keyPurpose) {
57                                         extnValue.Add (ASN1Convert.FromOID (oid));
58                                 }
59                         }
60                 }
61
62                 public ArrayList KeyPurpose {
63                         get { return keyPurpose; }
64                 }
65
66                 public override string Name {
67                         get { return "Extended Key Usage"; }
68                 }
69
70                 // serverAuth           1.3.6.1.5.5.7.3.1
71                 // clientAuth           1.3.6.1.5.5.7.3.2
72                 // codeSigning          1.3.6.1.5.5.7.3.3
73                 // emailProtection      1.3.6.1.5.5.7.3.4
74                 // timeStamping         1.3.6.1.5.5.7.3.8
75                 // OCSPSigning          1.3.6.1.5.5.7.3.9
76                 public override string ToString () 
77                 {
78                         StringBuilder sb = new StringBuilder ();
79                         foreach (string s in keyPurpose) {
80                                 switch (s) {
81                                         case "1.3.6.1.5.5.7.3.3":
82                                                 sb.Append ("Code Signing");
83                                                 break;
84                                         default:
85                                                 sb.Append ("unknown");
86                                                 break;
87                                 }
88                                 sb.Append (" (");
89                                 sb.Append (s);
90                                 sb.Append (")");
91                                 sb.Append (Environment.NewLine);
92                         }
93                         return sb.ToString ();
94                 }
95         }
96 }