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 */ 6 7 #include <assert.h> 8 #include <cbor.h> 9 #include <fido.h> 10 #include <string.h> 11 12 #define FAKE_DEV_HANDLE ((void *)0xdeadbeef) 13 14 static const unsigned char cdh[32] = { 15 0xf9, 0x64, 0x57, 0xe7, 0x2d, 0x97, 0xf6, 0xbb, 16 0xdd, 0xd7, 0xfb, 0x06, 0x37, 0x62, 0xea, 0x26, 17 0x20, 0x44, 0x8e, 0x69, 0x7c, 0x03, 0xf2, 0x31, 18 0x2f, 0x99, 0xdc, 0xaf, 0x3e, 0x8a, 0x91, 0x6b, 19 }; 20 21 static const unsigned char authdata[198] = { 22 0x58, 0xc4, 0x49, 0x96, 0x0d, 0xe5, 0x88, 0x0e, 23 0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 0x76, 24 0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 0x86, 25 0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 0x1d, 26 0x97, 0x63, 0x41, 0x00, 0x00, 0x00, 0x00, 0xf8, 27 0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, 0x80, 28 0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, 0x00, 29 0x40, 0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde, 30 0xc5, 0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d, 31 0x53, 0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e, 32 0x7f, 0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda, 33 0x68, 0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83, 34 0x2c, 0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76, 35 0x90, 0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6, 36 0x3c, 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f, 37 0x25, 0xa5, 0x01, 0x02, 0x03, 0x26, 0x20, 0x01, 38 0x21, 0x58, 0x20, 0x17, 0x5b, 0x27, 0xa6, 0x56, 39 0xb2, 0x26, 0x0c, 0x26, 0x0c, 0x55, 0x42, 0x78, 40 0x17, 0x5d, 0x4c, 0xf8, 0xa2, 0xfd, 0x1b, 0xb9, 41 0x54, 0xdf, 0xd5, 0xeb, 0xbf, 0x22, 0x64, 0xf5, 42 0x21, 0x9a, 0xc6, 0x22, 0x58, 0x20, 0x87, 0x5f, 43 0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f, 0xeb, 0xe3, 44 0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6, 0x1c, 0x31, 45 0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1, 0xfe, 0x5d, 46 0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2, 47 }; 48 49 static const unsigned char authdata_dupkeys[200] = { 50 0x58, 0xc6, 0x49, 0x96, 0x0d, 0xe5, 0x88, 0x0e, 51 0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 0x76, 52 0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 0x86, 53 0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 0x1d, 54 0x97, 0x63, 0x41, 0x00, 0x00, 0x00, 0x00, 0xf8, 55 0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, 0x80, 56 0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, 0x00, 57 0x40, 0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde, 58 0xc5, 0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d, 59 0x53, 0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e, 60 0x7f, 0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda, 61 0x68, 0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83, 62 0x2c, 0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76, 63 0x90, 0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6, 64 0x3c, 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f, 65 0x25, 0xa6, 0x01, 0x02, 0x01, 0x02, 0x03, 0x26, 66 0x20, 0x01, 0x21, 0x58, 0x20, 0x17, 0x5b, 0x27, 67 0xa6, 0x56, 0xb2, 0x26, 0x0c, 0x26, 0x0c, 0x55, 68 0x42, 0x78, 0x17, 0x5d, 0x4c, 0xf8, 0xa2, 0xfd, 69 0x1b, 0xb9, 0x54, 0xdf, 0xd5, 0xeb, 0xbf, 0x22, 70 0x64, 0xf5, 0x21, 0x9a, 0xc6, 0x22, 0x58, 0x20, 71 0x87, 0x5f, 0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f, 72 0xeb, 0xe3, 0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6, 73 0x1c, 0x31, 0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1, 74 0xfe, 0x5d, 0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2, 75 }; 76 77 static const unsigned char authdata_unsorted_keys[198] = { 78 0x58, 0xc4, 0x49, 0x96, 0x0d, 0xe5, 0x88, 0x0e, 79 0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 0x76, 80 0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 0x86, 81 0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 0x1d, 82 0x97, 0x63, 0x41, 0x00, 0x00, 0x00, 0x00, 0xf8, 83 0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, 0x80, 84 0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, 0x00, 85 0x40, 0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde, 86 0xc5, 0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d, 87 0x53, 0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e, 88 0x7f, 0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda, 89 0x68, 0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83, 90 0x2c, 0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76, 91 0x90, 0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6, 92 0x3c, 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f, 93 0x25, 0xa5, 0x03, 0x26, 0x01, 0x02, 0x20, 0x01, 94 0x21, 0x58, 0x20, 0x17, 0x5b, 0x27, 0xa6, 0x56, 95 0xb2, 0x26, 0x0c, 0x26, 0x0c, 0x55, 0x42, 0x78, 96 0x17, 0x5d, 0x4c, 0xf8, 0xa2, 0xfd, 0x1b, 0xb9, 97 0x54, 0xdf, 0xd5, 0xeb, 0xbf, 0x22, 0x64, 0xf5, 98 0x21, 0x9a, 0xc6, 0x22, 0x58, 0x20, 0x87, 0x5f, 99 0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f, 0xeb, 0xe3, 100 0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6, 0x1c, 0x31, 101 0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1, 0xfe, 0x5d, 102 0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2, 103 }; 104 105 const unsigned char authdata_tpm[362] = { 106 0x59, 0x01, 0x67, 0x49, 0x96, 0x0d, 0xe5, 0x88, 107 0x0e, 0x8c, 0x68, 0x74, 0x34, 0x17, 0x0f, 0x64, 108 0x76, 0x60, 0x5b, 0x8f, 0xe4, 0xae, 0xb9, 0xa2, 109 0x86, 0x32, 0xc7, 0x99, 0x5c, 0xf3, 0xba, 0x83, 110 0x1d, 0x97, 0x63, 0x45, 0x00, 0x00, 0x00, 0x00, 111 0x08, 0x98, 0x70, 0x58, 0xca, 0xdc, 0x4b, 0x81, 112 0xb6, 0xe1, 0x30, 0xde, 0x50, 0xdc, 0xbe, 0x96, 113 0x00, 0x20, 0x89, 0x99, 0x6d, 0x5a, 0x00, 0x29, 114 0xe5, 0x3e, 0x6a, 0x1c, 0x72, 0x6d, 0x71, 0x4a, 115 0x4f, 0x03, 0x9b, 0x68, 0x17, 0xdb, 0x29, 0x1a, 116 0x6b, 0x02, 0x6c, 0x26, 0xf9, 0xbd, 0xc3, 0x0e, 117 0x38, 0x1a, 0xa4, 0x01, 0x03, 0x03, 0x39, 0x01, 118 0x00, 0x20, 0x59, 0x01, 0x00, 0xc5, 0xb6, 0x9c, 119 0x06, 0x1d, 0xcf, 0xb9, 0xf2, 0x5e, 0x99, 0x7d, 120 0x6d, 0x73, 0xd8, 0x36, 0xc1, 0x4a, 0x90, 0x05, 121 0x4d, 0x82, 0x57, 0xc1, 0xb6, 0x6a, 0xd1, 0x43, 122 0x03, 0x85, 0xf8, 0x52, 0x4f, 0xd2, 0x27, 0x91, 123 0x0b, 0xb5, 0x93, 0xa0, 0x68, 0xf8, 0x80, 0x1b, 124 0xaa, 0x65, 0x97, 0x45, 0x11, 0x86, 0x34, 0xd6, 125 0x67, 0xf8, 0xd5, 0x12, 0x79, 0x84, 0xee, 0x70, 126 0x99, 0x00, 0x63, 0xa8, 0xb4, 0x43, 0x0b, 0x4c, 127 0x57, 0x4a, 0xd6, 0x9b, 0x75, 0x63, 0x8a, 0x46, 128 0x57, 0xdb, 0x14, 0xc8, 0x71, 0xd1, 0xb3, 0x07, 129 0x68, 0x58, 0xbc, 0x55, 0x84, 0x80, 0x2a, 0xd2, 130 0x36, 0x9f, 0xc1, 0x64, 0xa0, 0x11, 0x4b, 0xc9, 131 0x32, 0x31, 0x3a, 0xd6, 0x87, 0x26, 0x1a, 0x3a, 132 0x78, 0x3d, 0x89, 0xdb, 0x00, 0x28, 0x3b, 0xae, 133 0x2b, 0x1b, 0x56, 0xe2, 0x8c, 0x4c, 0x63, 0xac, 134 0x6e, 0x6c, 0xf7, 0xb5, 0x7d, 0x4d, 0x0b, 0x9f, 135 0x06, 0xa0, 0x10, 0x35, 0x38, 0x20, 0x4d, 0xcc, 136 0x07, 0xd7, 0x00, 0x4e, 0x86, 0xba, 0xfe, 0x8b, 137 0xe4, 0x3f, 0x4a, 0xd6, 0xca, 0xbf, 0x67, 0x40, 138 0x1a, 0xa4, 0xda, 0x82, 0x52, 0x15, 0xb8, 0x14, 139 0x3a, 0x7c, 0xa9, 0x02, 0xc1, 0x01, 0x69, 0xc6, 140 0x51, 0xd4, 0xbc, 0x1f, 0x95, 0xb2, 0xee, 0x1f, 141 0xdd, 0xb5, 0x73, 0x16, 0x5e, 0x29, 0x3f, 0x47, 142 0xac, 0x65, 0xfb, 0x63, 0x5c, 0xb9, 0xc8, 0x13, 143 0x2d, 0xec, 0x85, 0xde, 0x71, 0x0d, 0x84, 0x93, 144 0x74, 0x76, 0x91, 0xdd, 0x1d, 0x6d, 0x3d, 0xc7, 145 0x36, 0x19, 0x19, 0x86, 0xde, 0x7c, 0xca, 0xd6, 146 0xc6, 0x65, 0x7e, 0x4b, 0x24, 0x9c, 0xce, 0x92, 147 0x6b, 0x1c, 0xe0, 0xa0, 0xa9, 0x6c, 0xc3, 0xed, 148 0x4f, 0x2a, 0x54, 0x07, 0x00, 0x32, 0x5e, 0x1b, 149 0x94, 0x37, 0xcd, 0xe2, 0x32, 0xa8, 0xd5, 0x2c, 150 0xfb, 0x03, 0x9d, 0x79, 0xdf, 0x21, 0x43, 0x01, 151 0x00, 0x01 152 }; 153 154 static const unsigned char x509[742] = { 155 0x30, 0x82, 0x02, 0xe2, 0x30, 0x81, 0xcb, 0x02, 156 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 157 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 158 0x00, 0x30, 0x1d, 0x31, 0x1b, 0x30, 0x19, 0x06, 159 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x59, 0x75, 160 0x62, 0x69, 0x63, 0x6f, 0x20, 0x55, 0x32, 0x46, 161 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x41, 162 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x35, 163 0x31, 0x35, 0x31, 0x32, 0x35, 0x38, 0x35, 0x34, 164 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x36, 0x31, 165 0x34, 0x31, 0x32, 0x35, 0x38, 0x35, 0x34, 0x5a, 166 0x30, 0x1d, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 167 0x55, 0x04, 0x03, 0x13, 0x12, 0x59, 0x75, 0x62, 168 0x69, 0x63, 0x6f, 0x20, 0x55, 0x32, 0x46, 0x20, 169 0x54, 0x65, 0x73, 0x74, 0x20, 0x45, 0x45, 0x30, 170 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 171 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 172 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 173 0x00, 0x04, 0xdb, 0x0a, 0xdb, 0xf5, 0x21, 0xc7, 174 0x5c, 0xce, 0x63, 0xdc, 0xa6, 0xe1, 0xe8, 0x25, 175 0x06, 0x0d, 0x94, 0xe6, 0x27, 0x54, 0x19, 0x4f, 176 0x9d, 0x24, 0xaf, 0x26, 0x1a, 0xbe, 0xad, 0x99, 177 0x44, 0x1f, 0x95, 0xa3, 0x71, 0x91, 0x0a, 0x3a, 178 0x20, 0xe7, 0x3e, 0x91, 0x5e, 0x13, 0xe8, 0xbe, 179 0x38, 0x05, 0x7a, 0xd5, 0x7a, 0xa3, 0x7e, 0x76, 180 0x90, 0x8f, 0xaf, 0xe2, 0x8a, 0x94, 0xb6, 0x30, 181 0xeb, 0x9d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 182 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 183 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x95, 0x40, 184 0x6b, 0x50, 0x61, 0x7d, 0xad, 0x84, 0xa3, 0xb4, 185 0xeb, 0x88, 0x0f, 0xe3, 0x30, 0x0f, 0x2d, 0xa2, 186 0x0a, 0x00, 0xd9, 0x25, 0x04, 0xee, 0x72, 0xfa, 187 0x67, 0xdf, 0x58, 0x51, 0x0f, 0x0b, 0x47, 0x02, 188 0x9c, 0x3e, 0x41, 0x29, 0x4a, 0x93, 0xac, 0x29, 189 0x85, 0x89, 0x2d, 0xa4, 0x7a, 0x81, 0x32, 0x28, 190 0x57, 0x71, 0x01, 0xef, 0xa8, 0x42, 0x88, 0x16, 191 0x96, 0x37, 0x91, 0xd5, 0xdf, 0xe0, 0x8f, 0xc9, 192 0x3c, 0x8d, 0xb0, 0xcd, 0x89, 0x70, 0x82, 0xec, 193 0x79, 0xd3, 0xc6, 0x78, 0x73, 0x29, 0x32, 0xe5, 194 0xab, 0x6c, 0xbd, 0x56, 0x9f, 0xd5, 0x45, 0x91, 195 0xce, 0xc1, 0xdd, 0x8d, 0x64, 0xdc, 0xe9, 0x9c, 196 0x1f, 0x5e, 0x3c, 0xd2, 0xaf, 0x51, 0xa5, 0x82, 197 0x18, 0xaf, 0xe0, 0x37, 0xe7, 0x32, 0x9e, 0x76, 198 0x05, 0x77, 0x02, 0x7b, 0xe6, 0x24, 0xa0, 0x31, 199 0x56, 0x1b, 0xfd, 0x19, 0xc5, 0x71, 0xd3, 0xf0, 200 0x9e, 0xc0, 0x73, 0x05, 0x4e, 0xbc, 0x85, 0xb8, 201 0x53, 0x9e, 0xef, 0xc5, 0xbc, 0x9c, 0x56, 0xa3, 202 0xba, 0xd9, 0x27, 0x6a, 0xbb, 0xa9, 0x7a, 0x40, 203 0xd7, 0x47, 0x8b, 0x55, 0x72, 0x6b, 0xe3, 0xfe, 204 0x28, 0x49, 0x71, 0x24, 0xf4, 0x8f, 0xf4, 0x20, 205 0x81, 0xea, 0x38, 0xff, 0x7c, 0x0a, 0x4f, 0xdf, 206 0x02, 0x82, 0x39, 0x81, 0x82, 0x3b, 0xca, 0x09, 207 0xdd, 0xca, 0xaa, 0x0f, 0x27, 0xf5, 0xa4, 0x83, 208 0x55, 0x6c, 0x9a, 0x39, 0x9b, 0x15, 0x3a, 0x16, 209 0x63, 0xdc, 0x5b, 0xf9, 0xac, 0x5b, 0xbc, 0xf7, 210 0x9f, 0xbe, 0x0f, 0x8a, 0xa2, 0x3c, 0x31, 0x13, 211 0xa3, 0x32, 0x48, 0xca, 0x58, 0x87, 0xf8, 0x7b, 212 0xa0, 0xa1, 0x0a, 0x6a, 0x60, 0x96, 0x93, 0x5f, 213 0x5d, 0x26, 0x9e, 0x63, 0x1d, 0x09, 0xae, 0x9a, 214 0x41, 0xe5, 0xbd, 0x08, 0x47, 0xfe, 0xe5, 0x09, 215 0x9b, 0x20, 0xfd, 0x12, 0xe2, 0xe6, 0x40, 0x7f, 216 0xba, 0x4a, 0x61, 0x33, 0x66, 0x0d, 0x0e, 0x73, 217 0xdb, 0xb0, 0xd5, 0xa2, 0x9a, 0x9a, 0x17, 0x0d, 218 0x34, 0x30, 0x85, 0x6a, 0x42, 0x46, 0x9e, 0xff, 219 0x34, 0x8f, 0x5f, 0x87, 0x6c, 0x35, 0xe7, 0xa8, 220 0x4d, 0x35, 0xeb, 0xc1, 0x41, 0xaa, 0x8a, 0xd2, 221 0xda, 0x19, 0xaa, 0x79, 0xa2, 0x5f, 0x35, 0x2c, 222 0xa0, 0xfd, 0x25, 0xd3, 0xf7, 0x9d, 0x25, 0x18, 223 0x2d, 0xfa, 0xb4, 0xbc, 0xbb, 0x07, 0x34, 0x3c, 224 0x8d, 0x81, 0xbd, 0xf4, 0xe9, 0x37, 0xdb, 0x39, 225 0xe9, 0xd1, 0x45, 0x5b, 0x20, 0x41, 0x2f, 0x2d, 226 0x27, 0x22, 0xdc, 0x92, 0x74, 0x8a, 0x92, 0xd5, 227 0x83, 0xfd, 0x09, 0xfb, 0x13, 0x9b, 0xe3, 0x39, 228 0x7a, 0x6b, 0x5c, 0xfa, 0xe6, 0x76, 0x9e, 0xe0, 229 0xe4, 0xe3, 0xef, 0xad, 0xbc, 0xfd, 0x42, 0x45, 230 0x9a, 0xd4, 0x94, 0xd1, 0x7e, 0x8d, 0xa7, 0xd8, 231 0x05, 0xd5, 0xd3, 0x62, 0xcf, 0x15, 0xcf, 0x94, 232 0x7d, 0x1f, 0x5b, 0x58, 0x20, 0x44, 0x20, 0x90, 233 0x71, 0xbe, 0x66, 0xe9, 0x9a, 0xab, 0x74, 0x32, 234 0x70, 0x53, 0x1d, 0x69, 0xed, 0x87, 0x66, 0xf4, 235 0x09, 0x4f, 0xca, 0x25, 0x30, 0xc2, 0x63, 0x79, 236 0x00, 0x3c, 0xb1, 0x9b, 0x39, 0x3f, 0x00, 0xe0, 237 0xa8, 0x88, 0xef, 0x7a, 0x51, 0x5b, 0xe7, 0xbd, 238 0x49, 0x64, 0xda, 0x41, 0x7b, 0x24, 0xc3, 0x71, 239 0x22, 0xfd, 0xd1, 0xd1, 0x20, 0xb3, 0x3f, 0x97, 240 0xd3, 0x97, 0xb2, 0xaa, 0x18, 0x1c, 0x9e, 0x03, 241 0x77, 0x7b, 0x5b, 0x7e, 0xf9, 0xa3, 0xa0, 0xd6, 242 0x20, 0x81, 0x2c, 0x38, 0x8f, 0x9d, 0x25, 0xde, 243 0xe9, 0xc8, 0xf5, 0xdd, 0x6a, 0x47, 0x9c, 0x65, 244 0x04, 0x5a, 0x56, 0xe6, 0xc2, 0xeb, 0xf2, 0x02, 245 0x97, 0xe1, 0xb9, 0xd8, 0xe1, 0x24, 0x76, 0x9f, 246 0x23, 0x62, 0x39, 0x03, 0x4b, 0xc8, 0xf7, 0x34, 247 0x07, 0x49, 0xd6, 0xe7, 0x4d, 0x9a, 248 }; 249 250 const unsigned char sig[70] = { 251 0x30, 0x44, 0x02, 0x20, 0x54, 0x92, 0x28, 0x3b, 252 0x83, 0x33, 0x47, 0x56, 0x68, 0x79, 0xb2, 0x0c, 253 0x84, 0x80, 0xcc, 0x67, 0x27, 0x8b, 0xfa, 0x48, 254 0x43, 0x0d, 0x3c, 0xb4, 0x02, 0x36, 0x87, 0x97, 255 0x3e, 0xdf, 0x2f, 0x65, 0x02, 0x20, 0x1b, 0x56, 256 0x17, 0x06, 0xe2, 0x26, 0x0f, 0x6a, 0xe9, 0xa9, 257 0x70, 0x99, 0x62, 0xeb, 0x3a, 0x04, 0x1a, 0xc4, 258 0xa7, 0x03, 0x28, 0x56, 0x7c, 0xed, 0x47, 0x08, 259 0x68, 0x73, 0x6a, 0xb6, 0x89, 0x0d, 260 }; 261 262 const unsigned char pubkey[64] = { 263 0x17, 0x5b, 0x27, 0xa6, 0x56, 0xb2, 0x26, 0x0c, 264 0x26, 0x0c, 0x55, 0x42, 0x78, 0x17, 0x5d, 0x4c, 265 0xf8, 0xa2, 0xfd, 0x1b, 0xb9, 0x54, 0xdf, 0xd5, 266 0xeb, 0xbf, 0x22, 0x64, 0xf5, 0x21, 0x9a, 0xc6, 267 0x87, 0x5f, 0x90, 0xe6, 0xfd, 0x71, 0x27, 0x9f, 268 0xeb, 0xe3, 0x03, 0x44, 0xbc, 0x8d, 0x49, 0xc6, 269 0x1c, 0x31, 0x3b, 0x72, 0xae, 0xd4, 0x53, 0xb1, 270 0xfe, 0x5d, 0xe1, 0x30, 0xfc, 0x2b, 0x1e, 0xd2, 271 }; 272 273 const unsigned char pubkey_tpm[259] = { 274 0xc5, 0xb6, 0x9c, 0x06, 0x1d, 0xcf, 0xb9, 0xf2, 275 0x5e, 0x99, 0x7d, 0x6d, 0x73, 0xd8, 0x36, 0xc1, 276 0x4a, 0x90, 0x05, 0x4d, 0x82, 0x57, 0xc1, 0xb6, 277 0x6a, 0xd1, 0x43, 0x03, 0x85, 0xf8, 0x52, 0x4f, 278 0xd2, 0x27, 0x91, 0x0b, 0xb5, 0x93, 0xa0, 0x68, 279 0xf8, 0x80, 0x1b, 0xaa, 0x65, 0x97, 0x45, 0x11, 280 0x86, 0x34, 0xd6, 0x67, 0xf8, 0xd5, 0x12, 0x79, 281 0x84, 0xee, 0x70, 0x99, 0x00, 0x63, 0xa8, 0xb4, 282 0x43, 0x0b, 0x4c, 0x57, 0x4a, 0xd6, 0x9b, 0x75, 283 0x63, 0x8a, 0x46, 0x57, 0xdb, 0x14, 0xc8, 0x71, 284 0xd1, 0xb3, 0x07, 0x68, 0x58, 0xbc, 0x55, 0x84, 285 0x80, 0x2a, 0xd2, 0x36, 0x9f, 0xc1, 0x64, 0xa0, 286 0x11, 0x4b, 0xc9, 0x32, 0x31, 0x3a, 0xd6, 0x87, 287 0x26, 0x1a, 0x3a, 0x78, 0x3d, 0x89, 0xdb, 0x00, 288 0x28, 0x3b, 0xae, 0x2b, 0x1b, 0x56, 0xe2, 0x8c, 289 0x4c, 0x63, 0xac, 0x6e, 0x6c, 0xf7, 0xb5, 0x7d, 290 0x4d, 0x0b, 0x9f, 0x06, 0xa0, 0x10, 0x35, 0x38, 291 0x20, 0x4d, 0xcc, 0x07, 0xd7, 0x00, 0x4e, 0x86, 292 0xba, 0xfe, 0x8b, 0xe4, 0x3f, 0x4a, 0xd6, 0xca, 293 0xbf, 0x67, 0x40, 0x1a, 0xa4, 0xda, 0x82, 0x52, 294 0x15, 0xb8, 0x14, 0x3a, 0x7c, 0xa9, 0x02, 0xc1, 295 0x01, 0x69, 0xc6, 0x51, 0xd4, 0xbc, 0x1f, 0x95, 296 0xb2, 0xee, 0x1f, 0xdd, 0xb5, 0x73, 0x16, 0x5e, 297 0x29, 0x3f, 0x47, 0xac, 0x65, 0xfb, 0x63, 0x5c, 298 0xb9, 0xc8, 0x13, 0x2d, 0xec, 0x85, 0xde, 0x71, 299 0x0d, 0x84, 0x93, 0x74, 0x76, 0x91, 0xdd, 0x1d, 300 0x6d, 0x3d, 0xc7, 0x36, 0x19, 0x19, 0x86, 0xde, 301 0x7c, 0xca, 0xd6, 0xc6, 0x65, 0x7e, 0x4b, 0x24, 302 0x9c, 0xce, 0x92, 0x6b, 0x1c, 0xe0, 0xa0, 0xa9, 303 0x6c, 0xc3, 0xed, 0x4f, 0x2a, 0x54, 0x07, 0x00, 304 0x32, 0x5e, 0x1b, 0x94, 0x37, 0xcd, 0xe2, 0x32, 305 0xa8, 0xd5, 0x2c, 0xfb, 0x03, 0x9d, 0x79, 0xdf, 306 0x01, 0x00, 0x01, 307 }; 308 309 const unsigned char id[64] = { 310 0x53, 0xfb, 0xdf, 0xaa, 0xce, 0x63, 0xde, 0xc5, 311 0xfe, 0x47, 0xe6, 0x52, 0xeb, 0xf3, 0x5d, 0x53, 312 0xa8, 0xbf, 0x9d, 0xd6, 0x09, 0x6b, 0x5e, 0x7f, 313 0xe0, 0x0d, 0x51, 0x30, 0x85, 0x6a, 0xda, 0x68, 314 0x70, 0x85, 0xb0, 0xdb, 0x08, 0x0b, 0x83, 0x2c, 315 0xef, 0x44, 0xe2, 0x36, 0x88, 0xee, 0x76, 0x90, 316 0x6e, 0x7b, 0x50, 0x3e, 0x9a, 0xa0, 0xd6, 0x3c, 317 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f, 0x25, 318 }; 319 320 const unsigned char id_tpm[32] = { 321 0x89, 0x99, 0x6d, 0x5a, 0x00, 0x29, 0xe5, 0x3e, 322 0x6a, 0x1c, 0x72, 0x6d, 0x71, 0x4a, 0x4f, 0x03, 323 0x9b, 0x68, 0x17, 0xdb, 0x29, 0x1a, 0x6b, 0x02, 324 0x6c, 0x26, 0xf9, 0xbd, 0xc3, 0x0e, 0x38, 0x1a 325 }; 326 327 const unsigned char attstmt_tpm[4034] = { 328 0xa6, 0x63, 0x61, 0x6c, 0x67, 0x39, 0xff, 0xfe, 329 0x63, 0x73, 0x69, 0x67, 0x59, 0x01, 0x00, 0x1c, 330 0x09, 0x0d, 0x35, 0x97, 0x22, 0xfc, 0xfe, 0xc0, 331 0x58, 0x49, 0x9e, 0xd4, 0x7e, 0x6a, 0x7d, 0xdb, 332 0x6d, 0x20, 0x95, 0x5c, 0x0b, 0xd0, 0xd5, 0x72, 333 0x4f, 0x15, 0x22, 0x38, 0x97, 0xb2, 0x4b, 0xd0, 334 0xef, 0x31, 0x7c, 0xf2, 0x42, 0x19, 0x41, 0xa1, 335 0xe2, 0xc5, 0xca, 0xc6, 0x74, 0x95, 0xcf, 0xf9, 336 0x41, 0x75, 0x0b, 0x56, 0x39, 0x82, 0x78, 0xf6, 337 0x59, 0xf1, 0x09, 0x96, 0x9e, 0x38, 0x7f, 0x14, 338 0x9b, 0xf5, 0x36, 0xbb, 0x92, 0x32, 0xc4, 0x64, 339 0xe8, 0xff, 0xb4, 0xc7, 0xcf, 0xcd, 0x17, 0x48, 340 0x0f, 0x83, 0xd9, 0x44, 0x03, 0x35, 0x26, 0xad, 341 0x01, 0xb7, 0x57, 0x06, 0xb3, 0x9c, 0xa0, 0x6e, 342 0x2f, 0x58, 0xcb, 0x5c, 0xaa, 0x7c, 0xea, 0x7e, 343 0x3f, 0xbc, 0x76, 0xc9, 0x0e, 0x52, 0x39, 0x81, 344 0xa9, 0x9e, 0x37, 0x14, 0x1f, 0x50, 0x6a, 0x4f, 345 0xd7, 0xfc, 0xd4, 0xfa, 0xf2, 0x18, 0x60, 0xd5, 346 0xc3, 0x57, 0x7d, 0x6d, 0x05, 0x28, 0x25, 0xc3, 347 0xde, 0x86, 0x85, 0x06, 0x71, 0xfb, 0x84, 0xa2, 348 0x07, 0xb6, 0x77, 0xc9, 0x68, 0x41, 0x53, 0x32, 349 0x4c, 0xa8, 0x4b, 0xf7, 0x08, 0x84, 0x62, 0x6c, 350 0x8a, 0xb6, 0xcf, 0xc1, 0xde, 0x6b, 0x61, 0xc8, 351 0xdd, 0xc0, 0x13, 0x70, 0x22, 0x28, 0xe1, 0x0f, 352 0x46, 0x02, 0xc6, 0xb1, 0xfa, 0x30, 0xcb, 0xec, 353 0xd1, 0x82, 0xfa, 0x51, 0xcb, 0x71, 0x5e, 0x1f, 354 0x1b, 0x5f, 0xe0, 0xb0, 0x02, 0x8a, 0x7c, 0x78, 355 0xd1, 0xb7, 0x4d, 0x56, 0xb0, 0x92, 0x3e, 0xda, 356 0xc7, 0xb1, 0x74, 0xcf, 0x6a, 0x40, 0xeb, 0x98, 357 0x1c, 0x2e, 0xf2, 0x86, 0x76, 0xf8, 0x2e, 0x6a, 358 0x9f, 0x77, 0x51, 0x64, 0xce, 0xdc, 0x12, 0x85, 359 0x84, 0x6b, 0x01, 0xc8, 0xeb, 0xbc, 0x57, 0x6c, 360 0x32, 0x26, 0xcb, 0xb2, 0x84, 0x02, 0x2a, 0x33, 361 0x15, 0xd9, 0xe3, 0x15, 0xfc, 0x3a, 0x24, 0x63, 362 0x76, 0x65, 0x72, 0x63, 0x32, 0x2e, 0x30, 0x63, 363 0x78, 0x35, 0x63, 0x82, 0x59, 0x05, 0xc4, 0x30, 364 0x82, 0x05, 0xc0, 0x30, 0x82, 0x03, 0xa8, 0xa0, 365 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x78, 0xd9, 366 0xa8, 0xb2, 0x64, 0xf9, 0x4d, 0x28, 0x82, 0xc0, 367 0xd3, 0x1b, 0x40, 0x3c, 0xc8, 0xd9, 0x30, 0x0d, 368 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 369 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x41, 0x31, 370 0x3f, 0x30, 0x3d, 0x06, 0x03, 0x55, 0x04, 0x03, 371 0x13, 0x36, 0x45, 0x55, 0x53, 0x2d, 0x53, 0x54, 372 0x4d, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44, 0x2d, 373 0x31, 0x41, 0x44, 0x42, 0x39, 0x39, 0x34, 0x41, 374 0x42, 0x35, 0x38, 0x42, 0x45, 0x35, 0x37, 0x41, 375 0x30, 0x43, 0x43, 0x39, 0x42, 0x39, 0x30, 0x30, 376 0x45, 0x37, 0x38, 0x35, 0x31, 0x45, 0x31, 0x41, 377 0x34, 0x33, 0x43, 0x30, 0x38, 0x36, 0x36, 0x30, 378 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x31, 0x30, 0x37, 379 0x31, 0x35, 0x31, 0x31, 0x31, 0x32, 0x31, 0x33, 380 0x5a, 0x17, 0x0d, 0x32, 0x35, 0x30, 0x33, 0x32, 381 0x31, 0x32, 0x30, 0x32, 0x39, 0x31, 0x35, 0x5a, 382 0x30, 0x00, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 383 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 384 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 385 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 386 0x01, 0x01, 0x00, 0xca, 0xbe, 0x77, 0x9f, 0x45, 387 0x97, 0x17, 0x8d, 0x01, 0xe1, 0x18, 0xcc, 0xf0, 388 0xb5, 0xed, 0x9a, 0xb7, 0x36, 0xac, 0x05, 0x26, 389 0xbe, 0x35, 0xd9, 0x5c, 0x00, 0x5c, 0x5d, 0x8b, 390 0x6f, 0x2a, 0xb8, 0xf6, 0x02, 0x4f, 0x33, 0xfe, 391 0x84, 0x45, 0x4c, 0x4f, 0x7a, 0xdb, 0xa9, 0x6a, 392 0x62, 0x0f, 0x19, 0x35, 0x5d, 0xd2, 0x34, 0x1a, 393 0x9d, 0x73, 0x55, 0xe5, 0x3e, 0x04, 0xa2, 0xd6, 394 0xbe, 0xe7, 0x5a, 0xb9, 0x16, 0x6c, 0x55, 0x18, 395 0xa8, 0x4b, 0xb2, 0x37, 0xb9, 0xa3, 0x87, 0xfc, 396 0x76, 0xa8, 0x55, 0xc9, 0xe7, 0x30, 0xe5, 0x0e, 397 0x3c, 0x7b, 0x74, 0xd2, 0x1e, 0xa8, 0x05, 0xd5, 398 0xe2, 0xe3, 0xcb, 0xaf, 0x63, 0x33, 0x12, 0xaa, 399 0xfd, 0x31, 0x32, 0x71, 0x4f, 0x41, 0x96, 0x05, 400 0xb5, 0x69, 0x73, 0x45, 0xbe, 0x6f, 0x90, 0xd9, 401 0x10, 0x36, 0xaf, 0x7a, 0x1c, 0xf1, 0x6d, 0x14, 402 0xb0, 0x1e, 0xbb, 0xae, 0x1c, 0x35, 0xec, 0x1c, 403 0xb5, 0x0e, 0xf6, 0x33, 0x98, 0x13, 0x4e, 0x44, 404 0x7b, 0x5c, 0x97, 0x47, 0xed, 0x4f, 0xfe, 0xbd, 405 0x08, 0xd2, 0xa9, 0xc6, 0xbe, 0x8c, 0x04, 0x9e, 406 0xdc, 0x3d, 0xbe, 0x98, 0xe9, 0x2a, 0xb1, 0xf4, 407 0xfa, 0x45, 0xf9, 0xc8, 0x9a, 0x55, 0x85, 0x26, 408 0xfc, 0x5f, 0xad, 0x00, 0x8b, 0xc8, 0x41, 0xf2, 409 0x86, 0x4e, 0xba, 0x55, 0x1c, 0xb2, 0x89, 0xe8, 410 0x85, 0x6e, 0x1e, 0x02, 0x9f, 0x55, 0x70, 0xbe, 411 0xfd, 0xe7, 0x9f, 0xba, 0x59, 0xa0, 0x2e, 0x9a, 412 0x74, 0x11, 0xe7, 0xad, 0xa9, 0xc7, 0x7b, 0x58, 413 0xc4, 0x16, 0xd3, 0x35, 0xcb, 0x61, 0x00, 0xec, 414 0x36, 0x4a, 0xa3, 0x51, 0xa3, 0xdd, 0x61, 0xb6, 415 0xd6, 0x29, 0xcb, 0x76, 0xe1, 0xab, 0x51, 0x3a, 416 0xe8, 0xbf, 0xdb, 0x09, 0x4a, 0x39, 0x96, 0xd9, 417 0xac, 0x8f, 0x6c, 0x62, 0xe0, 0x03, 0x23, 0x24, 418 0xbe, 0xd4, 0x83, 0x02, 0x03, 0x01, 0x00, 0x01, 419 0xa3, 0x82, 0x01, 0xf3, 0x30, 0x82, 0x01, 0xef, 420 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 421 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 422 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 423 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x6d, 424 0x06, 0x03, 0x55, 0x1d, 0x20, 0x01, 0x01, 0xff, 425 0x04, 0x63, 0x30, 0x61, 0x30, 0x5f, 0x06, 0x09, 426 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 427 0x1f, 0x30, 0x52, 0x30, 0x50, 0x06, 0x08, 0x2b, 428 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 429 0x44, 0x1e, 0x42, 0x00, 0x54, 0x00, 0x43, 0x00, 430 0x50, 0x00, 0x41, 0x00, 0x20, 0x00, 0x20, 0x00, 431 0x54, 0x00, 0x72, 0x00, 0x75, 0x00, 0x73, 0x00, 432 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 433 0x20, 0x00, 0x50, 0x00, 0x6c, 0x00, 0x61, 0x00, 434 0x74, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, 0x00, 435 0x6d, 0x00, 0x20, 0x00, 0x20, 0x00, 0x49, 0x00, 436 0x64, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 437 0x69, 0x00, 0x74, 0x00, 0x79, 0x30, 0x10, 0x06, 438 0x03, 0x55, 0x1d, 0x25, 0x04, 0x09, 0x30, 0x07, 439 0x06, 0x05, 0x67, 0x81, 0x05, 0x08, 0x03, 0x30, 440 0x59, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x01, 0x01, 441 0xff, 0x04, 0x4f, 0x30, 0x4d, 0xa4, 0x4b, 0x30, 442 0x49, 0x31, 0x16, 0x30, 0x14, 0x06, 0x05, 0x67, 443 0x81, 0x05, 0x02, 0x01, 0x0c, 0x0b, 0x69, 0x64, 444 0x3a, 0x35, 0x33, 0x35, 0x34, 0x34, 0x44, 0x32, 445 0x30, 0x31, 0x17, 0x30, 0x15, 0x06, 0x05, 0x67, 446 0x81, 0x05, 0x02, 0x02, 0x0c, 0x0c, 0x53, 0x54, 447 0x33, 0x33, 0x48, 0x54, 0x50, 0x48, 0x41, 0x48, 448 0x42, 0x34, 0x31, 0x16, 0x30, 0x14, 0x06, 0x05, 449 0x67, 0x81, 0x05, 0x02, 0x03, 0x0c, 0x0b, 0x69, 450 0x64, 0x3a, 0x30, 0x30, 0x34, 0x39, 0x30, 0x30, 451 0x30, 0x34, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 452 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xb8, 453 0x5f, 0xd5, 0x67, 0xca, 0x92, 0xc4, 0x0e, 0xcf, 454 0x0c, 0xd8, 0x1f, 0x6d, 0x3f, 0x03, 0x55, 0x6f, 455 0x38, 0xa6, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 456 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd4, 0x04, 457 0x64, 0xfc, 0x6e, 0x50, 0x0a, 0x56, 0x48, 0x0f, 458 0x05, 0xa9, 0x00, 0xb7, 0x1d, 0x5e, 0x57, 0x08, 459 0xd5, 0xdc, 0x30, 0x81, 0xb2, 0x06, 0x08, 0x2b, 460 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 461 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x30, 0x81, 0x9f, 462 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 463 0x30, 0x02, 0x86, 0x81, 0x92, 0x68, 0x74, 0x74, 464 0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x7a, 0x63, 0x73, 465 0x70, 0x72, 0x6f, 0x64, 0x65, 0x75, 0x73, 0x61, 466 0x69, 0x6b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 467 0x68, 0x2e, 0x62, 0x6c, 0x6f, 0x62, 0x2e, 0x63, 468 0x6f, 0x72, 0x65, 0x2e, 0x77, 0x69, 0x6e, 0x64, 469 0x6f, 0x77, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 470 0x65, 0x75, 0x73, 0x2d, 0x73, 0x74, 0x6d, 0x2d, 471 0x6b, 0x65, 0x79, 0x69, 0x64, 0x2d, 0x31, 0x61, 472 0x64, 0x62, 0x39, 0x39, 0x34, 0x61, 0x62, 0x35, 473 0x38, 0x62, 0x65, 0x35, 0x37, 0x61, 0x30, 0x63, 474 0x63, 0x39, 0x62, 0x39, 0x30, 0x30, 0x65, 0x37, 475 0x38, 0x35, 0x31, 0x65, 0x31, 0x61, 0x34, 0x33, 476 0x63, 0x30, 0x38, 0x36, 0x36, 0x30, 0x2f, 0x61, 477 0x62, 0x64, 0x36, 0x31, 0x35, 0x66, 0x32, 0x2d, 478 0x31, 0x35, 0x38, 0x61, 0x2d, 0x34, 0x35, 0x38, 479 0x65, 0x2d, 0x61, 0x31, 0x35, 0x35, 0x2d, 0x37, 480 0x63, 0x34, 0x63, 0x38, 0x63, 0x62, 0x31, 0x33, 481 0x63, 0x36, 0x35, 0x2e, 0x63, 0x65, 0x72, 0x30, 482 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 483 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 484 0x02, 0x01, 0x00, 0xa2, 0x10, 0xc5, 0xbf, 0x41, 485 0xa6, 0xba, 0x8c, 0x72, 0xca, 0x0f, 0x3e, 0x5e, 486 0x7f, 0xe2, 0xcb, 0x60, 0xb8, 0x3f, 0xfb, 0xde, 487 0x03, 0xe2, 0xfe, 0x20, 0x29, 0xdf, 0x11, 0xf5, 488 0xb0, 0x50, 0x6d, 0x32, 0xe8, 0x1b, 0x05, 0xad, 489 0x6b, 0x60, 0xb5, 0xed, 0xf3, 0xa4, 0x4a, 0xea, 490 0x09, 0xe5, 0x65, 0x7e, 0xe0, 0xd5, 0x3a, 0x6a, 491 0xdb, 0x64, 0xb7, 0x07, 0x8f, 0xa1, 0x63, 0xb3, 492 0x89, 0x8a, 0xac, 0x49, 0x97, 0xa0, 0x9a, 0xa3, 493 0xd3, 0x3a, 0xc2, 0x13, 0xb2, 0xbb, 0xab, 0x0d, 494 0xf2, 0x35, 0xc5, 0x03, 0xde, 0x1c, 0xad, 0x6a, 495 0x03, 0x0a, 0x4c, 0xe1, 0x37, 0x8f, 0xbc, 0x13, 496 0xc0, 0x9a, 0x17, 0xd4, 0x2e, 0x36, 0x17, 0x51, 497 0x12, 0xb0, 0x79, 0xbf, 0x9b, 0xb3, 0xb0, 0x74, 498 0x25, 0x81, 0x7e, 0x21, 0x31, 0xb7, 0xc2, 0x5e, 499 0xfb, 0x36, 0xab, 0xf3, 0x7a, 0x5f, 0xa4, 0x5e, 500 0x8f, 0x0c, 0xbd, 0xcf, 0xf5, 0x50, 0xe7, 0x0c, 501 0x51, 0x55, 0x48, 0xe6, 0x15, 0xb6, 0xd4, 0xaf, 502 0x95, 0x72, 0x56, 0x94, 0xf7, 0x0e, 0xd6, 0x90, 503 0xe3, 0xd3, 0x5d, 0xbd, 0x93, 0xa1, 0xbd, 0x6c, 504 0xe4, 0xf2, 0x39, 0x4d, 0x54, 0x74, 0xcf, 0xf5, 505 0xeb, 0x70, 0xdb, 0x4f, 0x52, 0xcd, 0x39, 0x8f, 506 0x11, 0x54, 0x28, 0x06, 0x29, 0x8f, 0x23, 0xde, 507 0x9e, 0x2f, 0x7b, 0xb6, 0x5f, 0xa3, 0x89, 0x04, 508 0x99, 0x0a, 0xf1, 0x2d, 0xf9, 0x66, 0xd3, 0x13, 509 0x45, 0xbd, 0x6c, 0x22, 0x57, 0xf5, 0xb1, 0xb9, 510 0xdf, 0x5b, 0x7b, 0x1a, 0x3a, 0xdd, 0x6b, 0xc7, 511 0x35, 0x88, 0xed, 0xc4, 0x09, 0x70, 0x4e, 0x5f, 512 0xb5, 0x3e, 0xd1, 0x0b, 0xd0, 0xca, 0xef, 0x0b, 513 0xe9, 0x8b, 0x6f, 0xc3, 0x16, 0xc3, 0x3d, 0x79, 514 0x06, 0xef, 0x81, 0xf0, 0x60, 0x0b, 0x32, 0xe3, 515 0x86, 0x6b, 0x92, 0x38, 0x90, 0x62, 0xed, 0x84, 516 0x3a, 0xb7, 0x45, 0x43, 0x2e, 0xd0, 0x3a, 0x71, 517 0x9e, 0x80, 0xcc, 0x9c, 0xac, 0x27, 0x10, 0x91, 518 0xb7, 0xb2, 0xbd, 0x41, 0x40, 0xa7, 0xb7, 0xcf, 519 0xe7, 0x38, 0xca, 0x68, 0xdd, 0x62, 0x09, 0xff, 520 0x68, 0xce, 0xba, 0xe2, 0x07, 0x49, 0x09, 0xe7, 521 0x1f, 0xdf, 0xe6, 0x26, 0xe5, 0x0f, 0xa9, 0xbf, 522 0x2a, 0x5b, 0x67, 0x92, 0xa1, 0x10, 0x53, 0xb2, 523 0x7a, 0x07, 0x29, 0x9d, 0xfd, 0x6d, 0xb6, 0x3b, 524 0x45, 0xc1, 0x94, 0xcb, 0x1c, 0xc3, 0xce, 0xf6, 525 0x8a, 0x1a, 0x81, 0x66, 0xb0, 0xa5, 0x14, 0xc7, 526 0x9e, 0x1f, 0x6e, 0xb6, 0xff, 0x8b, 0x90, 0x87, 527 0x3a, 0x3f, 0xa8, 0xc2, 0x2d, 0x8f, 0x6f, 0xdb, 528 0xb4, 0xc4, 0x14, 0x3c, 0x1d, 0x12, 0x1d, 0x6d, 529 0xcf, 0xa6, 0x04, 0x6a, 0xa8, 0x13, 0x5e, 0xf2, 530 0x5e, 0x77, 0x80, 0x6b, 0x85, 0x83, 0xfe, 0xbb, 531 0xeb, 0x70, 0xcb, 0x5f, 0xe4, 0x95, 0xaa, 0x0f, 532 0x61, 0x36, 0x7c, 0xbb, 0x22, 0x1e, 0xba, 0x98, 533 0x43, 0x52, 0x33, 0xae, 0xed, 0x5d, 0x10, 0x2c, 534 0xb3, 0xa9, 0x31, 0x8e, 0x60, 0x54, 0xaf, 0x40, 535 0x6d, 0x2e, 0x18, 0xc2, 0x6a, 0xf4, 0x7b, 0x9a, 536 0x73, 0x0f, 0x58, 0x69, 0x23, 0xbb, 0xc4, 0x84, 537 0x53, 0x30, 0xe2, 0xd6, 0x1e, 0x10, 0xc1, 0xec, 538 0x82, 0x13, 0xab, 0x53, 0x86, 0xa2, 0xb9, 0xda, 539 0xbb, 0x3a, 0xa2, 0xbe, 0xb0, 0x10, 0x99, 0x0e, 540 0xe5, 0x9c, 0xc9, 0xf1, 0xce, 0x76, 0x46, 0xea, 541 0x86, 0xaa, 0x36, 0x83, 0x99, 0x09, 0x9b, 0x30, 542 0xd3, 0x26, 0xc7, 0xdf, 0x66, 0xc7, 0xf0, 0xdd, 543 0x08, 0x09, 0x15, 0x15, 0x21, 0x49, 0x46, 0xd8, 544 0x8a, 0x66, 0xca, 0x62, 0x9c, 0x79, 0x1d, 0x81, 545 0xea, 0x5d, 0x82, 0xb0, 0xa6, 0x6b, 0x5c, 0xf5, 546 0xb8, 0x8c, 0xf6, 0x16, 0x01, 0x2c, 0xf8, 0x27, 547 0xf8, 0xcf, 0x88, 0xfe, 0xf3, 0xa4, 0xfc, 0x17, 548 0x97, 0xe7, 0x07, 0x59, 0x06, 0xef, 0x30, 0x82, 549 0x06, 0xeb, 0x30, 0x82, 0x04, 0xd3, 0xa0, 0x03, 550 0x02, 0x01, 0x02, 0x02, 0x13, 0x33, 0x00, 0x00, 551 0x02, 0x39, 0xf9, 0xbb, 0x6a, 0x1d, 0x49, 0x64, 552 0x47, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x39, 553 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 554 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 555 0x81, 0x8c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 556 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 557 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 558 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 559 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 560 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 561 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 562 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 563 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 564 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 565 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x36, 566 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 567 0x2d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 568 0x66, 0x74, 0x20, 0x54, 0x50, 0x4d, 0x20, 0x52, 569 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 570 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 571 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 572 0x79, 0x20, 0x32, 0x30, 0x31, 0x34, 0x30, 0x1e, 573 0x17, 0x0d, 0x31, 0x39, 0x30, 0x33, 0x32, 0x31, 574 0x32, 0x30, 0x32, 0x39, 0x31, 0x35, 0x5a, 0x17, 575 0x0d, 0x32, 0x35, 0x30, 0x33, 0x32, 0x31, 0x32, 576 0x30, 0x32, 0x39, 0x31, 0x35, 0x5a, 0x30, 0x41, 577 0x31, 0x3f, 0x30, 0x3d, 0x06, 0x03, 0x55, 0x04, 578 0x03, 0x13, 0x36, 0x45, 0x55, 0x53, 0x2d, 0x53, 579 0x54, 0x4d, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44, 580 0x2d, 0x31, 0x41, 0x44, 0x42, 0x39, 0x39, 0x34, 581 0x41, 0x42, 0x35, 0x38, 0x42, 0x45, 0x35, 0x37, 582 0x41, 0x30, 0x43, 0x43, 0x39, 0x42, 0x39, 0x30, 583 0x30, 0x45, 0x37, 0x38, 0x35, 0x31, 0x45, 0x31, 584 0x41, 0x34, 0x33, 0x43, 0x30, 0x38, 0x36, 0x36, 585 0x30, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 586 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 587 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 588 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 589 0x01, 0x00, 0xdb, 0xe2, 0x23, 0xf9, 0x86, 0x8f, 590 0xa9, 0x71, 0x9f, 0x8b, 0xf9, 0x7c, 0xe9, 0x45, 591 0x2d, 0x59, 0x56, 0x5e, 0x96, 0xf4, 0xdd, 0x9a, 592 0x12, 0xcd, 0x90, 0x1a, 0x0c, 0xb5, 0x03, 0xbf, 593 0x09, 0xbe, 0xbf, 0xf7, 0x55, 0x52, 0xe8, 0x39, 594 0x4c, 0xbe, 0x2a, 0x28, 0x88, 0x78, 0x39, 0xa7, 595 0xcb, 0xf9, 0x4c, 0x55, 0xd2, 0x31, 0x96, 0x3b, 596 0x48, 0xa2, 0xf3, 0xf6, 0xd3, 0x1a, 0x81, 0x7f, 597 0x90, 0x62, 0xab, 0xec, 0x5a, 0xc7, 0xa0, 0x7f, 598 0x81, 0x32, 0x27, 0x9b, 0x29, 0x75, 0x7d, 0x1e, 599 0x96, 0xc5, 0xfa, 0x0e, 0x7c, 0xe0, 0x60, 0x96, 600 0x7a, 0xca, 0x94, 0xba, 0xe6, 0xb2, 0x69, 0xdd, 601 0xc4, 0x7d, 0xbb, 0xd3, 0xc4, 0xb4, 0x6e, 0x00, 602 0x86, 0x1f, 0x9d, 0x25, 0xe8, 0xae, 0xc7, 0x10, 603 0x84, 0xdc, 0xc0, 0x34, 0x24, 0x6e, 0xf7, 0xfc, 604 0xdd, 0x3d, 0x32, 0x7a, 0x43, 0x96, 0xd6, 0xc8, 605 0x7b, 0xf4, 0x9b, 0x3d, 0xa7, 0x1e, 0xba, 0x4d, 606 0xd0, 0x3b, 0x3d, 0x84, 0x9a, 0xd1, 0x25, 0x22, 607 0x5d, 0x00, 0x44, 0xb0, 0x59, 0xb7, 0x40, 0xc5, 608 0xa3, 0x53, 0x53, 0xaf, 0x8f, 0x9e, 0xfd, 0x8f, 609 0x1e, 0x02, 0xd3, 0x4f, 0xf7, 0x09, 0xce, 0xc5, 610 0xc6, 0x71, 0x5c, 0xe9, 0xe8, 0x7a, 0xb5, 0x6b, 611 0xa4, 0xbf, 0x0b, 0xd9, 0xb6, 0xfa, 0x24, 0xb0, 612 0xcd, 0x52, 0x22, 0x1d, 0x7e, 0xe8, 0x15, 0x2f, 613 0x1e, 0x5e, 0xa2, 0xec, 0xd3, 0xa8, 0x02, 0x77, 614 0xb9, 0x55, 0x9a, 0xcf, 0xcc, 0xd7, 0x08, 0x20, 615 0xa5, 0xda, 0x39, 0x9a, 0x30, 0x76, 0x90, 0x37, 616 0xa7, 0x60, 0xdf, 0x18, 0x12, 0x65, 0x17, 0xaa, 617 0xdd, 0x48, 0xd5, 0x12, 0x1d, 0x4c, 0x83, 0x5d, 618 0x81, 0x07, 0x1d, 0x18, 0x81, 0x40, 0x55, 0x60, 619 0x8f, 0xa3, 0x6b, 0x34, 0x1e, 0xd5, 0xe6, 0xcf, 620 0x52, 0x73, 0x77, 0x4a, 0x50, 0x4f, 0x1b, 0x0f, 621 0x39, 0xc3, 0x0d, 0x16, 0xf9, 0xbb, 0x4c, 0x77, 622 0xf6, 0x4e, 0xac, 0x9c, 0xfe, 0xe8, 0xbb, 0x52, 623 0xa5, 0x0a, 0x0e, 0x9b, 0xf0, 0x0d, 0xef, 0xfb, 624 0x6f, 0x89, 0x34, 0x7d, 0x47, 0xec, 0x14, 0x6a, 625 0xf4, 0x0a, 0xe1, 0x60, 0x44, 0x73, 0x7b, 0xa0, 626 0xab, 0x5b, 0x8c, 0x43, 0xa6, 0x05, 0x42, 0x61, 627 0x46, 0xaa, 0x1c, 0xf5, 0xec, 0x2c, 0x86, 0x85, 628 0x21, 0x99, 0xdf, 0x45, 0x8e, 0xf4, 0xd1, 0x1e, 629 0xfb, 0xcd, 0x9b, 0x94, 0x32, 0xe0, 0xa0, 0xcc, 630 0x4f, 0xad, 0xae, 0x44, 0x8b, 0x86, 0x27, 0x91, 631 0xfe, 0x60, 0x9f, 0xf2, 0x63, 0x30, 0x6c, 0x5d, 632 0x8d, 0xbc, 0xab, 0xd4, 0xf5, 0xa2, 0xb2, 0x74, 633 0xe8, 0xd4, 0x95, 0xf2, 0xd6, 0x03, 0x8b, 0xc9, 634 0xa3, 0x52, 0xe7, 0x63, 0x05, 0x64, 0x50, 0xe5, 635 0x0a, 0x6a, 0xa0, 0x6c, 0x50, 0xcd, 0x37, 0x98, 636 0xa8, 0x87, 0x02, 0x38, 0x5b, 0x6c, 0x02, 0x69, 637 0x3d, 0x1f, 0x95, 0x74, 0x4d, 0x46, 0x76, 0x2a, 638 0x9d, 0x62, 0xd4, 0xc7, 0x1b, 0xf9, 0x31, 0xa6, 639 0x51, 0xee, 0x7b, 0xc8, 0xe4, 0x6e, 0x3a, 0xcf, 640 0x4f, 0x4f, 0x49, 0x8a, 0xf5, 0x4f, 0x25, 0x93, 641 0x23, 0x02, 0xef, 0x79, 0xa6, 0x27, 0xbe, 0x5a, 642 0xe7, 0x74, 0xb7, 0xd7, 0xa8, 0xc1, 0xae, 0x55, 643 0x88, 0xa4, 0xc7, 0x4d, 0xb7, 0x62, 0xf0, 0xf9, 644 0x5b, 0xbf, 0x47, 0x5b, 0xfe, 0xcc, 0x0b, 0x89, 645 0x19, 0x65, 0x4b, 0x6f, 0xdf, 0x4f, 0x7d, 0x4d, 646 0x96, 0x42, 0x0d, 0x2a, 0xa1, 0xbd, 0x3e, 0x70, 647 0x92, 0xba, 0xc8, 0x59, 0xd5, 0x1d, 0x3a, 0x98, 648 0x53, 0x75, 0xa6, 0x32, 0xc8, 0x72, 0x03, 0x46, 649 0x5f, 0x5c, 0x13, 0xa4, 0xdb, 0xc7, 0x55, 0x35, 650 0x22, 0x0d, 0xc6, 0x17, 0x85, 0xbd, 0x46, 0x4b, 651 0xfa, 0x1e, 0x49, 0xc2, 0xfe, 0x1e, 0xf9, 0x62, 652 0x89, 0x56, 0x84, 0xdf, 0xa0, 0xfb, 0xfd, 0x93, 653 0xa4, 0x25, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 654 0x82, 0x01, 0x8e, 0x30, 0x82, 0x01, 0x8a, 0x30, 655 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 656 0xff, 0x04, 0x04, 0x03, 0x02, 0x02, 0x84, 0x30, 657 0x1b, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x14, 658 0x30, 0x12, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 659 0x01, 0x82, 0x37, 0x15, 0x24, 0x06, 0x05, 0x67, 660 0x81, 0x05, 0x08, 0x03, 0x30, 0x16, 0x06, 0x03, 661 0x55, 0x1d, 0x20, 0x04, 0x0f, 0x30, 0x0d, 0x30, 662 0x0b, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 663 0x82, 0x37, 0x15, 0x1f, 0x30, 0x12, 0x06, 0x03, 664 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 665 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00, 666 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 667 0x16, 0x04, 0x14, 0xb8, 0x5f, 0xd5, 0x67, 0xca, 668 0x92, 0xc4, 0x0e, 0xcf, 0x0c, 0xd8, 0x1f, 0x6d, 669 0x3f, 0x03, 0x55, 0x6f, 0x38, 0xa6, 0x51, 0x30, 670 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 671 0x30, 0x16, 0x80, 0x14, 0x7a, 0x8c, 0x0a, 0xce, 672 0x2f, 0x48, 0x62, 0x17, 0xe2, 0x94, 0xd1, 0xae, 673 0x55, 0xc1, 0x52, 0xec, 0x71, 0x74, 0xa4, 0x56, 674 0x30, 0x70, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 675 0x69, 0x30, 0x67, 0x30, 0x65, 0xa0, 0x63, 0xa0, 676 0x61, 0x86, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x3a, 677 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 678 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 679 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x6f, 680 0x70, 0x73, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, 681 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 682 0x25, 0x32, 0x30, 0x54, 0x50, 0x4d, 0x25, 0x32, 683 0x30, 0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30, 684 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 685 0x61, 0x74, 0x65, 0x25, 0x32, 0x30, 0x41, 0x75, 686 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x25, 687 0x32, 0x30, 0x32, 0x30, 0x31, 0x34, 0x2e, 0x63, 688 0x72, 0x6c, 0x30, 0x7d, 0x06, 0x08, 0x2b, 0x06, 689 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x71, 690 0x30, 0x6f, 0x30, 0x6d, 0x06, 0x08, 0x2b, 0x06, 691 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x61, 692 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 693 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 694 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 695 0x2f, 0x70, 0x6b, 0x69, 0x6f, 0x70, 0x73, 0x2f, 696 0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 697 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x25, 698 0x32, 0x30, 0x54, 0x50, 0x4d, 0x25, 0x32, 0x30, 699 0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30, 0x43, 700 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 701 0x74, 0x65, 0x25, 0x32, 0x30, 0x41, 0x75, 0x74, 702 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x25, 0x32, 703 0x30, 0x32, 0x30, 0x31, 0x34, 0x2e, 0x63, 0x72, 704 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 705 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 706 0x03, 0x82, 0x02, 0x01, 0x00, 0x41, 0xaa, 0xfe, 707 0x28, 0x6c, 0xf7, 0x6b, 0x53, 0xde, 0x77, 0xc0, 708 0x80, 0x50, 0x94, 0xd9, 0xdb, 0x46, 0x8e, 0x6a, 709 0x93, 0xa9, 0x10, 0x37, 0x27, 0x1f, 0xf5, 0x70, 710 0xf1, 0xa8, 0xcf, 0xa1, 0x45, 0x86, 0x2a, 0xdd, 711 0x8f, 0xb8, 0xb5, 0xc1, 0xe6, 0xcf, 0x8a, 0xfa, 712 0x32, 0xa1, 0x4b, 0xb7, 0xa4, 0xbf, 0x0a, 0x48, 713 0xcb, 0x42, 0x63, 0x71, 0xc1, 0x96, 0xb9, 0x3a, 714 0x37, 0x84, 0x0e, 0x24, 0x39, 0xeb, 0x58, 0xce, 715 0x3d, 0xb7, 0xa9, 0x44, 0x92, 0x59, 0xb9, 0xff, 716 0xdb, 0x18, 0xbe, 0x6a, 0x5e, 0xe7, 0xce, 0xef, 717 0xb8, 0x40, 0x53, 0xaf, 0xc1, 0x9b, 0xfb, 0x42, 718 0x99, 0x7e, 0x9d, 0x05, 0x2b, 0x71, 0x0a, 0x7a, 719 0x7a, 0x44, 0xd1, 0x31, 0xca, 0xf0, 0x5f, 0x74, 720 0x85, 0xa9, 0xe2, 0xbc, 0xc8, 0x0c, 0xad, 0x57, 721 0xd1, 0xe9, 0x48, 0x90, 0x88, 0x57, 0x86, 0xd7, 722 0xc5, 0xc9, 0xe6, 0xb2, 0x5e, 0x5f, 0x13, 0xdc, 723 0x10, 0x7f, 0xdf, 0x63, 0x8a, 0xd5, 0x9e, 0x90, 724 0xc2, 0x75, 0x53, 0x1e, 0x68, 0x17, 0x2b, 0x03, 725 0x29, 0x15, 0x03, 0xc5, 0x8c, 0x66, 0x3e, 0xae, 726 0xbd, 0x4a, 0x32, 0x7e, 0x59, 0x89, 0x0b, 0x84, 727 0xc2, 0xd9, 0x90, 0xfa, 0x02, 0x22, 0x90, 0x8d, 728 0x9c, 0xb6, 0x0c, 0x4d, 0xe1, 0x28, 0x76, 0xd7, 729 0x82, 0xc3, 0x36, 0xc2, 0xa3, 0x2a, 0x52, 0xe5, 730 0xfe, 0x3c, 0x8f, 0xe3, 0x4b, 0xda, 0x6a, 0xdb, 731 0xc0, 0x7a, 0x3c, 0x57, 0xfa, 0x85, 0x8f, 0xfb, 732 0x62, 0xc3, 0xa1, 0x38, 0xce, 0x84, 0xf2, 0xba, 733 0x12, 0xf4, 0x30, 0x2a, 0x4a, 0x94, 0xa9, 0x35, 734 0x2c, 0x7d, 0x11, 0xc7, 0x68, 0x1f, 0x47, 0xaa, 735 0x57, 0x43, 0x06, 0x70, 0x79, 0x8c, 0xb6, 0x3b, 736 0x5d, 0x57, 0xf3, 0xf3, 0xc0, 0x2c, 0xc5, 0xde, 737 0x41, 0x99, 0xf6, 0xdd, 0x55, 0x8a, 0xe4, 0x13, 738 0xca, 0xc9, 0xec, 0x69, 0x93, 0x13, 0x48, 0xf0, 739 0x5f, 0xda, 0x2e, 0xfd, 0xfb, 0xa9, 0x1b, 0x92, 740 0xde, 0x49, 0x71, 0x37, 0x8c, 0x3f, 0xc2, 0x08, 741 0x0a, 0x83, 0x25, 0xf1, 0x6e, 0x0a, 0xe3, 0x55, 742 0x85, 0x96, 0x9a, 0x2d, 0xa2, 0xc0, 0xa1, 0xee, 743 0xfe, 0x23, 0x3b, 0x69, 0x22, 0x03, 0xfd, 0xcc, 744 0x8a, 0xdd, 0xb4, 0x53, 0x8d, 0x84, 0xa6, 0xac, 745 0xe0, 0x1e, 0x07, 0xe5, 0xd7, 0xf9, 0xcb, 0xb9, 746 0xe3, 0x9a, 0xb7, 0x84, 0x70, 0xa1, 0x93, 0xd6, 747 0x02, 0x1e, 0xfe, 0xdb, 0x28, 0x7c, 0xf7, 0xd4, 748 0x62, 0x6f, 0x80, 0x75, 0xc8, 0xd8, 0x35, 0x26, 749 0x0c, 0xcb, 0x84, 0xed, 0xbb, 0x95, 0xdf, 0x7f, 750 0xd5, 0xbb, 0x00, 0x96, 0x97, 0x32, 0xe7, 0xba, 751 0xe8, 0x29, 0xb5, 0x1a, 0x51, 0x81, 0xbb, 0x04, 752 0xd1, 0x21, 0x76, 0x34, 0x6d, 0x1e, 0x93, 0x96, 753 0x1f, 0x96, 0x53, 0x5f, 0x5c, 0x9e, 0xf3, 0x9d, 754 0x82, 0x1c, 0x39, 0x36, 0x59, 0xae, 0xc9, 0x3c, 755 0x53, 0x4a, 0x67, 0x65, 0x6e, 0xbf, 0xa6, 0xac, 756 0x3e, 0xda, 0xb2, 0xa7, 0x63, 0x07, 0x17, 0xe1, 757 0x5b, 0xda, 0x6a, 0x31, 0x9f, 0xfb, 0xb4, 0xea, 758 0xa1, 0x97, 0x08, 0x6e, 0xb2, 0x68, 0xf3, 0x72, 759 0x76, 0x99, 0xe8, 0x00, 0x46, 0x88, 0x26, 0xe1, 760 0x3c, 0x07, 0x2b, 0x78, 0x49, 0xda, 0x79, 0x3a, 761 0xbd, 0x6f, 0xca, 0x5c, 0xa0, 0xa8, 0xed, 0x34, 762 0xcc, 0xdb, 0x13, 0xe2, 0x51, 0x9b, 0x3d, 0x03, 763 0xac, 0xc7, 0xf6, 0x32, 0xe1, 0x11, 0x5d, 0xe1, 764 0xc5, 0xfd, 0x9e, 0x7a, 0xcd, 0x06, 0xb9, 0xe6, 765 0xfc, 0xe0, 0x03, 0x31, 0xf4, 0x4a, 0xa9, 0x3b, 766 0x79, 0x01, 0xb0, 0x64, 0x68, 0x9f, 0x6e, 0x76, 767 0xa1, 0xcc, 0xec, 0x17, 0x41, 0x9d, 0xd4, 0x5b, 768 0x4e, 0x9d, 0xe5, 0x46, 0xd4, 0x6b, 0x60, 0x2a, 769 0x23, 0xb5, 0x7a, 0x89, 0x7c, 0x27, 0x96, 0x65, 770 0x97, 0x56, 0xec, 0x98, 0xe3, 0x67, 0x70, 0x75, 771 0x62, 0x41, 0x72, 0x65, 0x61, 0x59, 0x01, 0x36, 772 0x00, 0x01, 0x00, 0x0b, 0x00, 0x06, 0x04, 0x72, 773 0x00, 0x20, 0x9d, 0xff, 0xcb, 0xf3, 0x6c, 0x38, 774 0x3a, 0xe6, 0x99, 0xfb, 0x98, 0x68, 0xdc, 0x6d, 775 0xcb, 0x89, 0xd7, 0x15, 0x38, 0x84, 0xbe, 0x28, 776 0x03, 0x92, 0x2c, 0x12, 0x41, 0x58, 0xbf, 0xad, 777 0x22, 0xae, 0x00, 0x10, 0x00, 0x10, 0x08, 0x00, 778 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc5, 0xb6, 779 0x9c, 0x06, 0x1d, 0xcf, 0xb9, 0xf2, 0x5e, 0x99, 780 0x7d, 0x6d, 0x73, 0xd8, 0x36, 0xc1, 0x4a, 0x90, 781 0x05, 0x4d, 0x82, 0x57, 0xc1, 0xb6, 0x6a, 0xd1, 782 0x43, 0x03, 0x85, 0xf8, 0x52, 0x4f, 0xd2, 0x27, 783 0x91, 0x0b, 0xb5, 0x93, 0xa0, 0x68, 0xf8, 0x80, 784 0x1b, 0xaa, 0x65, 0x97, 0x45, 0x11, 0x86, 0x34, 785 0xd6, 0x67, 0xf8, 0xd5, 0x12, 0x79, 0x84, 0xee, 786 0x70, 0x99, 0x00, 0x63, 0xa8, 0xb4, 0x43, 0x0b, 787 0x4c, 0x57, 0x4a, 0xd6, 0x9b, 0x75, 0x63, 0x8a, 788 0x46, 0x57, 0xdb, 0x14, 0xc8, 0x71, 0xd1, 0xb3, 789 0x07, 0x68, 0x58, 0xbc, 0x55, 0x84, 0x80, 0x2a, 790 0xd2, 0x36, 0x9f, 0xc1, 0x64, 0xa0, 0x11, 0x4b, 791 0xc9, 0x32, 0x31, 0x3a, 0xd6, 0x87, 0x26, 0x1a, 792 0x3a, 0x78, 0x3d, 0x89, 0xdb, 0x00, 0x28, 0x3b, 793 0xae, 0x2b, 0x1b, 0x56, 0xe2, 0x8c, 0x4c, 0x63, 794 0xac, 0x6e, 0x6c, 0xf7, 0xb5, 0x7d, 0x4d, 0x0b, 795 0x9f, 0x06, 0xa0, 0x10, 0x35, 0x38, 0x20, 0x4d, 796 0xcc, 0x07, 0xd7, 0x00, 0x4e, 0x86, 0xba, 0xfe, 797 0x8b, 0xe4, 0x3f, 0x4a, 0xd6, 0xca, 0xbf, 0x67, 798 0x40, 0x1a, 0xa4, 0xda, 0x82, 0x52, 0x15, 0xb8, 799 0x14, 0x3a, 0x7c, 0xa9, 0x02, 0xc1, 0x01, 0x69, 800 0xc6, 0x51, 0xd4, 0xbc, 0x1f, 0x95, 0xb2, 0xee, 801 0x1f, 0xdd, 0xb5, 0x73, 0x16, 0x5e, 0x29, 0x3f, 802 0x47, 0xac, 0x65, 0xfb, 0x63, 0x5c, 0xb9, 0xc8, 803 0x13, 0x2d, 0xec, 0x85, 0xde, 0x71, 0x0d, 0x84, 804 0x93, 0x74, 0x76, 0x91, 0xdd, 0x1d, 0x6d, 0x3d, 805 0xc7, 0x36, 0x19, 0x19, 0x86, 0xde, 0x7c, 0xca, 806 0xd6, 0xc6, 0x65, 0x7e, 0x4b, 0x24, 0x9c, 0xce, 807 0x92, 0x6b, 0x1c, 0xe0, 0xa0, 0xa9, 0x6c, 0xc3, 808 0xed, 0x4f, 0x2a, 0x54, 0x07, 0x00, 0x32, 0x5e, 809 0x1b, 0x94, 0x37, 0xcd, 0xe2, 0x32, 0xa8, 0xd5, 810 0x2c, 0xfb, 0x03, 0x9d, 0x79, 0xdf, 0x68, 0x63, 811 0x65, 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x58, 812 0xa1, 0xff, 0x54, 0x43, 0x47, 0x80, 0x17, 0x00, 813 0x22, 0x00, 0x0b, 0xdb, 0x1f, 0x74, 0x21, 0x4f, 814 0xa9, 0x0d, 0x90, 0x64, 0xa2, 0x33, 0xbe, 0x3f, 815 0xf1, 0x95, 0xb0, 0x4e, 0x3f, 0x02, 0xdc, 0xad, 816 0xb0, 0x05, 0x13, 0xe6, 0x32, 0x5f, 0xed, 0x90, 817 0x2c, 0xad, 0xc0, 0x00, 0x14, 0x58, 0x52, 0x07, 818 0x5d, 0x64, 0x6c, 0x1f, 0xd1, 0x13, 0x7f, 0xc3, 819 0x74, 0xf6, 0x4b, 0xe3, 0xa0, 0x2e, 0xb7, 0x71, 820 0xda, 0x00, 0x00, 0x00, 0x00, 0x29, 0x3c, 0x64, 821 0xdf, 0x95, 0x38, 0xba, 0x73, 0xe3, 0x57, 0x61, 822 0xa0, 0x01, 0x24, 0x01, 0x08, 0xc9, 0xd6, 0xea, 823 0x60, 0xe4, 0x00, 0x22, 0x00, 0x0b, 0xe1, 0x86, 824 0xbb, 0x79, 0x27, 0xe5, 0x01, 0x19, 0x90, 0xb3, 825 0xe9, 0x08, 0xb0, 0xee, 0xfa, 0x3a, 0x67, 0xa9, 826 0xf3, 0xc8, 0x9e, 0x03, 0x41, 0x07, 0x75, 0x60, 827 0xbc, 0x94, 0x0c, 0x2a, 0xb7, 0xad, 0x00, 0x22, 828 0x00, 0x0b, 0x35, 0xb1, 0x72, 0xd6, 0x3c, 0xe9, 829 0x85, 0xe8, 0x66, 0xed, 0x10, 0x7a, 0x5c, 0xa3, 830 0xe6, 0xd9, 0x4d, 0xf0, 0x52, 0x69, 0x26, 0x14, 831 0xb4, 0x36, 0x7e, 0xad, 0x76, 0x9e, 0x58, 0x68, 832 0x3e, 0x91 833 }; 834 835 /* 836 * Security Key By Yubico 837 * 5.1.X 838 * f8a011f3-8c0a-4d15-8006-17111f9edc7d 839 */ 840 const unsigned char aaguid[16] = { 841 0xf8, 0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, 842 0x80, 0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, 843 }; 844 845 /* 846 * Windows Hello by Microsoft 847 */ 848 const unsigned char aaguid_tpm[16] = { 849 0x08, 0x98, 0x70, 0x58, 0xca, 0xdc, 0x4b, 0x81, 850 0xb6, 0xe1, 0x30, 0xde, 0x50, 0xdc, 0xbe, 0x96, 851 }; 852 853 const char rp_id[] = "localhost"; 854 const char rp_name[] = "sweet home localhost"; 855 856 static void * 857 dummy_open(const char *path) 858 { 859 (void)path; 860 861 return (FAKE_DEV_HANDLE); 862 } 863 864 static void 865 dummy_close(void *handle) 866 { 867 assert(handle == FAKE_DEV_HANDLE); 868 } 869 870 static int 871 dummy_read(void *handle, unsigned char *buf, size_t len, int ms) 872 { 873 (void)handle; 874 (void)buf; 875 (void)len; 876 (void)ms; 877 878 abort(); 879 /* NOTREACHED */ 880 } 881 882 static int 883 dummy_write(void *handle, const unsigned char *buf, size_t len) 884 { 885 (void)handle; 886 (void)buf; 887 (void)len; 888 889 abort(); 890 /* NOTREACHED */ 891 } 892 893 static fido_cred_t * 894 alloc_cred(void) 895 { 896 fido_cred_t *c; 897 898 c = fido_cred_new(); 899 assert(c != NULL); 900 901 return (c); 902 } 903 904 static void 905 free_cred(fido_cred_t *c) 906 { 907 fido_cred_free(&c); 908 assert(c == NULL); 909 } 910 911 static fido_dev_t * 912 alloc_dev(void) 913 { 914 fido_dev_t *d; 915 916 d = fido_dev_new(); 917 assert(d != NULL); 918 919 return (d); 920 } 921 922 static void 923 free_dev(fido_dev_t *d) 924 { 925 fido_dev_free(&d); 926 assert(d == NULL); 927 } 928 929 static void 930 empty_cred(void) 931 { 932 fido_cred_t *c; 933 fido_dev_t *d; 934 fido_dev_io_t io_f; 935 936 c = alloc_cred(); 937 assert(fido_cred_authdata_len(c) == 0); 938 assert(fido_cred_authdata_ptr(c) == NULL); 939 assert(fido_cred_authdata_raw_len(c) == 0); 940 assert(fido_cred_authdata_raw_ptr(c) == NULL); 941 assert(fido_cred_clientdata_hash_len(c) == 0); 942 assert(fido_cred_clientdata_hash_ptr(c) == NULL); 943 assert(fido_cred_flags(c) == 0); 944 assert(fido_cred_fmt(c) == NULL); 945 assert(fido_cred_id_len(c) == 0); 946 assert(fido_cred_id_ptr(c) == NULL); 947 assert(fido_cred_prot(c) == 0); 948 assert(fido_cred_pubkey_len(c) == 0); 949 assert(fido_cred_pubkey_ptr(c) == NULL); 950 assert(fido_cred_rp_id(c) == NULL); 951 assert(fido_cred_rp_name(c) == NULL); 952 assert(fido_cred_sig_len(c) == 0); 953 assert(fido_cred_sig_ptr(c) == NULL); 954 assert(fido_cred_x5c_len(c) == 0); 955 assert(fido_cred_x5c_ptr(c) == NULL); 956 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 957 958 memset(&io_f, 0, sizeof(io_f)); 959 960 io_f.open = dummy_open; 961 io_f.close = dummy_close; 962 io_f.read = dummy_read; 963 io_f.write = dummy_write; 964 965 d = alloc_dev(); 966 967 fido_dev_force_u2f(d); 968 assert(fido_dev_set_io_functions(d, &io_f) == FIDO_OK); 969 assert(fido_dev_make_cred(d, c, NULL) == FIDO_ERR_INVALID_ARGUMENT); 970 assert(fido_dev_make_cred(d, c, "") == FIDO_ERR_UNSUPPORTED_OPTION); 971 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 972 973 fido_dev_force_fido2(d); 974 assert(fido_dev_set_io_functions(d, &io_f) == FIDO_OK); 975 assert(fido_dev_make_cred(d, c, NULL) == FIDO_ERR_INVALID_ARGUMENT); 976 assert(fido_dev_make_cred(d, c, "") == FIDO_ERR_INVALID_ARGUMENT); 977 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 978 979 free_cred(c); 980 free_dev(d); 981 } 982 983 static void 984 valid_cred(void) 985 { 986 fido_cred_t *c; 987 988 c = alloc_cred(); 989 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 990 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 991 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 992 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 993 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 994 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 995 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 996 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 997 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 998 assert(fido_cred_verify(c) == FIDO_OK); 999 assert(fido_cred_prot(c) == 0); 1000 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1001 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1002 assert(fido_cred_id_len(c) == sizeof(id)); 1003 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1004 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1005 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1006 free_cred(c); 1007 } 1008 1009 static void 1010 no_cdh(void) 1011 { 1012 fido_cred_t *c; 1013 1014 c = alloc_cred(); 1015 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1016 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1017 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1018 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1019 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1020 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1021 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1022 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1023 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1024 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1025 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1026 assert(fido_cred_id_len(c) == sizeof(id)); 1027 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1028 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1029 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1030 free_cred(c); 1031 } 1032 1033 static void 1034 no_rp_id(void) 1035 { 1036 fido_cred_t *c; 1037 1038 c = alloc_cred(); 1039 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1040 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1041 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1042 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1043 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1044 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1045 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1046 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1047 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1048 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1049 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1050 assert(fido_cred_id_len(c) == sizeof(id)); 1051 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1052 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1053 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1054 free_cred(c); 1055 } 1056 1057 static void 1058 no_rp_name(void) 1059 { 1060 fido_cred_t *c; 1061 1062 c = alloc_cred(); 1063 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1064 assert(fido_cred_set_rp(c, rp_id, NULL) == FIDO_OK); 1065 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1066 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1067 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1068 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1069 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1070 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1071 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1072 assert(fido_cred_verify(c) == FIDO_OK); 1073 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1074 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1075 assert(fido_cred_id_len(c) == sizeof(id)); 1076 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1077 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1078 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1079 free_cred(c); 1080 } 1081 1082 static void 1083 no_authdata(void) 1084 { 1085 fido_cred_t *c; 1086 unsigned char *unset; 1087 1088 unset = calloc(1, sizeof(aaguid)); 1089 assert(unset != NULL); 1090 1091 c = alloc_cred(); 1092 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1093 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1094 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1095 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1096 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1097 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1098 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1099 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1100 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1101 assert(fido_cred_pubkey_len(c) == 0); 1102 assert(fido_cred_pubkey_ptr(c) == NULL); 1103 assert(fido_cred_id_len(c) == 0); 1104 assert(fido_cred_id_ptr(c) == NULL); 1105 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1106 assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0); 1107 free_cred(c); 1108 free(unset); 1109 } 1110 1111 static void 1112 no_x509(void) 1113 { 1114 fido_cred_t *c; 1115 1116 c = alloc_cred(); 1117 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1118 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1119 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1120 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1121 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1122 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1123 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1124 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1125 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1126 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1127 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1128 assert(fido_cred_id_len(c) == sizeof(id)); 1129 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1130 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1131 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1132 free_cred(c); 1133 } 1134 1135 static void 1136 no_sig(void) 1137 { 1138 fido_cred_t *c; 1139 1140 c = alloc_cred(); 1141 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1142 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1143 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1144 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1145 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1146 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1147 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1148 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1149 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1150 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1151 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1152 assert(fido_cred_id_len(c) == sizeof(id)); 1153 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1154 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1155 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1156 free_cred(c); 1157 } 1158 1159 static void 1160 no_fmt(void) 1161 { 1162 fido_cred_t *c; 1163 1164 c = alloc_cred(); 1165 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1166 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1167 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1168 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1169 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1170 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1171 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1172 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1173 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1174 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1175 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1176 assert(fido_cred_id_len(c) == sizeof(id)); 1177 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1178 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1179 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1180 free_cred(c); 1181 } 1182 1183 static void 1184 wrong_options(void) 1185 { 1186 fido_cred_t *c; 1187 1188 c = alloc_cred(); 1189 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1190 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1191 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1192 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1193 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1194 assert(fido_cred_set_uv(c, FIDO_OPT_TRUE) == FIDO_OK); 1195 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1196 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1197 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1198 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_PARAM); 1199 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1200 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1201 assert(fido_cred_id_len(c) == sizeof(id)); 1202 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1203 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1204 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1205 free_cred(c); 1206 } 1207 1208 static void 1209 junk_cdh(void) 1210 { 1211 fido_cred_t *c; 1212 unsigned char *junk; 1213 1214 junk = malloc(sizeof(cdh)); 1215 assert(junk != NULL); 1216 memcpy(junk, cdh, sizeof(cdh)); 1217 junk[0] = (unsigned char)~junk[0]; 1218 1219 c = alloc_cred(); 1220 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1221 assert(fido_cred_set_clientdata_hash(c, junk, sizeof(cdh)) == FIDO_OK); 1222 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1223 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1224 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1225 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1226 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1227 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1228 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1229 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_SIG); 1230 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1231 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1232 assert(fido_cred_id_len(c) == sizeof(id)); 1233 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1234 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1235 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1236 free_cred(c); 1237 free(junk); 1238 } 1239 1240 static void 1241 junk_fmt(void) 1242 { 1243 fido_cred_t *c; 1244 1245 c = alloc_cred(); 1246 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1247 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1248 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1249 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1250 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1251 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1252 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1253 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1254 assert(fido_cred_set_fmt(c, "junk") == FIDO_ERR_INVALID_ARGUMENT); 1255 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1256 free_cred(c); 1257 } 1258 1259 static void 1260 junk_rp_id(void) 1261 { 1262 fido_cred_t *c; 1263 1264 c = alloc_cred(); 1265 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1266 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1267 assert(fido_cred_set_rp(c, "potato", rp_name) == FIDO_OK); 1268 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1269 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1270 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1271 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1272 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1273 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1274 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_PARAM); 1275 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1276 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1277 assert(fido_cred_id_len(c) == sizeof(id)); 1278 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1279 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1280 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1281 free_cred(c); 1282 } 1283 1284 static void 1285 junk_rp_name(void) 1286 { 1287 fido_cred_t *c; 1288 1289 c = alloc_cred(); 1290 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1291 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1292 assert(fido_cred_set_rp(c, rp_id, "potato") == FIDO_OK); 1293 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1294 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1295 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1296 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1297 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1298 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1299 assert(fido_cred_verify(c) == FIDO_OK); 1300 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1301 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1302 assert(fido_cred_id_len(c) == sizeof(id)); 1303 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1304 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1305 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1306 free_cred(c); 1307 } 1308 1309 static void 1310 junk_authdata(void) 1311 { 1312 fido_cred_t *c; 1313 unsigned char *junk; 1314 unsigned char *unset; 1315 1316 junk = malloc(sizeof(authdata)); 1317 assert(junk != NULL); 1318 memcpy(junk, authdata, sizeof(authdata)); 1319 junk[0] = (unsigned char)~junk[0]; 1320 1321 unset = calloc(1, sizeof(aaguid)); 1322 assert(unset != NULL); 1323 1324 c = alloc_cred(); 1325 assert(fido_cred_set_authdata(c, junk, 1326 sizeof(authdata)) == FIDO_ERR_INVALID_ARGUMENT); 1327 assert(fido_cred_authdata_len(c) == 0); 1328 assert(fido_cred_authdata_ptr(c) == NULL); 1329 assert(fido_cred_authdata_raw_len(c) == 0); 1330 assert(fido_cred_authdata_raw_ptr(c) == NULL); 1331 assert(fido_cred_flags(c) == 0); 1332 assert(fido_cred_fmt(c) == NULL); 1333 assert(fido_cred_id_len(c) == 0); 1334 assert(fido_cred_id_ptr(c) == NULL); 1335 assert(fido_cred_pubkey_len(c) == 0); 1336 assert(fido_cred_pubkey_ptr(c) == NULL); 1337 assert(fido_cred_rp_id(c) == NULL); 1338 assert(fido_cred_rp_name(c) == NULL); 1339 assert(fido_cred_sig_len(c) == 0); 1340 assert(fido_cred_sig_ptr(c) == NULL); 1341 assert(fido_cred_x5c_len(c) == 0); 1342 assert(fido_cred_x5c_ptr(c) == NULL); 1343 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1344 assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0); 1345 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1346 free_cred(c); 1347 free(junk); 1348 free(unset); 1349 } 1350 1351 static void 1352 junk_sig(void) 1353 { 1354 fido_cred_t *c; 1355 unsigned char *junk; 1356 1357 junk = malloc(sizeof(sig)); 1358 assert(junk != NULL); 1359 memcpy(junk, sig, sizeof(sig)); 1360 junk[0] = (unsigned char)~junk[0]; 1361 1362 c = alloc_cred(); 1363 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1364 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1365 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1366 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1367 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1368 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1369 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1370 assert(fido_cred_set_sig(c, junk, sizeof(sig)) == FIDO_OK); 1371 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1372 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_SIG); 1373 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1374 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1375 assert(fido_cred_id_len(c) == sizeof(id)); 1376 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1377 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1378 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1379 free_cred(c); 1380 free(junk); 1381 } 1382 1383 static void 1384 junk_x509(void) 1385 { 1386 fido_cred_t *c; 1387 unsigned char *junk; 1388 1389 junk = malloc(sizeof(x509)); 1390 assert(junk != NULL); 1391 memcpy(junk, x509, sizeof(x509)); 1392 junk[0] = (unsigned char)~junk[0]; 1393 1394 c = alloc_cred(); 1395 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1396 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1397 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1398 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1399 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1400 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1401 assert(fido_cred_set_x509(c, junk, sizeof(x509)) == FIDO_OK); 1402 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1403 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1404 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_SIG); 1405 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1406 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1407 assert(fido_cred_id_len(c) == sizeof(id)); 1408 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1409 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1410 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1411 free_cred(c); 1412 free(junk); 1413 } 1414 1415 /* github issue #6 */ 1416 static void 1417 invalid_type(void) 1418 { 1419 fido_cred_t *c; 1420 unsigned char *unset; 1421 1422 unset = calloc(1, sizeof(aaguid)); 1423 assert(unset != NULL); 1424 1425 c = alloc_cred(); 1426 assert(fido_cred_set_type(c, COSE_RS256) == FIDO_OK); 1427 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1428 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1429 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_ERR_INVALID_ARGUMENT); 1430 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1431 assert(fido_cred_set_uv(c, FIDO_OPT_FALSE) == FIDO_OK); 1432 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1433 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1434 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1435 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1436 assert(fido_cred_pubkey_len(c) == 0); 1437 assert(fido_cred_pubkey_ptr(c) == NULL); 1438 assert(fido_cred_id_len(c) == 0); 1439 assert(fido_cred_id_ptr(c) == NULL); 1440 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1441 assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0); 1442 free_cred(c); 1443 free(unset); 1444 } 1445 1446 /* cbor_serialize_alloc misuse */ 1447 static void 1448 bad_cbor_serialize(void) 1449 { 1450 fido_cred_t *c; 1451 1452 c = alloc_cred(); 1453 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1454 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1455 assert(fido_cred_authdata_len(c) == sizeof(authdata)); 1456 free_cred(c); 1457 } 1458 1459 static void 1460 duplicate_keys(void) 1461 { 1462 fido_cred_t *c; 1463 1464 c = alloc_cred(); 1465 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1466 assert(fido_cred_set_authdata(c, authdata_dupkeys, 1467 sizeof(authdata_dupkeys)) == FIDO_ERR_INVALID_ARGUMENT); 1468 free_cred(c); 1469 } 1470 1471 static void 1472 unsorted_keys(void) 1473 { 1474 fido_cred_t *c; 1475 1476 c = alloc_cred(); 1477 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1478 assert(fido_cred_set_authdata(c, authdata_unsorted_keys, 1479 sizeof(authdata_unsorted_keys)) == FIDO_ERR_INVALID_ARGUMENT); 1480 free_cred(c); 1481 } 1482 1483 static void 1484 wrong_credprot(void) 1485 { 1486 fido_cred_t *c; 1487 1488 c = alloc_cred(); 1489 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1490 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK); 1491 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1492 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK); 1493 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 1494 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 1495 assert(fido_cred_set_prot(c, FIDO_CRED_PROT_UV_OPTIONAL_WITH_ID) == FIDO_OK); 1496 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1497 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_PARAM); 1498 free_cred(c); 1499 } 1500 1501 static void 1502 raw_authdata(void) 1503 { 1504 fido_cred_t *c; 1505 cbor_item_t *item; 1506 struct cbor_load_result cbor_result; 1507 const unsigned char *ptr; 1508 unsigned char *cbor; 1509 size_t len; 1510 size_t cbor_len; 1511 size_t alloclen; 1512 1513 c = alloc_cred(); 1514 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1515 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK); 1516 assert((ptr = fido_cred_authdata_ptr(c)) != NULL); 1517 assert((len = fido_cred_authdata_len(c)) != 0); 1518 assert((item = cbor_load(ptr, len, &cbor_result)) != NULL); 1519 assert(cbor_result.read == len); 1520 assert(cbor_isa_bytestring(item)); 1521 assert((ptr = fido_cred_authdata_raw_ptr(c)) != NULL); 1522 assert((len = fido_cred_authdata_raw_len(c)) != 0); 1523 assert(cbor_bytestring_length(item) == len); 1524 assert(memcmp(ptr, cbor_bytestring_handle(item), len) == 0); 1525 assert((len = fido_cred_authdata_len(c)) != 0); 1526 assert((cbor_len = cbor_serialize_alloc(item, &cbor, &alloclen)) == len); 1527 assert((ptr = cbor_bytestring_handle(item)) != NULL); 1528 assert((len = cbor_bytestring_length(item)) != 0); 1529 assert(fido_cred_set_authdata_raw(c, ptr, len) == FIDO_OK); 1530 assert((ptr = fido_cred_authdata_ptr(c)) != NULL); 1531 assert((len = fido_cred_authdata_len(c)) != 0); 1532 assert(len == cbor_len); 1533 assert(memcmp(cbor, ptr, len) == 0); 1534 assert(cbor_len == sizeof(authdata)); 1535 assert(memcmp(cbor, authdata, cbor_len) == 0); 1536 cbor_decref(&item); 1537 free(cbor); 1538 free_cred(c); 1539 } 1540 1541 static void 1542 fmt_none(void) 1543 { 1544 fido_cred_t *c; 1545 1546 c = alloc_cred(); 1547 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 1548 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == 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_fmt(c, "none") == FIDO_OK); 1554 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 1555 assert(fido_cred_prot(c) == 0); 1556 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 1557 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 1558 assert(fido_cred_id_len(c) == sizeof(id)); 1559 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 1560 assert(fido_cred_aaguid_len(c) == sizeof(aaguid)); 1561 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0); 1562 free_cred(c); 1563 } 1564 1565 static void 1566 valid_tpm_cred(void) 1567 { 1568 fido_cred_t *c; 1569 1570 c = alloc_cred(); 1571 assert(fido_cred_set_type(c, COSE_RS256) == FIDO_OK); 1572 assert(fido_cred_set_clientdata(c, cdh, sizeof(cdh)) == FIDO_OK); 1573 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK); 1574 assert(fido_cred_set_authdata(c, authdata_tpm, sizeof(authdata_tpm)) == FIDO_OK); 1575 assert(fido_cred_set_rk(c, FIDO_OPT_FALSE) == FIDO_OK); 1576 assert(fido_cred_set_uv(c, FIDO_OPT_TRUE) == FIDO_OK); 1577 assert(fido_cred_set_fmt(c, "tpm") == FIDO_OK); 1578 assert(fido_cred_set_attstmt(c, attstmt_tpm, sizeof(attstmt_tpm)) == FIDO_OK); 1579 assert(fido_cred_verify(c) == FIDO_OK); 1580 assert(fido_cred_prot(c) == 0); 1581 assert(fido_cred_pubkey_len(c) == sizeof(pubkey_tpm)); 1582 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey_tpm, sizeof(pubkey_tpm)) == 0); 1583 assert(fido_cred_id_len(c) == sizeof(id_tpm)); 1584 assert(memcmp(fido_cred_id_ptr(c), id_tpm, sizeof(id_tpm)) == 0); 1585 assert(fido_cred_aaguid_len(c) == sizeof(aaguid_tpm)); 1586 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid_tpm, sizeof(aaguid_tpm)) == 0); 1587 free_cred(c); 1588 } 1589 1590 int 1591 main(void) 1592 { 1593 fido_init(0); 1594 1595 empty_cred(); 1596 valid_cred(); 1597 no_cdh(); 1598 no_rp_id(); 1599 no_rp_name(); 1600 no_authdata(); 1601 no_x509(); 1602 no_sig(); 1603 no_fmt(); 1604 junk_cdh(); 1605 junk_fmt(); 1606 junk_rp_id(); 1607 junk_rp_name(); 1608 junk_authdata(); 1609 junk_x509(); 1610 junk_sig(); 1611 wrong_options(); 1612 invalid_type(); 1613 bad_cbor_serialize(); 1614 duplicate_keys(); 1615 unsorted_keys(); 1616 wrong_credprot(); 1617 raw_authdata(); 1618 fmt_none(); 1619 valid_tpm_cred(); 1620 1621 exit(0); 1622 } 1623