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