xref: /freebsd/contrib/libfido2/regress/cred.c (revision 60a517b6)
1 /*
2  * Copyright (c) 2018-2021 Yubico AB. All rights reserved.
3  * Use of this source code is governed by a BSD-style
4  * license that can be found in the LICENSE file.
5  * SPDX-License-Identifier: BSD-2-Clause
6  */
7 
8 #undef NDEBUG
9 
10 #include <assert.h>
11 #include <string.h>
12 #include <stdlib.h>
13 #include <stdbool.h>
14 
15 #define _FIDO_INTERNAL
16 
17 #include <fido.h>
18 
19 static int fake_dev_handle;
20 
21 static const unsigned char cdh[32] = {
22 	0xf9, 0x64, 0x57, 0xe7, 0x2d, 0x97, 0xf6, 0xbb,
23 	0xdd, 0xd7, 0xfb, 0x06, 0x37, 0x62, 0xea, 0x26,
24 	0x20, 0x44, 0x8e, 0x69, 0x7c, 0x03, 0xf2, 0x31,
25 	0x2f, 0x99, 0xdc, 0xaf, 0x3e, 0x8a, 0x91, 0x6b,
26 };
27 
28 static const unsigned char authdata[198] = {
29 	0x58, 0xc4, 0x49, 0x96, 0x0d, 0xe5, 0x88, 0x0e,
30 	0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 0x76,
31 	0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 0x86,
32 	0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 0x1d,
33 	0x97, 0x63, 0x41, 0x00, 0x00, 0x00, 0x00, 0xf8,
34 	0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, 0x80,
35 	0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, 0x00,
36 	0x40, 0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde,
37 	0xc5, 0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d,
38 	0x53, 0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e,
39 	0x7f, 0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda,
40 	0x68, 0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83,
41 	0x2c, 0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76,
42 	0x90, 0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6,
43 	0x3c, 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f,
44 	0x25, 0xa5, 0x01, 0x02, 0x03, 0x26, 0x20, 0x01,
45 	0x21, 0x58, 0x20, 0x17, 0x5b, 0x27, 0xa6, 0x56,
46 	0xb2, 0x26, 0x0c, 0x26, 0x0c, 0x55, 0x42, 0x78,
47 	0x17, 0x5d, 0x4c, 0xf8, 0xa2, 0xfd, 0x1b, 0xb9,
48 	0x54, 0xdf, 0xd5, 0xeb, 0xbf, 0x22, 0x64, 0xf5,
49 	0x21, 0x9a, 0xc6, 0x22, 0x58, 0x20, 0x87, 0x5f,
50 	0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f, 0xeb, 0xe3,
51 	0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6, 0x1c, 0x31,
52 	0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1, 0xfe, 0x5d,
53 	0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2,
54 };
55 
56 static const unsigned char authdata_dupkeys[200] = {
57 	0x58, 0xc6, 0x49, 0x96, 0x0d, 0xe5, 0x88, 0x0e,
58 	0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 0x76,
59 	0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 0x86,
60 	0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 0x1d,
61 	0x97, 0x63, 0x41, 0x00, 0x00, 0x00, 0x00, 0xf8,
62 	0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, 0x80,
63 	0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, 0x00,
64 	0x40, 0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde,
65 	0xc5, 0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d,
66 	0x53, 0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e,
67 	0x7f, 0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda,
68 	0x68, 0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83,
69 	0x2c, 0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76,
70 	0x90, 0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6,
71 	0x3c, 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f,
72 	0x25, 0xa6, 0x01, 0x02, 0x01, 0x02, 0x03, 0x26,
73 	0x20, 0x01, 0x21, 0x58, 0x20, 0x17, 0x5b, 0x27,
74 	0xa6, 0x56, 0xb2, 0x26, 0x0c, 0x26, 0x0c, 0x55,
75 	0x42, 0x78, 0x17, 0x5d, 0x4c, 0xf8, 0xa2, 0xfd,
76 	0x1b, 0xb9, 0x54, 0xdf, 0xd5, 0xeb, 0xbf, 0x22,
77 	0x64, 0xf5, 0x21, 0x9a, 0xc6, 0x22, 0x58, 0x20,
78 	0x87, 0x5f, 0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f,
79 	0xeb, 0xe3, 0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6,
80 	0x1c, 0x31, 0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1,
81 	0xfe, 0x5d, 0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2,
82 };
83 
84 static const unsigned char authdata_unsorted_keys[198] = {
85 	0x58, 0xc4, 0x49, 0x96, 0x0d, 0xe5, 0x88, 0x0e,
86 	0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 0x76,
87 	0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 0x86,
88 	0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 0x1d,
89 	0x97, 0x63, 0x41, 0x00, 0x00, 0x00, 0x00, 0xf8,
90 	0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, 0x80,
91 	0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, 0x00,
92 	0x40, 0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde,
93 	0xc5, 0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d,
94 	0x53, 0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e,
95 	0x7f, 0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda,
96 	0x68, 0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83,
97 	0x2c, 0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76,
98 	0x90, 0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6,
99 	0x3c, 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f,
100 	0x25, 0xa5, 0x03, 0x26, 0x01, 0x02, 0x20, 0x01,
101 	0x21, 0x58, 0x20, 0x17, 0x5b, 0x27, 0xa6, 0x56,
102 	0xb2, 0x26, 0x0c, 0x26, 0x0c, 0x55, 0x42, 0x78,
103 	0x17, 0x5d, 0x4c, 0xf8, 0xa2, 0xfd, 0x1b, 0xb9,
104 	0x54, 0xdf, 0xd5, 0xeb, 0xbf, 0x22, 0x64, 0xf5,
105 	0x21, 0x9a, 0xc6, 0x22, 0x58, 0x20, 0x87, 0x5f,
106 	0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f, 0xeb, 0xe3,
107 	0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6, 0x1c, 0x31,
108 	0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1, 0xfe, 0x5d,
109 	0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2,
110 };
111 
112 const unsigned char authdata_tpm_rs256[362] = {
113 	0x59, 0x01, 0x67, 0x49, 0x96, 0x0d, 0xe5, 0x88,
114 	0x0e, 0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64,
115 	0x76, 0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2,
116 	0x86, 0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83,
117 	0x1d, 0x97, 0x63, 0x45, 0x00, 0x00, 0x00, 0x00,
118 	0x08, 0x98, 0x70, 0x58, 0xca, 0xdc, 0x4b, 0x81,
119 	0xb6, 0xe1, 0x30, 0xde, 0x50, 0xdc, 0xbe, 0x96,
120 	0x00, 0x20, 0x89, 0x99, 0x6d, 0x5a, 0x00, 0x29,
121 	0xe5, 0x3e, 0x6a, 0x1c, 0x72, 0x6d, 0x71, 0x4a,
122 	0x4f, 0x03, 0x9b, 0x68, 0x17, 0xdb, 0x29, 0x1a,
123 	0x6b, 0x02, 0x6c, 0x26, 0xf9, 0xbd, 0xc3, 0x0e,
124 	0x38, 0x1a, 0xa4, 0x01, 0x03, 0x03, 0x39, 0x01,
125 	0x00, 0x20, 0x59, 0x01, 0x00, 0xc5, 0xb6, 0x9c,
126 	0x06, 0x1d, 0xcf, 0xb9, 0xf2, 0x5e, 0x99, 0x7d,
127 	0x6d, 0x73, 0xd8, 0x36, 0xc1, 0x4a, 0x90, 0x05,
128 	0x4d, 0x82, 0x57, 0xc1, 0xb6, 0x6a, 0xd1, 0x43,
129 	0x03, 0x85, 0xf8, 0x52, 0x4f, 0xd2, 0x27, 0x91,
130 	0x0b, 0xb5, 0x93, 0xa0, 0x68, 0xf8, 0x80, 0x1b,
131 	0xaa, 0x65, 0x97, 0x45, 0x11, 0x86, 0x34, 0xd6,
132 	0x67, 0xf8, 0xd5, 0x12, 0x79, 0x84, 0xee, 0x70,
133 	0x99, 0x00, 0x63, 0xa8, 0xb4, 0x43, 0x0b, 0x4c,
134 	0x57, 0x4a, 0xd6, 0x9b, 0x75, 0x63, 0x8a, 0x46,
135 	0x57, 0xdb, 0x14, 0xc8, 0x71, 0xd1, 0xb3, 0x07,
136 	0x68, 0x58, 0xbc, 0x55, 0x84, 0x80, 0x2a, 0xd2,
137 	0x36, 0x9f, 0xc1, 0x64, 0xa0, 0x11, 0x4b, 0xc9,
138 	0x32, 0x31, 0x3a, 0xd6, 0x87, 0x26, 0x1a, 0x3a,
139 	0x78, 0x3d, 0x89, 0xdb, 0x00, 0x28, 0x3b, 0xae,
140 	0x2b, 0x1b, 0x56, 0xe2, 0x8c, 0x4c, 0x63, 0xac,
141 	0x6e, 0x6c, 0xf7, 0xb5, 0x7d, 0x4d, 0x0b, 0x9f,
142 	0x06, 0xa0, 0x10, 0x35, 0x38, 0x20, 0x4d, 0xcc,
143 	0x07, 0xd7, 0x00, 0x4e, 0x86, 0xba, 0xfe, 0x8b,
144 	0xe4, 0x3f, 0x4a, 0xd6, 0xca, 0xbf, 0x67, 0x40,
145 	0x1a, 0xa4, 0xda, 0x82, 0x52, 0x15, 0xb8, 0x14,
146 	0x3a, 0x7c, 0xa9, 0x02, 0xc1, 0x01, 0x69, 0xc6,
147 	0x51, 0xd4, 0xbc, 0x1f, 0x95, 0xb2, 0xee, 0x1f,
148 	0xdd, 0xb5, 0x73, 0x16, 0x5e, 0x29, 0x3f, 0x47,
149 	0xac, 0x65, 0xfb, 0x63, 0x5c, 0xb9, 0xc8, 0x13,
150 	0x2d, 0xec, 0x85, 0xde, 0x71, 0x0d, 0x84, 0x93,
151 	0x74, 0x76, 0x91, 0xdd, 0x1d, 0x6d, 0x3d, 0xc7,
152 	0x36, 0x19, 0x19, 0x86, 0xde, 0x7c, 0xca, 0xd6,
153 	0xc6, 0x65, 0x7e, 0x4b, 0x24, 0x9c, 0xce, 0x92,
154 	0x6b, 0x1c, 0xe0, 0xa0, 0xa9, 0x6c, 0xc3, 0xed,
155 	0x4f, 0x2a, 0x54, 0x07, 0x00, 0x32, 0x5e, 0x1b,
156 	0x94, 0x37, 0xcd, 0xe2, 0x32, 0xa8, 0xd5, 0x2c,
157 	0xfb, 0x03, 0x9d, 0x79, 0xdf, 0x21, 0x43, 0x01,
158 	0x00, 0x01
159 };
160 
161 static const unsigned char authdata_tpm_es256[166] =  {
162 	0x58, 0xa4, 0x49, 0x96, 0x0d, 0xe5, 0x88, 0x0e,
163 	0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 0x76,
164 	0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 0x86,
165 	0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 0x1d,
166 	0x97, 0x63, 0x45, 0x00, 0x00, 0x00, 0x00, 0x08,
167 	0x98, 0x70, 0x58, 0xca, 0xdc, 0x4b, 0x81, 0xb6,
168 	0xe1, 0x30, 0xde, 0x50, 0xdc, 0xbe, 0x96, 0x00,
169 	0x20, 0xa8, 0xdf, 0x03, 0xf7, 0xbf, 0x39, 0x51,
170 	0x94, 0x95, 0x8f, 0xa4, 0x84, 0x97, 0x30, 0xbc,
171 	0x3c, 0x7e, 0x1c, 0x99, 0x91, 0x4d, 0xae, 0x6d,
172 	0xfb, 0xdf, 0x53, 0xb5, 0xb6, 0x1f, 0x3a, 0x4e,
173 	0x6a, 0xa5, 0x01, 0x02, 0x03, 0x26, 0x20, 0x01,
174 	0x21, 0x58, 0x20, 0xfb, 0xd6, 0xba, 0x74, 0xe6,
175 	0x6e, 0x5c, 0x87, 0xef, 0x89, 0xa2, 0xe8, 0x3d,
176 	0x0b, 0xe9, 0x69, 0x2c, 0x07, 0x07, 0x7a, 0x8a,
177 	0x1e, 0xce, 0x12, 0xea, 0x3b, 0xb3, 0xf1, 0xf3,
178 	0xd9, 0xc3, 0xe6, 0x22, 0x58, 0x20, 0x3c, 0x68,
179 	0x51, 0x94, 0x54, 0x8d, 0xeb, 0x9f, 0xb2, 0x2c,
180 	0x66, 0x75, 0xb6, 0xb7, 0x55, 0x22, 0x0d, 0x87,
181 	0x59, 0xc4, 0x39, 0x91, 0x62, 0x17, 0xc2, 0xc3,
182 	0x53, 0xa5, 0x26, 0x97, 0x4f, 0x2d
183 };
184 
185 static const unsigned char x509[742] = {
186 	0x30, 0x82, 0x02, 0xe2, 0x30, 0x81, 0xcb, 0x02,
187 	0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
188 	0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
189 	0x00, 0x30, 0x1d, 0x31, 0x1b, 0x30, 0x19, 0x06,
190 	0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x59, 0x75,
191 	0x62, 0x69, 0x63, 0x6f, 0x20, 0x55, 0x32, 0x46,
192 	0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x41,
193 	0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x35,
194 	0x31, 0x35, 0x31, 0x32, 0x35, 0x38, 0x35, 0x34,
195 	0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x36, 0x31,
196 	0x34, 0x31, 0x32, 0x35, 0x38, 0x35, 0x34, 0x5a,
197 	0x30, 0x1d, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03,
198 	0x55, 0x04, 0x03, 0x13, 0x12, 0x59, 0x75, 0x62,
199 	0x69, 0x63, 0x6f, 0x20, 0x55, 0x32, 0x46, 0x20,
200 	0x54, 0x65, 0x73, 0x74, 0x20, 0x45, 0x45, 0x30,
201 	0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48,
202 	0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86,
203 	0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42,
204 	0x00, 0x04, 0xdb, 0x0a, 0xdb, 0xf5, 0x21, 0xc7,
205 	0x5c, 0xce, 0x63, 0xdc, 0xa6, 0xe1, 0xe8, 0x25,
206 	0x06, 0x0d, 0x94, 0xe6, 0x27, 0x54, 0x19, 0x4f,
207 	0x9d, 0x24, 0xaf, 0x26, 0x1a, 0xbe, 0xad, 0x99,
208 	0x44, 0x1f, 0x95, 0xa3, 0x71, 0x91, 0x0a, 0x3a,
209 	0x20, 0xe7, 0x3e, 0x91, 0x5e, 0x13, 0xe8, 0xbe,
210 	0x38, 0x05, 0x7a, 0xd5, 0x7a, 0xa3, 0x7e, 0x76,
211 	0x90, 0x8f, 0xaf, 0xe2, 0x8a, 0x94, 0xb6, 0x30,
212 	0xeb, 0x9d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
213 	0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
214 	0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x95, 0x40,
215 	0x6b, 0x50, 0x61, 0x7d, 0xad, 0x84, 0xa3, 0xb4,
216 	0xeb, 0x88, 0x0f, 0xe3, 0x30, 0x0f, 0x2d, 0xa2,
217 	0x0a, 0x00, 0xd9, 0x25, 0x04, 0xee, 0x72, 0xfa,
218 	0x67, 0xdf, 0x58, 0x51, 0x0f, 0x0b, 0x47, 0x02,
219 	0x9c, 0x3e, 0x41, 0x29, 0x4a, 0x93, 0xac, 0x29,
220 	0x85, 0x89, 0x2d, 0xa4, 0x7a, 0x81, 0x32, 0x28,
221 	0x57, 0x71, 0x01, 0xef, 0xa8, 0x42, 0x88, 0x16,
222 	0x96, 0x37, 0x91, 0xd5, 0xdf, 0xe0, 0x8f, 0xc9,
223 	0x3c, 0x8d, 0xb0, 0xcd, 0x89, 0x70, 0x82, 0xec,
224 	0x79, 0xd3, 0xc6, 0x78, 0x73, 0x29, 0x32, 0xe5,
225 	0xab, 0x6c, 0xbd, 0x56, 0x9f, 0xd5, 0x45, 0x91,
226 	0xce, 0xc1, 0xdd, 0x8d, 0x64, 0xdc, 0xe9, 0x9c,
227 	0x1f, 0x5e, 0x3c, 0xd2, 0xaf, 0x51, 0xa5, 0x82,
228 	0x18, 0xaf, 0xe0, 0x37, 0xe7, 0x32, 0x9e, 0x76,
229 	0x05, 0x77, 0x02, 0x7b, 0xe6, 0x24, 0xa0, 0x31,
230 	0x56, 0x1b, 0xfd, 0x19, 0xc5, 0x71, 0xd3, 0xf0,
231 	0x9e, 0xc0, 0x73, 0x05, 0x4e, 0xbc, 0x85, 0xb8,
232 	0x53, 0x9e, 0xef, 0xc5, 0xbc, 0x9c, 0x56, 0xa3,
233 	0xba, 0xd9, 0x27, 0x6a, 0xbb, 0xa9, 0x7a, 0x40,
234 	0xd7, 0x47, 0x8b, 0x55, 0x72, 0x6b, 0xe3, 0xfe,
235 	0x28, 0x49, 0x71, 0x24, 0xf4, 0x8f, 0xf4, 0x20,
236 	0x81, 0xea, 0x38, 0xff, 0x7c, 0x0a, 0x4f, 0xdf,
237 	0x02, 0x82, 0x39, 0x81, 0x82, 0x3b, 0xca, 0x09,
238 	0xdd, 0xca, 0xaa, 0x0f, 0x27, 0xf5, 0xa4, 0x83,
239 	0x55, 0x6c, 0x9a, 0x39, 0x9b, 0x15, 0x3a, 0x16,
240 	0x63, 0xdc, 0x5b, 0xf9, 0xac, 0x5b, 0xbc, 0xf7,
241 	0x9f, 0xbe, 0x0f, 0x8a, 0xa2, 0x3c, 0x31, 0x13,
242 	0xa3, 0x32, 0x48, 0xca, 0x58, 0x87, 0xf8, 0x7b,
243 	0xa0, 0xa1, 0x0a, 0x6a, 0x60, 0x96, 0x93, 0x5f,
244 	0x5d, 0x26, 0x9e, 0x63, 0x1d, 0x09, 0xae, 0x9a,
245 	0x41, 0xe5, 0xbd, 0x08, 0x47, 0xfe, 0xe5, 0x09,
246 	0x9b, 0x20, 0xfd, 0x12, 0xe2, 0xe6, 0x40, 0x7f,
247 	0xba, 0x4a, 0x61, 0x33, 0x66, 0x0d, 0x0e, 0x73,
248 	0xdb, 0xb0, 0xd5, 0xa2, 0x9a, 0x9a, 0x17, 0x0d,
249 	0x34, 0x30, 0x85, 0x6a, 0x42, 0x46, 0x9e, 0xff,
250 	0x34, 0x8f, 0x5f, 0x87, 0x6c, 0x35, 0xe7, 0xa8,
251 	0x4d, 0x35, 0xeb, 0xc1, 0x41, 0xaa, 0x8a, 0xd2,
252 	0xda, 0x19, 0xaa, 0x79, 0xa2, 0x5f, 0x35, 0x2c,
253 	0xa0, 0xfd, 0x25, 0xd3, 0xf7, 0x9d, 0x25, 0x18,
254 	0x2d, 0xfa, 0xb4, 0xbc, 0xbb, 0x07, 0x34, 0x3c,
255 	0x8d, 0x81, 0xbd, 0xf4, 0xe9, 0x37, 0xdb, 0x39,
256 	0xe9, 0xd1, 0x45, 0x5b, 0x20, 0x41, 0x2f, 0x2d,
257 	0x27, 0x22, 0xdc, 0x92, 0x74, 0x8a, 0x92, 0xd5,
258 	0x83, 0xfd, 0x09, 0xfb, 0x13, 0x9b, 0xe3, 0x39,
259 	0x7a, 0x6b, 0x5c, 0xfa, 0xe6, 0x76, 0x9e, 0xe0,
260 	0xe4, 0xe3, 0xef, 0xad, 0xbc, 0xfd, 0x42, 0x45,
261 	0x9a, 0xd4, 0x94, 0xd1, 0x7e, 0x8d, 0xa7, 0xd8,
262 	0x05, 0xd5, 0xd3, 0x62, 0xcf, 0x15, 0xcf, 0x94,
263 	0x7d, 0x1f, 0x5b, 0x58, 0x20, 0x44, 0x20, 0x90,
264 	0x71, 0xbe, 0x66, 0xe9, 0x9a, 0xab, 0x74, 0x32,
265 	0x70, 0x53, 0x1d, 0x69, 0xed, 0x87, 0x66, 0xf4,
266 	0x09, 0x4f, 0xca, 0x25, 0x30, 0xc2, 0x63, 0x79,
267 	0x00, 0x3c, 0xb1, 0x9b, 0x39, 0x3f, 0x00, 0xe0,
268 	0xa8, 0x88, 0xef, 0x7a, 0x51, 0x5b, 0xe7, 0xbd,
269 	0x49, 0x64, 0xda, 0x41, 0x7b, 0x24, 0xc3, 0x71,
270 	0x22, 0xfd, 0xd1, 0xd1, 0x20, 0xb3, 0x3f, 0x97,
271 	0xd3, 0x97, 0xb2, 0xaa, 0x18, 0x1c, 0x9e, 0x03,
272 	0x77, 0x7b, 0x5b, 0x7e, 0xf9, 0xa3, 0xa0, 0xd6,
273 	0x20, 0x81, 0x2c, 0x38, 0x8f, 0x9d, 0x25, 0xde,
274 	0xe9, 0xc8, 0xf5, 0xdd, 0x6a, 0x47, 0x9c, 0x65,
275 	0x04, 0x5a, 0x56, 0xe6, 0xc2, 0xeb, 0xf2, 0x02,
276 	0x97, 0xe1, 0xb9, 0xd8, 0xe1, 0x24, 0x76, 0x9f,
277 	0x23, 0x62, 0x39, 0x03, 0x4b, 0xc8, 0xf7, 0x34,
278 	0x07, 0x49, 0xd6, 0xe7, 0x4d, 0x9a,
279 };
280 
281 const unsigned char sig[70] = {
282 	0x30, 0x44, 0x02, 0x20, 0x54, 0x92, 0x28, 0x3b,
283 	0x83, 0x33, 0x47, 0x56, 0x68, 0x79, 0xb2, 0x0c,
284 	0x84, 0x80, 0xcc, 0x67, 0x27, 0x8b, 0xfa, 0x48,
285 	0x43, 0x0d, 0x3c, 0xb4, 0x02, 0x36, 0x87, 0x97,
286 	0x3e, 0xdf, 0x2f, 0x65, 0x02, 0x20, 0x1b, 0x56,
287 	0x17, 0x06, 0xe2, 0x26, 0x0f, 0x6a, 0xe9, 0xa9,
288 	0x70, 0x99, 0x62, 0xeb, 0x3a, 0x04, 0x1a, 0xc4,
289 	0xa7, 0x03, 0x28, 0x56, 0x7c, 0xed, 0x47, 0x08,
290 	0x68, 0x73, 0x6a, 0xb6, 0x89, 0x0d,
291 };
292 
293 const unsigned char pubkey[64] = {
294 	0x17, 0x5b, 0x27, 0xa6, 0x56, 0xb2, 0x26, 0x0c,
295 	0x26, 0x0c, 0x55, 0x42, 0x78, 0x17, 0x5d, 0x4c,
296 	0xf8, 0xa2, 0xfd, 0x1b, 0xb9, 0x54, 0xdf, 0xd5,
297 	0xeb, 0xbf, 0x22, 0x64, 0xf5, 0x21, 0x9a, 0xc6,
298 	0x87, 0x5f, 0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f,
299 	0xeb, 0xe3, 0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6,
300 	0x1c, 0x31, 0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1,
301 	0xfe, 0x5d, 0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2,
302 };
303 
304 const unsigned char pubkey_tpm_rs256[259] = {
305 	0xc5, 0xb6, 0x9c, 0x06, 0x1d, 0xcf, 0xb9, 0xf2,
306 	0x5e, 0x99, 0x7d, 0x6d, 0x73, 0xd8, 0x36, 0xc1,
307 	0x4a, 0x90, 0x05, 0x4d, 0x82, 0x57, 0xc1, 0xb6,
308 	0x6a, 0xd1, 0x43, 0x03, 0x85, 0xf8, 0x52, 0x4f,
309 	0xd2, 0x27, 0x91, 0x0b, 0xb5, 0x93, 0xa0, 0x68,
310 	0xf8, 0x80, 0x1b, 0xaa, 0x65, 0x97, 0x45, 0x11,
311 	0x86, 0x34, 0xd6, 0x67, 0xf8, 0xd5, 0x12, 0x79,
312 	0x84, 0xee, 0x70, 0x99, 0x00, 0x63, 0xa8, 0xb4,
313 	0x43, 0x0b, 0x4c, 0x57, 0x4a, 0xd6, 0x9b, 0x75,
314 	0x63, 0x8a, 0x46, 0x57, 0xdb, 0x14, 0xc8, 0x71,
315 	0xd1, 0xb3, 0x07, 0x68, 0x58, 0xbc, 0x55, 0x84,
316 	0x80, 0x2a, 0xd2, 0x36, 0x9f, 0xc1, 0x64, 0xa0,
317 	0x11, 0x4b, 0xc9, 0x32, 0x31, 0x3a, 0xd6, 0x87,
318 	0x26, 0x1a, 0x3a, 0x78, 0x3d, 0x89, 0xdb, 0x00,
319 	0x28, 0x3b, 0xae, 0x2b, 0x1b, 0x56, 0xe2, 0x8c,
320 	0x4c, 0x63, 0xac, 0x6e, 0x6c, 0xf7, 0xb5, 0x7d,
321 	0x4d, 0x0b, 0x9f, 0x06, 0xa0, 0x10, 0x35, 0x38,
322 	0x20, 0x4d, 0xcc, 0x07, 0xd7, 0x00, 0x4e, 0x86,
323 	0xba, 0xfe, 0x8b, 0xe4, 0x3f, 0x4a, 0xd6, 0xca,
324 	0xbf, 0x67, 0x40, 0x1a, 0xa4, 0xda, 0x82, 0x52,
325 	0x15, 0xb8, 0x14, 0x3a, 0x7c, 0xa9, 0x02, 0xc1,
326 	0x01, 0x69, 0xc6, 0x51, 0xd4, 0xbc, 0x1f, 0x95,
327 	0xb2, 0xee, 0x1f, 0xdd, 0xb5, 0x73, 0x16, 0x5e,
328 	0x29, 0x3f, 0x47, 0xac, 0x65, 0xfb, 0x63, 0x5c,
329 	0xb9, 0xc8, 0x13, 0x2d, 0xec, 0x85, 0xde, 0x71,
330 	0x0d, 0x84, 0x93, 0x74, 0x76, 0x91, 0xdd, 0x1d,
331 	0x6d, 0x3d, 0xc7, 0x36, 0x19, 0x19, 0x86, 0xde,
332 	0x7c, 0xca, 0xd6, 0xc6, 0x65, 0x7e, 0x4b, 0x24,
333 	0x9c, 0xce, 0x92, 0x6b, 0x1c, 0xe0, 0xa0, 0xa9,
334 	0x6c, 0xc3, 0xed, 0x4f, 0x2a, 0x54, 0x07, 0x00,
335 	0x32, 0x5e, 0x1b, 0x94, 0x37, 0xcd, 0xe2, 0x32,
336 	0xa8, 0xd5, 0x2c, 0xfb, 0x03, 0x9d, 0x79, 0xdf,
337 	0x01, 0x00, 0x01,
338 };
339 
340 const unsigned char pubkey_tpm_es256[64] = {
341 	0xfb, 0xd6, 0xba, 0x74, 0xe6, 0x6e, 0x5c, 0x87,
342 	0xef, 0x89, 0xa2, 0xe8, 0x3d, 0x0b, 0xe9, 0x69,
343 	0x2c, 0x07, 0x07, 0x7a, 0x8a, 0x1e, 0xce, 0x12,
344 	0xea, 0x3b, 0xb3, 0xf1, 0xf3, 0xd9, 0xc3, 0xe6,
345 	0x3c, 0x68, 0x51, 0x94, 0x54, 0x8d, 0xeb, 0x9f,
346 	0xb2, 0x2c, 0x66, 0x75, 0xb6, 0xb7, 0x55, 0x22,
347 	0x0d, 0x87, 0x59, 0xc4, 0x39, 0x91, 0x62, 0x17,
348 	0xc2, 0xc3, 0x53, 0xa5, 0x26, 0x97, 0x4f, 0x2d
349 };
350 
351 const unsigned char id[64] = {
352 	0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde, 0xc5,
353 	0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d, 0x53,
354 	0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e, 0x7f,
355 	0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda, 0x68,
356 	0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83, 0x2c,
357 	0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76, 0x90,
358 	0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6, 0x3c,
359 	0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f, 0x25,
360 };
361 
362 const unsigned char id_tpm_rs256[32] = {
363 	0x89, 0x99, 0x6d, 0x5a, 0x00, 0x29, 0xe5, 0x3e,
364 	0x6a, 0x1c, 0x72, 0x6d, 0x71, 0x4a, 0x4f, 0x03,
365 	0x9b, 0x68, 0x17, 0xdb, 0x29, 0x1a, 0x6b, 0x02,
366 	0x6c, 0x26, 0xf9, 0xbd, 0xc3, 0x0e, 0x38, 0x1a
367 };
368 
369 const unsigned char id_tpm_es256[32] = {
370 	0xa8, 0xdf, 0x03, 0xf7, 0xbf, 0x39, 0x51, 0x94,
371 	0x95, 0x8f, 0xa4, 0x84, 0x97, 0x30, 0xbc, 0x3c,
372 	0x7e, 0x1c, 0x99, 0x91, 0x4d, 0xae, 0x6d, 0xfb,
373 	0xdf, 0x53, 0xb5, 0xb6, 0x1f, 0x3a, 0x4e, 0x6a
374 };
375 
376 const unsigned char attstmt_tpm_rs256[4034] = {
377 	0xa6, 0x63, 0x61, 0x6c, 0x67, 0x39, 0xff, 0xfe,
378 	0x63, 0x73, 0x69, 0x67, 0x59, 0x01, 0x00, 0x1c,
379 	0x09, 0x0d, 0x35, 0x97, 0x22, 0xfc, 0xfe, 0xc0,
380 	0x58, 0x49, 0x9e, 0xd4, 0x7e, 0x6a, 0x7d, 0xdb,
381 	0x6d, 0x20, 0x95, 0x5c, 0x0b, 0xd0, 0xd5, 0x72,
382 	0x4f, 0x15, 0x22, 0x38, 0x97, 0xb2, 0x4b, 0xd0,
383 	0xef, 0x31, 0x7c, 0xf2, 0x42, 0x19, 0x41, 0xa1,
384 	0xe2, 0xc5, 0xca, 0xc6, 0x74, 0x95, 0xcf, 0xf9,
385 	0x41, 0x75, 0x0b, 0x56, 0x39, 0x82, 0x78, 0xf6,
386 	0x59, 0xf1, 0x09, 0x96, 0x9e, 0x38, 0x7f, 0x14,
387 	0x9b, 0xf5, 0x36, 0xbb, 0x92, 0x32, 0xc4, 0x64,
388 	0xe8, 0xff, 0xb4, 0xc7, 0xcf, 0xcd, 0x17, 0x48,
389 	0x0f, 0x83, 0xd9, 0x44, 0x03, 0x35, 0x26, 0xad,
390 	0x01, 0xb7, 0x57, 0x06, 0xb3, 0x9c, 0xa0, 0x6e,
391 	0x2f, 0x58, 0xcb, 0x5c, 0xaa, 0x7c, 0xea, 0x7e,
392 	0x3f, 0xbc, 0x76, 0xc9, 0x0e, 0x52, 0x39, 0x81,
393 	0xa9, 0x9e, 0x37, 0x14, 0x1f, 0x50, 0x6a, 0x4f,
394 	0xd7, 0xfc, 0xd4, 0xfa, 0xf2, 0x18, 0x60, 0xd5,
395 	0xc3, 0x57, 0x7d, 0x6d, 0x05, 0x28, 0x25, 0xc3,
396 	0xde, 0x86, 0x85, 0x06, 0x71, 0xfb, 0x84, 0xa2,
397 	0x07, 0xb6, 0x77, 0xc9, 0x68, 0x41, 0x53, 0x32,
398 	0x4c, 0xa8, 0x4b, 0xf7, 0x08, 0x84, 0x62, 0x6c,
399 	0x8a, 0xb6, 0xcf, 0xc1, 0xde, 0x6b, 0x61, 0xc8,
400 	0xdd, 0xc0, 0x13, 0x70, 0x22, 0x28, 0xe1, 0x0f,
401 	0x46, 0x02, 0xc6, 0xb1, 0xfa, 0x30, 0xcb, 0xec,
402 	0xd1, 0x82, 0xfa, 0x51, 0xcb, 0x71, 0x5e, 0x1f,
403 	0x1b, 0x5f, 0xe0, 0xb0, 0x02, 0x8a, 0x7c, 0x78,
404 	0xd1, 0xb7, 0x4d, 0x56, 0xb0, 0x92, 0x3e, 0xda,
405 	0xc7, 0xb1, 0x74, 0xcf, 0x6a, 0x40, 0xeb, 0x98,
406 	0x1c, 0x2e, 0xf2, 0x86, 0x76, 0xf8, 0x2e, 0x6a,
407 	0x9f, 0x77, 0x51, 0x64, 0xce, 0xdc, 0x12, 0x85,
408 	0x84, 0x6b, 0x01, 0xc8, 0xeb, 0xbc, 0x57, 0x6c,
409 	0x32, 0x26, 0xcb, 0xb2, 0x84, 0x02, 0x2a, 0x33,
410 	0x15, 0xd9, 0xe3, 0x15, 0xfc, 0x3a, 0x24, 0x63,
411 	0x76, 0x65, 0x72, 0x63, 0x32, 0x2e, 0x30, 0x63,
412 	0x78, 0x35, 0x63, 0x82, 0x59, 0x05, 0xc4, 0x30,
413 	0x82, 0x05, 0xc0, 0x30, 0x82, 0x03, 0xa8, 0xa0,
414 	0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x78, 0xd9,
415 	0xa8, 0xb2, 0x64, 0xf9, 0x4d, 0x28, 0x82, 0xc0,
416 	0xd3, 0x1b, 0x40, 0x3c, 0xc8, 0xd9, 0x30, 0x0d,
417 	0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
418 	0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x41, 0x31,
419 	0x3f, 0x30, 0x3d, 0x06, 0x03, 0x55, 0x04, 0x03,
420 	0x13, 0x36, 0x45, 0x55, 0x53, 0x2d, 0x53, 0x54,
421 	0x4d, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44, 0x2d,
422 	0x31, 0x41, 0x44, 0x42, 0x39, 0x39, 0x34, 0x41,
423 	0x42, 0x35, 0x38, 0x42, 0x45, 0x35, 0x37, 0x41,
424 	0x30, 0x43, 0x43, 0x39, 0x42, 0x39, 0x30, 0x30,
425 	0x45, 0x37, 0x38, 0x35, 0x31, 0x45, 0x31, 0x41,
426 	0x34, 0x33, 0x43, 0x30, 0x38, 0x36, 0x36, 0x30,
427 	0x30, 0x1e, 0x17, 0x0d, 0x32, 0x31, 0x30, 0x37,
428 	0x31, 0x35, 0x31, 0x31, 0x31, 0x32, 0x31, 0x33,
429 	0x5a, 0x17, 0x0d, 0x32, 0x35, 0x30, 0x33, 0x32,
430 	0x31, 0x32, 0x30, 0x32, 0x39, 0x31, 0x35, 0x5a,
431 	0x30, 0x00, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
432 	0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
433 	0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
434 	0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82,
435 	0x01, 0x01, 0x00, 0xca, 0xbe, 0x77, 0x9f, 0x45,
436 	0x97, 0x17, 0x8d, 0x01, 0xe1, 0x18, 0xcc, 0xf0,
437 	0xb5, 0xed, 0x9a, 0xb7, 0x36, 0xac, 0x05, 0x26,
438 	0xbe, 0x35, 0xd9, 0x5c, 0x00, 0x5c, 0x5d, 0x8b,
439 	0x6f, 0x2a, 0xb8, 0xf6, 0x02, 0x4f, 0x33, 0xfe,
440 	0x84, 0x45, 0x4c, 0x4f, 0x7a, 0xdb, 0xa9, 0x6a,
441 	0x62, 0x0f, 0x19, 0x35, 0x5d, 0xd2, 0x34, 0x1a,
442 	0x9d, 0x73, 0x55, 0xe5, 0x3e, 0x04, 0xa2, 0xd6,
443 	0xbe, 0xe7, 0x5a, 0xb9, 0x16, 0x6c, 0x55, 0x18,
444 	0xa8, 0x4b, 0xb2, 0x37, 0xb9, 0xa3, 0x87, 0xfc,
445 	0x76, 0xa8, 0x55, 0xc9, 0xe7, 0x30, 0xe5, 0x0e,
446 	0x3c, 0x7b, 0x74, 0xd2, 0x1e, 0xa8, 0x05, 0xd5,
447 	0xe2, 0xe3, 0xcb, 0xaf, 0x63, 0x33, 0x12, 0xaa,
448 	0xfd, 0x31, 0x32, 0x71, 0x4f, 0x41, 0x96, 0x05,
449 	0xb5, 0x69, 0x73, 0x45, 0xbe, 0x6f, 0x90, 0xd9,
450 	0x10, 0x36, 0xaf, 0x7a, 0x1c, 0xf1, 0x6d, 0x14,
451 	0xb0, 0x1e, 0xbb, 0xae, 0x1c, 0x35, 0xec, 0x1c,
452 	0xb5, 0x0e, 0xf6, 0x33, 0x98, 0x13, 0x4e, 0x44,
453 	0x7b, 0x5c, 0x97, 0x47, 0xed, 0x4f, 0xfe, 0xbd,
454 	0x08, 0xd2, 0xa9, 0xc6, 0xbe, 0x8c, 0x04, 0x9e,
455 	0xdc, 0x3d, 0xbe, 0x98, 0xe9, 0x2a, 0xb1, 0xf4,
456 	0xfa, 0x45, 0xf9, 0xc8, 0x9a, 0x55, 0x85, 0x26,
457 	0xfc, 0x5f, 0xad, 0x00, 0x8b, 0xc8, 0x41, 0xf2,
458 	0x86, 0x4e, 0xba, 0x55, 0x1c, 0xb2, 0x89, 0xe8,
459 	0x85, 0x6e, 0x1e, 0x02, 0x9f, 0x55, 0x70, 0xbe,
460 	0xfd, 0xe7, 0x9f, 0xba, 0x59, 0xa0, 0x2e, 0x9a,
461 	0x74, 0x11, 0xe7, 0xad, 0xa9, 0xc7, 0x7b, 0x58,
462 	0xc4, 0x16, 0xd3, 0x35, 0xcb, 0x61, 0x00, 0xec,
463 	0x36, 0x4a, 0xa3, 0x51, 0xa3, 0xdd, 0x61, 0xb6,
464 	0xd6, 0x29, 0xcb, 0x76, 0xe1, 0xab, 0x51, 0x3a,
465 	0xe8, 0xbf, 0xdb, 0x09, 0x4a, 0x39, 0x96, 0xd9,
466 	0xac, 0x8f, 0x6c, 0x62, 0xe0, 0x03, 0x23, 0x24,
467 	0xbe, 0xd4, 0x83, 0x02, 0x03, 0x01, 0x00, 0x01,
468 	0xa3, 0x82, 0x01, 0xf3, 0x30, 0x82, 0x01, 0xef,
469 	0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01,
470 	0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80,
471 	0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01,
472 	0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x6d,
473 	0x06, 0x03, 0x55, 0x1d, 0x20, 0x01, 0x01, 0xff,
474 	0x04, 0x63, 0x30, 0x61, 0x30, 0x5f, 0x06, 0x09,
475 	0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15,
476 	0x1f, 0x30, 0x52, 0x30, 0x50, 0x06, 0x08, 0x2b,
477 	0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30,
478 	0x44, 0x1e, 0x42, 0x00, 0x54, 0x00, 0x43, 0x00,
479 	0x50, 0x00, 0x41, 0x00, 0x20, 0x00, 0x20, 0x00,
480 	0x54, 0x00, 0x72, 0x00, 0x75, 0x00, 0x73, 0x00,
481 	0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00,
482 	0x20, 0x00, 0x50, 0x00, 0x6c, 0x00, 0x61, 0x00,
483 	0x74, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, 0x00,
484 	0x6d, 0x00, 0x20, 0x00, 0x20, 0x00, 0x49, 0x00,
485 	0x64, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00,
486 	0x69, 0x00, 0x74, 0x00, 0x79, 0x30, 0x10, 0x06,
487 	0x03, 0x55, 0x1d, 0x25, 0x04, 0x09, 0x30, 0x07,
488 	0x06, 0x05, 0x67, 0x81, 0x05, 0x08, 0x03, 0x30,
489 	0x59, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x01, 0x01,
490 	0xff, 0x04, 0x4f, 0x30, 0x4d, 0xa4, 0x4b, 0x30,
491 	0x49, 0x31, 0x16, 0x30, 0x14, 0x06, 0x05, 0x67,
492 	0x81, 0x05, 0x02, 0x01, 0x0c, 0x0b, 0x69, 0x64,
493 	0x3a, 0x35, 0x33, 0x35, 0x34, 0x34, 0x44, 0x32,
494 	0x30, 0x31, 0x17, 0x30, 0x15, 0x06, 0x05, 0x67,
495 	0x81, 0x05, 0x02, 0x02, 0x0c, 0x0c, 0x53, 0x54,
496 	0x33, 0x33, 0x48, 0x54, 0x50, 0x48, 0x41, 0x48,
497 	0x42, 0x34, 0x31, 0x16, 0x30, 0x14, 0x06, 0x05,
498 	0x67, 0x81, 0x05, 0x02, 0x03, 0x0c, 0x0b, 0x69,
499 	0x64, 0x3a, 0x30, 0x30, 0x34, 0x39, 0x30, 0x30,
500 	0x30, 0x34, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d,
501 	0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xb8,
502 	0x5f, 0xd5, 0x67, 0xca, 0x92, 0xc4, 0x0e, 0xcf,
503 	0x0c, 0xd8, 0x1f, 0x6d, 0x3f, 0x03, 0x55, 0x6f,
504 	0x38, 0xa6, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55,
505 	0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd4, 0x04,
506 	0x64, 0xfc, 0x6e, 0x50, 0x0a, 0x56, 0x48, 0x0f,
507 	0x05, 0xa9, 0x00, 0xb7, 0x1d, 0x5e, 0x57, 0x08,
508 	0xd5, 0xdc, 0x30, 0x81, 0xb2, 0x06, 0x08, 0x2b,
509 	0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04,
510 	0x81, 0xa5, 0x30, 0x81, 0xa2, 0x30, 0x81, 0x9f,
511 	0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07,
512 	0x30, 0x02, 0x86, 0x81, 0x92, 0x68, 0x74, 0x74,
513 	0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x7a, 0x63, 0x73,
514 	0x70, 0x72, 0x6f, 0x64, 0x65, 0x75, 0x73, 0x61,
515 	0x69, 0x6b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
516 	0x68, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x2e, 0x63,
517 	0x6f, 0x72, 0x65, 0x2e, 0x77, 0x69, 0x6e, 0x64,
518 	0x6f, 0x77, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x2f,
519 	0x65, 0x75, 0x73, 0x2d, 0x73, 0x74, 0x6d, 0x2d,
520 	0x6b, 0x65, 0x79, 0x69, 0x64, 0x2d, 0x31, 0x61,
521 	0x64, 0x62, 0x39, 0x39, 0x34, 0x61, 0x62, 0x35,
522 	0x38, 0x62, 0x65, 0x35, 0x37, 0x61, 0x30, 0x63,
523 	0x63, 0x39, 0x62, 0x39, 0x30, 0x30, 0x65, 0x37,
524 	0x38, 0x35, 0x31, 0x65, 0x31, 0x61, 0x34, 0x33,
525 	0x63, 0x30, 0x38, 0x36, 0x36, 0x30, 0x2f, 0x61,
526 	0x62, 0x64, 0x36, 0x31, 0x35, 0x66, 0x32, 0x2d,
527 	0x31, 0x35, 0x38, 0x61, 0x2d, 0x34, 0x35, 0x38,
528 	0x65, 0x2d, 0x61, 0x31, 0x35, 0x35, 0x2d, 0x37,
529 	0x63, 0x34, 0x63, 0x38, 0x63, 0x62, 0x31, 0x33,
530 	0x63, 0x36, 0x35, 0x2e, 0x63, 0x65, 0x72, 0x30,
531 	0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
532 	0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82,
533 	0x02, 0x01, 0x00, 0xa2, 0x10, 0xc5, 0xbf, 0x41,
534 	0xa6, 0xba, 0x8c, 0x72, 0xca, 0x0f, 0x3e, 0x5e,
535 	0x7f, 0xe2, 0xcb, 0x60, 0xb8, 0x3f, 0xfb, 0xde,
536 	0x03, 0xe2, 0xfe, 0x20, 0x29, 0xdf, 0x11, 0xf5,
537 	0xb0, 0x50, 0x6d, 0x32, 0xe8, 0x1b, 0x05, 0xad,
538 	0x6b, 0x60, 0xb5, 0xed, 0xf3, 0xa4, 0x4a, 0xea,
539 	0x09, 0xe5, 0x65, 0x7e, 0xe0, 0xd5, 0x3a, 0x6a,
540 	0xdb, 0x64, 0xb7, 0x07, 0x8f, 0xa1, 0x63, 0xb3,
541 	0x89, 0x8a, 0xac, 0x49, 0x97, 0xa0, 0x9a, 0xa3,
542 	0xd3, 0x3a, 0xc2, 0x13, 0xb2, 0xbb, 0xab, 0x0d,
543 	0xf2, 0x35, 0xc5, 0x03, 0xde, 0x1c, 0xad, 0x6a,
544 	0x03, 0x0a, 0x4c, 0xe1, 0x37, 0x8f, 0xbc, 0x13,
545 	0xc0, 0x9a, 0x17, 0xd4, 0x2e, 0x36, 0x17, 0x51,
546 	0x12, 0xb0, 0x79, 0xbf, 0x9b, 0xb3, 0xb0, 0x74,
547 	0x25, 0x81, 0x7e, 0x21, 0x31, 0xb7, 0xc2, 0x5e,
548 	0xfb, 0x36, 0xab, 0xf3, 0x7a, 0x5f, 0xa4, 0x5e,
549 	0x8f, 0x0c, 0xbd, 0xcf, 0xf5, 0x50, 0xe7, 0x0c,
550 	0x51, 0x55, 0x48, 0xe6, 0x15, 0xb6, 0xd4, 0xaf,
551 	0x95, 0x72, 0x56, 0x94, 0xf7, 0x0e, 0xd6, 0x90,
552 	0xe3, 0xd3, 0x5d, 0xbd, 0x93, 0xa1, 0xbd, 0x6c,
553 	0xe4, 0xf2, 0x39, 0x4d, 0x54, 0x74, 0xcf, 0xf5,
554 	0xeb, 0x70, 0xdb, 0x4f, 0x52, 0xcd, 0x39, 0x8f,
555 	0x11, 0x54, 0x28, 0x06, 0x29, 0x8f, 0x23, 0xde,
556 	0x9e, 0x2f, 0x7b, 0xb6, 0x5f, 0xa3, 0x89, 0x04,
557 	0x99, 0x0a, 0xf1, 0x2d, 0xf9, 0x66, 0xd3, 0x13,
558 	0x45, 0xbd, 0x6c, 0x22, 0x57, 0xf5, 0xb1, 0xb9,
559 	0xdf, 0x5b, 0x7b, 0x1a, 0x3a, 0xdd, 0x6b, 0xc7,
560 	0x35, 0x88, 0xed, 0xc4, 0x09, 0x70, 0x4e, 0x5f,
561 	0xb5, 0x3e, 0xd1, 0x0b, 0xd0, 0xca, 0xef, 0x0b,
562 	0xe9, 0x8b, 0x6f, 0xc3, 0x16, 0xc3, 0x3d, 0x79,
563 	0x06, 0xef, 0x81, 0xf0, 0x60, 0x0b, 0x32, 0xe3,
564 	0x86, 0x6b, 0x92, 0x38, 0x90, 0x62, 0xed, 0x84,
565 	0x3a, 0xb7, 0x45, 0x43, 0x2e, 0xd0, 0x3a, 0x71,
566 	0x9e, 0x80, 0xcc, 0x9c, 0xac, 0x27, 0x10, 0x91,
567 	0xb7, 0xb2, 0xbd, 0x41, 0x40, 0xa7, 0xb7, 0xcf,
568 	0xe7, 0x38, 0xca, 0x68, 0xdd, 0x62, 0x09, 0xff,
569 	0x68, 0xce, 0xba, 0xe2, 0x07, 0x49, 0x09, 0xe7,
570 	0x1f, 0xdf, 0xe6, 0x26, 0xe5, 0x0f, 0xa9, 0xbf,
571 	0x2a, 0x5b, 0x67, 0x92, 0xa1, 0x10, 0x53, 0xb2,
572 	0x7a, 0x07, 0x29, 0x9d, 0xfd, 0x6d, 0xb6, 0x3b,
573 	0x45, 0xc1, 0x94, 0xcb, 0x1c, 0xc3, 0xce, 0xf6,
574 	0x8a, 0x1a, 0x81, 0x66, 0xb0, 0xa5, 0x14, 0xc7,
575 	0x9e, 0x1f, 0x6e, 0xb6, 0xff, 0x8b, 0x90, 0x87,
576 	0x3a, 0x3f, 0xa8, 0xc2, 0x2d, 0x8f, 0x6f, 0xdb,
577 	0xb4, 0xc4, 0x14, 0x3c, 0x1d, 0x12, 0x1d, 0x6d,
578 	0xcf, 0xa6, 0x04, 0x6a, 0xa8, 0x13, 0x5e, 0xf2,
579 	0x5e, 0x77, 0x80, 0x6b, 0x85, 0x83, 0xfe, 0xbb,
580 	0xeb, 0x70, 0xcb, 0x5f, 0xe4, 0x95, 0xaa, 0x0f,
581 	0x61, 0x36, 0x7c, 0xbb, 0x22, 0x1e, 0xba, 0x98,
582 	0x43, 0x52, 0x33, 0xae, 0xed, 0x5d, 0x10, 0x2c,
583 	0xb3, 0xa9, 0x31, 0x8e, 0x60, 0x54, 0xaf, 0x40,
584 	0x6d, 0x2e, 0x18, 0xc2, 0x6a, 0xf4, 0x7b, 0x9a,
585 	0x73, 0x0f, 0x58, 0x69, 0x23, 0xbb, 0xc4, 0x84,
586 	0x53, 0x30, 0xe2, 0xd6, 0x1e, 0x10, 0xc1, 0xec,
587 	0x82, 0x13, 0xab, 0x53, 0x86, 0xa2, 0xb9, 0xda,
588 	0xbb, 0x3a, 0xa2, 0xbe, 0xb0, 0x10, 0x99, 0x0e,
589 	0xe5, 0x9c, 0xc9, 0xf1, 0xce, 0x76, 0x46, 0xea,
590 	0x86, 0xaa, 0x36, 0x83, 0x99, 0x09, 0x9b, 0x30,
591 	0xd3, 0x26, 0xc7, 0xdf, 0x66, 0xc7, 0xf0, 0xdd,
592 	0x08, 0x09, 0x15, 0x15, 0x21, 0x49, 0x46, 0xd8,
593 	0x8a, 0x66, 0xca, 0x62, 0x9c, 0x79, 0x1d, 0x81,
594 	0xea, 0x5d, 0x82, 0xb0, 0xa6, 0x6b, 0x5c, 0xf5,
595 	0xb8, 0x8c, 0xf6, 0x16, 0x01, 0x2c, 0xf8, 0x27,
596 	0xf8, 0xcf, 0x88, 0xfe, 0xf3, 0xa4, 0xfc, 0x17,
597 	0x97, 0xe7, 0x07, 0x59, 0x06, 0xef, 0x30, 0x82,
598 	0x06, 0xeb, 0x30, 0x82, 0x04, 0xd3, 0xa0, 0x03,
599 	0x02, 0x01, 0x02, 0x02, 0x13, 0x33, 0x00, 0x00,
600 	0x02, 0x39, 0xf9, 0xbb, 0x6a, 0x1d, 0x49, 0x64,
601 	0x47, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x39,
602 	0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
603 	0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30,
604 	0x81, 0x8c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
605 	0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31,
606 	0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
607 	0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e,
608 	0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e,
609 	0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52,
610 	0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e,
611 	0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13,
612 	0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f,
613 	0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f,
614 	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x36,
615 	0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
616 	0x2d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f,
617 	0x66, 0x74, 0x20, 0x54, 0x50, 0x4d, 0x20, 0x52,
618 	0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74,
619 	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20,
620 	0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
621 	0x79, 0x20, 0x32, 0x30, 0x31, 0x34, 0x30, 0x1e,
622 	0x17, 0x0d, 0x31, 0x39, 0x30, 0x33, 0x32, 0x31,
623 	0x32, 0x30, 0x32, 0x39, 0x31, 0x35, 0x5a, 0x17,
624 	0x0d, 0x32, 0x35, 0x30, 0x33, 0x32, 0x31, 0x32,
625 	0x30, 0x32, 0x39, 0x31, 0x35, 0x5a, 0x30, 0x41,
626 	0x31, 0x3f, 0x30, 0x3d, 0x06, 0x03, 0x55, 0x04,
627 	0x03, 0x13, 0x36, 0x45, 0x55, 0x53, 0x2d, 0x53,
628 	0x54, 0x4d, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44,
629 	0x2d, 0x31, 0x41, 0x44, 0x42, 0x39, 0x39, 0x34,
630 	0x41, 0x42, 0x35, 0x38, 0x42, 0x45, 0x35, 0x37,
631 	0x41, 0x30, 0x43, 0x43, 0x39, 0x42, 0x39, 0x30,
632 	0x30, 0x45, 0x37, 0x38, 0x35, 0x31, 0x45, 0x31,
633 	0x41, 0x34, 0x33, 0x43, 0x30, 0x38, 0x36, 0x36,
634 	0x30, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06,
635 	0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
636 	0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f,
637 	0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02,
638 	0x01, 0x00, 0xdb, 0xe2, 0x23, 0xf9, 0x86, 0x8f,
639 	0xa9, 0x71, 0x9f, 0x8b, 0xf9, 0x7c, 0xe9, 0x45,
640 	0x2d, 0x59, 0x56, 0x5e, 0x96, 0xf4, 0xdd, 0x9a,
641 	0x12, 0xcd, 0x90, 0x1a, 0x0c, 0xb5, 0x03, 0xbf,
642 	0x09, 0xbe, 0xbf, 0xf7, 0x55, 0x52, 0xe8, 0x39,
643 	0x4c, 0xbe, 0x2a, 0x28, 0x88, 0x78, 0x39, 0xa7,
644 	0xcb, 0xf9, 0x4c, 0x55, 0xd2, 0x31, 0x96, 0x3b,
645 	0x48, 0xa2, 0xf3, 0xf6, 0xd3, 0x1a, 0x81, 0x7f,
646 	0x90, 0x62, 0xab, 0xec, 0x5a, 0xc7, 0xa0, 0x7f,
647 	0x81, 0x32, 0x27, 0x9b, 0x29, 0x75, 0x7d, 0x1e,
648 	0x96, 0xc5, 0xfa, 0x0e, 0x7c, 0xe0, 0x60, 0x96,
649 	0x7a, 0xca, 0x94, 0xba, 0xe6, 0xb2, 0x69, 0xdd,
650 	0xc4, 0x7d, 0xbb, 0xd3, 0xc4, 0xb4, 0x6e, 0x00,
651 	0x86, 0x1f, 0x9d, 0x25, 0xe8, 0xae, 0xc7, 0x10,
652 	0x84, 0xdc, 0xc0, 0x34, 0x24, 0x6e, 0xf7, 0xfc,
653 	0xdd, 0x3d, 0x32, 0x7a, 0x43, 0x96, 0xd6, 0xc8,
654 	0x7b, 0xf4, 0x9b, 0x3d, 0xa7, 0x1e, 0xba, 0x4d,
655 	0xd0, 0x3b, 0x3d, 0x84, 0x9a, 0xd1, 0x25, 0x22,
656 	0x5d, 0x00, 0x44, 0xb0, 0x59, 0xb7, 0x40, 0xc5,
657 	0xa3, 0x53, 0x53, 0xaf, 0x8f, 0x9e, 0xfd, 0x8f,
658 	0x1e, 0x02, 0xd3, 0x4f, 0xf7, 0x09, 0xce, 0xc5,
659 	0xc6, 0x71, 0x5c, 0xe9, 0xe8, 0x7a, 0xb5, 0x6b,
660 	0xa4, 0xbf, 0x0b, 0xd9, 0xb6, 0xfa, 0x24, 0xb0,
661 	0xcd, 0x52, 0x22, 0x1d, 0x7e, 0xe8, 0x15, 0x2f,
662 	0x1e, 0x5e, 0xa2, 0xec, 0xd3, 0xa8, 0x02, 0x77,
663 	0xb9, 0x55, 0x9a, 0xcf, 0xcc, 0xd7, 0x08, 0x20,
664 	0xa5, 0xda, 0x39, 0x9a, 0x30, 0x76, 0x90, 0x37,
665 	0xa7, 0x60, 0xdf, 0x18, 0x12, 0x65, 0x17, 0xaa,
666 	0xdd, 0x48, 0xd5, 0x12, 0x1d, 0x4c, 0x83, 0x5d,
667 	0x81, 0x07, 0x1d, 0x18, 0x81, 0x40, 0x55, 0x60,
668 	0x8f, 0xa3, 0x6b, 0x34, 0x1e, 0xd5, 0xe6, 0xcf,
669 	0x52, 0x73, 0x77, 0x4a, 0x50, 0x4f, 0x1b, 0x0f,
670 	0x39, 0xc3, 0x0d, 0x16, 0xf9, 0xbb, 0x4c, 0x77,
671 	0xf6, 0x4e, 0xac, 0x9c, 0xfe, 0xe8, 0xbb, 0x52,
672 	0xa5, 0x0a, 0x0e, 0x9b, 0xf0, 0x0d, 0xef, 0xfb,
673 	0x6f, 0x89, 0x34, 0x7d, 0x47, 0xec, 0x14, 0x6a,
674 	0xf4, 0x0a, 0xe1, 0x60, 0x44, 0x73, 0x7b, 0xa0,
675 	0xab, 0x5b, 0x8c, 0x43, 0xa6, 0x05, 0x42, 0x61,
676 	0x46, 0xaa, 0x1c, 0xf5, 0xec, 0x2c, 0x86, 0x85,
677 	0x21, 0x99, 0xdf, 0x45, 0x8e, 0xf4, 0xd1, 0x1e,
678 	0xfb, 0xcd, 0x9b, 0x94, 0x32, 0xe0, 0xa0, 0xcc,
679 	0x4f, 0xad, 0xae, 0x44, 0x8b, 0x86, 0x27, 0x91,
680 	0xfe, 0x60, 0x9f, 0xf2, 0x63, 0x30, 0x6c, 0x5d,
681 	0x8d, 0xbc, 0xab, 0xd4, 0xf5, 0xa2, 0xb2, 0x74,
682 	0xe8, 0xd4, 0x95, 0xf2, 0xd6, 0x03, 0x8b, 0xc9,
683 	0xa3, 0x52, 0xe7, 0x63, 0x05, 0x64, 0x50, 0xe5,
684 	0x0a, 0x6a, 0xa0, 0x6c, 0x50, 0xcd, 0x37, 0x98,
685 	0xa8, 0x87, 0x02, 0x38, 0x5b, 0x6c, 0x02, 0x69,
686 	0x3d, 0x1f, 0x95, 0x74, 0x4d, 0x46, 0x76, 0x2a,
687 	0x9d, 0x62, 0xd4, 0xc7, 0x1b, 0xf9, 0x31, 0xa6,
688 	0x51, 0xee, 0x7b, 0xc8, 0xe4, 0x6e, 0x3a, 0xcf,
689 	0x4f, 0x4f, 0x49, 0x8a, 0xf5, 0x4f, 0x25, 0x93,
690 	0x23, 0x02, 0xef, 0x79, 0xa6, 0x27, 0xbe, 0x5a,
691 	0xe7, 0x74, 0xb7, 0xd7, 0xa8, 0xc1, 0xae, 0x55,
692 	0x88, 0xa4, 0xc7, 0x4d, 0xb7, 0x62, 0xf0, 0xf9,
693 	0x5b, 0xbf, 0x47, 0x5b, 0xfe, 0xcc, 0x0b, 0x89,
694 	0x19, 0x65, 0x4b, 0x6f, 0xdf, 0x4f, 0x7d, 0x4d,
695 	0x96, 0x42, 0x0d, 0x2a, 0xa1, 0xbd, 0x3e, 0x70,
696 	0x92, 0xba, 0xc8, 0x59, 0xd5, 0x1d, 0x3a, 0x98,
697 	0x53, 0x75, 0xa6, 0x32, 0xc8, 0x72, 0x03, 0x46,
698 	0x5f, 0x5c, 0x13, 0xa4, 0xdb, 0xc7, 0x55, 0x35,
699 	0x22, 0x0d, 0xc6, 0x17, 0x85, 0xbd, 0x46, 0x4b,
700 	0xfa, 0x1e, 0x49, 0xc2, 0xfe, 0x1e, 0xf9, 0x62,
701 	0x89, 0x56, 0x84, 0xdf, 0xa0, 0xfb, 0xfd, 0x93,
702 	0xa4, 0x25, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3,
703 	0x82, 0x01, 0x8e, 0x30, 0x82, 0x01, 0x8a, 0x30,
704 	0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01,
705 	0xff, 0x04, 0x04, 0x03, 0x02, 0x02, 0x84, 0x30,
706 	0x1b, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x14,
707 	0x30, 0x12, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04,
708 	0x01, 0x82, 0x37, 0x15, 0x24, 0x06, 0x05, 0x67,
709 	0x81, 0x05, 0x08, 0x03, 0x30, 0x16, 0x06, 0x03,
710 	0x55, 0x1d, 0x20, 0x04, 0x0f, 0x30, 0x0d, 0x30,
711 	0x0b, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01,
712 	0x82, 0x37, 0x15, 0x1f, 0x30, 0x12, 0x06, 0x03,
713 	0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08,
714 	0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00,
715 	0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04,
716 	0x16, 0x04, 0x14, 0xb8, 0x5f, 0xd5, 0x67, 0xca,
717 	0x92, 0xc4, 0x0e, 0xcf, 0x0c, 0xd8, 0x1f, 0x6d,
718 	0x3f, 0x03, 0x55, 0x6f, 0x38, 0xa6, 0x51, 0x30,
719 	0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
720 	0x30, 0x16, 0x80, 0x14, 0x7a, 0x8c, 0x0a, 0xce,
721 	0x2f, 0x48, 0x62, 0x17, 0xe2, 0x94, 0xd1, 0xae,
722 	0x55, 0xc1, 0x52, 0xec, 0x71, 0x74, 0xa4, 0x56,
723 	0x30, 0x70, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04,
724 	0x69, 0x30, 0x67, 0x30, 0x65, 0xa0, 0x63, 0xa0,
725 	0x61, 0x86, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x3a,
726 	0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69,
727 	0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e,
728 	0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x6f,
729 	0x70, 0x73, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d,
730 	0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
731 	0x25, 0x32, 0x30, 0x54, 0x50, 0x4d, 0x25, 0x32,
732 	0x30, 0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30,
733 	0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
734 	0x61, 0x74, 0x65, 0x25, 0x32, 0x30, 0x41, 0x75,
735 	0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x25,
736 	0x32, 0x30, 0x32, 0x30, 0x31, 0x34, 0x2e, 0x63,
737 	0x72, 0x6c, 0x30, 0x7d, 0x06, 0x08, 0x2b, 0x06,
738 	0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x71,
739 	0x30, 0x6f, 0x30, 0x6d, 0x06, 0x08, 0x2b, 0x06,
740 	0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x61,
741 	0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
742 	0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f,
743 	0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d,
744 	0x2f, 0x70, 0x6b, 0x69, 0x6f, 0x70, 0x73, 0x2f,
745 	0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69,
746 	0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x25,
747 	0x32, 0x30, 0x54, 0x50, 0x4d, 0x25, 0x32, 0x30,
748 	0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30, 0x43,
749 	0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
750 	0x74, 0x65, 0x25, 0x32, 0x30, 0x41, 0x75, 0x74,
751 	0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x25, 0x32,
752 	0x30, 0x32, 0x30, 0x31, 0x34, 0x2e, 0x63, 0x72,
753 	0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
754 	0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00,
755 	0x03, 0x82, 0x02, 0x01, 0x00, 0x41, 0xaa, 0xfe,
756 	0x28, 0x6c, 0xf7, 0x6b, 0x53, 0xde, 0x77, 0xc0,
757 	0x80, 0x50, 0x94, 0xd9, 0xdb, 0x46, 0x8e, 0x6a,
758 	0x93, 0xa9, 0x10, 0x37, 0x27, 0x1f, 0xf5, 0x70,
759 	0xf1, 0xa8, 0xcf, 0xa1, 0x45, 0x86, 0x2a, 0xdd,
760 	0x8f, 0xb8, 0xb5, 0xc1, 0xe6, 0xcf, 0x8a, 0xfa,
761 	0x32, 0xa1, 0x4b, 0xb7, 0xa4, 0xbf, 0x0a, 0x48,
762 	0xcb, 0x42, 0x63, 0x71, 0xc1, 0x96, 0xb9, 0x3a,
763 	0x37, 0x84, 0x0e, 0x24, 0x39, 0xeb, 0x58, 0xce,
764 	0x3d, 0xb7, 0xa9, 0x44, 0x92, 0x59, 0xb9, 0xff,
765 	0xdb, 0x18, 0xbe, 0x6a, 0x5e, 0xe7, 0xce, 0xef,
766 	0xb8, 0x40, 0x53, 0xaf, 0xc1, 0x9b, 0xfb, 0x42,
767 	0x99, 0x7e, 0x9d, 0x05, 0x2b, 0x71, 0x0a, 0x7a,
768 	0x7a, 0x44, 0xd1, 0x31, 0xca, 0xf0, 0x5f, 0x74,
769 	0x85, 0xa9, 0xe2, 0xbc, 0xc8, 0x0c, 0xad, 0x57,
770 	0xd1, 0xe9, 0x48, 0x90, 0x88, 0x57, 0x86, 0xd7,
771 	0xc5, 0xc9, 0xe6, 0xb2, 0x5e, 0x5f, 0x13, 0xdc,
772 	0x10, 0x7f, 0xdf, 0x63, 0x8a, 0xd5, 0x9e, 0x90,
773 	0xc2, 0x75, 0x53, 0x1e, 0x68, 0x17, 0x2b, 0x03,
774 	0x29, 0x15, 0x03, 0xc5, 0x8c, 0x66, 0x3e, 0xae,
775 	0xbd, 0x4a, 0x32, 0x7e, 0x59, 0x89, 0x0b, 0x84,
776 	0xc2, 0xd9, 0x90, 0xfa, 0x02, 0x22, 0x90, 0x8d,
777 	0x9c, 0xb6, 0x0c, 0x4d, 0xe1, 0x28, 0x76, 0xd7,
778 	0x82, 0xc3, 0x36, 0xc2, 0xa3, 0x2a, 0x52, 0xe5,
779 	0xfe, 0x3c, 0x8f, 0xe3, 0x4b, 0xda, 0x6a, 0xdb,
780 	0xc0, 0x7a, 0x3c, 0x57, 0xfa, 0x85, 0x8f, 0xfb,
781 	0x62, 0xc3, 0xa1, 0x38, 0xce, 0x84, 0xf2, 0xba,
782 	0x12, 0xf4, 0x30, 0x2a, 0x4a, 0x94, 0xa9, 0x35,
783 	0x2c, 0x7d, 0x11, 0xc7, 0x68, 0x1f, 0x47, 0xaa,
784 	0x57, 0x43, 0x06, 0x70, 0x79, 0x8c, 0xb6, 0x3b,
785 	0x5d, 0x57, 0xf3, 0xf3, 0xc0, 0x2c, 0xc5, 0xde,
786 	0x41, 0x99, 0xf6, 0xdd, 0x55, 0x8a, 0xe4, 0x13,
787 	0xca, 0xc9, 0xec, 0x69, 0x93, 0x13, 0x48, 0xf0,
788 	0x5f, 0xda, 0x2e, 0xfd, 0xfb, 0xa9, 0x1b, 0x92,
789 	0xde, 0x49, 0x71, 0x37, 0x8c, 0x3f, 0xc2, 0x08,
790 	0x0a, 0x83, 0x25, 0xf1, 0x6e, 0x0a, 0xe3, 0x55,
791 	0x85, 0x96, 0x9a, 0x2d, 0xa2, 0xc0, 0xa1, 0xee,
792 	0xfe, 0x23, 0x3b, 0x69, 0x22, 0x03, 0xfd, 0xcc,
793 	0x8a, 0xdd, 0xb4, 0x53, 0x8d, 0x84, 0xa6, 0xac,
794 	0xe0, 0x1e, 0x07, 0xe5, 0xd7, 0xf9, 0xcb, 0xb9,
795 	0xe3, 0x9a, 0xb7, 0x84, 0x70, 0xa1, 0x93, 0xd6,
796 	0x02, 0x1e, 0xfe, 0xdb, 0x28, 0x7c, 0xf7, 0xd4,
797 	0x62, 0x6f, 0x80, 0x75, 0xc8, 0xd8, 0x35, 0x26,
798 	0x0c, 0xcb, 0x84, 0xed, 0xbb, 0x95, 0xdf, 0x7f,
799 	0xd5, 0xbb, 0x00, 0x96, 0x97, 0x32, 0xe7, 0xba,
800 	0xe8, 0x29, 0xb5, 0x1a, 0x51, 0x81, 0xbb, 0x04,
801 	0xd1, 0x21, 0x76, 0x34, 0x6d, 0x1e, 0x93, 0x96,
802 	0x1f, 0x96, 0x53, 0x5f, 0x5c, 0x9e, 0xf3, 0x9d,
803 	0x82, 0x1c, 0x39, 0x36, 0x59, 0xae, 0xc9, 0x3c,
804 	0x53, 0x4a, 0x67, 0x65, 0x6e, 0xbf, 0xa6, 0xac,
805 	0x3e, 0xda, 0xb2, 0xa7, 0x63, 0x07, 0x17, 0xe1,
806 	0x5b, 0xda, 0x6a, 0x31, 0x9f, 0xfb, 0xb4, 0xea,
807 	0xa1, 0x97, 0x08, 0x6e, 0xb2, 0x68, 0xf3, 0x72,
808 	0x76, 0x99, 0xe8, 0x00, 0x46, 0x88, 0x26, 0xe1,
809 	0x3c, 0x07, 0x2b, 0x78, 0x49, 0xda, 0x79, 0x3a,
810 	0xbd, 0x6f, 0xca, 0x5c, 0xa0, 0xa8, 0xed, 0x34,
811 	0xcc, 0xdb, 0x13, 0xe2, 0x51, 0x9b, 0x3d, 0x03,
812 	0xac, 0xc7, 0xf6, 0x32, 0xe1, 0x11, 0x5d, 0xe1,
813 	0xc5, 0xfd, 0x9e, 0x7a, 0xcd, 0x06, 0xb9, 0xe6,
814 	0xfc, 0xe0, 0x03, 0x31, 0xf4, 0x4a, 0xa9, 0x3b,
815 	0x79, 0x01, 0xb0, 0x64, 0x68, 0x9f, 0x6e, 0x76,
816 	0xa1, 0xcc, 0xec, 0x17, 0x41, 0x9d, 0xd4, 0x5b,
817 	0x4e, 0x9d, 0xe5, 0x46, 0xd4, 0x6b, 0x60, 0x2a,
818 	0x23, 0xb5, 0x7a, 0x89, 0x7c, 0x27, 0x96, 0x65,
819 	0x97, 0x56, 0xec, 0x98, 0xe3, 0x67, 0x70, 0x75,
820 	0x62, 0x41, 0x72, 0x65, 0x61, 0x59, 0x01, 0x36,
821 	0x00, 0x01, 0x00, 0x0b, 0x00, 0x06, 0x04, 0x72,
822 	0x00, 0x20, 0x9d, 0xff, 0xcb, 0xf3, 0x6c, 0x38,
823 	0x3a, 0xe6, 0x99, 0xfb, 0x98, 0x68, 0xdc, 0x6d,
824 	0xcb, 0x89, 0xd7, 0x15, 0x38, 0x84, 0xbe, 0x28,
825 	0x03, 0x92, 0x2c, 0x12, 0x41, 0x58, 0xbf, 0xad,
826 	0x22, 0xae, 0x00, 0x10, 0x00, 0x10, 0x08, 0x00,
827 	0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc5, 0xb6,
828 	0x9c, 0x06, 0x1d, 0xcf, 0xb9, 0xf2, 0x5e, 0x99,
829 	0x7d, 0x6d, 0x73, 0xd8, 0x36, 0xc1, 0x4a, 0x90,
830 	0x05, 0x4d, 0x82, 0x57, 0xc1, 0xb6, 0x6a, 0xd1,
831 	0x43, 0x03, 0x85, 0xf8, 0x52, 0x4f, 0xd2, 0x27,
832 	0x91, 0x0b, 0xb5, 0x93, 0xa0, 0x68, 0xf8, 0x80,
833 	0x1b, 0xaa, 0x65, 0x97, 0x45, 0x11, 0x86, 0x34,
834 	0xd6, 0x67, 0xf8, 0xd5, 0x12, 0x79, 0x84, 0xee,
835 	0x70, 0x99, 0x00, 0x63, 0xa8, 0xb4, 0x43, 0x0b,
836 	0x4c, 0x57, 0x4a, 0xd6, 0x9b, 0x75, 0x63, 0x8a,
837 	0x46, 0x57, 0xdb, 0x14, 0xc8, 0x71, 0xd1, 0xb3,
838 	0x07, 0x68, 0x58, 0xbc, 0x55, 0x84, 0x80, 0x2a,
839 	0xd2, 0x36, 0x9f, 0xc1, 0x64, 0xa0, 0x11, 0x4b,
840 	0xc9, 0x32, 0x31, 0x3a, 0xd6, 0x87, 0x26, 0x1a,
841 	0x3a, 0x78, 0x3d, 0x89, 0xdb, 0x00, 0x28, 0x3b,
842 	0xae, 0x2b, 0x1b, 0x56, 0xe2, 0x8c, 0x4c, 0x63,
843 	0xac, 0x6e, 0x6c, 0xf7, 0xb5, 0x7d, 0x4d, 0x0b,
844 	0x9f, 0x06, 0xa0, 0x10, 0x35, 0x38, 0x20, 0x4d,
845 	0xcc, 0x07, 0xd7, 0x00, 0x4e, 0x86, 0xba, 0xfe,
846 	0x8b, 0xe4, 0x3f, 0x4a, 0xd6, 0xca, 0xbf, 0x67,
847 	0x40, 0x1a, 0xa4, 0xda, 0x82, 0x52, 0x15, 0xb8,
848 	0x14, 0x3a, 0x7c, 0xa9, 0x02, 0xc1, 0x01, 0x69,
849 	0xc6, 0x51, 0xd4, 0xbc, 0x1f, 0x95, 0xb2, 0xee,
850 	0x1f, 0xdd, 0xb5, 0x73, 0x16, 0x5e, 0x29, 0x3f,
851 	0x47, 0xac, 0x65, 0xfb, 0x63, 0x5c, 0xb9, 0xc8,
852 	0x13, 0x2d, 0xec, 0x85, 0xde, 0x71, 0x0d, 0x84,
853 	0x93, 0x74, 0x76, 0x91, 0xdd, 0x1d, 0x6d, 0x3d,
854 	0xc7, 0x36, 0x19, 0x19, 0x86, 0xde, 0x7c, 0xca,
855 	0xd6, 0xc6, 0x65, 0x7e, 0x4b, 0x24, 0x9c, 0xce,
856 	0x92, 0x6b, 0x1c, 0xe0, 0xa0, 0xa9, 0x6c, 0xc3,
857 	0xed, 0x4f, 0x2a, 0x54, 0x07, 0x00, 0x32, 0x5e,
858 	0x1b, 0x94, 0x37, 0xcd, 0xe2, 0x32, 0xa8, 0xd5,
859 	0x2c, 0xfb, 0x03, 0x9d, 0x79, 0xdf, 0x68, 0x63,
860 	0x65, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x58,
861 	0xa1, 0xff, 0x54, 0x43, 0x47, 0x80, 0x17, 0x00,
862 	0x22, 0x00, 0x0b, 0xdb, 0x1f, 0x74, 0x21, 0x4f,
863 	0xa9, 0x0d, 0x90, 0x64, 0xa2, 0x33, 0xbe, 0x3f,
864 	0xf1, 0x95, 0xb0, 0x4e, 0x3f, 0x02, 0xdc, 0xad,
865 	0xb0, 0x05, 0x13, 0xe6, 0x32, 0x5f, 0xed, 0x90,
866 	0x2c, 0xad, 0xc0, 0x00, 0x14, 0x58, 0x52, 0x07,
867 	0x5d, 0x64, 0x6c, 0x1f, 0xd1, 0x13, 0x7f, 0xc3,
868 	0x74, 0xf6, 0x4b, 0xe3, 0xa0, 0x2e, 0xb7, 0x71,
869 	0xda, 0x00, 0x00, 0x00, 0x00, 0x29, 0x3c, 0x64,
870 	0xdf, 0x95, 0x38, 0xba, 0x73, 0xe3, 0x57, 0x61,
871 	0xa0, 0x01, 0x24, 0x01, 0x08, 0xc9, 0xd6, 0xea,
872 	0x60, 0xe4, 0x00, 0x22, 0x00, 0x0b, 0xe1, 0x86,
873 	0xbb, 0x79, 0x27, 0xe5, 0x01, 0x19, 0x90, 0xb3,
874 	0xe9, 0x08, 0xb0, 0xee, 0xfa, 0x3a, 0x67, 0xa9,
875 	0xf3, 0xc8, 0x9e, 0x03, 0x41, 0x07, 0x75, 0x60,
876 	0xbc, 0x94, 0x0c, 0x2a, 0xb7, 0xad, 0x00, 0x22,
877 	0x00, 0x0b, 0x35, 0xb1, 0x72, 0xd6, 0x3c, 0xe9,
878 	0x85, 0xe8, 0x66, 0xed, 0x10, 0x7a, 0x5c, 0xa3,
879 	0xe6, 0xd9, 0x4d, 0xf0, 0x52, 0x69, 0x26, 0x14,
880 	0xb4, 0x36, 0x7e, 0xad, 0x76, 0x9e, 0x58, 0x68,
881 	0x3e, 0x91
882 };
883 
884 const unsigned char attstmt_tpm_es256[3841] = {
885 	0xa6, 0x63, 0x61, 0x6c, 0x67, 0x39, 0xff, 0xfe,
886 	0x63, 0x73, 0x69, 0x67, 0x59, 0x01, 0x00, 0x6d,
887 	0x11, 0x61, 0x1f, 0x45, 0xb9, 0x7f, 0x65, 0x6f,
888 	0x97, 0x46, 0xfe, 0xbb, 0x8a, 0x98, 0x07, 0xa3,
889 	0xbc, 0x67, 0x5c, 0xd7, 0x65, 0xa4, 0xf4, 0x6c,
890 	0x5b, 0x37, 0x75, 0xa4, 0x7f, 0x08, 0x52, 0xeb,
891 	0x1e, 0x12, 0xe2, 0x78, 0x8c, 0x7d, 0x94, 0xab,
892 	0x7b, 0xed, 0x05, 0x17, 0x67, 0x7e, 0xaa, 0x02,
893 	0x89, 0x6d, 0xe8, 0x6d, 0x43, 0x30, 0x99, 0xc6,
894 	0xf9, 0x59, 0xe5, 0x82, 0x3c, 0x56, 0x4e, 0x77,
895 	0x11, 0x25, 0xe4, 0x43, 0x6a, 0xae, 0x92, 0x4f,
896 	0x60, 0x92, 0x50, 0xf9, 0x65, 0x0e, 0x44, 0x38,
897 	0x3d, 0xf7, 0xaf, 0x66, 0x89, 0xc7, 0xe6, 0xe6,
898 	0x01, 0x07, 0x9e, 0x90, 0xfd, 0x6d, 0xaa, 0x35,
899 	0x51, 0x51, 0xbf, 0x54, 0x13, 0x95, 0xc2, 0x17,
900 	0xfa, 0x32, 0x0f, 0xa7, 0x82, 0x17, 0x58, 0x6c,
901 	0x3d, 0xea, 0x88, 0xd8, 0x64, 0xc7, 0xf8, 0xc2,
902 	0xd6, 0x1c, 0xbb, 0xea, 0x1e, 0xb3, 0xd9, 0x4c,
903 	0xa7, 0xce, 0x18, 0x1e, 0xcb, 0x42, 0x5f, 0xbf,
904 	0x44, 0xe7, 0xf1, 0x22, 0xe0, 0x5b, 0xeb, 0xff,
905 	0xb6, 0x1e, 0x6f, 0x60, 0x12, 0x16, 0x63, 0xfe,
906 	0xab, 0x5e, 0x31, 0x13, 0xdb, 0x72, 0xc6, 0x9a,
907 	0xf8, 0x8f, 0x19, 0x6b, 0x2e, 0xaf, 0x7d, 0xca,
908 	0x9f, 0xbc, 0x6b, 0x1a, 0x8b, 0x5e, 0xe3, 0x9e,
909 	0xaa, 0x8c, 0x79, 0x9c, 0x4e, 0xed, 0xe4, 0xff,
910 	0x3d, 0x12, 0x79, 0x90, 0x09, 0x61, 0x97, 0x67,
911 	0xbf, 0x04, 0xac, 0x37, 0xea, 0xa9, 0x1f, 0x9f,
912 	0x52, 0x64, 0x0b, 0xeb, 0xc3, 0x61, 0xd4, 0x13,
913 	0xb0, 0x84, 0xf1, 0x3c, 0x74, 0x83, 0xcc, 0xa8,
914 	0x1c, 0x14, 0xe6, 0x9d, 0xfe, 0xec, 0xee, 0xa1,
915 	0xd2, 0xc2, 0x0a, 0xa6, 0x36, 0x08, 0xbb, 0x17,
916 	0xa5, 0x7b, 0x53, 0x34, 0x0e, 0xc9, 0x09, 0xe5,
917 	0x10, 0xa6, 0x85, 0x01, 0x71, 0x66, 0xff, 0xd0,
918 	0x6d, 0x4b, 0x93, 0xdb, 0x81, 0x25, 0x01, 0x63,
919 	0x76, 0x65, 0x72, 0x63, 0x32, 0x2e, 0x30, 0x63,
920 	0x78, 0x35, 0x63, 0x82, 0x59, 0x05, 0xc4, 0x30,
921 	0x82, 0x05, 0xc0, 0x30, 0x82, 0x03, 0xa8, 0xa0,
922 	0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x30, 0xcd,
923 	0xf2, 0x7e, 0x81, 0xc0, 0x43, 0x85, 0xa2, 0xd7,
924 	0x29, 0xef, 0xf7, 0x9f, 0xa5, 0x2b, 0x30, 0x0d,
925 	0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
926 	0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x41, 0x31,
927 	0x3f, 0x30, 0x3d, 0x06, 0x03, 0x55, 0x04, 0x03,
928 	0x13, 0x36, 0x45, 0x55, 0x53, 0x2d, 0x53, 0x54,
929 	0x4d, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44, 0x2d,
930 	0x31, 0x41, 0x44, 0x42, 0x39, 0x39, 0x34, 0x41,
931 	0x42, 0x35, 0x38, 0x42, 0x45, 0x35, 0x37, 0x41,
932 	0x30, 0x43, 0x43, 0x39, 0x42, 0x39, 0x30, 0x30,
933 	0x45, 0x37, 0x38, 0x35, 0x31, 0x45, 0x31, 0x41,
934 	0x34, 0x33, 0x43, 0x30, 0x38, 0x36, 0x36, 0x30,
935 	0x30, 0x1e, 0x17, 0x0d, 0x32, 0x31, 0x31, 0x31,
936 	0x30, 0x32, 0x31, 0x35, 0x30, 0x36, 0x35, 0x33,
937 	0x5a, 0x17, 0x0d, 0x32, 0x37, 0x30, 0x36, 0x30,
938 	0x33, 0x31, 0x39, 0x34, 0x30, 0x31, 0x36, 0x5a,
939 	0x30, 0x00, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
940 	0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
941 	0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
942 	0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82,
943 	0x01, 0x01, 0x00, 0xdb, 0xd5, 0x9a, 0xfc, 0x09,
944 	0xa7, 0xc4, 0xa5, 0x5f, 0xbe, 0x5f, 0xa2, 0xeb,
945 	0xd6, 0x8e, 0xed, 0xc5, 0x67, 0xa6, 0xa7, 0xd9,
946 	0xb2, 0x46, 0xc6, 0xe0, 0xae, 0x0c, 0x02, 0x25,
947 	0x0a, 0xf2, 0xc5, 0x96, 0xdc, 0xb7, 0x0e, 0xb9,
948 	0x86, 0xd3, 0x51, 0xbb, 0x63, 0xf0, 0x4f, 0x8a,
949 	0x5e, 0xd7, 0xf7, 0xff, 0xbb, 0x29, 0xbd, 0x58,
950 	0xcf, 0x75, 0x02, 0x39, 0xcb, 0x80, 0xf1, 0xd4,
951 	0xb6, 0x75, 0x67, 0x2f, 0x27, 0x4d, 0x0c, 0xcc,
952 	0x18, 0x59, 0x87, 0xfa, 0x51, 0xd1, 0x80, 0xb5,
953 	0x1a, 0xac, 0xac, 0x29, 0x51, 0xcf, 0x27, 0xaa,
954 	0x74, 0xac, 0x3e, 0x59, 0x56, 0x67, 0xe4, 0x42,
955 	0xe8, 0x30, 0x35, 0xb2, 0xf6, 0x27, 0x91, 0x62,
956 	0x60, 0x42, 0x42, 0x12, 0xde, 0xfe, 0xdd, 0xee,
957 	0xe8, 0xa8, 0x82, 0xf9, 0xb1, 0x08, 0xd5, 0x8d,
958 	0x57, 0x9a, 0x29, 0xb9, 0xb4, 0xe9, 0x19, 0x1e,
959 	0x33, 0x7d, 0x37, 0xa0, 0xce, 0x2e, 0x53, 0x13,
960 	0x39, 0xb6, 0x12, 0x61, 0x63, 0xbf, 0xd3, 0x42,
961 	0xeb, 0x6f, 0xed, 0xc1, 0x8e, 0x26, 0xba, 0x7d,
962 	0x8b, 0x37, 0x7c, 0xbb, 0x42, 0x1e, 0x56, 0x76,
963 	0xda, 0xdb, 0x35, 0x6b, 0x80, 0xe1, 0x8e, 0x00,
964 	0xac, 0xd2, 0xfc, 0x22, 0x96, 0x14, 0x0c, 0xf4,
965 	0xe4, 0xc5, 0xad, 0x14, 0xb7, 0x4d, 0x46, 0x63,
966 	0x30, 0x79, 0x3a, 0x7c, 0x33, 0xb5, 0xe5, 0x2e,
967 	0xbb, 0x5f, 0xca, 0xf2, 0x75, 0xe3, 0x4e, 0x99,
968 	0x64, 0x1b, 0x26, 0x99, 0x60, 0x1a, 0x79, 0xcc,
969 	0x30, 0x2c, 0xb3, 0x4c, 0x59, 0xf7, 0x77, 0x59,
970 	0xd5, 0x90, 0x70, 0x21, 0x79, 0x8c, 0x1f, 0x79,
971 	0x0a, 0x12, 0x8b, 0x3b, 0x37, 0x2d, 0x97, 0x39,
972 	0x89, 0x92, 0x0c, 0x44, 0x7c, 0xe9, 0x9f, 0xce,
973 	0x6d, 0xad, 0xc5, 0xae, 0xea, 0x8e, 0x50, 0x22,
974 	0x37, 0xe0, 0xd1, 0x9e, 0xd6, 0xe6, 0xa8, 0xcc,
975 	0x21, 0xfb, 0xff, 0x02, 0x03, 0x01, 0x00, 0x01,
976 	0xa3, 0x82, 0x01, 0xf3, 0x30, 0x82, 0x01, 0xef,
977 	0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01,
978 	0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80,
979 	0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01,
980 	0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x6d,
981 	0x06, 0x03, 0x55, 0x1d, 0x20, 0x01, 0x01, 0xff,
982 	0x04, 0x63, 0x30, 0x61, 0x30, 0x5f, 0x06, 0x09,
983 	0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15,
984 	0x1f, 0x30, 0x52, 0x30, 0x50, 0x06, 0x08, 0x2b,
985 	0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30,
986 	0x44, 0x1e, 0x42, 0x00, 0x54, 0x00, 0x43, 0x00,
987 	0x50, 0x00, 0x41, 0x00, 0x20, 0x00, 0x20, 0x00,
988 	0x54, 0x00, 0x72, 0x00, 0x75, 0x00, 0x73, 0x00,
989 	0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00,
990 	0x20, 0x00, 0x50, 0x00, 0x6c, 0x00, 0x61, 0x00,
991 	0x74, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, 0x00,
992 	0x6d, 0x00, 0x20, 0x00, 0x20, 0x00, 0x49, 0x00,
993 	0x64, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00,
994 	0x69, 0x00, 0x74, 0x00, 0x79, 0x30, 0x10, 0x06,
995 	0x03, 0x55, 0x1d, 0x25, 0x04, 0x09, 0x30, 0x07,
996 	0x06, 0x05, 0x67, 0x81, 0x05, 0x08, 0x03, 0x30,
997 	0x59, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x01, 0x01,
998 	0xff, 0x04, 0x4f, 0x30, 0x4d, 0xa4, 0x4b, 0x30,
999 	0x49, 0x31, 0x16, 0x30, 0x14, 0x06, 0x05, 0x67,
1000 	0x81, 0x05, 0x02, 0x01, 0x0c, 0x0b, 0x69, 0x64,
1001 	0x3a, 0x35, 0x33, 0x35, 0x34, 0x34, 0x44, 0x32,
1002 	0x30, 0x31, 0x17, 0x30, 0x15, 0x06, 0x05, 0x67,
1003 	0x81, 0x05, 0x02, 0x02, 0x0c, 0x0c, 0x53, 0x54,
1004 	0x33, 0x33, 0x48, 0x54, 0x50, 0x48, 0x41, 0x48,
1005 	0x42, 0x34, 0x31, 0x16, 0x30, 0x14, 0x06, 0x05,
1006 	0x67, 0x81, 0x05, 0x02, 0x03, 0x0c, 0x0b, 0x69,
1007 	0x64, 0x3a, 0x30, 0x30, 0x34, 0x39, 0x30, 0x30,
1008 	0x30, 0x34, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d,
1009 	0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x45,
1010 	0x1a, 0xec, 0xfc, 0x91, 0x70, 0xf8, 0x83, 0x8b,
1011 	0x9c, 0x47, 0x2f, 0x0b, 0x9f, 0x07, 0xf3, 0x2f,
1012 	0x7c, 0xa2, 0x8a, 0x30, 0x1d, 0x06, 0x03, 0x55,
1013 	0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x55, 0xa6,
1014 	0xee, 0xe3, 0x28, 0xdd, 0x40, 0x7f, 0x21, 0xd2,
1015 	0x7b, 0x8c, 0x69, 0x2f, 0x8c, 0x08, 0x29, 0xbc,
1016 	0x95, 0xb8, 0x30, 0x81, 0xb2, 0x06, 0x08, 0x2b,
1017 	0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04,
1018 	0x81, 0xa5, 0x30, 0x81, 0xa2, 0x30, 0x81, 0x9f,
1019 	0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07,
1020 	0x30, 0x02, 0x86, 0x81, 0x92, 0x68, 0x74, 0x74,
1021 	0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x7a, 0x63, 0x73,
1022 	0x70, 0x72, 0x6f, 0x64, 0x65, 0x75, 0x73, 0x61,
1023 	0x69, 0x6b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
1024 	0x68, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x2e, 0x63,
1025 	0x6f, 0x72, 0x65, 0x2e, 0x77, 0x69, 0x6e, 0x64,
1026 	0x6f, 0x77, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x2f,
1027 	0x65, 0x75, 0x73, 0x2d, 0x73, 0x74, 0x6d, 0x2d,
1028 	0x6b, 0x65, 0x79, 0x69, 0x64, 0x2d, 0x31, 0x61,
1029 	0x64, 0x62, 0x39, 0x39, 0x34, 0x61, 0x62, 0x35,
1030 	0x38, 0x62, 0x65, 0x35, 0x37, 0x61, 0x30, 0x63,
1031 	0x63, 0x39, 0x62, 0x39, 0x30, 0x30, 0x65, 0x37,
1032 	0x38, 0x35, 0x31, 0x65, 0x31, 0x61, 0x34, 0x33,
1033 	0x63, 0x30, 0x38, 0x36, 0x36, 0x30, 0x2f, 0x62,
1034 	0x36, 0x63, 0x30, 0x64, 0x39, 0x38, 0x64, 0x2d,
1035 	0x35, 0x37, 0x38, 0x61, 0x2d, 0x34, 0x62, 0x66,
1036 	0x62, 0x2d, 0x61, 0x32, 0x64, 0x33, 0x2d, 0x65,
1037 	0x64, 0x66, 0x65, 0x35, 0x66, 0x38, 0x32, 0x30,
1038 	0x36, 0x30, 0x31, 0x2e, 0x63, 0x65, 0x72, 0x30,
1039 	0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
1040 	0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82,
1041 	0x02, 0x01, 0x00, 0x2a, 0x08, 0x30, 0x1f, 0xfd,
1042 	0x8f, 0x80, 0x9b, 0x4b, 0x37, 0x82, 0x61, 0x86,
1043 	0x36, 0x57, 0x90, 0xb5, 0x1d, 0x1f, 0xa3, 0xae,
1044 	0x68, 0xac, 0xa7, 0x96, 0x6a, 0x25, 0x5e, 0xc5,
1045 	0x82, 0x7c, 0x36, 0x64, 0x58, 0x11, 0xcb, 0xa5,
1046 	0xee, 0xbf, 0xc4, 0xdb, 0xa0, 0xc7, 0x82, 0x3b,
1047 	0xa3, 0x85, 0x9b, 0xc4, 0xee, 0x07, 0x36, 0xd7,
1048 	0xc7, 0xb6, 0x23, 0xed, 0xc2, 0x73, 0xab, 0xbe,
1049 	0xbe, 0xee, 0x63, 0x17, 0xf9, 0xd7, 0x7a, 0x23,
1050 	0x7b, 0xf8, 0x09, 0x7a, 0xaa, 0x7f, 0x67, 0xc3,
1051 	0x04, 0x84, 0x71, 0x9b, 0x06, 0x9c, 0x07, 0x42,
1052 	0x4b, 0x65, 0x41, 0x56, 0x58, 0x14, 0x92, 0xb0,
1053 	0xb9, 0xaf, 0xa1, 0x39, 0xd4, 0x08, 0x2d, 0x71,
1054 	0xd5, 0x6c, 0x56, 0xb9, 0x2b, 0x1e, 0xf3, 0x93,
1055 	0xa5, 0xe9, 0xb2, 0x9b, 0x4d, 0x05, 0x2b, 0xbc,
1056 	0xd2, 0x20, 0x57, 0x3b, 0xa4, 0x01, 0x68, 0x8c,
1057 	0x23, 0x20, 0x7d, 0xbb, 0x71, 0xe4, 0x2a, 0x24,
1058 	0xba, 0x75, 0x0c, 0x89, 0x54, 0x22, 0xeb, 0x0e,
1059 	0xb2, 0xf4, 0xc2, 0x1f, 0x02, 0xb7, 0xe3, 0x06,
1060 	0x41, 0x15, 0x6b, 0xf3, 0xc8, 0x2d, 0x5b, 0xc2,
1061 	0x21, 0x82, 0x3e, 0xe8, 0x95, 0x40, 0x39, 0x9e,
1062 	0x91, 0x68, 0x33, 0x0c, 0x3d, 0x45, 0xef, 0x99,
1063 	0x79, 0xe6, 0x32, 0xc9, 0x00, 0x84, 0x36, 0xfb,
1064 	0x0a, 0x8d, 0x41, 0x1c, 0x32, 0x64, 0x06, 0x9e,
1065 	0x0f, 0xb5, 0x04, 0xcc, 0x08, 0xb1, 0xb6, 0x2b,
1066 	0xcf, 0x36, 0x0f, 0x73, 0x14, 0x8e, 0x25, 0x44,
1067 	0xb3, 0x0c, 0x34, 0x14, 0x96, 0x0c, 0x8a, 0x65,
1068 	0xa1, 0xde, 0x8e, 0xc8, 0x9d, 0xbe, 0x66, 0xdf,
1069 	0x06, 0x91, 0xca, 0x15, 0x0f, 0x92, 0xd5, 0x2a,
1070 	0x0b, 0xdc, 0x4c, 0x6a, 0xf3, 0x16, 0x4a, 0x3e,
1071 	0xb9, 0x76, 0xbc, 0xfe, 0x62, 0xd4, 0xa8, 0xcd,
1072 	0x94, 0x78, 0x0d, 0xdd, 0x94, 0xfd, 0x5e, 0x63,
1073 	0x57, 0x27, 0x05, 0x9c, 0xd0, 0x80, 0x91, 0x91,
1074 	0x79, 0xe8, 0x5e, 0x18, 0x64, 0x22, 0xe4, 0x2c,
1075 	0x13, 0x65, 0xa4, 0x51, 0x5a, 0x1e, 0x3b, 0x71,
1076 	0x2e, 0x70, 0x9f, 0xc4, 0xa5, 0x20, 0xcd, 0xef,
1077 	0xd8, 0x3f, 0xa4, 0xf5, 0x89, 0x8a, 0xa5, 0x4f,
1078 	0x76, 0x2d, 0x49, 0x56, 0x00, 0x8d, 0xde, 0x40,
1079 	0xba, 0x24, 0x46, 0x51, 0x38, 0xad, 0xdb, 0xc4,
1080 	0x04, 0xf4, 0x6e, 0xc0, 0x29, 0x48, 0x07, 0x6a,
1081 	0x1b, 0x26, 0x32, 0x0a, 0xfb, 0xea, 0x71, 0x2a,
1082 	0x11, 0xfc, 0x98, 0x7c, 0x44, 0x87, 0xbc, 0x06,
1083 	0x3a, 0x4d, 0xbd, 0x91, 0x63, 0x4f, 0x26, 0x48,
1084 	0x54, 0x47, 0x1b, 0xbd, 0xf0, 0xf1, 0x56, 0x05,
1085 	0xc5, 0x0f, 0x8f, 0x20, 0xa5, 0xcc, 0xfb, 0x76,
1086 	0xb0, 0xbd, 0x83, 0xde, 0x7f, 0x39, 0x4f, 0xcf,
1087 	0x61, 0x74, 0x52, 0xa7, 0x1d, 0xf6, 0xb5, 0x5e,
1088 	0x4a, 0x82, 0x20, 0xc1, 0x94, 0xaa, 0x2c, 0x33,
1089 	0xd6, 0x0a, 0xf9, 0x8f, 0x92, 0xc6, 0x29, 0x80,
1090 	0xf5, 0xa2, 0xb1, 0xff, 0xb6, 0x2b, 0xaa, 0x04,
1091 	0x00, 0x72, 0xb4, 0x12, 0xbb, 0xb1, 0xf1, 0x3c,
1092 	0x88, 0xa3, 0xab, 0x49, 0x17, 0x90, 0x80, 0x59,
1093 	0xa2, 0x96, 0x41, 0x69, 0x74, 0x33, 0x8a, 0x28,
1094 	0x33, 0x7e, 0xb3, 0x19, 0x92, 0x28, 0xc1, 0xf0,
1095 	0xd1, 0x82, 0xd5, 0x42, 0xff, 0xe7, 0xa5, 0x3f,
1096 	0x1e, 0xb6, 0x4a, 0x23, 0xcc, 0x6a, 0x7f, 0x15,
1097 	0x15, 0x52, 0x25, 0xb1, 0xca, 0x21, 0x95, 0x11,
1098 	0x53, 0x3e, 0x1f, 0x50, 0x33, 0x12, 0x7a, 0x62,
1099 	0xce, 0xcc, 0x71, 0xc2, 0x5f, 0x34, 0x47, 0xc6,
1100 	0x7c, 0x71, 0xfa, 0xa0, 0x54, 0x00, 0xb2, 0xdf,
1101 	0xc5, 0x54, 0xac, 0x6c, 0x53, 0xef, 0x64, 0x6b,
1102 	0x08, 0x82, 0xd8, 0x16, 0x1e, 0xca, 0x40, 0xf3,
1103 	0x1f, 0xdf, 0x56, 0x63, 0x10, 0xbc, 0xd7, 0xa0,
1104 	0xeb, 0xee, 0xd1, 0x95, 0xe5, 0xef, 0xf1, 0x6a,
1105 	0x83, 0x2d, 0x5a, 0x59, 0x06, 0xef, 0x30, 0x82,
1106 	0x06, 0xeb, 0x30, 0x82, 0x04, 0xd3, 0xa0, 0x03,
1107 	0x02, 0x01, 0x02, 0x02, 0x13, 0x33, 0x00, 0x00,
1108 	0x05, 0x23, 0xbf, 0xe8, 0xa1, 0x1a, 0x2a, 0x68,
1109 	0xbd, 0x09, 0x00, 0x00, 0x00, 0x00, 0x05, 0x23,
1110 	0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
1111 	0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30,
1112 	0x81, 0x8c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
1113 	0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31,
1114 	0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
1115 	0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e,
1116 	0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e,
1117 	0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52,
1118 	0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e,
1119 	0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13,
1120 	0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f,
1121 	0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f,
1122 	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x36,
1123 	0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
1124 	0x2d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f,
1125 	0x66, 0x74, 0x20, 0x54, 0x50, 0x4d, 0x20, 0x52,
1126 	0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74,
1127 	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20,
1128 	0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
1129 	0x79, 0x20, 0x32, 0x30, 0x31, 0x34, 0x30, 0x1e,
1130 	0x17, 0x0d, 0x32, 0x31, 0x30, 0x36, 0x30, 0x33,
1131 	0x31, 0x39, 0x34, 0x30, 0x31, 0x36, 0x5a, 0x17,
1132 	0x0d, 0x32, 0x37, 0x30, 0x36, 0x30, 0x33, 0x31,
1133 	0x39, 0x34, 0x30, 0x31, 0x36, 0x5a, 0x30, 0x41,
1134 	0x31, 0x3f, 0x30, 0x3d, 0x06, 0x03, 0x55, 0x04,
1135 	0x03, 0x13, 0x36, 0x45, 0x55, 0x53, 0x2d, 0x53,
1136 	0x54, 0x4d, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44,
1137 	0x2d, 0x31, 0x41, 0x44, 0x42, 0x39, 0x39, 0x34,
1138 	0x41, 0x42, 0x35, 0x38, 0x42, 0x45, 0x35, 0x37,
1139 	0x41, 0x30, 0x43, 0x43, 0x39, 0x42, 0x39, 0x30,
1140 	0x30, 0x45, 0x37, 0x38, 0x35, 0x31, 0x45, 0x31,
1141 	0x41, 0x34, 0x33, 0x43, 0x30, 0x38, 0x36, 0x36,
1142 	0x30, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06,
1143 	0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
1144 	0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f,
1145 	0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02,
1146 	0x01, 0x00, 0xdb, 0x03, 0x34, 0x82, 0xfa, 0x81,
1147 	0x1c, 0x84, 0x0b, 0xa0, 0x0e, 0x60, 0xd8, 0x9d,
1148 	0x84, 0xf4, 0x81, 0xc4, 0xe9, 0xff, 0xcf, 0xe9,
1149 	0xa3, 0x57, 0x53, 0x60, 0xa8, 0x19, 0xce, 0xbe,
1150 	0xe1, 0x97, 0xee, 0x5d, 0x8c, 0x9f, 0xe4, 0xbd,
1151 	0xef, 0xbd, 0x94, 0x14, 0xe4, 0x74, 0x41, 0x02,
1152 	0xe9, 0x03, 0x19, 0x9f, 0xdd, 0x48, 0x2d, 0xbd,
1153 	0xca, 0x26, 0x47, 0x2c, 0x01, 0x31, 0x5f, 0x34,
1154 	0xef, 0x59, 0x35, 0x48, 0x36, 0x3d, 0x1e, 0xdf,
1155 	0xd8, 0x13, 0xf0, 0xd0, 0x67, 0xc1, 0xb0, 0x47,
1156 	0x67, 0xa2, 0xd6, 0x62, 0xc8, 0xe1, 0x00, 0x36,
1157 	0x8b, 0x45, 0xf6, 0x3b, 0x96, 0x60, 0xa0, 0x45,
1158 	0x26, 0xcb, 0xc7, 0x0b, 0x5b, 0x97, 0xd1, 0xaf,
1159 	0x54, 0x25, 0x7a, 0x67, 0xe4, 0x2a, 0xd8, 0x9d,
1160 	0x53, 0x05, 0xbd, 0x12, 0xac, 0xa2, 0x8e, 0x95,
1161 	0xb4, 0x2a, 0xca, 0x89, 0x93, 0x64, 0x97, 0x25,
1162 	0xdc, 0x1f, 0xa9, 0xe0, 0x55, 0x07, 0x38, 0x1d,
1163 	0xee, 0x02, 0x90, 0x22, 0xf5, 0xad, 0x4e, 0x5c,
1164 	0xf8, 0xc5, 0x1f, 0x9e, 0x84, 0x7e, 0x13, 0x47,
1165 	0x52, 0xa2, 0x36, 0xf9, 0xf6, 0xbf, 0x76, 0x9e,
1166 	0x0f, 0xdd, 0x14, 0x99, 0xb9, 0xd8, 0x5a, 0x42,
1167 	0x3d, 0xd8, 0xbf, 0xdd, 0xb4, 0x9b, 0xbf, 0x6a,
1168 	0x9f, 0x89, 0x13, 0x75, 0xaf, 0x96, 0xd2, 0x72,
1169 	0xdf, 0xb3, 0x80, 0x6f, 0x84, 0x1a, 0x9d, 0x06,
1170 	0x55, 0x09, 0x29, 0xea, 0xa7, 0x05, 0x31, 0xec,
1171 	0x47, 0x3a, 0xcf, 0x3f, 0x9c, 0x2c, 0xbd, 0xd0,
1172 	0x7d, 0xe4, 0x75, 0x5b, 0x33, 0xbe, 0x12, 0x86,
1173 	0x09, 0xcf, 0x66, 0x9a, 0xeb, 0xf8, 0xf8, 0x72,
1174 	0x91, 0x88, 0x4a, 0x5e, 0x89, 0x62, 0x6a, 0x94,
1175 	0xdc, 0x48, 0x37, 0x13, 0xd8, 0x91, 0x02, 0xe3,
1176 	0x42, 0x41, 0x7c, 0x2f, 0xe3, 0xb6, 0x0f, 0xb4,
1177 	0x96, 0x06, 0x80, 0xca, 0x28, 0x01, 0x6f, 0x4b,
1178 	0xcd, 0x28, 0xd4, 0x2c, 0x94, 0x7e, 0x40, 0x7e,
1179 	0xdf, 0x01, 0xe5, 0xf2, 0x33, 0xd4, 0xda, 0xf4,
1180 	0x1a, 0x17, 0xf7, 0x5d, 0xcb, 0x66, 0x2c, 0x2a,
1181 	0xeb, 0xe1, 0xb1, 0x4a, 0xc3, 0x85, 0x63, 0xb2,
1182 	0xac, 0xd0, 0x3f, 0x1a, 0x8d, 0xa5, 0x0c, 0xee,
1183 	0x4f, 0xde, 0x74, 0x9c, 0xe0, 0x5a, 0x10, 0xc7,
1184 	0xb8, 0xe4, 0xec, 0xe7, 0x73, 0xa6, 0x41, 0x42,
1185 	0x37, 0xe1, 0xdf, 0xb9, 0xc7, 0xb5, 0x14, 0xa8,
1186 	0x80, 0x95, 0xa0, 0x12, 0x67, 0x99, 0xf5, 0xba,
1187 	0x25, 0x0a, 0x74, 0x86, 0x71, 0x9c, 0x7f, 0x59,
1188 	0x97, 0xd2, 0x3f, 0x10, 0xfe, 0x6a, 0xb9, 0xe4,
1189 	0x47, 0x36, 0xfb, 0x0f, 0x50, 0xee, 0xfc, 0x87,
1190 	0x99, 0x7e, 0x36, 0x64, 0x1b, 0xc7, 0x13, 0xb3,
1191 	0x33, 0x18, 0x71, 0xa4, 0xc3, 0xb0, 0xfc, 0x45,
1192 	0x37, 0x11, 0x40, 0xb3, 0xde, 0x2c, 0x9f, 0x0a,
1193 	0xcd, 0xaf, 0x5e, 0xfb, 0xd5, 0x9c, 0xea, 0xd7,
1194 	0x24, 0x19, 0x3a, 0x92, 0x80, 0xa5, 0x63, 0xc5,
1195 	0x3e, 0xdd, 0x51, 0xd0, 0x9f, 0xb8, 0x5e, 0xd5,
1196 	0xf1, 0xfe, 0xa5, 0x93, 0xfb, 0x7f, 0xd9, 0xb8,
1197 	0xb7, 0x0e, 0x0d, 0x12, 0x71, 0xf0, 0x52, 0x9d,
1198 	0xe9, 0xd0, 0xd2, 0x8b, 0x38, 0x8b, 0x85, 0x83,
1199 	0x98, 0x24, 0x88, 0xe8, 0x42, 0x30, 0x83, 0x12,
1200 	0xef, 0x09, 0x96, 0x2f, 0x21, 0x81, 0x05, 0x30,
1201 	0x0c, 0xbb, 0xba, 0x21, 0x39, 0x16, 0x12, 0xe8,
1202 	0x4b, 0x7b, 0x7a, 0x66, 0xb8, 0x22, 0x2c, 0x71,
1203 	0xaf, 0x59, 0xa1, 0xfc, 0x61, 0xf1, 0xb4, 0x5e,
1204 	0xfc, 0x43, 0x19, 0x45, 0x6e, 0xa3, 0x45, 0xe4,
1205 	0xcb, 0x66, 0x5f, 0xe0, 0x57, 0xf6, 0x0a, 0x30,
1206 	0xa3, 0xd6, 0x51, 0x24, 0xc9, 0x07, 0x55, 0x82,
1207 	0x4a, 0x66, 0x0e, 0x9d, 0xb2, 0x2f, 0x84, 0x56,
1208 	0x6c, 0x3e, 0x71, 0xef, 0x9b, 0x35, 0x4d, 0x72,
1209 	0xdc, 0x46, 0x2a, 0xe3, 0x7b, 0x13, 0x20, 0xbf,
1210 	0xab, 0x77, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3,
1211 	0x82, 0x01, 0x8e, 0x30, 0x82, 0x01, 0x8a, 0x30,
1212 	0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01,
1213 	0xff, 0x04, 0x04, 0x03, 0x02, 0x02, 0x84, 0x30,
1214 	0x1b, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x14,
1215 	0x30, 0x12, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04,
1216 	0x01, 0x82, 0x37, 0x15, 0x24, 0x06, 0x05, 0x67,
1217 	0x81, 0x05, 0x08, 0x03, 0x30, 0x16, 0x06, 0x03,
1218 	0x55, 0x1d, 0x20, 0x04, 0x0f, 0x30, 0x0d, 0x30,
1219 	0x0b, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01,
1220 	0x82, 0x37, 0x15, 0x1f, 0x30, 0x12, 0x06, 0x03,
1221 	0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08,
1222 	0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00,
1223 	0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04,
1224 	0x16, 0x04, 0x14, 0x45, 0x1a, 0xec, 0xfc, 0x91,
1225 	0x70, 0xf8, 0x83, 0x8b, 0x9c, 0x47, 0x2f, 0x0b,
1226 	0x9f, 0x07, 0xf3, 0x2f, 0x7c, 0xa2, 0x8a, 0x30,
1227 	0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
1228 	0x30, 0x16, 0x80, 0x14, 0x7a, 0x8c, 0x0a, 0xce,
1229 	0x2f, 0x48, 0x62, 0x17, 0xe2, 0x94, 0xd1, 0xae,
1230 	0x55, 0xc1, 0x52, 0xec, 0x71, 0x74, 0xa4, 0x56,
1231 	0x30, 0x70, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04,
1232 	0x69, 0x30, 0x67, 0x30, 0x65, 0xa0, 0x63, 0xa0,
1233 	0x61, 0x86, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x3a,
1234 	0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69,
1235 	0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e,
1236 	0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x6f,
1237 	0x70, 0x73, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d,
1238 	0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
1239 	0x25, 0x32, 0x30, 0x54, 0x50, 0x4d, 0x25, 0x32,
1240 	0x30, 0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30,
1241 	0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
1242 	0x61, 0x74, 0x65, 0x25, 0x32, 0x30, 0x41, 0x75,
1243 	0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x25,
1244 	0x32, 0x30, 0x32, 0x30, 0x31, 0x34, 0x2e, 0x63,
1245 	0x72, 0x6c, 0x30, 0x7d, 0x06, 0x08, 0x2b, 0x06,
1246 	0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x71,
1247 	0x30, 0x6f, 0x30, 0x6d, 0x06, 0x08, 0x2b, 0x06,
1248 	0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x61,
1249 	0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
1250 	0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f,
1251 	0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d,
1252 	0x2f, 0x70, 0x6b, 0x69, 0x6f, 0x70, 0x73, 0x2f,
1253 	0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69,
1254 	0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x25,
1255 	0x32, 0x30, 0x54, 0x50, 0x4d, 0x25, 0x32, 0x30,
1256 	0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30, 0x43,
1257 	0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
1258 	0x74, 0x65, 0x25, 0x32, 0x30, 0x41, 0x75, 0x74,
1259 	0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x25, 0x32,
1260 	0x30, 0x32, 0x30, 0x31, 0x34, 0x2e, 0x63, 0x72,
1261 	0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
1262 	0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00,
1263 	0x03, 0x82, 0x02, 0x01, 0x00, 0x48, 0x24, 0x32,
1264 	0xe8, 0xd6, 0x38, 0xda, 0x65, 0xec, 0x1b, 0x18,
1265 	0x8e, 0x37, 0x07, 0xd5, 0x18, 0x5a, 0xc8, 0xb9,
1266 	0xbb, 0x24, 0x8a, 0x4d, 0xa1, 0x3c, 0x9e, 0x46,
1267 	0x76, 0xcf, 0xa5, 0xdf, 0xd7, 0x61, 0xba, 0x05,
1268 	0x89, 0x3c, 0x13, 0xc2, 0x1f, 0x71, 0xe3, 0xec,
1269 	0x5d, 0x54, 0x9e, 0xd9, 0x01, 0x5a, 0x10, 0x3b,
1270 	0x17, 0x75, 0xde, 0xa1, 0x45, 0xbf, 0x1d, 0x1b,
1271 	0x41, 0x21, 0x42, 0x68, 0x22, 0x6b, 0xbb, 0xcb,
1272 	0x11, 0x04, 0xd2, 0xae, 0x86, 0xcf, 0x73, 0x5a,
1273 	0xf2, 0x80, 0x18, 0x00, 0xf0, 0xd6, 0x6c, 0x5a,
1274 	0x1e, 0xb3, 0x4d, 0x30, 0x02, 0x4a, 0x6a, 0x03,
1275 	0x36, 0x42, 0xde, 0xb2, 0x52, 0x55, 0xff, 0x71,
1276 	0xeb, 0x7b, 0x8b, 0x55, 0x6c, 0xdf, 0x05, 0x35,
1277 	0x47, 0x70, 0x53, 0xfb, 0x6c, 0xba, 0x06, 0xb2,
1278 	0x61, 0x86, 0xdc, 0x2a, 0x64, 0x81, 0x24, 0x79,
1279 	0x46, 0x73, 0x04, 0x55, 0x59, 0xed, 0xd6, 0x06,
1280 	0x61, 0x15, 0xf9, 0x8d, 0x78, 0x39, 0x7b, 0x84,
1281 	0x7a, 0x40, 0x45, 0x13, 0x1a, 0x91, 0x71, 0x8f,
1282 	0xd1, 0x4f, 0x78, 0x10, 0x68, 0x9b, 0x15, 0x79,
1283 	0x3f, 0x79, 0x2d, 0x9b, 0xc7, 0x5d, 0xa3, 0xcf,
1284 	0xa9, 0x14, 0xb0, 0xc4, 0xdb, 0xa9, 0x45, 0x6a,
1285 	0x6e, 0x60, 0x45, 0x0b, 0x14, 0x25, 0xc7, 0x74,
1286 	0xd0, 0x36, 0xaf, 0xc5, 0xbd, 0x4f, 0x7b, 0xc0,
1287 	0x04, 0x43, 0x85, 0xbb, 0x06, 0x36, 0x77, 0x26,
1288 	0x02, 0x23, 0x0b, 0xf8, 0x57, 0x8f, 0x1f, 0x27,
1289 	0x30, 0x95, 0xff, 0x83, 0x23, 0x2b, 0x49, 0x33,
1290 	0x43, 0x62, 0x87, 0x5d, 0x27, 0x12, 0x1a, 0x68,
1291 	0x7b, 0xba, 0x2d, 0xf6, 0xed, 0x2c, 0x26, 0xb5,
1292 	0xbb, 0xe2, 0x6f, 0xc2, 0x61, 0x17, 0xfc, 0x72,
1293 	0x14, 0x57, 0x2c, 0x2c, 0x5a, 0x92, 0x13, 0x41,
1294 	0xc4, 0x7e, 0xb5, 0x64, 0x5b, 0x86, 0x57, 0x13,
1295 	0x14, 0xff, 0xf5, 0x04, 0xb9, 0x3d, 0x2d, 0xc3,
1296 	0xe9, 0x75, 0x1f, 0x68, 0x0b, 0xb5, 0x76, 0xe1,
1297 	0x7d, 0xe3, 0xb0, 0x14, 0xa8, 0x45, 0x05, 0x98,
1298 	0x81, 0x32, 0xc1, 0xf5, 0x49, 0x4d, 0x58, 0xa4,
1299 	0xee, 0xd8, 0x84, 0xba, 0x65, 0x07, 0x8d, 0xf7,
1300 	0x9a, 0xff, 0x7d, 0xa5, 0xbc, 0x9a, 0xed, 0x4a,
1301 	0x5d, 0xa4, 0x97, 0x4b, 0x4d, 0x31, 0x90, 0xb5,
1302 	0x7d, 0x28, 0x77, 0x25, 0x88, 0x1c, 0xbf, 0x78,
1303 	0x22, 0xb2, 0xb5, 0x5c, 0x9a, 0xc9, 0x63, 0x17,
1304 	0x96, 0xe9, 0xc2, 0x52, 0x30, 0xb8, 0x9b, 0x37,
1305 	0x69, 0x1a, 0x6a, 0x66, 0x76, 0x18, 0xac, 0xc0,
1306 	0x48, 0xee, 0x46, 0x5b, 0xbe, 0x6a, 0xd5, 0x72,
1307 	0x07, 0xdc, 0x7d, 0x05, 0xbe, 0x76, 0x7d, 0xa5,
1308 	0x5e, 0x53, 0xb5, 0x47, 0x80, 0x58, 0xf0, 0xaf,
1309 	0x6f, 0x4e, 0xc0, 0xf1, 0x1e, 0x37, 0x64, 0x15,
1310 	0x42, 0x96, 0x18, 0x3a, 0x89, 0xc8, 0x14, 0x48,
1311 	0x89, 0x5c, 0x12, 0x88, 0x98, 0x0b, 0x7b, 0x4e,
1312 	0xce, 0x1c, 0xda, 0xd5, 0xa4, 0xd3, 0x32, 0x32,
1313 	0x74, 0x5b, 0xcc, 0xfd, 0x2b, 0x02, 0xfb, 0xae,
1314 	0xd0, 0x5a, 0x4c, 0xc9, 0xc1, 0x35, 0x19, 0x90,
1315 	0x5f, 0xca, 0x14, 0xeb, 0x4c, 0x17, 0xd7, 0xe3,
1316 	0xe2, 0x5d, 0xb4, 0x49, 0xaa, 0xf0, 0x50, 0x87,
1317 	0xc3, 0x20, 0x00, 0xda, 0xe9, 0x04, 0x80, 0x64,
1318 	0xac, 0x9f, 0xcd, 0x26, 0x41, 0x48, 0xe8, 0x4c,
1319 	0x46, 0xcc, 0x5b, 0xd7, 0xca, 0x4c, 0x1b, 0x43,
1320 	0x43, 0x1e, 0xbd, 0x94, 0xe7, 0xa7, 0xa6, 0x86,
1321 	0xe5, 0xd1, 0x78, 0x29, 0xa2, 0x40, 0xc5, 0xc5,
1322 	0x47, 0xb6, 0x6d, 0x53, 0xde, 0xac, 0x97, 0x74,
1323 	0x24, 0x57, 0xcc, 0x05, 0x93, 0xfd, 0x52, 0x35,
1324 	0x29, 0xd5, 0xe0, 0xfa, 0x23, 0x0d, 0xd7, 0xaa,
1325 	0x8b, 0x07, 0x4b, 0xf6, 0x64, 0xc7, 0xad, 0x3c,
1326 	0xa1, 0xb5, 0xc5, 0x70, 0xaf, 0x46, 0xfe, 0x9a,
1327 	0x82, 0x4d, 0x75, 0xb8, 0x6d, 0x67, 0x70, 0x75,
1328 	0x62, 0x41, 0x72, 0x65, 0x61, 0x58, 0x76, 0x00,
1329 	0x23, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x72, 0x00,
1330 	0x20, 0x9d, 0xff, 0xcb, 0xf3, 0x6c, 0x38, 0x3a,
1331 	0xe6, 0x99, 0xfb, 0x98, 0x68, 0xdc, 0x6d, 0xcb,
1332 	0x89, 0xd7, 0x15, 0x38, 0x84, 0xbe, 0x28, 0x03,
1333 	0x92, 0x2c, 0x12, 0x41, 0x58, 0xbf, 0xad, 0x22,
1334 	0xae, 0x00, 0x10, 0x00, 0x10, 0x00, 0x03, 0x00,
1335 	0x10, 0x00, 0x20, 0xfb, 0xd6, 0xba, 0x74, 0xe6,
1336 	0x6e, 0x5c, 0x87, 0xef, 0x89, 0xa2, 0xe8, 0x3d,
1337 	0x0b, 0xe9, 0x69, 0x2c, 0x07, 0x07, 0x7a, 0x8a,
1338 	0x1e, 0xce, 0x12, 0xea, 0x3b, 0xb3, 0xf1, 0xf3,
1339 	0xd9, 0xc3, 0xe6, 0x00, 0x20, 0x3c, 0x68, 0x51,
1340 	0x94, 0x54, 0x8d, 0xeb, 0x9f, 0xb2, 0x2c, 0x66,
1341 	0x75, 0xb6, 0xb7, 0x55, 0x22, 0x0d, 0x87, 0x59,
1342 	0xc4, 0x39, 0x91, 0x62, 0x17, 0xc2, 0xc3, 0x53,
1343 	0xa5, 0x26, 0x97, 0x4f, 0x2d, 0x68, 0x63, 0x65,
1344 	0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x58, 0xa1,
1345 	0xff, 0x54, 0x43, 0x47, 0x80, 0x17, 0x00, 0x22,
1346 	0x00, 0x0b, 0x73, 0xbe, 0xb7, 0x40, 0x82, 0xc0,
1347 	0x49, 0x9a, 0xf7, 0xf2, 0xd0, 0x79, 0x6c, 0x88,
1348 	0xf3, 0x56, 0x7b, 0x7a, 0x7d, 0xcd, 0x70, 0xd1,
1349 	0xbc, 0x41, 0x88, 0x48, 0x51, 0x03, 0xf3, 0x58,
1350 	0x3e, 0xb8, 0x00, 0x14, 0x9f, 0x57, 0x39, 0x67,
1351 	0xa8, 0x7b, 0xd8, 0xf6, 0x9e, 0x75, 0xc9, 0x85,
1352 	0xab, 0xe3, 0x55, 0xc7, 0x9c, 0xf6, 0xd8, 0x4f,
1353 	0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x12,
1354 	0xfd, 0xc6, 0x05, 0xc6, 0x2b, 0xf5, 0xe9, 0x88,
1355 	0x01, 0x1f, 0x70, 0x8d, 0x98, 0x2a, 0x04, 0x21,
1356 	0x30, 0x00, 0x22, 0x00, 0x0b, 0xf4, 0xfd, 0x9a,
1357 	0x33, 0x55, 0x21, 0x08, 0x27, 0x48, 0x55, 0x01,
1358 	0x56, 0xf9, 0x0b, 0x4e, 0x47, 0x55, 0x08, 0x2e,
1359 	0x3c, 0x91, 0x3d, 0x6e, 0x53, 0xcf, 0x08, 0xe9,
1360 	0x0a, 0x4b, 0xc9, 0x7e, 0x99, 0x00, 0x22, 0x00,
1361 	0x0b, 0x51, 0xd3, 0x38, 0xfe, 0xaa, 0xda, 0xc6,
1362 	0x68, 0x84, 0x39, 0xe7, 0xb1, 0x03, 0x22, 0x5e,
1363 	0xc4, 0xd3, 0xf1, 0x0c, 0xec, 0x35, 0x5d, 0x50,
1364 	0xa3, 0x9d, 0xab, 0xa1, 0x7b, 0x61, 0x51, 0x8f,
1365 	0x4e
1366 };
1367 
1368 /*
1369  * Security Key By Yubico
1370  * 5.1.X
1371  * f8a011f3-8c0a-4d15-8006-17111f9edc7d
1372  */
1373 const unsigned char aaguid[16] = {
1374 	0xf8, 0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15,
1375 	0x80, 0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d,
1376 };
1377 
1378 /*
1379  * Windows Hello by Microsoft
1380  */
1381 const unsigned char aaguid_tpm[16] = {
1382 	0x08, 0x98, 0x70, 0x58, 0xca, 0xdc, 0x4b, 0x81,
1383 	0xb6, 0xe1, 0x30, 0xde, 0x50, 0xdc, 0xbe, 0x96,
1384 };
1385 
1386 const char rp_id[] = "localhost";
1387 const char rp_name[] = "sweet home localhost";
1388 
1389 static void *
dummy_open(const char * path)1390 dummy_open(const char *path)
1391 {
1392 	(void)path;
1393 
1394 	return (&fake_dev_handle);
1395 }
1396 
1397 static void
dummy_close(void * handle)1398 dummy_close(void *handle)
1399 {
1400 	assert(handle == &fake_dev_handle);
1401 }
1402 
1403 static int
dummy_read(void * handle,unsigned char * buf,size_t len,int ms)1404 dummy_read(void *handle, unsigned char *buf, size_t len, int ms)
1405 {
1406 	(void)handle;
1407 	(void)buf;
1408 	(void)len;
1409 	(void)ms;
1410 
1411 	abort();
1412 	/* NOTREACHED */
1413 }
1414 
1415 static int
dummy_write(void * handle,const unsigned char * buf,size_t len)1416 dummy_write(void *handle, const unsigned char *buf, size_t len)
1417 {
1418 	(void)handle;
1419 	(void)buf;
1420 	(void)len;
1421 
1422 	abort();
1423 	/* NOTREACHED */
1424 }
1425 
1426 static fido_cred_t *
alloc_cred(void)1427 alloc_cred(void)
1428 {
1429 	fido_cred_t *c;
1430 
1431 	c = fido_cred_new();
1432 	assert(c != NULL);
1433 
1434 	return (c);
1435 }
1436 
1437 static void
free_cred(fido_cred_t * c)1438 free_cred(fido_cred_t *c)
1439 {
1440 	fido_cred_free(&c);
1441 	assert(c == NULL);
1442 }
1443 
1444 static fido_dev_t *
alloc_dev(void)1445 alloc_dev(void)
1446 {
1447 	fido_dev_t *d;
1448 
1449 	d = fido_dev_new();
1450 	assert(d != NULL);
1451 
1452 	return (d);
1453 }
1454 
1455 static void
free_dev(fido_dev_t * d)1456 free_dev(fido_dev_t *d)
1457 {
1458 	fido_dev_free(&d);
1459 	assert(d == NULL);
1460 }
1461 
1462 static void
empty_cred(void)1463 empty_cred(void)
1464 {
1465 	fido_cred_t *c;
1466 	fido_dev_t *d;
1467 	fido_dev_io_t io_f;
1468 
1469 	c = alloc_cred();
1470 	assert(fido_cred_authdata_len(c) == 0);
1471 	assert(fido_cred_authdata_ptr(c) == NULL);
1472 	assert(fido_cred_authdata_raw_len(c) == 0);
1473 	assert(fido_cred_authdata_raw_ptr(c) == NULL);
1474 	assert(fido_cred_clientdata_hash_len(c) == 0);
1475 	assert(fido_cred_clientdata_hash_ptr(c) == NULL);
1476 	assert(fido_cred_flags(c) == 0);
1477 	assert(fido_cred_fmt(c) == NULL);
1478 	assert(fido_cred_id_len(c) == 0);
1479 	assert(fido_cred_id_ptr(c) == NULL);
1480 	assert(fido_cred_prot(c) == 0);
1481 	assert(fido_cred_pubkey_len(c) == 0);
1482 	assert(fido_cred_pubkey_ptr(c) == NULL);
1483 	assert(fido_cred_rp_id(c) == NULL);
1484 	assert(fido_cred_rp_name(c) == NULL);
1485 	assert(fido_cred_sig_len(c) == 0);
1486 	assert(fido_cred_sig_ptr(c) == NULL);
1487 	assert(fido_cred_x5c_len(c) == 0);
1488 	assert(fido_cred_x5c_ptr(c) == NULL);
1489 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1490 
1491 	memset(&io_f, 0, sizeof(io_f));
1492 
1493 	io_f.open = dummy_open;
1494 	io_f.close = dummy_close;
1495 	io_f.read = dummy_read;
1496 	io_f.write = dummy_write;
1497 
1498 	d = alloc_dev();
1499 
1500 	fido_dev_force_u2f(d);
1501 	assert(fido_dev_set_io_functions(d, &io_f) == FIDO_OK);
1502 	assert(fido_dev_make_cred(d, c, NULL) == FIDO_ERR_INVALID_ARGUMENT);
1503 	assert(fido_dev_make_cred(d, c, "") == FIDO_ERR_UNSUPPORTED_OPTION);
1504 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1505 
1506 	fido_dev_force_fido2(d);
1507 	assert(fido_dev_set_io_functions(d, &io_f) == FIDO_OK);
1508 	assert(fido_dev_make_cred(d, c, NULL) == FIDO_ERR_INVALID_ARGUMENT);
1509 	assert(fido_dev_make_cred(d, c, "") == FIDO_ERR_INVALID_ARGUMENT);
1510 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1511 
1512 	free_cred(c);
1513 	free_dev(d);
1514 }
1515 
1516 static void
valid_cred(void)1517 valid_cred(void)
1518 {
1519 	fido_cred_t *c;
1520 
1521 	c = alloc_cred();
1522 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1523 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1524 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1525 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1526 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1527 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1528 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1529 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1530 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1531 	assert(fido_cred_verify(c) == FIDO_OK);
1532 	assert(fido_cred_prot(c) == 0);
1533 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1534 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1535 	assert(fido_cred_id_len(c) == sizeof(id));
1536 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1537 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1538 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1539 	free_cred(c);
1540 }
1541 
1542 static void
no_cdh(void)1543 no_cdh(void)
1544 {
1545 	fido_cred_t *c;
1546 
1547 	c = alloc_cred();
1548 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1549 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1550 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1551 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1552 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1553 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1554 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1555 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1556 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1557 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1558 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1559 	assert(fido_cred_id_len(c) == sizeof(id));
1560 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1561 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1562 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1563 	free_cred(c);
1564 }
1565 
1566 static void
no_rp_id(void)1567 no_rp_id(void)
1568 {
1569 	fido_cred_t *c;
1570 
1571 	c = alloc_cred();
1572 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1573 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1574 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1575 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1576 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1577 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1578 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1579 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1580 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1581 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1582 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1583 	assert(fido_cred_id_len(c) == sizeof(id));
1584 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1585 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1586 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1587 	free_cred(c);
1588 }
1589 
1590 static void
no_rp_name(void)1591 no_rp_name(void)
1592 {
1593 	fido_cred_t *c;
1594 
1595 	c = alloc_cred();
1596 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1597 	assert(fido_cred_set_rp(c, rp_id, NULL) == FIDO_OK);
1598 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1599 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1600 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1601 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1602 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1603 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1604 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1605 	assert(fido_cred_verify(c) == FIDO_OK);
1606 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1607 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1608 	assert(fido_cred_id_len(c) == sizeof(id));
1609 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1610 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1611 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1612 	free_cred(c);
1613 }
1614 
1615 static void
no_authdata(void)1616 no_authdata(void)
1617 {
1618 	fido_cred_t *c;
1619 	unsigned char *unset;
1620 
1621 	unset = calloc(1, sizeof(aaguid));
1622 	assert(unset != NULL);
1623 
1624 	c = alloc_cred();
1625 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1626 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1627 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1628 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1629 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1630 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1631 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1632 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1633 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1634 	assert(fido_cred_pubkey_len(c) == 0);
1635 	assert(fido_cred_pubkey_ptr(c) == NULL);
1636 	assert(fido_cred_id_len(c) == 0);
1637 	assert(fido_cred_id_ptr(c) == NULL);
1638 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1639 	assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0);
1640 	free_cred(c);
1641 	free(unset);
1642 }
1643 
1644 static void
no_x509(void)1645 no_x509(void)
1646 {
1647 	fido_cred_t *c;
1648 
1649 	c = alloc_cred();
1650 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1651 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1652 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1653 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1654 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1655 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1656 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1657 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1658 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1659 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1660 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1661 	assert(fido_cred_id_len(c) == sizeof(id));
1662 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1663 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1664 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1665 	free_cred(c);
1666 }
1667 
1668 static void
no_sig(void)1669 no_sig(void)
1670 {
1671 	fido_cred_t *c;
1672 
1673 	c = alloc_cred();
1674 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1675 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1676 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1677 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1678 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1679 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1680 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1681 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1682 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1683 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1684 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1685 	assert(fido_cred_id_len(c) == sizeof(id));
1686 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1687 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1688 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1689 	free_cred(c);
1690 }
1691 
1692 static void
no_fmt(void)1693 no_fmt(void)
1694 {
1695 	fido_cred_t *c;
1696 
1697 	c = alloc_cred();
1698 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1699 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1700 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1701 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1702 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1703 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1704 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1705 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1706 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1707 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1708 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1709 	assert(fido_cred_id_len(c) == sizeof(id));
1710 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1711 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1712 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1713 	free_cred(c);
1714 }
1715 
1716 static void
wrong_options(void)1717 wrong_options(void)
1718 {
1719 	fido_cred_t *c;
1720 
1721 	c = alloc_cred();
1722 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1723 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1724 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1725 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1726 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1727 	assert(fido_cred_set_uv(c, FIDO_OPT_TRUE) == FIDO_OK);
1728 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1729 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1730 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1731 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_PARAM);
1732 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1733 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1734 	assert(fido_cred_id_len(c) == sizeof(id));
1735 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1736 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1737 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1738 	free_cred(c);
1739 }
1740 
1741 static void
junk_cdh(void)1742 junk_cdh(void)
1743 {
1744 	fido_cred_t *c;
1745 	unsigned char *junk;
1746 
1747 	junk = malloc(sizeof(cdh));
1748 	assert(junk != NULL);
1749 	memcpy(junk, cdh, sizeof(cdh));
1750 	junk[0] = (unsigned char)~junk[0];
1751 
1752 	c = alloc_cred();
1753 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1754 	assert(fido_cred_set_clientdata_hash(c, junk, sizeof(cdh)) == FIDO_OK);
1755 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1756 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1757 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1758 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1759 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1760 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1761 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1762 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_SIG);
1763 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1764 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1765 	assert(fido_cred_id_len(c) == sizeof(id));
1766 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1767 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1768 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1769 	free_cred(c);
1770 	free(junk);
1771 }
1772 
1773 static void
junk_fmt(void)1774 junk_fmt(void)
1775 {
1776 	fido_cred_t *c;
1777 
1778 	c = alloc_cred();
1779 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1780 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1781 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1782 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1783 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1784 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1785 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1786 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1787 	assert(fido_cred_set_fmt(c, "junk") == FIDO_ERR_INVALID_ARGUMENT);
1788 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1789 	free_cred(c);
1790 }
1791 
1792 static void
junk_rp_id(void)1793 junk_rp_id(void)
1794 {
1795 	fido_cred_t *c;
1796 
1797 	c = alloc_cred();
1798 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1799 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1800 	assert(fido_cred_set_rp(c, "potato", rp_name) == FIDO_OK);
1801 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1802 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1803 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1804 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1805 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1806 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1807 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_PARAM);
1808 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1809 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1810 	assert(fido_cred_id_len(c) == sizeof(id));
1811 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1812 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1813 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1814 	free_cred(c);
1815 }
1816 
1817 static void
junk_rp_name(void)1818 junk_rp_name(void)
1819 {
1820 	fido_cred_t *c;
1821 
1822 	c = alloc_cred();
1823 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1824 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1825 	assert(fido_cred_set_rp(c, rp_id, "potato") == FIDO_OK);
1826 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1827 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1828 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1829 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1830 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1831 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1832 	assert(fido_cred_verify(c) == FIDO_OK);
1833 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1834 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1835 	assert(fido_cred_id_len(c) == sizeof(id));
1836 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1837 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1838 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1839 	free_cred(c);
1840 }
1841 
1842 static void
junk_authdata(void)1843 junk_authdata(void)
1844 {
1845 	fido_cred_t *c;
1846 	unsigned char *junk;
1847 	unsigned char *unset;
1848 
1849 	junk = malloc(sizeof(authdata));
1850 	assert(junk != NULL);
1851 	memcpy(junk, authdata, sizeof(authdata));
1852 	junk[0] = (unsigned char)~junk[0];
1853 
1854 	unset = calloc(1, sizeof(aaguid));
1855 	assert(unset != NULL);
1856 
1857 	c = alloc_cred();
1858 	assert(fido_cred_set_authdata(c, junk,
1859 	    sizeof(authdata)) == FIDO_ERR_INVALID_ARGUMENT);
1860 	assert(fido_cred_authdata_len(c) == 0);
1861 	assert(fido_cred_authdata_ptr(c) == NULL);
1862 	assert(fido_cred_authdata_raw_len(c) == 0);
1863 	assert(fido_cred_authdata_raw_ptr(c) == NULL);
1864 	assert(fido_cred_flags(c) == 0);
1865 	assert(fido_cred_fmt(c) == NULL);
1866 	assert(fido_cred_id_len(c) == 0);
1867 	assert(fido_cred_id_ptr(c) == NULL);
1868 	assert(fido_cred_pubkey_len(c) == 0);
1869 	assert(fido_cred_pubkey_ptr(c) == NULL);
1870 	assert(fido_cred_rp_id(c) == NULL);
1871 	assert(fido_cred_rp_name(c) == NULL);
1872 	assert(fido_cred_sig_len(c) == 0);
1873 	assert(fido_cred_sig_ptr(c) == NULL);
1874 	assert(fido_cred_x5c_len(c) == 0);
1875 	assert(fido_cred_x5c_ptr(c) == NULL);
1876 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1877 	assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0);
1878 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1879 	free_cred(c);
1880 	free(junk);
1881 	free(unset);
1882 }
1883 
1884 static void
junk_sig(void)1885 junk_sig(void)
1886 {
1887 	fido_cred_t *c;
1888 	unsigned char *junk;
1889 
1890 	junk = malloc(sizeof(sig));
1891 	assert(junk != NULL);
1892 	memcpy(junk, sig, sizeof(sig));
1893 	junk[0] = (unsigned char)~junk[0];
1894 
1895 	c = alloc_cred();
1896 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1897 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1898 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1899 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1900 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1901 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1902 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1903 	assert(fido_cred_set_sig(c, junk, sizeof(sig)) == FIDO_OK);
1904 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1905 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_SIG);
1906 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1907 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1908 	assert(fido_cred_id_len(c) == sizeof(id));
1909 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1910 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1911 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1912 	free_cred(c);
1913 	free(junk);
1914 }
1915 
1916 static void
junk_x509(void)1917 junk_x509(void)
1918 {
1919 	fido_cred_t *c;
1920 	unsigned char *junk;
1921 
1922 	junk = malloc(sizeof(x509));
1923 	assert(junk != NULL);
1924 	memcpy(junk, x509, sizeof(x509));
1925 	junk[0] = (unsigned char)~junk[0];
1926 
1927 	c = alloc_cred();
1928 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1929 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1930 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1931 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1932 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1933 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1934 	assert(fido_cred_set_x509(c, junk, sizeof(x509)) == FIDO_OK);
1935 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1936 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1937 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_SIG);
1938 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
1939 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
1940 	assert(fido_cred_id_len(c) == sizeof(id));
1941 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
1942 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1943 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
1944 	free_cred(c);
1945 	free(junk);
1946 }
1947 
1948 /* github issue #6 */
1949 static void
invalid_type(void)1950 invalid_type(void)
1951 {
1952 	fido_cred_t *c;
1953 	unsigned char *unset;
1954 
1955 	unset = calloc(1, sizeof(aaguid));
1956 	assert(unset != NULL);
1957 
1958 	c = alloc_cred();
1959 	assert(fido_cred_set_type(c, COSE_RS256) == FIDO_OK);
1960 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
1961 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
1962 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_ERR_INVALID_ARGUMENT);
1963 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
1964 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
1965 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
1966 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
1967 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
1968 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
1969 	assert(fido_cred_pubkey_len(c) == 0);
1970 	assert(fido_cred_pubkey_ptr(c) == NULL);
1971 	assert(fido_cred_id_len(c) == 0);
1972 	assert(fido_cred_id_ptr(c) == NULL);
1973 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
1974 	assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0);
1975 	free_cred(c);
1976 	free(unset);
1977 }
1978 
1979 /* cbor_serialize_alloc misuse */
1980 static void
bad_cbor_serialize(void)1981 bad_cbor_serialize(void)
1982 {
1983 	fido_cred_t *c;
1984 
1985 	c = alloc_cred();
1986 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1987 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
1988 	assert(fido_cred_authdata_len(c) == sizeof(authdata));
1989 	free_cred(c);
1990 }
1991 
1992 static void
duplicate_keys(void)1993 duplicate_keys(void)
1994 {
1995 	fido_cred_t *c;
1996 
1997 	c = alloc_cred();
1998 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
1999 	assert(fido_cred_set_authdata(c, authdata_dupkeys,
2000 	    sizeof(authdata_dupkeys)) == FIDO_ERR_INVALID_ARGUMENT);
2001 	free_cred(c);
2002 }
2003 
2004 static void
unsorted_keys(void)2005 unsorted_keys(void)
2006 {
2007 	fido_cred_t *c;
2008 
2009 	c = alloc_cred();
2010 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
2011 	assert(fido_cred_set_authdata(c, authdata_unsorted_keys,
2012 	    sizeof(authdata_unsorted_keys)) == FIDO_ERR_INVALID_ARGUMENT);
2013 	free_cred(c);
2014 }
2015 
2016 static void
wrong_credprot(void)2017 wrong_credprot(void)
2018 {
2019 	fido_cred_t *c;
2020 
2021 	c = alloc_cred();
2022 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
2023 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
2024 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
2025 	assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
2026 	assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
2027 	assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
2028 	assert(fido_cred_set_prot(c, FIDO_CRED_PROT_UV_OPTIONAL_WITH_ID) == FIDO_OK);
2029 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
2030 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_PARAM);
2031 	free_cred(c);
2032 }
2033 
2034 static void
raw_authdata(void)2035 raw_authdata(void)
2036 {
2037 	fido_cred_t *c;
2038 	cbor_item_t *item;
2039 	struct cbor_load_result cbor_result;
2040 	const unsigned char *ptr;
2041 	unsigned char *cbor;
2042 	size_t len;
2043 	size_t cbor_len;
2044 	size_t alloclen;
2045 
2046 	c = alloc_cred();
2047 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
2048 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
2049 	assert((ptr = fido_cred_authdata_ptr(c)) != NULL);
2050 	assert((len = fido_cred_authdata_len(c)) != 0);
2051 	assert((item = cbor_load(ptr, len, &cbor_result)) != NULL);
2052 	assert(cbor_result.read == len);
2053 	assert(cbor_isa_bytestring(item));
2054 	assert((ptr = fido_cred_authdata_raw_ptr(c)) != NULL);
2055 	assert((len = fido_cred_authdata_raw_len(c)) != 0);
2056 	assert(cbor_bytestring_length(item) == len);
2057 	assert(memcmp(ptr, cbor_bytestring_handle(item), len) == 0);
2058 	assert((len = fido_cred_authdata_len(c)) != 0);
2059 	assert((cbor_len = cbor_serialize_alloc(item, &cbor, &alloclen)) == len);
2060 	assert((ptr = cbor_bytestring_handle(item)) != NULL);
2061 	assert((len = cbor_bytestring_length(item)) != 0);
2062 	assert(fido_cred_set_authdata_raw(c, ptr, len) == FIDO_OK);
2063 	assert((ptr = fido_cred_authdata_ptr(c)) != NULL);
2064 	assert((len = fido_cred_authdata_len(c)) != 0);
2065 	assert(len == cbor_len);
2066 	assert(memcmp(cbor, ptr, len) == 0);
2067 	assert(cbor_len == sizeof(authdata));
2068 	assert(memcmp(cbor, authdata, cbor_len) == 0);
2069 	cbor_decref(&item);
2070 	free(cbor);
2071 	free_cred(c);
2072 }
2073 
2074 static void
fmt_none(void)2075 fmt_none(void)
2076 {
2077 	fido_cred_t *c;
2078 
2079 	c = alloc_cred();
2080 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
2081 	assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
2082 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
2083 	assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
2084 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
2085 	assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK);
2086 	assert(fido_cred_set_fmt(c, "none") == FIDO_OK);
2087 	assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
2088 	assert(fido_cred_prot(c) == 0);
2089 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
2090 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
2091 	assert(fido_cred_id_len(c) == sizeof(id));
2092 	assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
2093 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
2094 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
2095 	free_cred(c);
2096 }
2097 
2098 static void
valid_tpm_rs256_cred(bool xfail)2099 valid_tpm_rs256_cred(bool xfail)
2100 {
2101 	fido_cred_t *c;
2102 
2103 	c = alloc_cred();
2104 	assert(fido_cred_set_type(c, COSE_RS256) == FIDO_OK);
2105 	assert(fido_cred_set_clientdata(c, cdh, sizeof(cdh)) == FIDO_OK);
2106 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
2107 	assert(fido_cred_set_authdata(c, authdata_tpm_rs256, sizeof(authdata_tpm_rs256)) == FIDO_OK);
2108 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
2109 	assert(fido_cred_set_uv(c, FIDO_OPT_TRUE) == FIDO_OK);
2110 	assert(fido_cred_set_fmt(c, "tpm") == FIDO_OK);
2111 	assert(fido_cred_set_attstmt(c, attstmt_tpm_rs256, sizeof(attstmt_tpm_rs256)) == FIDO_OK);
2112 	// XXX: RHEL9 has deprecated SHA-1 for signing.
2113 	assert(fido_cred_verify(c) == (xfail ? FIDO_ERR_INVALID_SIG : FIDO_OK));
2114 	assert(fido_cred_prot(c) == 0);
2115 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey_tpm_rs256));
2116 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey_tpm_rs256, sizeof(pubkey_tpm_rs256)) == 0);
2117 	assert(fido_cred_id_len(c) == sizeof(id_tpm_rs256));
2118 	assert(memcmp(fido_cred_id_ptr(c), id_tpm_rs256, sizeof(id_tpm_rs256)) == 0);
2119 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid_tpm));
2120 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid_tpm, sizeof(aaguid_tpm)) == 0);
2121 	free_cred(c);
2122 }
2123 
2124 static void
valid_tpm_es256_cred(bool xfail)2125 valid_tpm_es256_cred(bool xfail)
2126 {
2127 	fido_cred_t *c;
2128 
2129 	c = alloc_cred();
2130 	assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
2131 	assert(fido_cred_set_clientdata(c, cdh, sizeof(cdh)) == FIDO_OK);
2132 	assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
2133 	assert(fido_cred_set_authdata(c, authdata_tpm_es256, sizeof(authdata_tpm_es256)) == FIDO_OK);
2134 	assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK);
2135 	assert(fido_cred_set_uv(c, FIDO_OPT_TRUE) == FIDO_OK);
2136 	assert(fido_cred_set_fmt(c, "tpm") == FIDO_OK);
2137 	assert(fido_cred_set_attstmt(c, attstmt_tpm_es256, sizeof(attstmt_tpm_es256)) == FIDO_OK);
2138 	// XXX: RHEL9 has deprecated SHA-1 for signing.
2139 	assert(fido_cred_verify(c) == (xfail ? FIDO_ERR_INVALID_SIG : FIDO_OK));
2140 	assert(fido_cred_prot(c) == 0);
2141 	assert(fido_cred_pubkey_len(c) == sizeof(pubkey_tpm_es256));
2142 	assert(memcmp(fido_cred_pubkey_ptr(c), pubkey_tpm_es256, sizeof(pubkey_tpm_es256)) == 0);
2143 	assert(fido_cred_id_len(c) == sizeof(id_tpm_es256));
2144 	assert(memcmp(fido_cred_id_ptr(c), id_tpm_es256, sizeof(id_tpm_es256)) == 0);
2145 	assert(fido_cred_aaguid_len(c) == sizeof(aaguid_tpm));
2146 	assert(memcmp(fido_cred_aaguid_ptr(c), aaguid_tpm, sizeof(aaguid_tpm)) == 0);
2147 	free_cred(c);
2148 }
2149 
2150 int
main(void)2151 main(void)
2152 {
2153 	bool xfail = getenv("FIDO_REGRESS_RS1_XFAIL") != NULL;
2154 
2155 	fido_init(0);
2156 
2157 	empty_cred();
2158 	valid_cred();
2159 	no_cdh();
2160 	no_rp_id();
2161 	no_rp_name();
2162 	no_authdata();
2163 	no_x509();
2164 	no_sig();
2165 	no_fmt();
2166 	junk_cdh();
2167 	junk_fmt();
2168 	junk_rp_id();
2169 	junk_rp_name();
2170 	junk_authdata();
2171 	junk_x509();
2172 	junk_sig();
2173 	wrong_options();
2174 	invalid_type();
2175 	bad_cbor_serialize();
2176 	duplicate_keys();
2177 	unsorted_keys();
2178 	wrong_credprot();
2179 	raw_authdata();
2180 	fmt_none();
2181 	valid_tpm_rs256_cred(xfail);
2182 	valid_tpm_es256_cred(xfail);
2183 
2184 	exit(0);
2185 }
2186