2 // ExtendedKeyUsageExtension.cs: Handles X.509 ExtendedKeyUsage extensions.
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
11 using System.Collections;
15 using Mono.Security.X509;
17 namespace Mono.Security.X509.Extensions {
20 * id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
22 * ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
24 * KeyPurposeId ::= OBJECT IDENTIFIER
27 public class ExtendedKeyUsageExtension : X509Extension {
29 private ArrayList keyPurpose;
31 public ExtendedKeyUsageExtension () : base ()
33 extnOid = "2.5.29.37";
34 keyPurpose = new ArrayList ();
37 public ExtendedKeyUsageExtension (ASN1 asn1) : base (asn1) {}
39 public ExtendedKeyUsageExtension (X509Extension extension) : base (extension) {}
41 protected override void Decode ()
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]));
52 protected override void Encode ()
54 if (extnValue == null) {
55 extnValue = new ASN1 (0x30);
56 foreach (string oid in keyPurpose) {
57 extnValue.Add (ASN1Convert.FromOID (oid));
62 public ArrayList KeyPurpose {
63 get { return keyPurpose; }
66 public override string Name {
67 get { return "Extended Key Usage"; }
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 ()
78 StringBuilder sb = new StringBuilder ();
79 foreach (string s in keyPurpose) {
81 case "1.3.6.1.5.5.7.3.3":
82 sb.Append ("Code Signing");
85 sb.Append ("unknown");
91 sb.Append (Environment.NewLine);
93 return sb.ToString ();