* FileSystemInfo.cs: corrected COM visibility of UTC properties
[mono.git] / mcs / class / Mono.Security / Mono.Security.X509.Extensions / SubjectKeyIdentifierExtension.cs
1 //
2 // SubjectKeyIdentifierExtension.cs: Handles X.509 SubjectKeyIdentifier extensions.
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // (C) 2004 Novell (http://www.novell.com)
8 //
9
10 using System;
11 using System.Text;
12
13 using Mono.Security;
14 using Mono.Security.X509;
15
16 namespace Mono.Security.X509.Extensions {
17
18         /*
19          * id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 14 }
20          * 
21          * SubjectKeyIdentifier ::= KeyIdentifier
22          * 
23          * KeyIdentifier ::= OCTET STRING
24          */
25
26         public class SubjectKeyIdentifierExtension : X509Extension {
27
28                 private byte[] ski;
29
30                 public SubjectKeyIdentifierExtension () : base () 
31                 {
32                         extnOid = "2.5.29.14";
33                 }
34
35                 public SubjectKeyIdentifierExtension (ASN1 asn1) : base (asn1) {}
36
37                 public SubjectKeyIdentifierExtension (X509Extension extension) : base (extension) {}
38
39                 protected override void Decode () 
40                 {
41                         ASN1 sequence = new ASN1 (extnValue.Value);
42                         if (sequence.Tag != 0x04)
43                                 throw new ArgumentException ("Invalid SubjectKeyIdentifier extension");
44                         ski = sequence.Value;
45                 }
46
47                 public override string Name {
48                         get { return "Subject Key Identifier"; }
49                 }
50
51                 public byte[] Identifier {
52                         get { return (byte[]) ski.Clone (); }
53                 }
54
55                 public override string ToString () 
56                 {
57                         if (ski == null)
58                                 return null;
59
60                         StringBuilder sb = new StringBuilder ();
61                         int x = 0;
62                         while (x < ski.Length) {
63                                 sb.Append (ski [x].ToString ("X2"));
64                                 if (x % 2 == 1)
65                                         sb.Append (" ");
66                                 x++;
67                         }
68                         return sb.ToString ();
69                 }
70         }
71 }