New test.
[mono.git] / mcs / class / Mono.Security / Test / Mono.Security.Authenticode / SoftwarePublisherCertificateTest.cs
1 //
2 // SoftwarePublisherCertificateTest.cs 
3 //      - NUnit Test Cases for Software Publisher Certificate
4 //
5 // Author:
6 //      Sebastien Pouliot (sebastien@ximian.com)
7 //
8 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
9 // Copyright (C) 2004 Novell (http://www.novell.com)
10 //
11
12 using System;
13 using System.IO;
14 using System.Security.Cryptography.X509Certificates;
15 using System.Text;
16
17 using Mono.Security.Authenticode;
18 using MSX = Mono.Security.X509;
19
20 using NUnit.Framework;
21
22 namespace MonoTests.Mono.Security.Authenticode {
23
24         // HOWTO create a SPC file
25         // cert2spc cert1.cer cacert.cer cacrl.crl ... output.spc
26         
27         [TestFixture]
28         public class SoftwarePublisherCertificateFileTest : Assertion {
29         
30                 static byte[] certonly = { 
31                 0x30, 0x82, 0x03, 0x1E, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 
32                 0x01, 0x07, 0x02, 0xA0, 0x82, 0x03, 0x0F, 0x30, 0x82, 0x03, 0x0B, 0x02, 
33                 0x01, 0x01, 0x31, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 
34                 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x02, 0xF3, 0x30, 0x82, 0x02, 
35                 0xEF, 0x30, 0x82, 0x02, 0x5A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 
36                 0x6C, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 
37                 0x01, 0x05, 0x30, 0x56, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 
38                 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 
39                 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 
40                 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 
41                 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 0x44, 0x6F, 0x44, 0x31, 0x0D, 0x30, 
42                 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4E, 0x61, 0x76, 0x79, 
43                 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, 0x4E, 
44                 0x61, 0x76, 0x79, 0x20, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x32, 
45                 0x31, 0x30, 0x31, 0x31, 0x31, 0x33, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x17, 
46                 0x0D, 0x30, 0x34, 0x31, 0x30, 0x31, 0x30, 0x31, 0x33, 0x31, 0x32, 0x35, 
47                 0x30, 0x5A, 0x30, 0x81, 0x8B, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 
48                 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 
49                 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 0x53, 0x2E, 0x20, 0x47, 0x6F, 
50                 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x31, 0x0C, 0x30, 0x0A, 
51                 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 0x44, 0x6F, 0x44, 0x31, 0x0D, 
52                 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4E, 0x61, 0x76, 
53                 0x79, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x09, 
54                 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x31, 0x1B, 0x30, 
55                 0x19, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x12, 0x41, 0x6E, 0x6E, 0x61, 
56                 0x70, 0x6F, 0x6C, 0x69, 0x73, 0x20, 0x4A, 0x75, 0x6E, 0x63, 0x74, 0x69, 
57                 0x6F, 0x6E, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 
58                 0x0B, 0x4E, 0x61, 0x76, 0x79, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x31, 
59                 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 
60                 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 
61                 0x89, 0x02, 0x81, 0x81, 0x00, 0xB7, 0x7E, 0x94, 0x5F, 0xE8, 0x2A, 0xE7, 
62                 0xAD, 0x82, 0x16, 0x2C, 0x3D, 0x2F, 0x5E, 0x88, 0x67, 0xF0, 0x23, 0x26, 
63                 0x15, 0x34, 0x04, 0x1F, 0x63, 0x8B, 0xFE, 0xFB, 0xBB, 0x0D, 0xC0, 0x7E, 
64                 0xF0, 0x46, 0x82, 0x09, 0xA2, 0x91, 0xE0, 0xEA, 0xEF, 0xD0, 0x43, 0xCB, 
65                 0x30, 0x45, 0xAC, 0x7C, 0xAC, 0xFC, 0xBE, 0x54, 0x79, 0x77, 0xA9, 0x6A, 
66                 0x45, 0xF5, 0xBF, 0xE5, 0xEF, 0x97, 0x11, 0x63, 0xC2, 0xF7, 0x3C, 0x73, 
67                 0x6D, 0xBA, 0x8D, 0xFE, 0xAE, 0x28, 0x4A, 0x29, 0xE4, 0xA2, 0x59, 0x0C, 
68                 0x8F, 0x1A, 0x57, 0x86, 0xF2, 0x42, 0xF7, 0x35, 0x0B, 0xC3, 0xA5, 0x31, 
69                 0xD8, 0x19, 0xE2, 0x97, 0x7A, 0xA1, 0xF4, 0xE5, 0xDB, 0xCA, 0xF5, 0x54, 
70                 0x39, 0x1D, 0x0E, 0xDF, 0x78, 0x73, 0xBF, 0x86, 0x97, 0x40, 0xAA, 0x06, 
71                 0x8E, 0x8B, 0x6B, 0x0C, 0x06, 0x98, 0xD7, 0xD2, 0x1D, 0x45, 0xAA, 0x7F, 
72                 0xA5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x81, 0x9A, 0x30, 0x81, 0x97, 
73                 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 
74                 0x14, 0xFB, 0x96, 0xF0, 0x10, 0xC4, 0x37, 0x55, 0xF0, 0xCE, 0xB5, 0xA6, 
75                 0xE2, 0xF1, 0x19, 0xFF, 0x99, 0x1A, 0xAE, 0x6E, 0x58, 0x30, 0x1D, 0x06, 
76                 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x02, 0x48, 0x78, 0xB9, 
77                 0xCC, 0x01, 0x51, 0x31, 0x74, 0x7F, 0x39, 0x2A, 0x37, 0xC2, 0x44, 0x93, 
78                 0x7E, 0x98, 0x69, 0x80, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 
79                 0x04, 0x03, 0x02, 0x04, 0xF0, 0x30, 0x17, 0x06, 0x03, 0x55, 0x1D, 0x20, 
80                 0x04, 0x10, 0x30, 0x0E, 0x30, 0x0C, 0x06, 0x0A, 0x60, 0x86, 0x48, 0x01, 
81                 0x65, 0x03, 0x02, 0x01, 0x30, 0x01, 0x30, 0x2F, 0x06, 0x03, 0x55, 0x1D, 
82                 0x11, 0x04, 0x28, 0x30, 0x26, 0x81, 0x24, 0x4E, 0x61, 0x76, 0x79, 0x31, 
83                 0x40, 0x77, 0x61, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x6F, 0x6E, 0x2E, 0x61, 
84                 0x74, 0x6C, 0x2E, 0x67, 0x65, 0x74, 0x72, 0x6F, 0x6E, 0x69, 0x63, 0x73, 
85                 0x67, 0x6F, 0x76, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x0B, 0x06, 0x09, 0x2A, 
86                 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x03, 0x81, 0x81, 0x00, 
87                 0x1D, 0xB0, 0x1C, 0x88, 0x4D, 0xA2, 0x68, 0x25, 0x08, 0x8F, 0xA3, 0xAC, 
88                 0xC3, 0x18, 0xD5, 0xBF, 0x56, 0x7C, 0xA1, 0xF2, 0x7C, 0x76, 0x39, 0x8D, 
89                 0x12, 0x42, 0x17, 0xE6, 0x49, 0x02, 0x39, 0xAE, 0xBB, 0x75, 0x70, 0x4B, 
90                 0x65, 0xEF, 0x0E, 0x3A, 0xC2, 0x33, 0xD9, 0x94, 0xDF, 0x5F, 0xA6, 0x12, 
91                 0x64, 0x8F, 0x04, 0x76, 0x2C, 0xAF, 0x92, 0x37, 0x4C, 0xF1, 0x94, 0x99, 
92                 0x52, 0xFD, 0x61, 0x95, 0x00, 0x2B, 0x9D, 0x0D, 0x35, 0xB9, 0x7C, 0x6A, 
93                 0x4C, 0xBB, 0x8D, 0x8A, 0x7B, 0x93, 0x37, 0x02, 0xC8, 0x81, 0x0B, 0xBD, 
94                 0xB9, 0x45, 0x51, 0x03, 0xBA, 0xD3, 0xF4, 0xBD, 0x72, 0x10, 0x05, 0xE9, 
95                 0xC1, 0x6E, 0xFE, 0xC5, 0x76, 0x2C, 0x6A, 0x6A, 0x16, 0x2F, 0x0C, 0x54, 
96                 0x44, 0x0D, 0x15, 0xC7, 0xA5, 0x41, 0xB1, 0x05, 0xE8, 0x4B, 0xF3, 0x60, 
97                 0x92, 0xEB, 0xD4, 0xF7, 0x93, 0xFF, 0x67, 0x4E, 0x31, 0x00 };
98         
99                 static byte[] crlonly = { 
100                 0x30, 0x82, 0x01, 0x9B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 
101                 0x01, 0x07, 0x02, 0xA0, 0x82, 0x01, 0x8C, 0x30, 0x82, 0x01, 0x88, 0x02, 
102                 0x01, 0x01, 0x31, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 
103                 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA1, 0x82, 0x01, 0x70, 0x30, 0x82, 0x01, 
104                 0x6C, 0x30, 0x81, 0xD8, 0x02, 0x01, 0x01, 0x30, 0x0B, 0x06, 0x09, 0x2A, 
105                 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x30, 0x56, 0x31, 0x0B, 
106                 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 
107                 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 
108                 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 
109                 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 
110                 0x44, 0x6F, 0x44, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 
111                 0x13, 0x04, 0x4E, 0x61, 0x76, 0x79, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 
112                 0x55, 0x04, 0x03, 0x13, 0x07, 0x4E, 0x61, 0x76, 0x79, 0x20, 0x43, 0x41, 
113                 0x17, 0x0D, 0x30, 0x32, 0x31, 0x30, 0x31, 0x31, 0x31, 0x33, 0x31, 0x32, 
114                 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x30, 0x33, 0x31, 0x30, 0x31, 0x31, 0x31, 
115                 0x33, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x50, 0x30, 0x12, 0x02, 0x01, 
116                 0x6D, 0x17, 0x0D, 0x30, 0x31, 0x30, 0x34, 0x32, 0x33, 0x32, 0x31, 0x30, 
117                 0x39, 0x32, 0x37, 0x5A, 0x30, 0x12, 0x02, 0x01, 0x6F, 0x17, 0x0D, 0x30, 
118                 0x31, 0x30, 0x34, 0x32, 0x33, 0x32, 0x31, 0x30, 0x39, 0x32, 0x37, 0x5A, 
119                 0x30, 0x12, 0x02, 0x01, 0x50, 0x17, 0x0D, 0x30, 0x30, 0x31, 0x31, 0x33, 
120                 0x30, 0x32, 0x32, 0x30, 0x38, 0x32, 0x39, 0x5A, 0x30, 0x12, 0x02, 0x01, 
121                 0x52, 0x17, 0x0D, 0x30, 0x30, 0x31, 0x31, 0x33, 0x30, 0x32, 0x32, 0x30, 
122                 0x38, 0x32, 0x39, 0x5A, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 
123                 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x03, 0x81, 0x81, 0x00, 0x3A, 0xFA, 0x41, 
124                 0x76, 0x90, 0x24, 0x6E, 0x59, 0xEE, 0xF3, 0xC4, 0xA2, 0x77, 0xE0, 0xE4, 
125                 0x70, 0x69, 0x43, 0xA0, 0x8E, 0x42, 0x9F, 0x1F, 0x58, 0x43, 0x1D, 0xF0, 
126                 0x4F, 0x1D, 0xE8, 0xF3, 0x36, 0x09, 0x07, 0xE5, 0x3A, 0x84, 0xBB, 0x54, 
127                 0xBB, 0xB6, 0x55, 0x88, 0x76, 0xC2, 0x42, 0x62, 0xC1, 0xE9, 0x54, 0xA2, 
128                 0x49, 0xEE, 0x98, 0xDD, 0x07, 0x84, 0x90, 0x5F, 0x7E, 0x94, 0x11, 0x64, 
129                 0x35, 0x2D, 0xBA, 0x5A, 0xC7, 0x19, 0x46, 0xAF, 0x21, 0x3C, 0x3B, 0xB6, 
130                 0x0E, 0x28, 0x2B, 0x38, 0x9A, 0xA1, 0xB6, 0x7B, 0x6A, 0xC8, 0xA8, 0xBA, 
131                 0xC7, 0x9E, 0xD1, 0x31, 0x70, 0x5F, 0xD6, 0x15, 0x03, 0xE6, 0x6C, 0x55, 
132                 0x85, 0x30, 0xA8, 0x45, 0xBB, 0x28, 0xF3, 0xAC, 0x97, 0x5F, 0x86, 0x21, 
133                 0x77, 0xEF, 0xEC, 0x17, 0x92, 0xC7, 0xD6, 0xCD, 0xE1, 0x2A, 0x2E, 0xE7, 
134                 0xF3, 0xED, 0x7F, 0x66, 0x86, 0x31, 0x00 };
135         
136                 static byte[] navy = { 
137                 0x30, 0x82, 0x0B, 0x7F, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 
138                 0x01, 0x07, 0x02, 0xA0, 0x82, 0x0B, 0x70, 0x30, 0x82, 0x0B, 0x6C, 0x02, 
139                 0x01, 0x01, 0x31, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 
140                 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x08, 0xB2, 0x30, 0x82, 0x02, 
141                 0xAD, 0x30, 0x82, 0x02, 0x18, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 
142                 0x0C, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 
143                 0x01, 0x05, 0x30, 0x51, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 
144                 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 
145                 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 
146                 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 
147                 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 0x44, 0x6F, 0x44, 0x31, 0x1A, 0x30, 
148                 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x41, 0x72, 0x6D, 0x65, 
149                 0x64, 0x20, 0x46, 0x6F, 0x72, 0x63, 0x65, 0x73, 0x20, 0x52, 0x6F, 0x6F, 
150                 0x74, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x30, 0x31, 0x30, 0x32, 0x35, 0x30, 
151                 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x30, 0x33, 0x30, 0x31, 
152                 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x30, 0x50, 0x31, 
153                 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 
154                 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 
155                 0x2E, 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 
156                 0x6E, 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 
157                 0x03, 0x44, 0x6F, 0x44, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 
158                 0x03, 0x13, 0x10, 0x41, 0x72, 0x6D, 0x65, 0x64, 0x20, 0x46, 0x6F, 0x72, 
159                 0x63, 0x65, 0x73, 0x20, 0x49, 0x43, 0x41, 0x30, 0x81, 0x9F, 0x30, 0x0D, 
160                 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 
161                 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 
162                 0xD7, 0xA1, 0xB5, 0x18, 0x96, 0x60, 0x18, 0x4F, 0x8A, 0x94, 0x51, 0x47, 
163                 0x4B, 0x48, 0xC6, 0xE5, 0x78, 0x53, 0x8F, 0x7E, 0x0E, 0x87, 0xD4, 0x05, 
164                 0x15, 0x50, 0x3F, 0x92, 0x43, 0x4F, 0xBF, 0x43, 0xB5, 0x36, 0xCA, 0x69, 
165                 0x53, 0x91, 0x1D, 0x68, 0x12, 0x8B, 0x7D, 0x19, 0xAC, 0xA4, 0xA6, 0xDD, 
166                 0x69, 0x1B, 0x95, 0xF6, 0x68, 0x9D, 0xC1, 0x7D, 0x64, 0xC3, 0x7F, 0xA1, 
167                 0xCA, 0x2A, 0xC5, 0xE5, 0x0D, 0x5F, 0x00, 0x6A, 0xA7, 0xCF, 0xF0, 0x25, 
168                 0x86, 0xC4, 0xEA, 0x3B, 0x39, 0x63, 0x00, 0x46, 0x4E, 0xC7, 0xE2, 0xDD, 
169                 0x47, 0xCF, 0xB3, 0x5E, 0x2F, 0x0B, 0x59, 0x94, 0xE2, 0xCB, 0x04, 0xFA, 
170                 0x88, 0x30, 0xA3, 0x32, 0xE4, 0x5D, 0x17, 0x09, 0x1A, 0xE1, 0x6D, 0x27, 
171                 0x03, 0x53, 0x65, 0xC1, 0x1F, 0xE3, 0x73, 0xA4, 0x8D, 0xD8, 0xCB, 0x5A, 
172                 0x22, 0x07, 0xE4, 0x35, 0x61, 0x8F, 0xD6, 0x57, 0x02, 0x03, 0x01, 0x00, 
173                 0x01, 0xA3, 0x81, 0x99, 0x30, 0x81, 0x96, 0x30, 0x1F, 0x06, 0x03, 0x55, 
174                 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x3A, 0xCC, 0x94, 0x65, 
175                 0x0C, 0x85, 0xA9, 0x3C, 0xC1, 0xE0, 0xAF, 0x51, 0x33, 0x2A, 0x14, 0x48, 
176                 0x8F, 0x9E, 0x91, 0x5B, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 
177                 0x16, 0x04, 0x14, 0xDA, 0xE9, 0x92, 0x0A, 0xD6, 0x58, 0x28, 0x3A, 0x8B, 
178                 0x60, 0xCB, 0x20, 0x76, 0x48, 0xB6, 0x5B, 0x0F, 0x10, 0x83, 0x1C, 0x30, 
179                 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0xEE, 
180                 0x30, 0x33, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x2C, 0x30, 0x2A, 0x30, 
181                 0x0C, 0x06, 0x0A, 0x60, 0x86, 0x48, 0x01, 0x65, 0x02, 0x01, 0x0C, 0x01, 
182                 0x01, 0x30, 0x0C, 0x06, 0x0A, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x02, 
183                 0x01, 0x30, 0x01, 0x30, 0x0C, 0x06, 0x0A, 0x60, 0x86, 0x48, 0x01, 0x65, 
184                 0x03, 0x02, 0x01, 0x30, 0x02, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 
185                 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 
186                 0x01, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 
187                 0x01, 0x05, 0x03, 0x81, 0x81, 0x00, 0x97, 0xD9, 0xE9, 0x1F, 0x79, 0x38, 
188                 0x6C, 0xF3, 0xD0, 0x94, 0xC0, 0xDF, 0xFC, 0xBB, 0x94, 0xE5, 0x82, 0x78, 
189                 0xA7, 0x96, 0xC1, 0x92, 0x53, 0x18, 0xED, 0x2B, 0xF0, 0xE1, 0x51, 0x72, 
190                 0xD0, 0xAF, 0x16, 0x3B, 0xEB, 0xCA, 0x98, 0x4F, 0xE8, 0xD8, 0xA8, 0x88, 
191                 0x62, 0xBE, 0x0A, 0xA2, 0x38, 0x61, 0x83, 0x65, 0x95, 0x6A, 0x9C, 0x13, 
192                 0x20, 0xD1, 0x7C, 0x6A, 0xA1, 0x52, 0x5B, 0x7C, 0x49, 0x29, 0xB4, 0x85, 
193                 0x61, 0xA0, 0x98, 0x2D, 0xDA, 0x43, 0x3E, 0xC4, 0xEF, 0x81, 0xCE, 0x5F, 
194                 0xF6, 0xAD, 0x69, 0xE3, 0xD6, 0xB5, 0x5E, 0x17, 0x21, 0xFF, 0x1D, 0x64, 
195                 0x18, 0xA4, 0x61, 0x07, 0x55, 0xA1, 0x93, 0x92, 0x1C, 0x8B, 0xCD, 0x9A, 
196                 0x8F, 0x66, 0xCB, 0xCB, 0x63, 0x2B, 0x3D, 0xB2, 0x31, 0x4F, 0x3A, 0x5E, 
197                 0x8B, 0x90, 0xCD, 0x91, 0x70, 0xB7, 0xC1, 0x66, 0xB3, 0x38, 0x5C, 0x83, 
198                 0xB9, 0x5E, 0x30, 0x82, 0x03, 0x0A, 0x30, 0x82, 0x02, 0x75, 0xA0, 0x03, 
199                 0x02, 0x01, 0x02, 0x02, 0x01, 0x0D, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 
200                 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x30, 0x50, 0x31, 0x0B, 0x30, 
201                 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 
202                 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 0x53, 
203                 0x2E, 0x20, 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 
204                 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 0x44, 
205                 0x6F, 0x44, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 
206                 0x10, 0x41, 0x72, 0x6D, 0x65, 0x64, 0x20, 0x46, 0x6F, 0x72, 0x63, 0x65, 
207                 0x73, 0x20, 0x49, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x30, 0x31, 
208                 0x30, 0x32, 0x36, 0x30, 0x30, 0x31, 0x31, 0x32, 0x35, 0x5A, 0x17, 0x0D, 
209                 0x30, 0x33, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 
210                 0x5A, 0x30, 0x56, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 
211                 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 
212                 0x0A, 0x13, 0x0F, 0x55, 0x2E, 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 0x65, 
213                 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 
214                 0x55, 0x04, 0x0B, 0x13, 0x03, 0x44, 0x6F, 0x44, 0x31, 0x0D, 0x30, 0x0B, 
215                 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4E, 0x61, 0x76, 0x79, 0x31, 
216                 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, 0x4E, 0x61, 
217                 0x76, 0x79, 0x20, 0x43, 0x41, 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 
218                 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 
219                 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0x8B, 0xBF, 
220                 0x07, 0x73, 0x6C, 0x4C, 0xA1, 0x5D, 0xDC, 0xDC, 0x2E, 0x8E, 0x0C, 0xE7, 
221                 0xBD, 0x8F, 0xC7, 0x1B, 0x31, 0xBE, 0x60, 0x85, 0x5D, 0x75, 0xE5, 0xC9, 
222                 0xFD, 0xB2, 0x14, 0x62, 0xA8, 0xF4, 0x80, 0x88, 0x7A, 0x14, 0xD7, 0x9B, 
223                 0x17, 0x5A, 0x79, 0x0E, 0x70, 0xB8, 0xB6, 0x58, 0xC1, 0xBE, 0xEB, 0xB1, 
224                 0xE5, 0x43, 0x2B, 0x98, 0x63, 0xA2, 0xEB, 0xF3, 0x28, 0x0E, 0x68, 0x95, 
225                 0x2F, 0xC5, 0x72, 0x56, 0xBF, 0x3B, 0xCF, 0xAF, 0x47, 0xC7, 0x80, 0xCA, 
226                 0x52, 0x3C, 0x26, 0x1D, 0xAF, 0x0A, 0x39, 0x0F, 0x0B, 0xE4, 0xA7, 0x24, 
227                 0x97, 0x23, 0x42, 0x8A, 0xAA, 0x2F, 0x2F, 0xE2, 0x16, 0xBE, 0x5F, 0xE2, 
228                 0x7D, 0xCB, 0xD4, 0xDE, 0xD4, 0x36, 0xA2, 0x53, 0xAA, 0xE2, 0xF8, 0xD8, 
229                 0x46, 0xEA, 0x6E, 0xF0, 0xD7, 0x66, 0xA5, 0x8E, 0x08, 0x66, 0x5E, 0x94, 
230                 0x41, 0x27, 0x11, 0xE4, 0xFE, 0xA5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 
231                 0x81, 0xF1, 0x30, 0x81, 0xEE, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 
232                 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xDA, 0xE9, 0x92, 0x0A, 0xD6, 0x58, 
233                 0x28, 0x3A, 0x8B, 0x60, 0xCB, 0x20, 0x76, 0x48, 0xB6, 0x5B, 0x0F, 0x10, 
234                 0x83, 0x1C, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 
235                 0x14, 0xFB, 0x96, 0xF0, 0x10, 0xC4, 0x37, 0x55, 0xF0, 0xCE, 0xB5, 0xA6, 
236                 0xE2, 0xF1, 0x19, 0xFF, 0x99, 0x1A, 0xAE, 0x6E, 0x58, 0x30, 0x0B, 0x06, 
237                 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0xEE, 0x30, 0x33, 
238                 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x2C, 0x30, 0x2A, 0x30, 0x0C, 0x06, 
239                 0x0A, 0x60, 0x86, 0x48, 0x01, 0x65, 0x02, 0x01, 0x0C, 0x01, 0x01, 0x30, 
240                 0x0C, 0x06, 0x0A, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x02, 0x01, 0x30, 
241                 0x01, 0x30, 0x0C, 0x06, 0x0A, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x02, 
242                 0x01, 0x30, 0x02, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 
243                 0xFF, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 
244                 0x56, 0x06, 0x04, 0x55, 0x1D, 0x1E, 0x01, 0x04, 0x4E, 0x30, 0x4C, 0xA0, 
245                 0x4A, 0x30, 0x48, 0xA4, 0x46, 0x30, 0x44, 0x31, 0x0B, 0x30, 0x09, 0x06, 
246                 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 0x16, 
247                 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 0x53, 0x2E, 0x20, 
248                 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x31, 0x0C, 
249                 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 0x44, 0x6F, 0x44, 
250                 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4E, 
251                 0x61, 0x76, 0x79, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 
252                 0x0D, 0x01, 0x01, 0x05, 0x03, 0x81, 0x81, 0x00, 0x8C, 0xD1, 0xBD, 0xAD, 
253                 0xF2, 0xE9, 0xAC, 0xAC, 0x14, 0x22, 0x7B, 0x68, 0x59, 0x09, 0x40, 0xA3, 
254                 0x7D, 0x14, 0x18, 0x38, 0x03, 0xB9, 0xF2, 0x74, 0xD6, 0x8F, 0x75, 0xD4, 
255                 0xBB, 0xA4, 0x53, 0xA7, 0x4A, 0x7A, 0x7E, 0x77, 0x3D, 0x0E, 0xA6, 0xB8, 
256                 0xDE, 0x10, 0x3C, 0x14, 0xFB, 0xDE, 0x15, 0xC5, 0x81, 0xE1, 0x18, 0x31, 
257                 0xB8, 0xB8, 0xFE, 0x5C, 0x60, 0xC5, 0x3A, 0x80, 0xAB, 0x76, 0x22, 0xF6, 
258                 0xDF, 0x4A, 0xBD, 0x07, 0xE8, 0x76, 0x45, 0xF9, 0xF3, 0xF7, 0x9F, 0x3B, 
259                 0x40, 0xD3, 0xAE, 0xAE, 0x64, 0x1A, 0xB0, 0x2C, 0x62, 0xB7, 0xBD, 0xBD, 
260                 0x6F, 0x80, 0x22, 0x59, 0x99, 0x1B, 0x0E, 0xA6, 0x8E, 0xEB, 0x92, 0xF8, 
261                 0xCA, 0xA9, 0xD9, 0x55, 0xDD, 0x60, 0x65, 0xA8, 0x5C, 0xAA, 0x56, 0xE0, 
262                 0x36, 0xD1, 0xC0, 0x09, 0x4F, 0xBA, 0x3B, 0xD7, 0xEC, 0x6F, 0xA2, 0xE3, 
263                 0x02, 0xBF, 0xFB, 0x45, 0x30, 0x82, 0x02, 0xEF, 0x30, 0x82, 0x02, 0x5A, 
264                 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x6C, 0x30, 0x0B, 0x06, 0x09, 
265                 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x30, 0x56, 0x31, 
266                 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 
267                 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 
268                 0x2E, 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 
269                 0x6E, 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 
270                 0x03, 0x44, 0x6F, 0x44, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 
271                 0x0B, 0x13, 0x04, 0x4E, 0x61, 0x76, 0x79, 0x31, 0x10, 0x30, 0x0E, 0x06, 
272                 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, 0x4E, 0x61, 0x76, 0x79, 0x20, 0x43, 
273                 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x32, 0x31, 0x30, 0x31, 0x31, 0x31, 
274                 0x33, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x30, 0x34, 0x31, 0x30, 
275                 0x31, 0x30, 0x31, 0x33, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x81, 0x8B, 
276                 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 
277                 0x53, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 
278                 0x55, 0x2E, 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 
279                 0x65, 0x6E, 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 
280                 0x13, 0x03, 0x44, 0x6F, 0x44, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 
281                 0x04, 0x0B, 0x13, 0x04, 0x4E, 0x61, 0x76, 0x79, 0x31, 0x12, 0x30, 0x10, 
282                 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x09, 0x6C, 0x6F, 0x63, 0x61, 0x74, 
283                 0x69, 0x6F, 0x6E, 0x73, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 
284                 0x07, 0x13, 0x12, 0x41, 0x6E, 0x6E, 0x61, 0x70, 0x6F, 0x6C, 0x69, 0x73, 
285                 0x20, 0x4A, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x14, 0x30, 
286                 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0B, 0x4E, 0x61, 0x76, 0x79, 
287                 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x31, 0x30, 0x81, 0x9F, 0x30, 0x0D, 
288                 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 
289                 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 
290                 0xB7, 0x7E, 0x94, 0x5F, 0xE8, 0x2A, 0xE7, 0xAD, 0x82, 0x16, 0x2C, 0x3D, 
291                 0x2F, 0x5E, 0x88, 0x67, 0xF0, 0x23, 0x26, 0x15, 0x34, 0x04, 0x1F, 0x63, 
292                 0x8B, 0xFE, 0xFB, 0xBB, 0x0D, 0xC0, 0x7E, 0xF0, 0x46, 0x82, 0x09, 0xA2, 
293                 0x91, 0xE0, 0xEA, 0xEF, 0xD0, 0x43, 0xCB, 0x30, 0x45, 0xAC, 0x7C, 0xAC, 
294                 0xFC, 0xBE, 0x54, 0x79, 0x77, 0xA9, 0x6A, 0x45, 0xF5, 0xBF, 0xE5, 0xEF, 
295                 0x97, 0x11, 0x63, 0xC2, 0xF7, 0x3C, 0x73, 0x6D, 0xBA, 0x8D, 0xFE, 0xAE, 
296                 0x28, 0x4A, 0x29, 0xE4, 0xA2, 0x59, 0x0C, 0x8F, 0x1A, 0x57, 0x86, 0xF2, 
297                 0x42, 0xF7, 0x35, 0x0B, 0xC3, 0xA5, 0x31, 0xD8, 0x19, 0xE2, 0x97, 0x7A, 
298                 0xA1, 0xF4, 0xE5, 0xDB, 0xCA, 0xF5, 0x54, 0x39, 0x1D, 0x0E, 0xDF, 0x78, 
299                 0x73, 0xBF, 0x86, 0x97, 0x40, 0xAA, 0x06, 0x8E, 0x8B, 0x6B, 0x0C, 0x06, 
300                 0x98, 0xD7, 0xD2, 0x1D, 0x45, 0xAA, 0x7F, 0xA5, 0x02, 0x03, 0x01, 0x00, 
301                 0x01, 0xA3, 0x81, 0x9A, 0x30, 0x81, 0x97, 0x30, 0x1F, 0x06, 0x03, 0x55, 
302                 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xFB, 0x96, 0xF0, 0x10, 
303                 0xC4, 0x37, 0x55, 0xF0, 0xCE, 0xB5, 0xA6, 0xE2, 0xF1, 0x19, 0xFF, 0x99, 
304                 0x1A, 0xAE, 0x6E, 0x58, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 
305                 0x16, 0x04, 0x14, 0x02, 0x48, 0x78, 0xB9, 0xCC, 0x01, 0x51, 0x31, 0x74, 
306                 0x7F, 0x39, 0x2A, 0x37, 0xC2, 0x44, 0x93, 0x7E, 0x98, 0x69, 0x80, 0x30, 
307                 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, 0x02, 0x04, 0xF0, 
308                 0x30, 0x17, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x10, 0x30, 0x0E, 0x30, 
309                 0x0C, 0x06, 0x0A, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x02, 0x01, 0x30, 
310                 0x01, 0x30, 0x2F, 0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x28, 0x30, 0x26, 
311                 0x81, 0x24, 0x4E, 0x61, 0x76, 0x79, 0x31, 0x40, 0x77, 0x61, 0x72, 0x72, 
312                 0x65, 0x6E, 0x74, 0x6F, 0x6E, 0x2E, 0x61, 0x74, 0x6C, 0x2E, 0x67, 0x65, 
313                 0x74, 0x72, 0x6F, 0x6E, 0x69, 0x63, 0x73, 0x67, 0x6F, 0x76, 0x2E, 0x63, 
314                 0x6F, 0x6D, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 
315                 0x01, 0x01, 0x05, 0x03, 0x81, 0x81, 0x00, 0x1D, 0xB0, 0x1C, 0x88, 0x4D, 
316                 0xA2, 0x68, 0x25, 0x08, 0x8F, 0xA3, 0xAC, 0xC3, 0x18, 0xD5, 0xBF, 0x56, 
317                 0x7C, 0xA1, 0xF2, 0x7C, 0x76, 0x39, 0x8D, 0x12, 0x42, 0x17, 0xE6, 0x49, 
318                 0x02, 0x39, 0xAE, 0xBB, 0x75, 0x70, 0x4B, 0x65, 0xEF, 0x0E, 0x3A, 0xC2, 
319                 0x33, 0xD9, 0x94, 0xDF, 0x5F, 0xA6, 0x12, 0x64, 0x8F, 0x04, 0x76, 0x2C, 
320                 0xAF, 0x92, 0x37, 0x4C, 0xF1, 0x94, 0x99, 0x52, 0xFD, 0x61, 0x95, 0x00, 
321                 0x2B, 0x9D, 0x0D, 0x35, 0xB9, 0x7C, 0x6A, 0x4C, 0xBB, 0x8D, 0x8A, 0x7B, 
322                 0x93, 0x37, 0x02, 0xC8, 0x81, 0x0B, 0xBD, 0xB9, 0x45, 0x51, 0x03, 0xBA, 
323                 0xD3, 0xF4, 0xBD, 0x72, 0x10, 0x05, 0xE9, 0xC1, 0x6E, 0xFE, 0xC5, 0x76, 
324                 0x2C, 0x6A, 0x6A, 0x16, 0x2F, 0x0C, 0x54, 0x44, 0x0D, 0x15, 0xC7, 0xA5, 
325                 0x41, 0xB1, 0x05, 0xE8, 0x4B, 0xF3, 0x60, 0x92, 0xEB, 0xD4, 0xF7, 0x93, 
326                 0xFF, 0x67, 0x4E, 0xA1, 0x82, 0x02, 0x9E, 0x30, 0x82, 0x01, 0x2A, 0x30, 
327                 0x81, 0x96, 0x02, 0x01, 0x01, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 
328                 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x30, 0x50, 0x31, 0x0B, 0x30, 0x09, 
329                 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 
330                 0x16, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 0x53, 0x2E, 
331                 0x20, 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x31, 
332                 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 0x44, 0x6F, 
333                 0x44, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 
334                 0x41, 0x72, 0x6D, 0x65, 0x64, 0x20, 0x46, 0x6F, 0x72, 0x63, 0x65, 0x73, 
335                 0x20, 0x49, 0x43, 0x41, 0x17, 0x0D, 0x30, 0x32, 0x31, 0x30, 0x31, 0x31, 
336                 0x31, 0x33, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x30, 0x33, 0x31, 
337                 0x30, 0x31, 0x31, 0x31, 0x33, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x14, 
338                 0x30, 0x12, 0x02, 0x01, 0x09, 0x17, 0x0D, 0x30, 0x30, 0x31, 0x31, 0x33, 
339                 0x30, 0x32, 0x31, 0x31, 0x36, 0x35, 0x31, 0x5A, 0x30, 0x0B, 0x06, 0x09, 
340                 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x03, 0x81, 0x81, 
341                 0x00, 0x7B, 0xC3, 0x89, 0xC4, 0x94, 0xEA, 0x2A, 0x44, 0x61, 0x96, 0xC9, 
342                 0x82, 0x05, 0x67, 0xE4, 0x8F, 0xBC, 0xE8, 0x8A, 0x7B, 0xA6, 0xA8, 0xD6, 
343                 0x82, 0x9A, 0x2B, 0x3D, 0x56, 0x15, 0xEA, 0x3B, 0x58, 0xAC, 0xC6, 0xED, 
344                 0xCB, 0x67, 0x0B, 0x1F, 0x37, 0x21, 0xF2, 0x50, 0xF3, 0x41, 0x40, 0x09, 
345                 0x9F, 0xE3, 0xF5, 0xF5, 0x20, 0x0F, 0xEA, 0xC7, 0xA4, 0xD1, 0xBA, 0xAE, 
346                 0xB2, 0x92, 0x9E, 0x5E, 0x3D, 0xFE, 0xE5, 0xD5, 0x79, 0xAD, 0xA7, 0x29, 
347                 0x63, 0xFC, 0x39, 0x03, 0xC2, 0x16, 0x95, 0x2C, 0xB0, 0x40, 0xED, 0x2E, 
348                 0x09, 0xF7, 0x1C, 0x94, 0x6A, 0xB6, 0x92, 0x7D, 0x9C, 0x35, 0x83, 0xEE, 
349                 0x0D, 0x98, 0xD0, 0xC3, 0x2E, 0xD5, 0x0C, 0xE4, 0xCE, 0x6D, 0x36, 0xC0, 
350                 0x27, 0x16, 0x3A, 0x34, 0x33, 0x54, 0x96, 0x7D, 0xB4, 0x91, 0x03, 0x39, 
351                 0x9E, 0x6B, 0x1B, 0x57, 0x8B, 0x9F, 0x4F, 0x10, 0xB2, 0x30, 0x82, 0x01, 
352                 0x6C, 0x30, 0x81, 0xD8, 0x02, 0x01, 0x01, 0x30, 0x0B, 0x06, 0x09, 0x2A, 
353                 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x30, 0x56, 0x31, 0x0B, 
354                 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 
355                 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0F, 0x55, 0x2E, 
356                 0x53, 0x2E, 0x20, 0x47, 0x6F, 0x76, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 
357                 0x74, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x03, 
358                 0x44, 0x6F, 0x44, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 
359                 0x13, 0x04, 0x4E, 0x61, 0x76, 0x79, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 
360                 0x55, 0x04, 0x03, 0x13, 0x07, 0x4E, 0x61, 0x76, 0x79, 0x20, 0x43, 0x41, 
361                 0x17, 0x0D, 0x30, 0x32, 0x31, 0x30, 0x31, 0x31, 0x31, 0x33, 0x31, 0x32, 
362                 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x30, 0x33, 0x31, 0x30, 0x31, 0x31, 0x31, 
363                 0x33, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x50, 0x30, 0x12, 0x02, 0x01, 
364                 0x6D, 0x17, 0x0D, 0x30, 0x31, 0x30, 0x34, 0x32, 0x33, 0x32, 0x31, 0x30, 
365                 0x39, 0x32, 0x37, 0x5A, 0x30, 0x12, 0x02, 0x01, 0x6F, 0x17, 0x0D, 0x30, 
366                 0x31, 0x30, 0x34, 0x32, 0x33, 0x32, 0x31, 0x30, 0x39, 0x32, 0x37, 0x5A, 
367                 0x30, 0x12, 0x02, 0x01, 0x50, 0x17, 0x0D, 0x30, 0x30, 0x31, 0x31, 0x33, 
368                 0x30, 0x32, 0x32, 0x30, 0x38, 0x32, 0x39, 0x5A, 0x30, 0x12, 0x02, 0x01, 
369                 0x52, 0x17, 0x0D, 0x30, 0x30, 0x31, 0x31, 0x33, 0x30, 0x32, 0x32, 0x30, 
370                 0x38, 0x32, 0x39, 0x5A, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 
371                 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x03, 0x81, 0x81, 0x00, 0x3A, 0xFA, 0x41, 
372                 0x76, 0x90, 0x24, 0x6E, 0x59, 0xEE, 0xF3, 0xC4, 0xA2, 0x77, 0xE0, 0xE4, 
373                 0x70, 0x69, 0x43, 0xA0, 0x8E, 0x42, 0x9F, 0x1F, 0x58, 0x43, 0x1D, 0xF0, 
374                 0x4F, 0x1D, 0xE8, 0xF3, 0x36, 0x09, 0x07, 0xE5, 0x3A, 0x84, 0xBB, 0x54, 
375                 0xBB, 0xB6, 0x55, 0x88, 0x76, 0xC2, 0x42, 0x62, 0xC1, 0xE9, 0x54, 0xA2, 
376                 0x49, 0xEE, 0x98, 0xDD, 0x07, 0x84, 0x90, 0x5F, 0x7E, 0x94, 0x11, 0x64, 
377                 0x35, 0x2D, 0xBA, 0x5A, 0xC7, 0x19, 0x46, 0xAF, 0x21, 0x3C, 0x3B, 0xB6, 
378                 0x0E, 0x28, 0x2B, 0x38, 0x9A, 0xA1, 0xB6, 0x7B, 0x6A, 0xC8, 0xA8, 0xBA, 
379                 0xC7, 0x9E, 0xD1, 0x31, 0x70, 0x5F, 0xD6, 0x15, 0x03, 0xE6, 0x6C, 0x55, 
380                 0x85, 0x30, 0xA8, 0x45, 0xBB, 0x28, 0xF3, 0xAC, 0x97, 0x5F, 0x86, 0x21, 
381                 0x77, 0xEF, 0xEC, 0x17, 0x92, 0xC7, 0xD6, 0xCD, 0xE1, 0x2A, 0x2E, 0xE7, 
382                 0xF3, 0xED, 0x7F, 0x66, 0x86, 0x31, 0x00 };
383         
384                 // because most crypto stuff works with byte[] buffers
385                 static public void AssertEquals (string msg, byte[] array1, byte[] array2) 
386                 {
387                         if ((array1 == null) && (array2 == null))
388                                 return;
389                         if (array1 == null)
390                                 Fail (msg + " -> First array is NULL");
391                         if (array2 == null)
392                                 Fail (msg + " -> Second array is NULL");
393         
394                         bool a = (array1.Length == array2.Length);
395                         if (a) {
396                                 for (int i = 0; i < array1.Length; i++) {
397                                         if (array1 [i] != array2 [i]) {
398                                                 a = false;
399                                                 break;
400                                         }
401                                 }
402                         }
403                         if (array1.Length > 0) {
404                                 msg += " -> Expected " + BitConverter.ToString (array1, 0);
405                                 msg += " is different than " + BitConverter.ToString (array2, 0);
406                         }
407                         Assert (msg, a);
408                 }
409         
410                 private const string testfile = "test.spc";
411         
412                 [TearDown]
413                 public void TearDown () 
414                 {
415                         File.Delete (testfile);
416                 }
417         
418                 private void WriteBuffer (byte[] buffer) 
419                 {
420                         FileStream fs = File.Create (testfile);
421                         fs.Write (buffer, 0, buffer.Length);
422                         fs.Close ();
423                 }
424         
425                 [Test]
426                 public void ReadCertificateOnly () 
427                 {
428                         WriteBuffer (certonly);
429                         SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (testfile);
430                         AssertEquals ("certonly.Certificates", 1, spc.Certificates.Count);
431                         AssertEquals ("certonly.Crl", 0, spc.Crls.Count);
432                 }
433         
434                 [Test]
435                 public void CompareCertificateOnly () 
436                 {
437                         WriteBuffer (certonly);
438                         SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (testfile);
439                         SoftwarePublisherCertificate newspc = new SoftwarePublisherCertificate ();
440                         newspc.Certificates.Add (spc.Certificates [0]);
441                         byte[] newcertonly = newspc.GetBytes ();
442                         AssertEquals ("certonly.compare", certonly, newcertonly);
443         
444                         SoftwarePublisherCertificate newerspc = new SoftwarePublisherCertificate (newcertonly);
445                         AssertEquals ("certonly.Certificates", 1, newerspc.Certificates.Count);
446                         AssertEquals ("certonly.Crl", 0, newerspc.Crls.Count);
447                 }
448         
449                 [Test]
450                 public void ReadCRLOnly () 
451                 {
452                         WriteBuffer (crlonly);
453                         SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (testfile);
454                         AssertEquals ("crlonly.Certificates", 0, spc.Certificates.Count);
455                         AssertEquals ("crlonly.Crl", 1, spc.Crls.Count);
456                 }
457         
458                 [Test]
459                 public void CompareCRLOnly () 
460                 {
461                         WriteBuffer (crlonly);
462                         SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (testfile);
463                         SoftwarePublisherCertificate newspc = new SoftwarePublisherCertificate ();
464                         newspc.Crls.Add (spc.Crls [0]);
465                         byte[] newcrlonly = newspc.GetBytes ();
466                         AssertEquals ("crlonly.compare", crlonly, newcrlonly);
467         
468                         SoftwarePublisherCertificate newerspc = new SoftwarePublisherCertificate (newcrlonly);
469                         AssertEquals ("crlonly.Certificates", 0, newerspc.Certificates.Count);
470                         AssertEquals ("crlonly.Crl", 1, newerspc.Crls.Count);
471                 }
472         
473                 [Test]
474                 public void ReadNavy () 
475                 {
476                         WriteBuffer (navy);
477                         SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (testfile);
478                         AssertEquals ("navy.Certificates", 3, spc.Certificates.Count);
479                         AssertEquals ("navy.Crl", 2, spc.Crls.Count);
480                 }
481         
482                 [Test]
483                 public void CompareReadNavy () 
484                 {
485                         WriteBuffer (navy);
486                         SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (testfile);
487                         SoftwarePublisherCertificate newspc = new SoftwarePublisherCertificate ();
488                         foreach (MSX.X509Certificate x in spc.Certificates)
489                                 newspc.Certificates.Add (x);
490                         foreach (byte[] crl in spc.Crls)
491                                 newspc.Crls.Add (crl);
492                         byte[] newnavy = newspc.GetBytes ();
493                         AssertEquals ("navy.compare", navy, newnavy);
494         
495                         SoftwarePublisherCertificate newerspc = new SoftwarePublisherCertificate (newnavy);
496                         AssertEquals ("navy.Certificates", 3, newerspc.Certificates.Count);
497                         AssertEquals ("navy.Crl", 2, newerspc.Crls.Count);
498                 }
499                 
500                 [Test]
501                 [ExpectedException (typeof (ArgumentNullException))]
502                 public void Constructor_Null () 
503                 {
504                         SoftwarePublisherCertificate spc = new SoftwarePublisherCertificate (null);
505                 }
506
507                 [Test]
508                 [ExpectedException (typeof (ArgumentException))]
509                 public void Constructor_BadOid () 
510                 {
511                         byte[] bad = (byte[]) certonly.Clone ();
512                         bad [9] -= 1;
513                         SoftwarePublisherCertificate spc = new SoftwarePublisherCertificate (bad);
514                 }
515                 
516                 [Test]
517                 [ExpectedException (typeof (ArgumentNullException))]
518                 public void CreateFromFile_Null () 
519                 {
520                         SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile (null);
521                 }
522         }
523 }