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