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