1/* 2 * lws-api-test-jose - RFC8152 cose_key tests 3 * 4 * Written in 2010-2021 by Andy Green <andy@warmcat.com> 5 * 6 * This file is made available under the Creative Commons CC0 1.0 7 * Universal Public Domain Dedication. 8 * 9 * Raw key CBOR created from descriptions at 10 * 11 * https://github.com/cose-wg/Examples/blob/master/KeySet.txt 12 */ 13 14#include <libwebsockets.h> 15#include <stdlib.h> 16#include <fcntl.h> 17 18static int 19key_import_cb(struct lws_cose_key *s, void *user) 20{ 21 lwsl_notice("%s: key type %lld\n", __func__, (long long)s->kty); 22 23 return 0; 24} 25 26static const uint8_t 27 cose_key1[] = { 28 0xa6, 0x01, 0x02, 0x02, 0x62, 29 0x31, 0x31, 0x20, 0x01, 0x21, 30 0x58, 0x20, 0xba, 0xc5, 0xb1, 31 0x1c, 0xad, 0x8f, 0x99, 0xf9, 32 0xc7, 0x2b, 0x05, 0xcf, 0x4b, 33 0x9e, 0x26, 0xd2, 0x44, 0xdc, 34 0x18, 0x9f, 0x74, 0x52, 0x28, 35 0x25, 0x5a, 0x21, 0x9a, 0x86, 36 0xd6, 0xa0, 0x9e, 0xff, 0x22, 37 0x58, 0x20, 0x20, 0x13, 0x8b, 38 0xf8, 0x2d, 0xc1, 0xb6, 0xd5, 39 0x62, 0xbe, 0x0f, 0xa5, 0x4a, 40 0xb7, 0x80, 0x4a, 0x3a, 0x64, 41 0xb6, 0xd7, 0x2c, 0xcf, 0xed, 42 0x6b, 0x6f, 0xb6, 0xed, 0x28, 43 0xbb, 0xfc, 0x11, 0x7e, 0x23, 44 0x58, 0x20, 0x57, 0xc9, 0x20, 45 0x77, 0x66, 0x41, 0x46, 0xe8, 46 0x76, 0x76, 0x0c, 0x95, 0x20, 47 0xd0, 0x54, 0xaa, 0x93, 0xc3, 48 0xaf, 0xb0, 0x4e, 0x30, 0x67, 49 0x05, 0xdb, 0x60, 0x90, 0x30, 50 0x85, 0x07, 0xb4, 0xd3 }, 51 cose_key2[] = { 52 0xa6, 0x01, 0x02, 0x02, 0x78, 53 0x24, 0x6d, 0x65, 0x72, 0x69, 54 0x61, 0x64, 0x6f, 0x63, 0x2e, 55 0x62, 0x72, 0x61, 0x6e, 0x64, 56 0x79, 0x62, 0x75, 0x63, 0x6b, 57 0x40, 0x62, 0x75, 0x63, 0x6b, 58 0x6c, 0x61, 0x6e, 0x64, 0x2e, 59 0x65, 0x78, 0x61, 0x6d, 0x70, 60 0x6c, 0x65, 0x20, 0x01, 0x21, 61 0x58, 0x20, 0x65, 0xed, 0xa5, 62 0xa1, 0x25, 0x77, 0xc2, 0xba, 63 0xe8, 0x29, 0x43, 0x7f, 0xe3, 64 0x38, 0x70, 0x1a, 0x10, 0xaa, 65 0xa3, 0x75, 0xe1, 0xbb, 0x5b, 66 0x5d, 0xe1, 0x08, 0xde, 0x43, 67 0x9c, 0x08, 0x55, 0x1d, 0x22, 68 0x58, 0x20, 0x1e, 0x52, 0xed, 69 0x75, 0x70, 0x11, 0x63, 0xf7, 70 0xf9, 0xe4, 0x0d, 0xdf, 0x9f, 71 0x34, 0x1b, 0x3d, 0xc9, 0xba, 72 0x86, 0x0a, 0xf7, 0xe0, 0xca, 73 0x7c, 0xa7, 0xe9, 0xee, 0xcd, 74 0x00, 0x84, 0xd1, 0x9c, 0x23, 75 0x58, 0x20, 0xaf, 0xf9, 0x07, 76 0xc9, 0x9f, 0x9a, 0xd3, 0xaa, 77 0xe6, 0xc4, 0xcd, 0xf2, 0x11, 78 0x22, 0xbc, 0xe2, 0xbd, 0x68, 79 0xb5, 0x28, 0x3e, 0x69, 0x07, 80 0x15, 0x4a, 0xd9, 0x11, 0x84, 81 0x0f, 0xa2, 0x08, 0xcf }, 82 83 cose_key3[] = { 0xa3, 0x01, 0x04, 0x02, 0x6a, 84 0x6f, 0x75, 0x72, 0x2d, 0x73, 85 0x65, 0x63, 0x72, 0x65, 0x74, 86 0x20, 0x58, 0x20, 0x84, 0x9b, 87 0x57, 0x21, 0x9d, 0xae, 0x48, 88 0xde, 0x64, 0x6d, 0x07, 0xdb, 89 0xb5, 0x33, 0x56, 0x6e, 0x97, 90 0x66, 0x86, 0x45, 0x7c, 0x14, 91 0x91, 0xbe, 0x3a, 0x76, 0xdc, 92 0xea, 0x6c, 0x42, 0x71, 0x88 }, 93 94 cose_key4[] = { 0xa6, 0x01, 0x02, 0x02, 0x78, 95 0x1e, 0x62, 0x69, 0x6c, 0x62, 96 0x6f, 0x2e, 0x62, 0x61, 0x67, 97 0x67, 0x69, 0x6e, 0x73, 0x40, 98 0x68, 0x6f, 0x62, 0x62, 0x69, 99 0x74, 0x6f, 0x6e, 0x2e, 0x65, 100 0x78, 0x61, 0x6d, 0x70, 0x6c, 101 0x65, 0x20, 0x03, 0x21, 0x58, 102 0x42, 0x00, 0x72, 0x99, 0x2c, 103 0xb3, 0xac, 0x08, 0xec, 0xf3, 104 0xe5, 0xc6, 0x3d, 0xed, 0xec, 105 0x0d, 0x51, 0xa8, 0xc1, 0xf7, 106 0x9e, 0xf2, 0xf8, 0x2f, 0x94, 107 0xf3, 0xc7, 0x37, 0xbf, 0x5d, 108 0xe7, 0x98, 0x66, 0x71, 0xea, 109 0xc6, 0x25, 0xfe, 0x82, 0x57, 110 0xbb, 0xd0, 0x39, 0x46, 0x44, 111 0xca, 0xaa, 0x3a, 0xaf, 0x8f, 112 0x27, 0xa4, 0x58, 0x5f, 0xbb, 113 0xca, 0xd0, 0xf2, 0x45, 0x76, 114 0x20, 0x08, 0x5e, 0x5c, 0x8f, 115 0x42, 0xad, 0x22, 0x58, 0x42, 116 0x01, 0xdc, 0xa6, 0x94, 0x7b, 117 0xce, 0x88, 0xbc, 0x57, 0x90, 118 0x48, 0x5a, 0xc9, 0x74, 0x27, 119 0x34, 0x2b, 0xc3, 0x5f, 0x88, 120 0x7d, 0x86, 0xd6, 0x5a, 0x08, 121 0x93, 0x77, 0xe2, 0x47, 0xe6, 122 0x0b, 0xaa, 0x55, 0xe4, 0xe8, 123 0x50, 0x1e, 0x2a, 0xda, 0x57, 124 0x24, 0xac, 0x51, 0xd6, 0x90, 125 0x90, 0x08, 0x03, 0x3e, 0xbc, 126 0x10, 0xac, 0x99, 0x9b, 0x9d, 127 0x7f, 0x5c, 0xc2, 0x51, 0x9f, 128 0x3f, 0xe1, 0xea, 0x1d, 0x94, 129 0x75, 0x23, 0x58, 0x42, 0x00, 130 0x08, 0x51, 0x38, 0xdd, 0xab, 131 0xf5, 0xca, 0x97, 0x5f, 0x58, 132 0x60, 0xf9, 0x1a, 0x08, 0xe9, 133 0x1d, 0x6d, 0x5f, 0x9a, 0x76, 134 0xad, 0x40, 0x18, 0x76, 0x6a, 135 0x47, 0x66, 0x80, 0xb5, 0x5c, 136 0xd3, 0x39, 0xe8, 0xab, 0x6c, 137 0x72, 0xb5, 0xfa, 0xcd, 0xb2, 138 0xa2, 0xa5, 0x0a, 0xc2, 0x5b, 139 0xd0, 0x86, 0x64, 0x7d, 0xd3, 140 0xe2, 0xe6, 0xe9, 0x9e, 0x84, 141 0xca, 0x2c, 0x36, 0x09, 0xfd, 142 0xf1, 0x77, 0xfe, 0xb2, 0x6d }, 143 cose_key5[] = { 0xa3, 0x01, 0x04, 0x02, 0x6b, 144 0x6f, 0x75, 0x72, 0x2d, 0x73, 145 0x65, 0x63, 0x72, 0x65, 0x74, 146 0x32, 0x20, 0x50, 0x84, 0x9b, 147 0x57, 0x86, 0x45, 0x7c, 0x14, 148 0x91, 0xbe, 0x3a, 0x76, 0xdc, 149 0xea, 0x6c, 0x42, 0x71 }, 150 151 cose_key6[] = { 0xa6, 0x01, 0x02, 0x02, 0x78, 152 0x21, 0x70, 0x65, 0x72, 0x65, 153 0x67, 0x72, 0x69, 0x6e, 0x2e, 154 0x74, 0x6f, 0x6f, 0x6b, 0x40, 155 0x74, 0x75, 0x63, 0x6b, 0x62, 156 0x6f, 0x72, 0x6f, 0x75, 0x67, 157 0x68, 0x2e, 0x65, 0x78, 0x61, 158 0x6d, 0x70, 0x6c, 0x65, 0x20, 159 0x01, 0x21, 0x58, 0x20, 0x98, 160 0xf5, 0x0a, 0x4f, 0xf6, 0xc0, 161 0x58, 0x61, 0xc8, 0x86, 0x0d, 162 0x13, 0xa6, 0x38, 0xea, 0x56, 163 0xc3, 0xf5, 0xad, 0x75, 0x90, 164 0xbb, 0xfb, 0xf0, 0x54, 0xe1, 165 0xc7, 0xb4, 0xd9, 0x1d, 0x62, 166 0x80, 0x22, 0x58, 0x20, 0xf0, 167 0x14, 0x00, 0xb0, 0x89, 0x86, 168 0x78, 0x04, 0xb8, 0xe9, 0xfc, 169 0x96, 0xc3, 0x93, 0x21, 0x61, 170 0xf1, 0x93, 0x4f, 0x42, 0x23, 171 0x06, 0x91, 0x70, 0xd9, 0x24, 172 0xb7, 0xe0, 0x3b, 0xf8, 0x22, 173 0xbb, 0x23, 0x58, 0x20, 0x02, 174 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 175 0x43, 0xd4, 0x86, 0x8d, 0x87, 176 0xce, 0xb2, 0x35, 0x31, 0x61, 177 0x74, 0x0a, 0xac, 0xf1, 0xf7, 178 0x16, 0x36, 0x47, 0x98, 0x4b, 179 0x52, 0x2a, 0x84, 0x8d, 0xf1, 180 0xc3 }, 181 cose_key7[] = { 0xa3, 0x01, 0x04, 0x02, 0x58, 182 0x24, 0x30, 0x31, 0x38, 0x63, 183 0x30, 0x61, 0x65, 0x35, 0x2d, 184 0x34, 0x64, 0x39, 0x62, 0x2d, 185 0x34, 0x37, 0x31, 0x62, 0x2d, 186 0x62, 0x66, 0x64, 0x36, 0x2d, 187 0x65, 0x65, 0x66, 0x33, 0x31, 188 0x34, 0x62, 0x63, 0x37, 0x30, 189 0x33, 0x37, 0x20, 0x58, 0x20, 190 0x84, 0x9b, 0x57, 0x21, 0x9d, 191 0xae, 0x48, 0xde, 0x64, 0x6d, 192 0x07, 0xdb, 0xb5, 0x33, 0x56, 193 0x6e, 0x97, 0x66, 0x86, 0x45, 194 0x7c, 0x14, 0x91, 0xbe, 0x3a, 195 0x76, 0xdc, 0xea, 0x6c, 0x42, 196 0x71, 0x88 }, 197 198 cose_key8[] = { 199 /* kid "sec-48" for hmac 384 */ 200 201 0xa3, 0x01, 0x04, 0x02, 0x66, 202 0x73, 0x65, 0x63, 0x2d, 0x34, 203 0x38, 0x20, 0x58, 0x30, 0x84, 204 0x9b, 0x57, 0x21, 0x9d, 0xae, 205 0x48, 0xde, 0x64, 0x6d, 0x07, 206 0xdb, 0xb5, 0x33, 0x56, 0x6e, 207 0x97, 0x66, 0x86, 0x45, 0x7c, 208 0x14, 0x91, 0xbe, 0x3a, 0x76, 209 0xdc, 0xea, 0x6c, 0x42, 0x71, 210 0x88, 0x00, 0x11, 0x22, 0x33, 211 0x77, 0x88, 0x99, 0xaa, 0x21, 212 0x22, 0x23, 0x24, 0x25, 0x26, 213 0x27, 0x28 214 }, 215 216 cose_key9[] = { 217 /* kid "sec-64" for hmac 512 */ 218 219 0xa3, 0x01, 0x04, 0x02, 0x46, 220 0x73, 0x65, 0x63, 0x2d, 0x36, 221 0x34, 0x20, 0x58, 0x40, 0x84, 222 0x9b, 0x57, 0x21, 0x9d, 0xae, 223 0x48, 0xde, 0x64, 0x6d, 0x07, 224 0xdb, 0xb5, 0x33, 0x56, 0x6e, 225 0x97, 0x66, 0x86, 0x45, 0x7c, 226 0x14, 0x91, 0xbe, 0x3a, 0x76, 227 0xdc, 0xea, 0x6c, 0x42, 0x71, 228 0x88, 0x00, 0x11, 0x22, 0x33, 229 0x77, 0x88, 0x99, 0xaa, 0x21, 230 0x22, 0x23, 0x24, 0x25, 0x26, 231 0x27, 0x28, 0xaa, 0xbb, 0xcc, 232 0xdd, 0xee, 0xff, 0xa5, 0xa6, 233 0xa7, 0xa8, 0xa9, 0xa0, 0xb1, 234 0xb2, 0xb3, 0xb4, 235 }, 236 237 cose_key10[] = { /* kid "11" (again) ed22519 OKP key */ 238 0xa5, 0x01, 0x01, 0x02, 0x42, 239 0x31, 0x31, 0x20, 0x06, 0x21, 240 0x58, 0x20, 0xd7, 0x5a, 0x98, 241 0x01, 0x82, 0xb1, 0x0a, 0xb7, 242 0xd5, 0x4b, 0xfe, 0xd3, 0xc9, 243 0x64, 0x07, 0x3a, 0x0e, 0xe1, 244 0x72, 0xf3, 0xda, 0xa6, 0x23, 245 0x25, 0xaf, 0x02, 0x1a, 0x68, 246 0xf7, 0x07, 0x51, 0x1a, 0x23, 247 0x58, 0x20, 0x9d, 0x61, 0xb1, 248 0x9d, 0xef, 0xfd, 0x5a, 0x60, 249 0xba, 0x84, 0x4a, 0xf4, 0x92, 250 0xec, 0x2c, 0xc4, 0x44, 0x49, 251 0xc5, 0x69, 0x7b, 0x32, 0x69, 252 0x19, 0x70, 0x3b, 0xac, 0x03, 253 0x1c, 0xae, 0x7f, 0x60 254 }, 255 256 cose_key_set1[] = { 257 258 0x89, 259 260 0xa6, 0x01, 0x02, 0x02, 0x42, 261 0x31, 0x31, 0x20, 0x01, 0x21, 262 0x58, 0x20, 0xba, 0xc5, 0xb1, 263 0x1c, 0xad, 0x8f, 0x99, 0xf9, 264 0xc7, 0x2b, 0x05, 0xcf, 0x4b, 265 0x9e, 0x26, 0xd2, 0x44, 0xdc, 266 0x18, 0x9f, 0x74, 0x52, 0x28, 267 0x25, 0x5a, 0x21, 0x9a, 0x86, 268 0xd6, 0xa0, 0x9e, 0xff, 0x22, 269 0x58, 0x20, 0x20, 0x13, 0x8b, 270 0xf8, 0x2d, 0xc1, 0xb6, 0xd5, 271 0x62, 0xbe, 0x0f, 0xa5, 0x4a, 272 0xb7, 0x80, 0x4a, 0x3a, 0x64, 273 0xb6, 0xd7, 0x2c, 0xcf, 0xed, 274 0x6b, 0x6f, 0xb6, 0xed, 0x28, 275 0xbb, 0xfc, 0x11, 0x7e, 0x23, 276 0x58, 0x20, 0x57, 0xc9, 0x20, 277 0x77, 0x66, 0x41, 0x46, 0xe8, 278 0x76, 0x76, 0x0c, 0x95, 0x20, 279 0xd0, 0x54, 0xaa, 0x93, 0xc3, 280 0xaf, 0xb0, 0x4e, 0x30, 0x67, 281 0x05, 0xdb, 0x60, 0x90, 0x30, 282 0x85, 0x07, 0xb4, 0xd3, 283 284 0xa6, 0x01, 0x02, 0x02, 0x58, 285 0x24, 0x6d, 0x65, 0x72, 0x69, 286 0x61, 0x64, 0x6f, 0x63, 0x2e, 287 0x62, 0x72, 0x61, 0x6e, 0x64, 288 0x79, 0x62, 0x75, 0x63, 0x6b, 289 0x40, 0x62, 0x75, 0x63, 0x6b, 290 0x6c, 0x61, 0x6e, 0x64, 0x2e, 291 0x65, 0x78, 0x61, 0x6d, 0x70, 292 0x6c, 0x65, 0x20, 0x01, 0x21, 293 0x58, 0x20, 0x65, 0xed, 0xa5, 294 0xa1, 0x25, 0x77, 0xc2, 0xba, 295 0xe8, 0x29, 0x43, 0x7f, 0xe3, 296 0x38, 0x70, 0x1a, 0x10, 0xaa, 297 0xa3, 0x75, 0xe1, 0xbb, 0x5b, 298 0x5d, 0xe1, 0x08, 0xde, 0x43, 299 0x9c, 0x08, 0x55, 0x1d, 0x22, 300 0x58, 0x20, 0x1e, 0x52, 0xed, 301 0x75, 0x70, 0x11, 0x63, 0xf7, 302 0xf9, 0xe4, 0x0d, 0xdf, 0x9f, 303 0x34, 0x1b, 0x3d, 0xc9, 0xba, 304 0x86, 0x0a, 0xf7, 0xe0, 0xca, 305 0x7c, 0xa7, 0xe9, 0xee, 0xcd, 306 0x00, 0x84, 0xd1, 0x9c, 0x23, 307 0x58, 0x20, 0xaf, 0xf9, 0x07, 308 0xc9, 0x9f, 0x9a, 0xd3, 0xaa, 309 0xe6, 0xc4, 0xcd, 0xf2, 0x11, 310 0x22, 0xbc, 0xe2, 0xbd, 0x68, 311 0xb5, 0x28, 0x3e, 0x69, 0x07, 312 0x15, 0x4a, 0xd9, 0x11, 0x84, 313 0x0f, 0xa2, 0x08, 0xcf, 314 315 0xa3, 0x01, 0x04, 0x02, 0x4a, 316 0x6f, 0x75, 0x72, 0x2d, 0x73, 317 0x65, 0x63, 0x72, 0x65, 0x74, 318 0x20, 0x58, 0x20, 0x84, 0x9b, 319 0x57, 0x21, 0x9d, 0xae, 0x48, 320 0xde, 0x64, 0x6d, 0x07, 0xdb, 321 0xb5, 0x33, 0x56, 0x6e, 0x97, 322 0x66, 0x86, 0x45, 0x7c, 0x14, 323 0x91, 0xbe, 0x3a, 0x76, 0xdc, 324 0xea, 0x6c, 0x42, 0x71, 0x88, 325 326 0xa6, 0x01, 0x02, 0x02, 0x58, 327 0x1e, 0x62, 0x69, 0x6c, 0x62, 328 0x6f, 0x2e, 0x62, 0x61, 0x67, 329 0x67, 0x69, 0x6e, 0x73, 0x40, 330 0x68, 0x6f, 0x62, 0x62, 0x69, 331 0x74, 0x6f, 0x6e, 0x2e, 0x65, 332 0x78, 0x61, 0x6d, 0x70, 0x6c, 333 0x65, 0x20, 0x03, 0x21, 0x58, 334 0x42, 0x00, 0x72, 0x99, 0x2c, 335 0xb3, 0xac, 0x08, 0xec, 0xf3, 336 0xe5, 0xc6, 0x3d, 0xed, 0xec, 337 0x0d, 0x51, 0xa8, 0xc1, 0xf7, 338 0x9e, 0xf2, 0xf8, 0x2f, 0x94, 339 0xf3, 0xc7, 0x37, 0xbf, 0x5d, 340 0xe7, 0x98, 0x66, 0x71, 0xea, 341 0xc6, 0x25, 0xfe, 0x82, 0x57, 342 0xbb, 0xd0, 0x39, 0x46, 0x44, 343 0xca, 0xaa, 0x3a, 0xaf, 0x8f, 344 0x27, 0xa4, 0x58, 0x5f, 0xbb, 345 0xca, 0xd0, 0xf2, 0x45, 0x76, 346 0x20, 0x08, 0x5e, 0x5c, 0x8f, 347 0x42, 0xad, 0x22, 0x58, 0x42, 348 0x01, 0xdc, 0xa6, 0x94, 0x7b, 349 0xce, 0x88, 0xbc, 0x57, 0x90, 350 0x48, 0x5a, 0xc9, 0x74, 0x27, 351 0x34, 0x2b, 0xc3, 0x5f, 0x88, 352 0x7d, 0x86, 0xd6, 0x5a, 0x08, 353 0x93, 0x77, 0xe2, 0x47, 0xe6, 354 0x0b, 0xaa, 0x55, 0xe4, 0xe8, 355 0x50, 0x1e, 0x2a, 0xda, 0x57, 356 0x24, 0xac, 0x51, 0xd6, 0x90, 357 0x90, 0x08, 0x03, 0x3e, 0xbc, 358 0x10, 0xac, 0x99, 0x9b, 0x9d, 359 0x7f, 0x5c, 0xc2, 0x51, 0x9f, 360 0x3f, 0xe1, 0xea, 0x1d, 0x94, 361 0x75, 0x23, 0x58, 0x42, 0x00, 362 0x08, 0x51, 0x38, 0xdd, 0xab, 363 0xf5, 0xca, 0x97, 0x5f, 0x58, 364 0x60, 0xf9, 0x1a, 0x08, 0xe9, 365 0x1d, 0x6d, 0x5f, 0x9a, 0x76, 366 0xad, 0x40, 0x18, 0x76, 0x6a, 367 0x47, 0x66, 0x80, 0xb5, 0x5c, 368 0xd3, 0x39, 0xe8, 0xab, 0x6c, 369 0x72, 0xb5, 0xfa, 0xcd, 0xb2, 370 0xa2, 0xa5, 0x0a, 0xc2, 0x5b, 371 0xd0, 0x86, 0x64, 0x7d, 0xd3, 372 0xe2, 0xe6, 0xe9, 0x9e, 0x84, 373 0xca, 0x2c, 0x36, 0x09, 0xfd, 374 0xf1, 0x77, 0xfe, 0xb2, 0x6d, 375 376 0xa3, 0x01, 0x04, 0x02, 0x4b, 377 0x6f, 0x75, 0x72, 0x2d, 0x73, 378 0x65, 0x63, 0x72, 0x65, 0x74, 379 0x32, 0x20, 0x50, 0x84, 0x9b, 380 0x57, 0x86, 0x45, 0x7c, 0x14, 381 0x91, 0xbe, 0x3a, 0x76, 0xdc, 382 0xea, 0x6c, 0x42, 0x71, 383 384 0xa6, 0x01, 0x02, 0x02, 0x58, 385 0x21, 0x70, 0x65, 0x72, 0x65, 386 0x67, 0x72, 0x69, 0x6e, 0x2e, 387 0x74, 0x6f, 0x6f, 0x6b, 0x40, 388 0x74, 0x75, 0x63, 0x6b, 0x62, 389 0x6f, 0x72, 0x6f, 0x75, 0x67, 390 0x68, 0x2e, 0x65, 0x78, 0x61, 391 0x6d, 0x70, 0x6c, 0x65, 0x20, 392 0x01, 0x21, 0x58, 0x20, 0x98, 393 0xf5, 0x0a, 0x4f, 0xf6, 0xc0, 394 0x58, 0x61, 0xc8, 0x86, 0x0d, 395 0x13, 0xa6, 0x38, 0xea, 0x56, 396 0xc3, 0xf5, 0xad, 0x75, 0x90, 397 0xbb, 0xfb, 0xf0, 0x54, 0xe1, 398 0xc7, 0xb4, 0xd9, 0x1d, 0x62, 399 0x80, 0x22, 0x58, 0x20, 0xf0, 400 0x14, 0x00, 0xb0, 0x89, 0x86, 401 0x78, 0x04, 0xb8, 0xe9, 0xfc, 402 0x96, 0xc3, 0x93, 0x21, 0x61, 403 0xf1, 0x93, 0x4f, 0x42, 0x23, 404 0x06, 0x91, 0x70, 0xd9, 0x24, 405 0xb7, 0xe0, 0x3b, 0xf8, 0x22, 406 0xbb, 0x23, 0x58, 0x20, 0x02, 407 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 408 0x43, 0xd4, 0x86, 0x8d, 0x87, 409 0xce, 0xb2, 0x35, 0x31, 0x61, 410 0x74, 0x0a, 0xac, 0xf1, 0xf7, 411 0x16, 0x36, 0x47, 0x98, 0x4b, 412 0x52, 0x2a, 0x84, 0x8d, 0xf1, 413 0xc3, 414 415 0xa3, 0x01, 0x04, 0x02, 0x58, 416 0x24, 0x30, 0x31, 0x38, 0x63, 417 0x30, 0x61, 0x65, 0x35, 0x2d, 418 0x34, 0x64, 0x39, 0x62, 0x2d, 419 0x34, 0x37, 0x31, 0x62, 0x2d, 420 0x62, 0x66, 0x64, 0x36, 0x2d, 421 0x65, 0x65, 0x66, 0x33, 0x31, 422 0x34, 0x62, 0x63, 0x37, 0x30, 423 0x33, 0x37, 0x04, 0x58, 0x20, 424 0x84, 0x9b, 0x57, 0x21, 0x9d, 425 0xae, 0x48, 0xde, 0x64, 0x6d, 426 0x07, 0xdb, 0xb5, 0x33, 0x56, 427 0x6e, 0x97, 0x66, 0x86, 0x45, 428 0x7c, 0x14, 0x91, 0xbe, 0x3a, 429 0x76, 0xdc, 0xea, 0x6c, 0x42, 430 0x71, 0x88, 431 432 /* kid "sec-48" for hmac 384 */ 433 434 0xa3, 0x01, 0x04, 0x02, 0x46, 435 0x73, 0x65, 0x63, 0x2d, 0x34, 436 0x38, 0x20, 0x58, 0x30, 0x84, 437 0x9b, 0x57, 0x21, 0x9d, 0xae, 438 0x48, 0xde, 0x64, 0x6d, 0x07, 439 0xdb, 0xb5, 0x33, 0x56, 0x6e, 440 0x97, 0x66, 0x86, 0x45, 0x7c, 441 0x14, 0x91, 0xbe, 0x3a, 0x76, 442 0xdc, 0xea, 0x6c, 0x42, 0x71, 443 0x88, 0x00, 0x11, 0x22, 0x33, 444 0x77, 0x88, 0x99, 0xaa, 0x21, 445 0x22, 0x23, 0x24, 0x25, 0x26, 446 0x27, 0x28, 447 448 /* kid "sec-64" for hmac 512 */ 449 450 0xa3, 0x01, 0x04, 0x02, 0x46, 451 0x73, 0x65, 0x63, 0x2d, 0x36, 452 0x34, 0x20, 0x58, 0x40, 0x84, 453 0x9b, 0x57, 0x21, 0x9d, 0xae, 454 0x48, 0xde, 0x64, 0x6d, 0x07, 455 0xdb, 0xb5, 0x33, 0x56, 0x6e, 456 0x97, 0x66, 0x86, 0x45, 0x7c, 457 0x14, 0x91, 0xbe, 0x3a, 0x76, 458 0xdc, 0xea, 0x6c, 0x42, 0x71, 459 0x88, 0x00, 0x11, 0x22, 0x33, 460 0x77, 0x88, 0x99, 0xaa, 0x21, 461 0x22, 0x23, 0x24, 0x25, 0x26, 462 0x27, 0x28, 0xaa, 0xbb, 0xcc, 463 0xdd, 0xee, 0xff, 0xa5, 0xa6, 464 0xa7, 0xa8, 0xa9, 0xa0, 0xb1, 465 0xb2, 0xb3, 0xb4, 466} 467; 468 469struct keyinfo { 470 const uint8_t *set; 471 size_t len; 472}; 473 474struct keyinfo keyset1 = { cose_key_set1, sizeof(cose_key_set1) }, 475 key3 = { cose_key3, sizeof(cose_key3) }, 476 key8 = { cose_key8, sizeof(cose_key8) }, 477 key9 = { cose_key9, sizeof(cose_key9) }, 478 key10 = { cose_key10, sizeof(cose_key10) } 479; 480 481/* key pieces */ 482 483static const uint8_t 484 key1_x[] = { 0xba, 0xc5, 0xb1, 0x1c, 0xad, 485 0x8f, 0x99, 0xf9, 0xc7, 0x2b, 486 0x05, 0xcf, 0x4b, 0x9e, 0x26, 487 0xd2, 0x44, 0xdc, 0x18, 0x9f, 488 0x74, 0x52, 0x28, 0x25, 0x5a, 489 0x21, 0x9a, 0x86, 0xd6, 0xa0, 490 0x9e, 0xff }, 491 key1_y[] = { 0x20, 0x13, 0x8b, 0xf8, 0x2d, 492 0xc1, 0xb6, 0xd5, 0x62, 0xbe, 493 0x0f, 0xa5, 0x4a, 0xb7, 0x80, 494 0x4a, 0x3a, 0x64, 0xb6, 0xd7, 495 0x2c, 0xcf, 0xed, 0x6b, 0x6f, 496 0xb6, 0xed, 0x28, 0xbb, 0xfc, 497 0x11, 0x7e }, 498 key1_d[] = { 0x57, 0xc9, 0x20, 0x77, 0x66, 499 0x41, 0x46, 0xe8, 0x76, 0x76, 500 0x0c, 0x95, 0x20, 0xd0, 0x54, 501 0xaa, 0x93, 0xc3, 0xaf, 0xb0, 502 0x4e, 0x30, 0x67, 0x05, 0xdb, 503 0x60, 0x90, 0x30, 0x85, 0x07, 504 0xb4, 0xd3 }, 505 506 key2_x[] = { 0x65, 0xed, 0xa5, 0xa1, 0x25, 507 0x77, 0xc2, 0xba, 0xe8, 0x29, 508 0x43, 0x7f, 0xe3, 0x38, 0x70, 509 0x1a, 0x10, 0xaa, 0xa3, 0x75, 510 0xe1, 0xbb, 0x5b, 0x5d, 0xe1, 511 0x08, 0xde, 0x43, 0x9c, 0x08, 512 0x55, 0x1d }, 513 key2_y[] = { 0x1e, 0x52, 0xed, 0x75, 0x70, 514 0x11, 0x63, 0xf7, 0xf9, 0xe4, 515 0x0d, 0xdf, 0x9f, 0x34, 0x1b, 516 0x3d, 0xc9, 0xba, 0x86, 0x0a, 517 0xf7, 0xe0, 0xca, 0x7c, 0xa7, 518 0xe9, 0xee, 0xcd, 0x00, 0x84, 519 0xd1, 0x9c }, 520 key2_d[] = { 0xaf, 0xf9, 0x07, 0xc9, 0x9f, 521 0x9a, 0xd3, 0xaa, 0xe6, 0xc4, 522 0xcd, 0xf2, 0x11, 0x22, 0xbc, 523 0xe2, 0xbd, 0x68, 0xb5, 0x28, 524 0x3e, 0x69, 0x07, 0x15, 0x4a, 525 0xd9, 0x11, 0x84, 0x0f, 0xa2, 526 0x08, 0xcf }, 527 528 key3_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 529 0xae, 0x48, 0xde, 0x64, 0x6d, 530 0x07, 0xdb, 0xb5, 0x33, 0x56, 531 0x6e, 0x97, 0x66, 0x86, 0x45, 532 0x7c, 0x14, 0x91, 0xbe, 0x3a, 533 0x76, 0xdc, 0xea, 0x6c, 0x42, 534 0x71, 0x88 }, 535 536 key4_x[] = { 0x00, 0x72, 0x99, 0x2c, 0xb3, 537 0xac, 0x08, 0xec, 0xf3, 0xe5, 538 0xc6, 0x3d, 0xed, 0xec, 0x0d, 539 0x51, 0xa8, 0xc1, 0xf7, 0x9e, 540 0xf2, 0xf8, 0x2f, 0x94, 0xf3, 541 0xc7, 0x37, 0xbf, 0x5d, 0xe7, 542 0x98, 0x66, 0x71, 0xea, 0xc6, 543 0x25, 0xfe, 0x82, 0x57, 0xbb, 544 0xd0, 0x39, 0x46, 0x44, 0xca, 545 0xaa, 0x3a, 0xaf, 0x8f, 0x27, 546 0xa4, 0x58, 0x5f, 0xbb, 0xca, 547 0xd0, 0xf2, 0x45, 0x76, 0x20, 548 0x08, 0x5e, 0x5c, 0x8f, 0x42, 549 0xad }, 550 key4_y[] = { 0x01, 0xdc, 0xa6, 0x94, 0x7b, 551 0xce, 0x88, 0xbc, 0x57, 0x90, 552 0x48, 0x5a, 0xc9, 0x74, 0x27, 553 0x34, 0x2b, 0xc3, 0x5f, 0x88, 554 0x7d, 0x86, 0xd6, 0x5a, 0x08, 555 0x93, 0x77, 0xe2, 0x47, 0xe6, 556 0x0b, 0xaa, 0x55, 0xe4, 0xe8, 557 0x50, 0x1e, 0x2a, 0xda, 0x57, 558 0x24, 0xac, 0x51, 0xd6, 0x90, 559 0x90, 0x08, 0x03, 0x3e, 0xbc, 560 0x10, 0xac, 0x99, 0x9b, 0x9d, 561 0x7f, 0x5c, 0xc2, 0x51, 0x9f, 562 0x3f, 0xe1, 0xea, 0x1d, 0x94, 563 0x75 }, 564 key4_d[] = { 0x00, 0x08, 0x51, 0x38, 0xdd, 565 0xab, 0xf5, 0xca, 0x97, 0x5f, 566 0x58, 0x60, 0xf9, 0x1a, 0x08, 567 0xe9, 0x1d, 0x6d, 0x5f, 0x9a, 568 0x76, 0xad, 0x40, 0x18, 0x76, 569 0x6a, 0x47, 0x66, 0x80, 0xb5, 570 0x5c, 0xd3, 0x39, 0xe8, 0xab, 571 0x6c, 0x72, 0xb5, 0xfa, 0xcd, 572 0xb2, 0xa2, 0xa5, 0x0a, 0xc2, 573 0x5b, 0xd0, 0x86, 0x64, 0x7d, 574 0xd3, 0xe2, 0xe6, 0xe9, 0x9e, 575 0x84, 0xca, 0x2c, 0x36, 0x09, 576 0xfd, 0xf1, 0x77, 0xfe, 0xb2, 577 0x6d }, 578 key5_k[] = { 0x84, 0x9b, 0x57, 0x86, 0x45, 579 0x7c, 0x14, 0x91, 0xbe, 0x3a, 580 0x76, 0xdc, 0xea, 0x6c, 0x42, 581 0x71 }, 582 583 key6_x[] = { 0x98, 0xf5, 0x0a, 0x4f, 0xf6, 584 0xc0, 0x58, 0x61, 0xc8, 0x86, 585 0x0d, 0x13, 0xa6, 0x38, 0xea, 586 0x56, 0xc3, 0xf5, 0xad, 0x75, 587 0x90, 0xbb, 0xfb, 0xf0, 0x54, 588 0xe1, 0xc7, 0xb4, 0xd9, 0x1d, 589 0x62, 0x80 }, 590 key6_y[] = { 0xf0, 0x14, 0x00, 0xb0, 0x89, 591 0x86, 0x78, 0x04, 0xb8, 0xe9, 592 0xfc, 0x96, 0xc3, 0x93, 0x21, 593 0x61, 0xf1, 0x93, 0x4f, 0x42, 594 0x23, 0x06, 0x91, 0x70, 0xd9, 595 0x24, 0xb7, 0xe0, 0x3b, 0xf8, 596 0x22, 0xbb }, 597 key6_d[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 598 0x6c, 0x43, 0xd4, 0x86, 0x8d, 599 0x87, 0xce, 0xb2, 0x35, 0x31, 600 0x61, 0x74, 0x0a, 0xac, 0xf1, 601 0xf7, 0x16, 0x36, 0x47, 0x98, 602 0x4b, 0x52, 0x2a, 0x84, 0x8d, 603 0xf1, 0xc3 }, 604 605 key7_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 606 0xae, 0x48, 0xde, 0x64, 0x6d, 607 0x07, 0xdb, 0xb5, 0x33, 0x56, 608 0x6e, 0x97, 0x66, 0x86, 0x45, 609 0x7c, 0x14, 0x91, 0xbe, 0x3a, 610 0x76, 0xdc, 0xea, 0x6c, 0x42, 611 0x71, 0x88 }, 612 613 key8_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 614 0xae, 0x48, 0xde, 0x64, 0x6d, 615 0x07, 0xdb, 0xb5, 0x33, 0x56, 616 0x6e, 0x97, 0x66, 0x86, 0x45, 617 0x7c, 0x14, 0x91, 0xbe, 0x3a, 618 0x76, 0xdc, 0xea, 0x6c, 0x42, 619 0x71, 0x88, 0x00, 0x11, 0x22, 620 0x33, 0x77, 0x88, 0x99, 0xaa, 621 0x21, 0x22, 0x23, 0x24, 0x25, 622 0x26, 0x27, 0x28 }, 623 624 key9_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 625 0xae, 0x48, 0xde, 0x64, 0x6d, 626 0x07, 0xdb, 0xb5, 0x33, 0x56, 627 0x6e, 0x97, 0x66, 0x86, 0x45, 628 0x7c, 0x14, 0x91, 0xbe, 0x3a, 629 0x76, 0xdc, 0xea, 0x6c, 0x42, 630 0x71, 0x88, 0x00, 0x11, 0x22, 631 0x33, 0x77, 0x88, 0x99, 0xaa, 632 0x21, 0x22, 0x23, 0x24, 0x25, 633 0x26, 0x27, 0x28, 0xaa, 0xbb, 634 0xcc, 0xdd, 0xee, 0xff, 0xa5, 635 0xa6, 0xa7, 0xa8, 0xa9, 0xa0, 636 0xb1, 0xb2, 0xb3, 0xb4 } 637#if 0 638 , 639 key10_x[] = { 640 0xd7, 0x5a, 0x98, 0x01, 0x82, 641 0xb1, 0x0a, 0xb7, 0xd5, 0x4b, 642 0xfe, 0xd3, 0xc9, 0x64, 0x07, 643 0x3a, 0x0e, 0xe1, 0x72, 0xf3, 644 0xda, 0xa6, 0x23, 0x25, 0xaf, 645 0x02, 0x1a, 0x68, 0xf7, 0x07, 646 0x51, 0x1a 647 }, key10_d[] = { 648 0x9d, 0x61, 0xb1, 0x9d, 0xef, 649 0xfd, 0x5a, 0x60, 0xba, 0x84, 650 0x4a, 0xf4, 0x92, 0xec, 0x2c, 651 0xc4, 0x44, 0x49, 0xc5, 0x69, 652 0x7b, 0x32, 0x69, 0x19, 0x70, 653 0x3b, 0xac, 0x03, 0x1c, 0xae, 654 0x7f, 0x60 655 } 656#endif 657; 658 659int 660test_cose_keys(struct lws_context *context) 661{ 662 struct lws_cose_key *ck; 663 lws_dll2_owner_t set; 664 lws_lec_pctx_t wc; 665 uint8_t buf[4096]; 666 int n; 667 668#if 0 669 { 670 int fd = open("set1.cks", 671 LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); 672 673 if (fd >= 0) { 674 write(fd, cose_key_set1, sizeof(cose_key_set1)); 675 close(fd); 676 } 677 } 678#endif 679 680#if 0 681 lws_lec_pctx_t wx; 682 uint8_t dump[8192]; 683 684 lws_lec_init(&wx, buf, sizeof(buf)); 685 686 if (lws_lec_printf(&wx, 687 "{%d:%d, %d:%.*b, %d:%d, %d:%.*b, %d:%.*b}", 688 LWSCOSE_WKK_KTY, LWSCOSE_WKKTV_OKP, 689 LWSCOSE_WKK_KID, 2, "11", 690 LWSCOSE_WKOKP_CRV, LWSCOSE_WKEC_ED25519, 691 LWSCOSE_WKECKP_X, (int)sizeof(key10_x), key10_x, 692// LWSCOSE_WKECKP_Y, (int)sizeof(key6_y), key6_y, 693 LWSCOSE_WKECKP_D, (int)sizeof(key10_d), key10_d) != 694 LWS_LECPCTX_RET_FINISHED) 695 return 1; 696 697 lws_hex_from_byte_array(buf, wx.used, (char *)dump, sizeof(dump)); 698 puts((const char *)dump); 699#endif 700#if 0 701 lws_lec_pctx_t wx; 702 uint8_t dump[8192]; 703 704 lws_lec_init(&wx, buf, sizeof(buf)); 705 706 if (lws_lec_printf(&wx, 707 "{%d:%d, %d:%.*b, %d:%.*b}", 708 LWSCOSE_WKK_KTY, LWSCOSE_WKKTV_SYMMETRIC, 709 LWSCOSE_WKK_KID, 6, "sec-64", 710 -1, (int)sizeof(key9_k), key9_k) != 711 LWS_LECPCTX_RET_FINISHED) 712 return 1; 713 714 lws_hex_from_byte_array(buf, wx.used, (char *)dump, sizeof(dump)); 715 puts((const char *)dump); 716#endif 717 718 /* key1 import */ 719 720 lwsl_user("%s: key 1 import\n", __func__); 721 722 ck = lws_cose_key_import(NULL, key_import_cb, NULL, cose_key1, sizeof(cose_key1)); 723 if (!ck) 724 return 1; 725 726 if (ck->kty != LWSCOSE_WKKTV_EC2 || 727 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || 728 ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key1_x) || 729 ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key1_y) || 730 ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key1_d) || 731 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key1_x, sizeof(key1_x)) || 732 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key1_y, sizeof(key1_y)) || 733 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key1_d, sizeof(key1_d))) 734 goto bail; 735 736 // lws_cose_key_dump(ck); 737 738 /* key 1 export */ 739 740 lwsl_user("%s: key 1 export\n", __func__); 741 742 lws_lec_init(&wc, buf, sizeof(buf)); 743 n = (int)lws_cose_key_export(ck, &wc, LWSJWKF_EXPORT_PRIVATE); 744 lws_cose_key_destroy(&ck); 745 if (n != LWS_LECPCTX_RET_FINISHED) 746 goto bail; 747 748 // lwsl_hexdump_notice(buf, wc.used); 749 750 /* key2 import */ 751 752 lwsl_user("%s: key 2 import\n", __func__); 753 754 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key2, sizeof(cose_key2)); 755 if (!ck) 756 return 1; 757 758 if (ck->kty != LWSCOSE_WKKTV_EC2 || 759 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || 760 ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key2_x) || 761 ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key2_y) || 762 ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key2_d) || 763 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key2_x, sizeof(key2_x)) || 764 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key2_y, sizeof(key2_y)) || 765 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key2_d, sizeof(key2_d))) 766 goto bail; 767 768 lws_cose_key_destroy(&ck); 769 770 /* key3 import */ 771 772 lwsl_user("%s: key 3 import\n", __func__); 773 774 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key3, sizeof(cose_key3)); 775 if (!ck) { 776 lwsl_err("%s: key 3 import failed\n", __func__); 777 goto bail; 778 } 779 780 if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || 781 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || 782 ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key3_k) || 783 memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key3_k, sizeof(key3_k))) { 784 lwsl_err("%s: key 3 checks failed %d %d %d\n", __func__, 785 (int)ck->kty, (int)ck->gencrypto_kty, 786 (int)ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len); 787 goto bail; 788 } 789 790 lws_cose_key_destroy(&ck); 791 792 /* key4 import */ 793 794 lwsl_user("%s: key 4 import\n", __func__); 795 796 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key4, sizeof(cose_key4)); 797 if (!ck) 798 return 1; 799 800 if (ck->kty != LWSCOSE_WKKTV_EC2 || 801 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || 802 ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key4_x) || 803 ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key4_y) || 804 ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key4_d) || 805 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key4_x, sizeof(key4_x)) || 806 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key4_y, sizeof(key4_y)) || 807 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key4_d, sizeof(key4_d))) 808 goto bail; 809 810 lws_cose_key_destroy(&ck); 811 812 /* key5 import */ 813 814 lwsl_user("%s: key 5 import\n", __func__); 815 816 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key5, sizeof(cose_key5)); 817 if (!ck) 818 return 1; 819 820 if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || 821 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || 822 ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key5_k) || 823 memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key5_k, sizeof(key5_k))) 824 goto bail; 825 826 lws_cose_key_destroy(&ck); 827 828 /* key6 import */ 829 830 lwsl_user("%s: key 6 import\n", __func__); 831 832 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key6, sizeof(cose_key6)); 833 if (!ck) 834 return 1; 835 836 if (ck->kty != LWSCOSE_WKKTV_EC2 || 837 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || 838 ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key6_x) || 839 ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key6_y) || 840 ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key6_d) || 841 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key6_x, sizeof(key6_x)) || 842 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key6_y, sizeof(key6_y)) || 843 memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key6_d, sizeof(key6_d))) 844 goto bail; 845 846 lws_cose_key_destroy(&ck); 847 848 /* key7 import */ 849 850 lwsl_user("%s: key 7 import\n", __func__); 851 852 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key7, sizeof(cose_key7)); 853 if (!ck) 854 return 1; 855 856 if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || 857 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || 858 ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key7_k) || 859 memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key7_k, sizeof(key7_k))) 860 goto bail; 861 862 lws_cose_key_destroy(&ck); 863 864 /* key8 import */ 865 866 lwsl_user("%s: key 8 import\n", __func__); 867 868 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key8, sizeof(cose_key8)); 869 if (!ck) 870 return 1; 871 872 if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || 873 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || 874 ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key8_k) || 875 memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key8_k, sizeof(key8_k))) 876 goto bail; 877 878 lws_cose_key_destroy(&ck); 879 880 /* key9 import */ 881 882 lwsl_user("%s: key 9 import\n", __func__); 883 884 ck = lws_cose_key_import(NULL, NULL, NULL, cose_key9, sizeof(cose_key9)); 885 if (!ck) { 886 lwsl_err("%s: cose9 import fail\n", __func__); 887 goto bail; 888 } 889 890 if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || 891 ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || 892 ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key9_k) || 893 memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key9_k, sizeof(key9_k))) { 894 lwsl_notice("%s: key9 check fails\n", __func__); 895 goto bail; 896 } 897 898 lws_cose_key_destroy(&ck); 899 900 /* key set 1 */ 901 902 lwsl_user("%s: key_set1\n", __func__); 903 lws_dll2_owner_clear(&set); 904 ck = lws_cose_key_import(&set, NULL, NULL, cose_key_set1, sizeof(cose_key_set1)); 905 if (!ck) 906 return 1; 907 908 lws_cose_key_set_destroy(&set); 909 910 /* generate */ 911 912 ck = lws_cose_key_generate(context, LWSCOSE_WKKTV_EC2, 913 (1 << LWSCOSE_WKKO_SIGN) | 914 (1 << LWSCOSE_WKKO_VERIFY) | 915 (1 << LWSCOSE_WKKO_ENCRYPT) | 916 (1 << LWSCOSE_WKKO_DECRYPT), 917 0, "P-256", (const uint8_t *)"the-keyid", 9); 918 if (!ck) 919 return 1; 920 921 // lws_cose_key_dump(ck); 922 923 lws_cose_key_destroy(&ck); 924 925 return 0; 926 927bail: 928 lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); 929 930 return 1; 931} 932