1/* 2 * lws-api-test-jose - RFC8152 cose_sign 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 const uint8_t 19 sign1_pass_01[] = { 20 /* 21 * https://github.com/cose-wg/Examples/blob/master/ 22 * sign1-tests/sign-pass-01.json 23 */ 24 0xd2, 0x84, 0x41, 0xa0, 0xa2, 25 0x01, 0x26, 0x04, 0x42, 0x31, 26 0x31, 0x54, 0x54, 0x68, 0x69, 27 0x73, 0x20, 0x69, 0x73, 0x20, 28 0x74, 0x68, 0x65, 0x20, 0x63, 29 0x6f, 0x6e, 0x74, 0x65, 0x6e, 30 0x74, 0x2e, 0x58, 0x40, 0x87, 31 0xdb, 0x0d, 0x2e, 0x55, 0x71, 32 0x84, 0x3b, 0x78, 0xac, 0x33, 33 0xec, 0xb2, 0x83, 0x0d, 0xf7, 34 0xb6, 0xe0, 0xa4, 0xd5, 0xb7, 35 0x37, 0x6d, 0xe3, 0x36, 0xb2, 36 0x3c, 0x59, 0x1c, 0x90, 0xc4, 37 0x25, 0x31, 0x7e, 0x56, 0x12, 38 0x7f, 0xbe, 0x04, 0x37, 0x00, 39 0x97, 0xce, 0x34, 0x70, 0x87, 40 0xb2, 0x33, 0xbf, 0x72, 0x2b, 41 0x64, 0x07, 0x2b, 0xeb, 0x44, 42 0x86, 0xbd, 0xa4, 0x03, 0x1d, 43 0x27, 0x24, 0x4f }, 44 sign1_pass_02[] = { 45 0xd2, 0x84, 0x43, 0xa1, 0x01, 46 0x26, 0xa1, 0x04, 0x42, 0x31, 47 0x31, 0x54, 0x54, 0x68, 0x69, 48 0x73, 0x20, 0x69, 0x73, 0x20, 49 0x74, 0x68, 0x65, 0x20, 0x63, 50 0x6f, 0x6e, 0x74, 0x65, 0x6e, 51 0x74, 0x2e, 0x58, 0x40, 0x10, 52 0x72, 0x9c, 0xd7, 0x11, 0xcb, 53 0x38, 0x13, 0xd8, 0xd8, 0xe9, 54 0x44, 0xa8, 0xda, 0x71, 0x11, 55 0xe7, 0xb2, 0x58, 0xc9, 0xbd, 56 0xca, 0x61, 0x35, 0xf7, 0xae, 57 0x1a, 0xdb, 0xee, 0x95, 0x09, 58 0x89, 0x12, 0x67, 0x83, 0x7e, 59 0x1e, 0x33, 0xbd, 0x36, 0xc1, 60 0x50, 0x32, 0x6a, 0xe6, 0x27, 61 0x55, 0xc6, 0xbd, 0x8e, 0x54, 62 0x0c, 0x3e, 0x8f, 0x92, 0xd7, 63 0xd2, 0x25, 0xe8, 0xdb, 0x72, 64 0xb8, 0x82, 0x0b }, 65 66 sign1_pass_02_ext[] = { 67 0x11, 0xaa, 0x22, 0xbb, 0x33, 68 0xcc, 0x44, 0xdd, 0x55, 0x00, 69 0x66, 0x99 }, 70 71 sign1_pass_03[] = { 72 0x84, 0x43, 0xa1, 0x01, 0x26, 73 0xa1, 0x04, 0x42, 0x31, 0x31, 74 0x54, 0x54, 0x68, 0x69, 0x73, 75 0x20, 0x69, 0x73, 0x20, 0x74, 76 0x68, 0x65, 0x20, 0x63, 0x6f, 77 0x6e, 0x74, 0x65, 0x6e, 0x74, 78 0x2e, 0x58, 0x40, 0x8e, 0xb3, 79 0x3e, 0x4c, 0xa3, 0x1d, 0x1c, 80 0x46, 0x5a, 0xb0, 0x5a, 0xac, 81 0x34, 0xcc, 0x6b, 0x23, 0xd5, 82 0x8f, 0xef, 0x5c, 0x08, 0x31, 83 0x06, 0xc4, 0xd2, 0x5a, 0x91, 84 0xae, 0xf0, 0xb0, 0x11, 0x7e, 85 0x2a, 0xf9, 0xa2, 0x91, 0xaa, 86 0x32, 0xe1, 0x4a, 0xb8, 0x34, 87 0xdc, 0x56, 0xed, 0x2a, 0x22, 88 0x34, 0x44, 0x54, 0x7e, 0x01, 89 0xf1, 0x1d, 0x3b, 0x09, 0x16, 90 0xe5, 0xa4, 0xc3, 0x45, 0xca, 91 0xcb, 0x36 }, 92 sign1_fail_01[] = { 93 0xd9, 0x03, 0xe6, 0x84, 0x43, 94 0xa1, 0x01, 0x26, 0xa1, 0x04, 95 0x42, 0x31, 0x31, 0x54, 0x54, 96 0x68, 0x69, 0x73, 0x20, 0x69, 97 0x73, 0x20, 0x74, 0x68, 0x65, 98 0x20, 0x63, 0x6f, 0x6e, 0x74, 99 0x65, 0x6e, 0x74, 0x2e, 0x58, 100 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 101 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 102 0xb0, 0x5a, 0xac, 0x34, 0xcc, 103 0x6b, 0x23, 0xd5, 0x8f, 0xef, 104 0x5c, 0x08, 0x31, 0x06, 0xc4, 105 0xd2, 0x5a, 0x91, 0xae, 0xf0, 106 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 107 0xa2, 0x91, 0xaa, 0x32, 0xe1, 108 0x4a, 0xb8, 0x34, 0xdc, 0x56, 109 0xed, 0x2a, 0x22, 0x34, 0x44, 110 0x54, 0x7e, 0x01, 0xf1, 0x1d, 111 0x3b, 0x09, 0x16, 0xe5, 0xa4, 112 0xc3, 0x45, 0xca, 0xcb, 0x36 }, 113 sign1_fail_02[] = { 114 0xd2, 0x84, 0x43, 0xa1, 0x01, 115 0x26, 0xa1, 0x04, 0x42, 0x31, 116 0x31, 0x54, 0x54, 0x68, 0x69, 117 0x73, 0x20, 0x69, 0x73, 0x20, 118 0x74, 0x68, 0x65, 0x20, 0x63, 119 0x6f, 0x6e, 0x74, 0x65, 0x6e, 120 0x74, 0x2f, 0x58, 0x40, 0x8e, 121 0xb3, 0x3e, 0x4c, 0xa3, 0x1d, 122 0x1c, 0x46, 0x5a, 0xb0, 0x5a, 123 0xac, 0x34, 0xcc, 0x6b, 0x23, 124 0xd5, 0x8f, 0xef, 0x5c, 0x08, 125 0x31, 0x06, 0xc4, 0xd2, 0x5a, 126 0x91, 0xae, 0xf0, 0xb0, 0x11, 127 0x7e, 0x2a, 0xf9, 0xa2, 0x91, 128 0xaa, 0x32, 0xe1, 0x4a, 0xb8, 129 0x34, 0xdc, 0x56, 0xed, 0x2a, 130 0x22, 0x34, 0x44, 0x54, 0x7e, 131 0x01, 0xf1, 0x1d, 0x3b, 0x09, 132 0x16, 0xe5, 0xa4, 0xc3, 0x45, 133 0xca, 0xcb, 0x36 }, 134 sign1_fail_03[] = { 135 0xd2, 0x84, 0x45, 0xa1, 0x01, 136 0x39, 0x03, 0xe6, 0xa1, 0x04, 137 0x42, 0x31, 0x31, 0x54, 0x54, 138 0x68, 0x69, 0x73, 0x20, 0x69, 139 0x73, 0x20, 0x74, 0x68, 0x65, 140 0x20, 0x63, 0x6f, 0x6e, 0x74, 141 0x65, 0x6e, 0x74, 0x2e, 0x58, 142 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 143 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 144 0xb0, 0x5a, 0xac, 0x34, 0xcc, 145 0x6b, 0x23, 0xd5, 0x8f, 0xef, 146 0x5c, 0x08, 0x31, 0x06, 0xc4, 147 0xd2, 0x5a, 0x91, 0xae, 0xf0, 148 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 149 0xa2, 0x91, 0xaa, 0x32, 0xe1, 150 0x4a, 0xb8, 0x34, 0xdc, 0x56, 151 0xed, 0x2a, 0x22, 0x34, 0x44, 152 0x54, 0x7e, 0x01, 0xf1, 0x1d, 153 0x3b, 0x09, 0x16, 0xe5, 0xa4, 154 0xc3, 0x45, 0xca, 0xcb, 0x36 }, 155 sign1_fail_04[] = { 156 0xd2, 0x84, 0x4a, 0xa1, 0x01, 157 0x67, 0x75, 0x6e, 0x6b, 0x6e, 158 0x6f, 0x77, 0x6e, 0xa1, 0x04, 159 0x42, 0x31, 0x31, 0x54, 0x54, 160 0x68, 0x69, 0x73, 0x20, 0x69, 161 0x73, 0x20, 0x74, 0x68, 0x65, 162 0x20, 0x63, 0x6f, 0x6e, 0x74, 163 0x65, 0x6e, 0x74, 0x2e, 0x58, 164 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 165 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 166 0xb0, 0x5a, 0xac, 0x34, 0xcc, 167 0x6b, 0x23, 0xd5, 0x8f, 0xef, 168 0x5c, 0x08, 0x31, 0x06, 0xc4, 169 0xd2, 0x5a, 0x91, 0xae, 0xf0, 170 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 171 0xa2, 0x91, 0xaa, 0x32, 0xe1, 172 0x4a, 0xb8, 0x34, 0xdc, 0x56, 173 0xed, 0x2a, 0x22, 0x34, 0x44, 174 0x54, 0x7e, 0x01, 0xf1, 0x1d, 175 0x3b, 0x09, 0x16, 0xe5, 0xa4, 176 0xc3, 0x45, 0xca, 0xcb, 0x36 }, 177 178 /* sign1/fail05 is missing upstream */ 179 180 sign1_fail_06[] = { 181 0xd2, 0x84, 0x45, 0xa2, 0x01, 182 0x26, 0x03, 0x00, 0xa1, 0x04, 183 0x42, 0x31, 0x31, 0x54, 0x54, 184 0x68, 0x69, 0x73, 0x20, 0x69, 185 0x73, 0x20, 0x74, 0x68, 0x65, 186 0x20, 0x63, 0x6f, 0x6e, 0x74, 187 0x65, 0x6e, 0x74, 0x2e, 0x58, 188 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 189 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 190 0xb0, 0x5a, 0xac, 0x34, 0xcc, 191 0x6b, 0x23, 0xd5, 0x8f, 0xef, 192 0x5c, 0x08, 0x31, 0x06, 0xc4, 193 0xd2, 0x5a, 0x91, 0xae, 0xf0, 194 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 195 0xa2, 0x91, 0xaa, 0x32, 0xe1, 196 0x4a, 0xb8, 0x34, 0xdc, 0x56, 197 0xed, 0x2a, 0x22, 0x34, 0x44, 198 0x54, 0x7e, 0x01, 0xf1, 0x1d, 199 0x3b, 0x09, 0x16, 0xe5, 0xa4, 200 0xc3, 0x45, 0xca, 0xcb, 0x36 }, 201 202 sign1_fail_07[] = { 203 0xd2, 0x84, 0x43, 0xa1, 0x01, 204 0x26, 0xa1, 0x04, 0x42, 0x31, 205 0x31, 0x54, 0x54, 0x68, 0x69, 206 0x73, 0x20, 0x69, 0x73, 0x20, 207 0x74, 0x68, 0x65, 0x20, 0x63, 208 0x6f, 0x6e, 0x74, 0x65, 0x6e, 209 0x74, 0x2e, 0x58, 0x40, 0x65, 210 0x20, 0xbb, 0xaf, 0x20, 0x81, 211 0xd7, 0xe0, 0xed, 0x0f, 0x95, 212 0xf7, 0x6e, 0xb0, 0x73, 0x3d, 213 0x66, 0x70, 0x05, 0xf7, 0x46, 214 0x7c, 0xec, 0x4b, 0x87, 0xb9, 215 0x38, 0x1a, 0x6b, 0xa1, 0xed, 216 0xe8, 0xe0, 0x0d, 0xf2, 0x9f, 217 0x32, 0xa3, 0x72, 0x30, 0xf3, 218 0x9a, 0x84, 0x2a, 0x54, 0x82, 219 0x1f, 0xdd, 0x22, 0x30, 0x92, 220 0x81, 0x9d, 0x77, 0x28, 0xef, 221 0xb9, 0xd3, 0xa0, 0x08, 0x0b, 222 0x75, 0x38, 0x0b }, 223 224 sign_pass_01[] = { 225 0xd8, 0x62, 0x84, 0x41, 0xa0, 226 0xa0, 0x54, 0x54, 0x68, 0x69, 227 0x73, 0x20, 0x69, 0x73, 0x20, 228 0x74, 0x68, 0x65, 0x20, 0x63, 229 0x6f, 0x6e, 0x74, 0x65, 0x6e, 230 0x74, 0x2e, 0x81, 0x83, 0x43, 231 0xa1, 0x01, 0x26, 0xa1, 0x04, 232 0x42, 0x31, 0x31, 0x58, 0x40, 233 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 234 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 235 0x52, 0x07, 0x7c, 0x5d, 0x7f, 236 0xf4, 0xe4, 0x08, 0x28, 0x2c, 237 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 238 0xf4, 0x14, 0xaf, 0x2e, 0x19, 239 0xd9, 0x82, 0xac, 0x45, 0xac, 240 0x98, 0xb8, 0x54, 0x4c, 0x90, 241 0x8b, 0x45, 0x07, 0xde, 0x1e, 242 0x90, 0xb7, 0x17, 0xc3, 0xd3, 243 0x48, 0x16, 0xfe, 0x92, 0x6a, 244 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 245 0x2f, 0xa0, 0xf3, 0x0a }, 246 247 sign_pass_02[] = { 248 0xd8, 0x62, 0x84, 0x40, 0xa0, 249 0x54, 0x54, 0x68, 0x69, 0x73, 250 0x20, 0x69, 0x73, 0x20, 0x74, 251 0x68, 0x65, 0x20, 0x63, 0x6f, 252 0x6e, 0x74, 0x65, 0x6e, 0x74, 253 0x2e, 0x81, 0x83, 0x43, 0xa1, 254 0x01, 0x26, 0xa1, 0x04, 0x42, 255 0x31, 0x31, 0x58, 0x40, 0xcb, 256 0xb8, 0xda, 0xd9, 0xbe, 0xaf, 257 0xb8, 0x90, 0xe1, 0xa4, 0x14, 258 0x12, 0x4d, 0x8b, 0xfb, 0xc2, 259 0x6b, 0xed, 0xf2, 0xa9, 0x4f, 260 0xcb, 0x5a, 0x88, 0x24, 0x32, 261 0xbf, 0xf6, 0xd6, 0x3e, 0x15, 262 0xf5, 0x74, 0xee, 0xb2, 0xab, 263 0x51, 0xd8, 0x3f, 0xa2, 0xcb, 264 0xf6, 0x26, 0x72, 0xeb, 0xf4, 265 0xc7, 0xd9, 0x93, 0xb0, 0xf4, 266 0xc2, 0x44, 0x76, 0x47, 0xd8, 267 0x31, 0xba, 0x57, 0xcc, 0xa8, 268 0x6b, 0x93, 0x0a }, 269 270 sign_pass_03[] = { 271 0x84, 0x40, 0xa0, 0x54, 0x54, 272 0x68, 0x69, 0x73, 0x20, 0x69, 273 0x73, 0x20, 0x74, 0x68, 0x65, 274 0x20, 0x63, 0x6f, 0x6e, 0x74, 275 0x65, 0x6e, 0x74, 0x2e, 0x81, 276 0x83, 0x43, 0xa1, 0x01, 0x26, 277 0xa1, 0x04, 0x42, 0x31, 0x31, 278 0x58, 0x40, 0xe2, 0xae, 0xaf, 279 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 280 0xfe, 0x6e, 0x52, 0x07, 0x7c, 281 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 282 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 283 0x06, 0xcb, 0xf4, 0x14, 0xaf, 284 0x2e, 0x19, 0xd9, 0x82, 0xac, 285 0x45, 0xac, 0x98, 0xb8, 0x54, 286 0x4c, 0x90, 0x8b, 0x45, 0x07, 287 0xde, 0x1e, 0x90, 0xb7, 0x17, 288 0xc3, 0xd3, 0x48, 0x16, 0xfe, 289 0x92, 0x6a, 0x2b, 0x98, 0xf5, 290 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 291 0x0a }, 292 293 sign_fail_01[] = { 294 0xd9, 0x03, 0xe6, 0x84, 0x40, 295 0xa0, 0x54, 0x54, 0x68, 0x69, 296 0x73, 0x20, 0x69, 0x73, 0x20, 297 0x74, 0x68, 0x65, 0x20, 0x63, 298 0x6f, 0x6e, 0x74, 0x65, 0x6e, 299 0x74, 0x2e, 0x81, 0x83, 0x43, 300 0xa1, 0x01, 0x26, 0xa1, 0x04, 301 0x42, 0x31, 0x31, 0x58, 0x40, 302 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 303 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 304 0x52, 0x07, 0x7c, 0x5d, 0x7f, 305 0xf4, 0xe4, 0x08, 0x28, 0x2c, 306 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 307 0xf4, 0x14, 0xaf, 0x2e, 0x19, 308 0xd9, 0x82, 0xac, 0x45, 0xac, 309 0x98, 0xb8, 0x54, 0x4c, 0x90, 310 0x8b, 0x45, 0x07, 0xde, 0x1e, 311 0x90, 0xb7, 0x17, 0xc3, 0xd3, 312 0x48, 0x16, 0xfe, 0x92, 0x6a, 313 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 314 0x2f, 0xa0, 0xf3, 0x0a }, 315 316 sign_fail_02[] = { 317 0xd8, 0x62, 0x84, 0x40, 0xa0, 318 0x54, 0x54, 0x68, 0x69, 0x73, 319 0x20, 0x69, 0x73, 0x20, 0x74, 320 0x68, 0x65, 0x20, 0x63, 0x6f, 321 0x6e, 0x74, 0x65, 0x6e, 0x74, 322 0x2e, 0x81, 0x83, 0x43, 0xa1, 323 0x01, 0x26, 0xa1, 0x04, 0x42, 324 0x31, 0x31, 0x58, 0x40, 0xe2, 325 0xae, 0xaf, 0xd4, 0x0d, 0x69, 326 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 327 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 328 0xe4, 0x08, 0x28, 0x2c, 0xbe, 329 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 330 0x14, 0xaf, 0x2e, 0x19, 0xd9, 331 0x82, 0xac, 0x45, 0xac, 0x98, 332 0xb8, 0x54, 0x4c, 0x90, 0x8b, 333 0x45, 0x07, 0xde, 0x1e, 0x90, 334 0xb7, 0x17, 0xc3, 0xd3, 0x48, 335 0x16, 0xfe, 0x92, 0x6a, 0x2b, 336 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 337 0xa0, 0xf3, 0x0b }, 338 339 sign_fail_03[] = { 340 0xd8, 0x62, 0x84, 0x40, 0xa0, 341 0x54, 0x54, 0x68, 0x69, 0x73, 342 0x20, 0x69, 0x73, 0x20, 0x74, 343 0x68, 0x65, 0x20, 0x63, 0x6f, 344 0x6e, 0x74, 0x65, 0x6e, 0x74, 345 0x2e, 0x81, 0x83, 0x45, 0xa1, 346 0x01, 0x39, 0x03, 0xe6, 0xa1, 347 0x04, 0x42, 0x31, 0x31, 0x58, 348 0x40, 0xe2, 0xae, 0xaf, 0xd4, 349 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 350 0x6e, 0x52, 0x07, 0x7c, 0x5d, 351 0x7f, 0xf4, 0xe4, 0x08, 0x28, 352 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 353 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 354 0x19, 0xd9, 0x82, 0xac, 0x45, 355 0xac, 0x98, 0xb8, 0x54, 0x4c, 356 0x90, 0x8b, 0x45, 0x07, 0xde, 357 0x1e, 0x90, 0xb7, 0x17, 0xc3, 358 0xd3, 0x48, 0x16, 0xfe, 0x92, 359 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 360 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, 361 362 sign_fail_04[] = { 363 0xd8, 0x62, 0x84, 0x40, 0xa0, 364 0x54, 0x54, 0x68, 0x69, 0x73, 365 0x20, 0x69, 0x73, 0x20, 0x74, 366 0x68, 0x65, 0x20, 0x63, 0x6f, 367 0x6e, 0x74, 0x65, 0x6e, 0x74, 368 0x2e, 0x81, 0x83, 0x4a, 0xa1, 369 0x01, 0x67, 0x75, 0x6e, 0x6b, 370 0x6e, 0x6f, 0x77, 0x6e, 0xa1, 371 0x04, 0x42, 0x31, 0x31, 0x58, 372 0x40, 0xe2, 0xae, 0xaf, 0xd4, 373 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 374 0x6e, 0x52, 0x07, 0x7c, 0x5d, 375 0x7f, 0xf4, 0xe4, 0x08, 0x28, 376 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 377 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 378 0x19, 0xd9, 0x82, 0xac, 0x45, 379 0xac, 0x98, 0xb8, 0x54, 0x4c, 380 0x90, 0x8b, 0x45, 0x07, 0xde, 381 0x1e, 0x90, 0xb7, 0x17, 0xc3, 382 0xd3, 0x48, 0x16, 0xfe, 0x92, 383 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 384 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, 385 386 /* fail 5 missing upstream */ 387 388 sign_fail_06[] = { 389 0xd8, 0x62, 0x84, 0x43, 0xa1, 390 0x03, 0x00, 0xa0, 0x54, 0x54, 391 0x68, 0x69, 0x73, 0x20, 0x69, 392 0x73, 0x20, 0x74, 0x68, 0x65, 393 0x20, 0x63, 0x6f, 0x6e, 0x74, 394 0x65, 0x6e, 0x74, 0x2e, 0x81, 395 0x83, 0x43, 0xa1, 0x01, 0x26, 396 0xa1, 0x04, 0x42, 0x31, 0x31, 397 0x58, 0x40, 0xe2, 0xae, 0xaf, 398 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 399 0xfe, 0x6e, 0x52, 0x07, 0x7c, 400 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 401 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 402 0x06, 0xcb, 0xf4, 0x14, 0xaf, 403 0x2e, 0x19, 0xd9, 0x82, 0xac, 404 0x45, 0xac, 0x98, 0xb8, 0x54, 405 0x4c, 0x90, 0x8b, 0x45, 0x07, 406 0xde, 0x1e, 0x90, 0xb7, 0x17, 407 0xc3, 0xd3, 0x48, 0x16, 0xfe, 408 0x92, 0x6a, 0x2b, 0x98, 0xf5, 409 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 410 0x0a }, 411 412 sign_fail_07[] = { 413 0xd8, 0x62, 0x84, 0x41, 0xa0, 414 0xa0, 0x54, 0x54, 0x68, 0x69, 415 0x73, 0x20, 0x69, 0x73, 0x20, 416 0x74, 0x68, 0x65, 0x20, 0x63, 417 0x6f, 0x6e, 0x74, 0x65, 0x6e, 418 0x74, 0x2e, 0x81, 0x83, 0x43, 419 0xa1, 0x01, 0x26, 0xa1, 0x04, 420 0x42, 0x31, 0x31, 0x58, 0x40, 421 0xd7, 0x1c, 0x05, 0xdb, 0x52, 422 0xc9, 0xce, 0x7f, 0x1b, 0xf5, 423 0xaa, 0xc0, 0x13, 0x34, 0xbb, 424 0xea, 0xca, 0xc1, 0xd8, 0x6a, 425 0x23, 0x03, 0xe6, 0xee, 0xaa, 426 0x89, 0x26, 0x6f, 0x45, 0xc0, 427 0x1e, 0xd6, 0x02, 0xca, 0x64, 428 0x9e, 0xaf, 0x79, 0x0d, 0x8b, 429 0xc9, 0x9d, 0x24, 0x58, 0x45, 430 0x7c, 0xa6, 0xa8, 0x72, 0x06, 431 0x19, 0x40, 0xe7, 0xaf, 0xbe, 432 0x48, 0xe2, 0x89, 0xdf, 0xac, 433 0x14, 0x6a, 0xe2, 0x58 }, 434 435 sign_hmac_01[] = { 436 0xd8, 0x61, 0x85, 0x43, 0xa1, 437 0x01, 0x05, 0xa0, 0x54, 0x54, 438 0x68, 0x69, 0x73, 0x20, 0x69, 439 0x73, 0x20, 0x74, 0x68, 0x65, 440 0x20, 0x63, 0x6f, 0x6e, 0x74, 441 0x65, 0x6e, 0x74, 0x2e, 0x58, 442 0x20, 0x2b, 0xdc, 0xc8, 0x9f, 443 0x05, 0x82, 0x16, 0xb8, 0xa2, 444 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 445 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 446 0x63, 0x48, 0x49, 0x86, 0x56, 447 0x51, 0x05, 0xc9, 0xad, 0x5a, 448 0x66, 0x82, 0xf6, 0x81, 0x83, 449 0x40, 0xa2, 0x01, 0x25, 0x04, 450 0x4a, 0x6f, 0x75, 0x72, 0x2d, 451 0x73, 0x65, 0x63, 0x72, 0x65, 452 0x74, 0x40 }, 453 454 sign_hmac_02[] = { 455 0xd8, 0x61, 0x85, 0x43, 0xa1, 456 0x01, 0x06, 0xa0, 0x54, 0x54, 457 0x68, 0x69, 0x73, 0x20, 0x69, 458 0x73, 0x20, 0x74, 0x68, 0x65, 459 0x20, 0x63, 0x6f, 0x6e, 0x74, 460 0x65, 0x6e, 0x74, 0x2e, 0x58, 461 0x30, 0xb3, 0x09, 0x7f, 0x70, 462 0x00, 0x9a, 0x11, 0x50, 0x74, 463 0x09, 0x59, 0x8a, 0x83, 0xe1, 464 0x5b, 0xbb, 0xbf, 0x19, 0x82, 465 0xdc, 0xe2, 0x8e, 0x5a, 0xb6, 466 0xd5, 0xa6, 0xaf, 0xf6, 0x89, 467 0x7b, 0xd2, 0x4b, 0xb8, 0xb7, 468 0x47, 0x96, 0x22, 0xc9, 0x40, 469 0x1b, 0x24, 0x09, 0x0d, 0x45, 470 0x82, 0x06, 0xd5, 0x87, 0x81, 471 0x83, 0x40, 0xa2, 0x01, 0x25, 472 0x04, 0x46, 0x73, 0x65, 0x63, 473 0x2d, 0x34, 0x38, 0x40 }, 474 475 sign_hmac_03[] = { 476 0xd8, 0x61, 0x85, 0x43, 0xa1, 477 0x01, 0x07, 0xa0, 0x54, 0x54, 478 0x68, 0x69, 0x73, 0x20, 0x69, 479 0x73, 0x20, 0x74, 0x68, 0x65, 480 0x20, 0x63, 0x6f, 0x6e, 0x74, 481 0x65, 0x6e, 0x74, 0x2e, 0x58, 482 0x40, 0xcd, 0x28, 0xa6, 0xb3, 483 0xcf, 0xbb, 0xbf, 0x21, 0x48, 484 0x51, 0xb9, 0x06, 0xe0, 0x50, 485 0x05, 0x6c, 0xb4, 0x38, 0xa8, 486 0xb8, 0x89, 0x05, 0xb8, 0xb7, 487 0x46, 0x19, 0x77, 0x02, 0x27, 488 0x11, 0xa9, 0xd8, 0xac, 0x5d, 489 0xbc, 0x54, 0xe2, 0x9a, 0x56, 490 0xd9, 0x26, 0x04, 0x6b, 0x40, 491 0xfc, 0x26, 0x07, 0xc2, 0x5b, 492 0x34, 0x44, 0x54, 0xaa, 0x5f, 493 0x68, 0xde, 0x09, 0xa3, 0xe5, 494 0x25, 0xd3, 0x86, 0x5a, 0x05, 495 0x81, 0x83, 0x40, 0xa2, 0x01, 496 0x25, 0x04, 0x46, 0x73, 0x65, 497 0x63, 0x2d, 0x36, 0x34, 0x40 }, 498 499 sign_hmac_04[] = { 500 0xd8, 0x61, 0x85, 0x43, 0xa1, 501 0x01, 0x05, 0xa0, 0x54, 0x54, 502 0x68, 0x69, 0x73, 0x20, 0x69, 503 0x73, 0x20, 0x74, 0x68, 0x65, 504 0x20, 0x63, 0x6f, 0x6e, 0x74, 505 0x65, 0x6e, 0x74, 0x2e, 0x58, 506 0x20, 0x2b, 0xdc, 0xc8, 0x9f, 507 0x05, 0x82, 0x16, 0xb8, 0xa2, 508 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 509 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 510 0x63, 0x48, 0x49, 0x86, 0x56, 511 0x51, 0x05, 0xc9, 0xad, 0x5a, 512 0x66, 0x82, 0xf7, 0x81, 0x83, 513 0x40, 0xa2, 0x01, 0x25, 0x04, 514 0x4a, 0x6f, 0x75, 0x72, 0x2d, 515 0x73, 0x65, 0x63, 0x72, 0x65, 516 0x74, 0x40 }, 517 518 sign_hmac_05[] = { 519 0xd8, 0x61, 0x85, 0x43, 0xa1, 520 0x01, 0x04, 0xa0, 0x54, 0x54, 521 0x68, 0x69, 0x73, 0x20, 0x69, 522 0x73, 0x20, 0x74, 0x68, 0x65, 523 0x20, 0x63, 0x6f, 0x6e, 0x74, 524 0x65, 0x6e, 0x74, 0x2e, 0x48, 525 0x6f, 0x35, 0xca, 0xb7, 0x79, 526 0xf7, 0x78, 0x33, 0x81, 0x83, 527 0x40, 0xa2, 0x01, 0x25, 0x04, 528 0x4a, 0x6f, 0x75, 0x72, 0x2d, 529 0x73, 0x65, 0x63, 0x72, 0x65, 530 0x74, 0x40 }, 531 532 enc_hmac_01[] = { 533 0xd1, 0x84, 0x43, 0xa1, 0x01, 534 0x05, 0xa0, 0x54, 0x54, 0x68, 535 0x69, 0x73, 0x20, 0x69, 0x73, 536 0x20, 0x74, 0x68, 0x65, 0x20, 537 0x63, 0x6f, 0x6e, 0x74, 0x65, 538 0x6e, 0x74, 0x2e, 0x58, 0x20, 539 0xa1, 0xa8, 0x48, 0xd3, 0x47, 540 0x1f, 0x9d, 0x61, 0xee, 0x49, 541 0x01, 0x8d, 0x24, 0x4c, 0x82, 542 0x47, 0x72, 0xf2, 0x23, 0xad, 543 0x4f, 0x93, 0x52, 0x93, 0xf1, 544 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 545 0x8c, 0x58 }, 546 547 enc_hmac_02[] = { 548 0xd1, 0x84, 0x43, 0xa1, 0x01, 549 0x06, 0xa0, 0x54, 0x54, 0x68, 550 0x69, 0x73, 0x20, 0x69, 0x73, 551 0x20, 0x74, 0x68, 0x65, 0x20, 552 0x63, 0x6f, 0x6e, 0x74, 0x65, 553 0x6e, 0x74, 0x2e, 0x58, 0x30, 554 0x99, 0x8d, 0x26, 0xc6, 0x45, 555 0x9a, 0xae, 0xec, 0xf4, 0x4e, 556 0xd2, 0x0c, 0xe0, 0x0c, 0x8c, 557 0xce, 0xdf, 0x0a, 0x1f, 0x3d, 558 0x22, 0xa9, 0x2f, 0xc0, 0x5d, 559 0xb0, 0x8c, 0x5a, 0xeb, 0x1c, 560 0xb5, 0x94, 0xca, 0xaf, 0x5a, 561 0x5c, 0x5e, 0x2e, 0x9d, 0x01, 562 0xcc, 0xe7, 0xe7, 0x7a, 0x93, 563 0xaa, 0x8c, 0x62 }, 564 565 enc_hmac_03[] = { 566 0xd1, 0x84, 0x43, 0xa1, 0x01, 567 0x07, 0xa0, 0x54, 0x54, 0x68, 568 0x69, 0x73, 0x20, 0x69, 0x73, 569 0x20, 0x74, 0x68, 0x65, 0x20, 570 0x63, 0x6f, 0x6e, 0x74, 0x65, 571 0x6e, 0x74, 0x2e, 0x58, 0x40, 572 0x4a, 0x55, 0x5b, 0xf9, 0x71, 573 0xf7, 0xc1, 0x89, 0x1d, 0x9d, 574 0xdf, 0x30, 0x4a, 0x1a, 0x13, 575 0x2e, 0x2d, 0x6f, 0x81, 0x74, 576 0x49, 0x47, 0x4d, 0x81, 0x3e, 577 0x6d, 0x04, 0xd6, 0x59, 0x62, 578 0xbe, 0xd8, 0xbb, 0xa7, 0x0c, 579 0x17, 0xe1, 0xf5, 0x30, 0x8f, 580 0xa3, 0x99, 0x62, 0x95, 0x9a, 581 0x4b, 0x9b, 0x8d, 0x7d, 0xa8, 582 0xe6, 0xd8, 0x49, 0xb2, 0x09, 583 0xdc, 0xd3, 0xe9, 0x8c, 0xc0, 584 0xf1, 0x1e, 0xdd, 0xf2 }, 585 586 enc_hmac_04[] = { 587 0xd1, 0x84, 0x43, 0xa1, 0x01, 588 0x05, 0xa0, 0x54, 0x54, 0x68, 589 0x69, 0x73, 0x20, 0x69, 0x73, 590 0x20, 0x74, 0x68, 0x65, 0x20, 591 0x63, 0x6f, 0x6e, 0x74, 0x65, 592 0x6e, 0x74, 0x2e, 0x58, 0x20, 593 0xa1, 0xa8, 0x48, 0xd3, 0x47, 594 0x1f, 0x9d, 0x61, 0xee, 0x49, 595 0x01, 0x8d, 0x24, 0x4c, 0x82, 596 0x47, 0x72, 0xf2, 0x23, 0xad, 597 0x4f, 0x93, 0x52, 0x93, 0xf1, 598 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 599 0x8c, 0x59 }, 600 601 enc_hmac_05[] = { 602 0xd1, 0x84, 0x43, 0xa1, 0x01, 603 0x04, 0xa0, 0x54, 0x54, 0x68, 604 0x69, 0x73, 0x20, 0x69, 0x73, 605 0x20, 0x74, 0x68, 0x65, 0x20, 606 0x63, 0x6f, 0x6e, 0x74, 0x65, 607 0x6e, 0x74, 0x2e, 0x48, 0x11, 608 0xf9, 0xe3, 0x57, 0x97, 0x5f, 609 0xb8, 0x49 } 610#if 0 611, 612 613 countersign_sign_01[] = { 614 0xd8, 0x62, 0x84, 0x43, 0xa1, 615 0x03, 0x00, 0xa0, 0x54, 0x54, 616 0x68, 0x69, 0x73, 0x20, 0x69, 617 0x73, 0x20, 0x74, 0x68, 0x65, 618 0x20, 0x63, 0x6f, 0x6e, 0x74, 619 0x65, 0x6e, 0x74, 0x2e, 0x81, 620 0x83, 0x43, 0xa1, 0x01, 0x27, 621 0xa2, 0x07, 0x83, 0x43, 0xa1, 622 0x01, 0x27, 0xa1, 0x04, 0x42, 623 0x31, 0x31, 0x58, 0x40, 0x8e, 624 0x1b, 0xe2, 0xf9, 0x45, 0x3d, 625 0x26, 0x48, 0x12, 0xe5, 0x90, 626 0x49, 0x91, 0x32, 0xbe, 0xf3, 627 0xfb, 0xf9, 0xee, 0x9d, 0xb2, 628 0x7c, 0x2c, 0x16, 0x87, 0x88, 629 0xe3, 0xb7, 0xeb, 0xe5, 0x06, 630 0xc0, 0x4f, 0xd3, 0xd1, 0x9f, 631 0xaa, 0x9f, 0x51, 0x23, 0x2a, 632 0xf5, 0xc9, 0x59, 0xe4, 0xef, 633 0x47, 0x92, 0x88, 0x34, 0x64, 634 0x7f, 0x56, 0xdf, 0xbe, 0x93, 635 0x91, 0x12, 0x88, 0x4d, 0x08, 636 0xef, 0x25, 0x05, 0x04, 0x42, 637 0x31, 0x31, 0x58, 0x40, 0x77, 638 0xf3, 0xea, 0xcd, 0x11, 0x85, 639 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 640 0x72, 0xfa, 0xbe, 0x6b, 0x26, 641 0xfb, 0xa1, 0xd7, 0x60, 0x92, 642 0xb2, 0xb5, 0xb7, 0xec, 0x83, 643 0xb8, 0x35, 0x57, 0x65, 0x22, 644 0x64, 0xe6, 0x96, 0x90, 0xdb, 645 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 646 0xf8, 0x84, 0x11, 0xc0, 0xd2, 647 0x5a, 0x50, 0x7f, 0xdb, 0x24, 648 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 649 0x24, 0x5f, 0xab, 0xd3, 0xfc, 650 0x9e, 0xc1, 0x06 } 651#endif 652; 653 654extern const struct { 655 const uint8_t *set; 656 size_t len; 657} keyset1, key3, key8, key9, key10; 658 659static int 660xcb(lws_cose_sig_ext_pay_t *x) 661{ 662 x->ext = sign1_pass_02_ext; 663 x->xl = sizeof(sign1_pass_02_ext); 664 665 return LCOSESIGEXTCB_RET_FINISHED; 666} 667 668 669 670int 671test_cose_sign(struct lws_context *context) 672{ 673 struct lws_cose_validate_context *cps; 674 lws_cose_validate_create_info_t info; 675 lws_cose_validate_res_t *res; 676 lws_dll2_owner_t set; 677 lws_dll2_owner_t *o; 678 int n; 679 680 memset(&info, 0, sizeof(info)); 681 info.cx = context; 682 info.keyset = &set; 683 684#if 1 685 { 686 int fd = open("sign_hmac01.sig", 687 LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); 688 689 if (fd >= 0) { 690 write(fd, sign_hmac_01, sizeof(sign_hmac_01)); 691 close(fd); 692 } 693 } 694#endif 695 696 /* 697 * valid sign1 we have key for 698 */ 699 700 lwsl_user("%s: sign1/sign-pass-01\n", __func__); 701 702 lws_dll2_owner_clear(&set); 703 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 704 lwsl_notice("%s: key import fail\n", __func__); 705 return 1; 706 } 707 708 info.sigtype = SIGTYPE_SINGLE; 709 cps = lws_cose_validate_create(&info); 710 if (!cps) { 711 lwsl_notice("%s: sign_val_create fail\n", __func__); 712 goto bail; 713 } 714 715 n = lws_cose_validate_chunk(cps, sign1_pass_01, sizeof(sign1_pass_01), 716 NULL); 717 if (n) { 718 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 719 goto bail1; 720 } 721 722 o = lws_cose_validate_results(cps); 723 if (o->count != 1) 724 goto bail1; 725 726 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 727 if (res->result) 728 goto bail1; 729 730 lws_cose_validate_destroy(&cps); 731 lws_cose_key_set_destroy(&set); 732 733 /* 734 * valid sign1 but empty key set, so can't judge it 735 */ 736 737 lwsl_user("%s: sign1/sign-pass-01 - no key\n", __func__); 738 739 lws_dll2_owner_clear(&set); 740 741 info.sigtype = SIGTYPE_SINGLE; 742 cps = lws_cose_validate_create(&info); 743 if (!cps) { 744 lwsl_notice("%s: sign_val_create fail\n", __func__); 745 goto bail; 746 } 747 748 n = lws_cose_validate_chunk(cps, sign1_pass_01, sizeof(sign1_pass_01), 749 NULL); 750 if (n) { 751 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 752 goto bail1; 753 } 754 755 o = lws_cose_validate_results(cps); 756 if (o->count != 1) 757 goto bail1; 758 759 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 760 if (!res->result) 761 goto bail1; 762 763 lws_cose_validate_destroy(&cps); 764 lws_cose_key_set_destroy(&set); 765 766 /* 767 * valid sign1 768 */ 769 770 lwsl_user("%s: sign1/sign-pass-02\n", __func__); 771 772 lws_dll2_owner_clear(&set); 773 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 774 lwsl_notice("%s: key import fail\n", __func__); 775 return 1; 776 } 777 778 info.sigtype = SIGTYPE_SINGLE; 779 info.ext_cb = xcb; 780 info.ext_len = sizeof(sign1_pass_02_ext); 781 cps = lws_cose_validate_create(&info); 782 if (!cps) { 783 lwsl_notice("%s: sign_val_create fail\n", __func__); 784 goto bail; 785 } 786 787 n = lws_cose_validate_chunk(cps, sign1_pass_02, sizeof(sign1_pass_02), 788 NULL); 789 if (n) { 790 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 791 goto bail1; 792 } 793 794 o = lws_cose_validate_results(cps); 795 if (o->count != 1) 796 goto bail1; 797 798 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 799 if (res->result) 800 goto bail1; 801 802 lws_cose_validate_destroy(&cps); 803 lws_cose_key_set_destroy(&set); 804 805 /* 806 * valid sign1 without enclosing tag 807 */ 808 809 lwsl_user("%s: sign1/sign-pass-03\n", __func__); 810 811 lws_dll2_owner_clear(&set); 812 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 813 lwsl_notice("%s: key import fail\n", __func__); 814 return 1; 815 } 816 817 info.sigtype = SIGTYPE_SINGLE; 818 info.ext_cb = NULL; 819 info.ext_len = 0; 820 cps = lws_cose_validate_create(&info); 821 if (!cps) { 822 lwsl_notice("%s: sign_val_create fail\n", __func__); 823 goto bail; 824 } 825 826 n = lws_cose_validate_chunk(cps, sign1_pass_03, sizeof(sign1_pass_03), 827 NULL); 828 if (n) { 829 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 830 goto bail1; 831 } 832 833 o = lws_cose_validate_results(cps); 834 if (o->count != 1) 835 goto bail1; 836 837 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 838 if (res->result) 839 goto bail1; 840 841 lws_cose_validate_destroy(&cps); 842 lws_cose_key_set_destroy(&set); 843 844 /* 845 * sign1 with wrong tag 846 */ 847 848 lwsl_user("%s: sign1/sign-fail-01\n", __func__); 849 850 lws_dll2_owner_clear(&set); 851 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 852 lwsl_notice("%s: key import fail\n", __func__); 853 return 1; 854 } 855 856 info.sigtype = SIGTYPE_SINGLE; 857 cps = lws_cose_validate_create(&info); 858 if (!cps) { 859 lwsl_notice("%s: sign_val_create fail\n", __func__); 860 goto bail; 861 } 862 863 n = lws_cose_validate_chunk(cps, sign1_fail_01, sizeof(sign1_fail_01), 864 NULL); 865 if (!n) { 866 lwsl_notice("%s: sign_val_chunk should have failed\n", __func__); 867 goto bail1; 868 } 869 870 lws_cose_validate_destroy(&cps); 871 lws_cose_key_set_destroy(&set); 872 873 /* 874 * invalid sign1, signature tampered 875 */ 876 877 lwsl_user("%s: sign1/sign-fail-02\n", __func__); 878 879 lws_dll2_owner_clear(&set); 880 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 881 lwsl_notice("%s: key import fail\n", __func__); 882 return 1; 883 } 884 885 info.sigtype = SIGTYPE_SINGLE; 886 cps = lws_cose_validate_create(&info); 887 if (!cps) { 888 lwsl_notice("%s: sign_val_create fail\n", __func__); 889 goto bail; 890 } 891 892 n = lws_cose_validate_chunk(cps, sign1_fail_02, sizeof(sign1_fail_02), 893 NULL); 894 if (n) { 895 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 896 goto bail1; 897 } 898 899 o = lws_cose_validate_results(cps); 900 if (o->count != 1) 901 goto bail1; 902 903 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 904 if (!res->result) 905 /* validation result must be fail */ 906 goto bail1; 907 908 lws_cose_validate_destroy(&cps); 909 lws_cose_key_set_destroy(&set); 910 911 /* 912 * invalid sign1, alg tampered 913 */ 914 915 lwsl_user("%s: sign1/sign-fail-03\n", __func__); 916 917 lws_dll2_owner_clear(&set); 918 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 919 lwsl_notice("%s: key import fail\n", __func__); 920 return 1; 921 } 922 923 info.sigtype = SIGTYPE_SINGLE; 924 cps = lws_cose_validate_create(&info); 925 if (!cps) { 926 lwsl_notice("%s: sign_val_create fail\n", __func__); 927 goto bail; 928 } 929 930 n = lws_cose_validate_chunk(cps, sign1_fail_03, sizeof(sign1_fail_03), 931 NULL); 932 if (n) { 933 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 934 goto bail1; 935 } 936 937 o = lws_cose_validate_results(cps); 938 if (o->count != 1) 939 goto bail1; 940 941 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 942 if (!res->result) 943 /* validation result must be fail */ 944 goto bail1; 945 946 lws_cose_validate_destroy(&cps); 947 lws_cose_key_set_destroy(&set); 948 949 /* 950 * invalid sign1, alg sign tampered 951 */ 952 953 lwsl_user("%s: sign1/sign-fail-04\n", __func__); 954 955 lws_dll2_owner_clear(&set); 956 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 957 lwsl_notice("%s: key import fail\n", __func__); 958 return 1; 959 } 960 961 info.sigtype = SIGTYPE_SINGLE; 962 cps = lws_cose_validate_create(&info); 963 if (!cps) { 964 lwsl_notice("%s: sign_val_create fail\n", __func__); 965 goto bail; 966 } 967 968 n = lws_cose_validate_chunk(cps, sign1_fail_04, sizeof(sign1_fail_04), 969 NULL); 970 if (n) { 971 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 972 goto bail1; 973 } 974 975 o = lws_cose_validate_results(cps); 976 if (o->count != 1) 977 goto bail1; 978 979 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 980 if (!res->result) 981 /* validation result must be fail */ 982 goto bail1; 983 984 lws_cose_validate_destroy(&cps); 985 lws_cose_key_set_destroy(&set); 986 987 /* 988 * invalid sign1, protected attributes tampered 989 */ 990 991 lwsl_user("%s: sign1/sign-fail-06\n", __func__); 992 993 lws_dll2_owner_clear(&set); 994 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 995 lwsl_notice("%s: key import fail\n", __func__); 996 return 1; 997 } 998 999 info.sigtype = SIGTYPE_SINGLE; 1000 cps = lws_cose_validate_create(&info); 1001 if (!cps) { 1002 lwsl_notice("%s: sign_val_create fail\n", __func__); 1003 goto bail; 1004 } 1005 1006 n = lws_cose_validate_chunk(cps, sign1_fail_06, sizeof(sign1_fail_06), 1007 NULL); 1008 if (n) { 1009 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1010 goto bail1; 1011 } 1012 1013 o = lws_cose_validate_results(cps); 1014 if (o->count != 1) 1015 goto bail1; 1016 1017 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1018 if (!res->result) 1019 /* validation result must be fail */ 1020 goto bail1; 1021 1022 lws_cose_validate_destroy(&cps); 1023 lws_cose_key_set_destroy(&set); 1024 1025 /* 1026 * invalid sign1, protected attribute removed 1027 */ 1028 1029 lwsl_user("%s: sign1/sign-fail-07\n", __func__); 1030 1031 lws_dll2_owner_clear(&set); 1032 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1033 lwsl_notice("%s: key import fail\n", __func__); 1034 return 1; 1035 } 1036 1037 info.sigtype = SIGTYPE_SINGLE; 1038 cps = lws_cose_validate_create(&info); 1039 if (!cps) { 1040 lwsl_notice("%s: sign_val_create fail\n", __func__); 1041 goto bail; 1042 } 1043 1044 n = lws_cose_validate_chunk(cps, sign1_fail_07, sizeof(sign1_fail_07), 1045 NULL); 1046 if (n) { 1047 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1048 goto bail1; 1049 } 1050 1051 o = lws_cose_validate_results(cps); 1052 if (o->count != 1) 1053 goto bail1; 1054 1055 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1056 if (!res->result) 1057 /* validation result must be fail */ 1058 goto bail1; 1059 1060 lws_cose_validate_destroy(&cps); 1061 lws_cose_key_set_destroy(&set); 1062 1063 /* 1064 * valid sign we have key for 1065 */ 1066 1067 lwsl_user("%s: sign/sign-pass-01\n", __func__); 1068 1069 lws_dll2_owner_clear(&set); 1070 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1071 lwsl_notice("%s: key import fail\n", __func__); 1072 return 1; 1073 } 1074 1075 info.sigtype = SIGTYPE_MULTI; 1076 cps = lws_cose_validate_create(&info); 1077 if (!cps) { 1078 lwsl_notice("%s: sign_val_create fail\n", __func__); 1079 goto bail; 1080 } 1081 1082 n = lws_cose_validate_chunk(cps, sign_pass_01, sizeof(sign_pass_01), 1083 NULL); 1084 if (n) { 1085 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1086 goto bail1; 1087 } 1088 1089 o = lws_cose_validate_results(cps); 1090 if (o->count != 1) { 1091 lwsl_notice("%s: results: %d\n", __func__, o->count); 1092 goto bail1; 1093 } 1094 1095 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1096 if (res->result) 1097 goto bail1; 1098 1099 lws_cose_validate_destroy(&cps); 1100 lws_cose_key_set_destroy(&set); 1101 1102 /* 1103 * valid sign we have key for 1104 */ 1105 1106 lwsl_user("%s: sign/sign-pass-02\n", __func__); 1107 1108 lws_dll2_owner_clear(&set); 1109 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1110 lwsl_notice("%s: key import fail\n", __func__); 1111 return 1; 1112 } 1113 1114 info.sigtype = SIGTYPE_MULTI; 1115 info.ext_cb = xcb; 1116 info.ext_len = sizeof(sign1_pass_02_ext); 1117 cps = lws_cose_validate_create(&info); 1118 if (!cps) { 1119 lwsl_notice("%s: sign_val_create fail\n", __func__); 1120 goto bail; 1121 } 1122 1123 n = lws_cose_validate_chunk(cps, sign_pass_02, sizeof(sign_pass_02), 1124 NULL); 1125 if (n) { 1126 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1127 goto bail1; 1128 } 1129 1130 o = lws_cose_validate_results(cps); 1131 if (o->count != 1) { 1132 lwsl_notice("%s: results: %d\n", __func__, o->count); 1133 goto bail1; 1134 } 1135 1136 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1137 if (res->result) 1138 goto bail1; 1139 1140 lws_cose_validate_destroy(&cps); 1141 lws_cose_key_set_destroy(&set); 1142 1143 /* 1144 * valid sign we have key for 1145 */ 1146 1147 lwsl_user("%s: sign/sign-pass-03\n", __func__); 1148 1149 lws_dll2_owner_clear(&set); 1150 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1151 lwsl_notice("%s: key import fail\n", __func__); 1152 return 1; 1153 } 1154 1155 info.sigtype = SIGTYPE_MULTI; 1156 info.ext_cb = NULL; 1157 info.ext_len = 0; 1158 cps = lws_cose_validate_create(&info); 1159 if (!cps) { 1160 lwsl_notice("%s: sign_val_create fail\n", __func__); 1161 goto bail; 1162 } 1163 1164 n = lws_cose_validate_chunk(cps, sign_pass_03, sizeof(sign_pass_03), 1165 NULL); 1166 if (n) { 1167 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1168 goto bail1; 1169 } 1170 1171 o = lws_cose_validate_results(cps); 1172 if (o->count != 1) { 1173 lwsl_notice("%s: results: %d\n", __func__, o->count); 1174 goto bail1; 1175 } 1176 1177 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1178 if (res->result) 1179 goto bail1; 1180 1181 lws_cose_validate_destroy(&cps); 1182 lws_cose_key_set_destroy(&set); 1183 1184 /* 1185 * wrong cbor tag 1186 */ 1187 1188 lwsl_user("%s: sign/sign-fail-01\n", __func__); 1189 1190 lws_dll2_owner_clear(&set); 1191 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1192 lwsl_notice("%s: key import fail\n", __func__); 1193 return 1; 1194 } 1195 1196 info.sigtype = SIGTYPE_MULTI; 1197 cps = lws_cose_validate_create(&info); 1198 if (!cps) { 1199 lwsl_notice("%s: sign_val_create fail\n", __func__); 1200 goto bail; 1201 } 1202 1203 n = lws_cose_validate_chunk(cps, sign_fail_01, sizeof(sign_fail_01), 1204 NULL); 1205 if (!n) { 1206 lwsl_notice("%s: sign_val_chunk should fail\n", __func__); 1207 goto bail1; 1208 } 1209 1210 lws_cose_validate_destroy(&cps); 1211 lws_cose_key_set_destroy(&set); 1212 1213 /* 1214 * tampered signature 1215 */ 1216 1217 lwsl_user("%s: sign/sign-fail-02\n", __func__); 1218 1219 lws_dll2_owner_clear(&set); 1220 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1221 lwsl_notice("%s: key import fail\n", __func__); 1222 return 1; 1223 } 1224 1225 info.sigtype = SIGTYPE_MULTI; 1226 cps = lws_cose_validate_create(&info); 1227 if (!cps) { 1228 lwsl_notice("%s: sign_val_create fail\n", __func__); 1229 goto bail; 1230 } 1231 1232 n = lws_cose_validate_chunk(cps, sign_fail_02, sizeof(sign_fail_02), 1233 NULL); 1234 if (n) { 1235 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1236 goto bail1; 1237 } 1238 1239 o = lws_cose_validate_results(cps); 1240 if (o->count != 1) { 1241 lwsl_notice("%s: results: %d\n", __func__, o->count); 1242 goto bail1; 1243 } 1244 1245 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1246 if (!res->result) 1247 goto bail1; 1248 1249 lws_cose_validate_destroy(&cps); 1250 lws_cose_key_set_destroy(&set); 1251 1252 /* 1253 * tampered sign alg -999 1254 */ 1255 1256 lwsl_user("%s: sign/sign-fail-03\n", __func__); 1257 1258 lws_dll2_owner_clear(&set); 1259 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1260 lwsl_notice("%s: key import fail\n", __func__); 1261 return 1; 1262 } 1263 1264 info.sigtype = SIGTYPE_MULTI; 1265 cps = lws_cose_validate_create(&info); 1266 if (!cps) { 1267 lwsl_notice("%s: sign_val_create fail\n", __func__); 1268 goto bail; 1269 } 1270 1271 n = lws_cose_validate_chunk(cps, sign_fail_03, sizeof(sign_fail_03), 1272 NULL); 1273 if (n) { 1274 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1275 goto bail1; 1276 } 1277 1278 o = lws_cose_validate_results(cps); 1279 if (o->count != 1) { 1280 lwsl_notice("%s: results: %d\n", __func__, o->count); 1281 goto bail1; 1282 } 1283 1284 lws_cose_validate_destroy(&cps); 1285 lws_cose_key_set_destroy(&set); 1286 1287 /* 1288 * tampered sign alg 0 1289 */ 1290 1291 lwsl_user("%s: sign/sign-fail-04\n", __func__); 1292 1293 lws_dll2_owner_clear(&set); 1294 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1295 lwsl_notice("%s: key import fail\n", __func__); 1296 return 1; 1297 } 1298 1299 info.sigtype = SIGTYPE_MULTI; 1300 cps = lws_cose_validate_create(&info); 1301 if (!cps) { 1302 lwsl_notice("%s: sign_val_create fail\n", __func__); 1303 goto bail; 1304 } 1305 1306 n = lws_cose_validate_chunk(cps, sign_fail_04, sizeof(sign_fail_04), 1307 NULL); 1308 if (n) { 1309 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1310 goto bail1; 1311 } 1312 1313 o = lws_cose_validate_results(cps); 1314 if (o->count != 1) { 1315 lwsl_notice("%s: results: %d\n", __func__, o->count); 1316 goto bail1; 1317 } 1318 1319 lws_cose_validate_destroy(&cps); 1320 lws_cose_key_set_destroy(&set); 1321 1322 /* 1323 * add protected attribute 1324 */ 1325 1326 lwsl_user("%s: sign/sign-fail-06\n", __func__); 1327 1328 lws_dll2_owner_clear(&set); 1329 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1330 lwsl_notice("%s: key import fail\n", __func__); 1331 return 1; 1332 } 1333 1334 info.sigtype = SIGTYPE_MULTI; 1335 cps = lws_cose_validate_create(&info); 1336 if (!cps) { 1337 lwsl_notice("%s: sign_val_create fail\n", __func__); 1338 goto bail; 1339 } 1340 1341 n = lws_cose_validate_chunk(cps, sign_fail_06, sizeof(sign_fail_06), 1342 NULL); 1343 if (n) { 1344 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1345 goto bail1; 1346 } 1347 1348 o = lws_cose_validate_results(cps); 1349 if (o->count != 1) { 1350 lwsl_notice("%s: results: %d\n", __func__, o->count); 1351 goto bail1; 1352 } 1353 1354 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1355 if (!res->result) 1356 goto bail1; 1357 1358 lws_cose_validate_destroy(&cps); 1359 lws_cose_key_set_destroy(&set); 1360 1361 /* 1362 * remove protected attribute 1363 */ 1364 1365 lwsl_user("%s: sign/sign-fail-07\n", __func__); 1366 1367 lws_dll2_owner_clear(&set); 1368 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1369 lwsl_notice("%s: key import fail\n", __func__); 1370 return 1; 1371 } 1372 1373 info.sigtype = SIGTYPE_MULTI; 1374 cps = lws_cose_validate_create(&info); 1375 if (!cps) { 1376 lwsl_notice("%s: sign_val_create fail\n", __func__); 1377 goto bail; 1378 } 1379 1380 n = lws_cose_validate_chunk(cps, sign_fail_07, sizeof(sign_fail_07), 1381 NULL); 1382 if (n) { 1383 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1384 goto bail1; 1385 } 1386 1387 o = lws_cose_validate_results(cps); 1388 if (o->count != 1) { 1389 lwsl_notice("%s: results: %d\n", __func__, o->count); 1390 goto bail1; 1391 } 1392 1393 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1394 if (!res->result) 1395 goto bail1; 1396 1397 lws_cose_validate_destroy(&cps); 1398 lws_cose_key_set_destroy(&set); 1399 1400 1401 /* 1402 * valid HMAC sign we have key for 1403 */ 1404 1405 lwsl_user("%s: hmac-examples/hmac-01\n", __func__); 1406 1407 lws_dll2_owner_clear(&set); 1408 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1409 lwsl_notice("%s: key import fail\n", __func__); 1410 return 1; 1411 } 1412 1413 info.sigtype = SIGTYPE_MAC; 1414 cps = lws_cose_validate_create(&info); 1415 if (!cps) { 1416 lwsl_notice("%s: sign_val_create fail\n", __func__); 1417 goto bail; 1418 } 1419 1420 n = lws_cose_validate_chunk(cps, sign_hmac_01, sizeof(sign_hmac_01), 1421 NULL); 1422 if (n) { 1423 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1424 goto bail1; 1425 } 1426 1427 o = lws_cose_validate_results(cps); 1428 if (o->count != 1) { 1429 lwsl_err("%s: count %d\n", __func__, o->count); 1430 goto bail1; 1431 } 1432 1433 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1434 if (res->result) { 1435 lwsl_err("%s: result is fail\n", __func__); 1436 goto bail1; 1437 } 1438 1439 lws_cose_validate_destroy(&cps); 1440 lws_cose_key_set_destroy(&set); 1441 1442 /* 1443 * valid HMAC sign we have key for 1444 */ 1445 1446 lwsl_user("%s: hmac-examples/hmac-02\n", __func__); 1447 1448 lws_dll2_owner_clear(&set); 1449 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1450 lwsl_notice("%s: key import fail\n", __func__); 1451 return 1; 1452 } 1453 1454 info.sigtype = SIGTYPE_MAC; 1455 cps = lws_cose_validate_create(&info); 1456 if (!cps) { 1457 lwsl_notice("%s: sign_val_create fail\n", __func__); 1458 goto bail; 1459 } 1460 1461 n = lws_cose_validate_chunk(cps, sign_hmac_02, sizeof(sign_hmac_02), 1462 NULL); 1463 if (n) { 1464 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1465 goto bail1; 1466 } 1467 1468 o = lws_cose_validate_results(cps); 1469 if (o->count != 1) { 1470 lwsl_err("%s: count %d\n", __func__, o->count); 1471 goto bail1; 1472 } 1473 1474 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1475 if (res->result) { 1476 lwsl_err("%s: result is fail\n", __func__); 1477 goto bail1; 1478 } 1479 1480 lws_cose_validate_destroy(&cps); 1481 lws_cose_key_set_destroy(&set); 1482 1483 1484 /* 1485 * valid HMAC sign we have key for 1486 */ 1487 1488 lwsl_user("%s: hmac-examples/hmac-03\n", __func__); 1489 1490 lws_dll2_owner_clear(&set); 1491 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1492 lwsl_notice("%s: key import fail\n", __func__); 1493 return 1; 1494 } 1495 1496 info.sigtype = SIGTYPE_MAC; 1497 cps = lws_cose_validate_create(&info); 1498 if (!cps) { 1499 lwsl_notice("%s: sign_val_create fail\n", __func__); 1500 goto bail; 1501 } 1502 1503 n = lws_cose_validate_chunk(cps, sign_hmac_03, sizeof(sign_hmac_03), 1504 NULL); 1505 if (n) { 1506 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1507 goto bail1; 1508 } 1509 1510 o = lws_cose_validate_results(cps); 1511 if (o->count != 1) { 1512 lwsl_err("%s: count %d\n", __func__, o->count); 1513 goto bail1; 1514 } 1515 1516 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1517 if (res->result) { 1518 lwsl_err("%s: result is fail\n", __func__); 1519 goto bail1; 1520 } 1521 1522 lws_cose_validate_destroy(&cps); 1523 lws_cose_key_set_destroy(&set); 1524 1525 /* 1526 * invalid HMAC sign we have key for 1527 */ 1528 1529 lwsl_user("%s: hmac-examples/hmac-04 fail mac tag\n", __func__); 1530 1531 lws_dll2_owner_clear(&set); 1532 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1533 lwsl_notice("%s: key import fail\n", __func__); 1534 return 1; 1535 } 1536 1537 info.sigtype = SIGTYPE_MAC; 1538 cps = lws_cose_validate_create(&info); 1539 if (!cps) { 1540 lwsl_notice("%s: sign_val_create fail\n", __func__); 1541 goto bail; 1542 } 1543 1544 n = lws_cose_validate_chunk(cps, sign_hmac_04, sizeof(sign_hmac_04), 1545 NULL); 1546 if (n) { 1547 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1548 goto bail1; 1549 } 1550 1551 o = lws_cose_validate_results(cps); 1552 if (o->count != 1) { 1553 lwsl_err("%s: count %d\n", __func__, o->count); 1554 goto bail1; 1555 } 1556 1557 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1558 if (!res->result) { 1559 lwsl_err("%s: result is wrongly succeeding\n", __func__); 1560 goto bail1; 1561 } 1562 1563 lws_cose_validate_destroy(&cps); 1564 lws_cose_key_set_destroy(&set); 1565 1566 /* 1567 * valid HMAC sign we have key for HS256/64 1568 */ 1569 1570 lwsl_user("%s: hmac-examples/hmac-05\n", __func__); 1571 1572 lws_dll2_owner_clear(&set); 1573 if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { 1574 lwsl_notice("%s: key import fail\n", __func__); 1575 return 1; 1576 } 1577 1578 info.sigtype = SIGTYPE_MAC; 1579 cps = lws_cose_validate_create(&info); 1580 if (!cps) { 1581 lwsl_notice("%s: sign_val_create fail\n", __func__); 1582 goto bail; 1583 } 1584 1585 n = lws_cose_validate_chunk(cps, sign_hmac_05, sizeof(sign_hmac_05), 1586 NULL); 1587 if (n) { 1588 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1589 goto bail1; 1590 } 1591 1592 o = lws_cose_validate_results(cps); 1593 if (o->count != 1) { 1594 lwsl_err("%s: count %d\n", __func__, o->count); 1595 goto bail1; 1596 } 1597 1598 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1599 if (res->result) { 1600 lwsl_err("%s: result is fail\n", __func__); 1601 goto bail1; 1602 } 1603 1604 lws_cose_validate_destroy(&cps); 1605 lws_cose_key_set_destroy(&set); 1606 1607 /* 1608 * valid HMAC sign with implicit HS256 key 1609 */ 1610 1611 lwsl_user("%s: hmac-examples/enc-01\n", __func__); 1612 1613 lws_dll2_owner_clear(&set); 1614 if (!lws_cose_key_import(&set, NULL, NULL, key3.set, key3.len)) { 1615 lwsl_notice("%s: key import fail\n", __func__); 1616 return 1; 1617 } 1618 1619 info.sigtype = SIGTYPE_MAC0; 1620 cps = lws_cose_validate_create(&info); 1621 if (!cps) { 1622 lwsl_notice("%s: sign_val_create fail\n", __func__); 1623 goto bail; 1624 } 1625 1626 n = lws_cose_validate_chunk(cps, enc_hmac_01, sizeof(enc_hmac_01), 1627 NULL); 1628 if (n) { 1629 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1630 goto bail1; 1631 } 1632 1633 o = lws_cose_validate_results(cps); 1634 if (o->count != 1) { 1635 lwsl_err("%s: count %d\n", __func__, o->count); 1636 goto bail1; 1637 } 1638 1639 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1640 if (res->result) { 1641 lwsl_err("%s: result is fail\n", __func__); 1642 goto bail1; 1643 } 1644 1645 lws_cose_validate_destroy(&cps); 1646 lws_cose_key_set_destroy(&set); 1647 1648 /* 1649 * valid HMAC sign with implicit HS384 key 1650 */ 1651 1652 lwsl_user("%s: hmac-examples/enc-02\n", __func__); 1653 1654 lws_dll2_owner_clear(&set); 1655 if (!lws_cose_key_import(&set, NULL, NULL, key8.set, key8.len)) { 1656 lwsl_notice("%s: key import fail\n", __func__); 1657 return 1; 1658 } 1659 1660 info.sigtype = SIGTYPE_MAC0; 1661 cps = lws_cose_validate_create(&info); 1662 if (!cps) { 1663 lwsl_notice("%s: sign_val_create fail\n", __func__); 1664 goto bail; 1665 } 1666 1667 n = lws_cose_validate_chunk(cps, enc_hmac_02, sizeof(enc_hmac_02), 1668 NULL); 1669 if (n) { 1670 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1671 goto bail1; 1672 } 1673 1674 o = lws_cose_validate_results(cps); 1675 if (o->count != 1) { 1676 lwsl_err("%s: count %d\n", __func__, o->count); 1677 goto bail1; 1678 } 1679 1680 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1681 if (res->result) { 1682 lwsl_err("%s: result is fail\n", __func__); 1683 goto bail1; 1684 } 1685 1686 lws_cose_validate_destroy(&cps); 1687 lws_cose_key_set_destroy(&set); 1688 1689 /* 1690 * valid HMAC sign with implicit HS512 key 1691 */ 1692 1693 lwsl_user("%s: hmac-examples/enc-03\n", __func__); 1694 1695 lws_dll2_owner_clear(&set); 1696 if (!lws_cose_key_import(&set, NULL, NULL, key9.set, key9.len)) { 1697 lwsl_notice("%s: key import fail\n", __func__); 1698 return 1; 1699 } 1700 1701 info.sigtype = SIGTYPE_MAC0; 1702 cps = lws_cose_validate_create(&info); 1703 if (!cps) { 1704 lwsl_notice("%s: sign_val_create fail\n", __func__); 1705 goto bail; 1706 } 1707 1708 n = lws_cose_validate_chunk(cps, enc_hmac_03, sizeof(enc_hmac_03), 1709 NULL); 1710 if (n) { 1711 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1712 goto bail1; 1713 } 1714 1715 o = lws_cose_validate_results(cps); 1716 if (o->count != 1) { 1717 lwsl_err("%s: count %d\n", __func__, o->count); 1718 goto bail1; 1719 } 1720 1721 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1722 if (res->result) { 1723 lwsl_err("%s: result is fail\n", __func__); 1724 goto bail1; 1725 } 1726 1727 lws_cose_validate_destroy(&cps); 1728 lws_cose_key_set_destroy(&set); 1729 1730 /* 1731 * invalid HMAC sign with implicit HS256 key, tampered hmac tag 1732 */ 1733 1734 lwsl_user("%s: hmac-examples/enc-04\n", __func__); 1735 1736 lws_dll2_owner_clear(&set); 1737 if (!lws_cose_key_import(&set, NULL, NULL, key3.set, key3.len)) { 1738 lwsl_notice("%s: key import fail\n", __func__); 1739 return 1; 1740 } 1741 1742 info.sigtype = SIGTYPE_MAC0; 1743 cps = lws_cose_validate_create(&info); 1744 if (!cps) { 1745 lwsl_notice("%s: sign_val_create fail\n", __func__); 1746 goto bail; 1747 } 1748 1749 n = lws_cose_validate_chunk(cps, enc_hmac_04, sizeof(enc_hmac_04), 1750 NULL); 1751 if (n) { 1752 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1753 goto bail1; 1754 } 1755 1756 o = lws_cose_validate_results(cps); 1757 if (o->count != 1) { 1758 lwsl_err("%s: count %d\n", __func__, o->count); 1759 goto bail1; 1760 } 1761 1762 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1763 if (!res->result) { 1764 lwsl_err("%s: result wrongly succeeds\n", __func__); 1765 goto bail1; 1766 } 1767 1768 lws_cose_validate_destroy(&cps); 1769 lws_cose_key_set_destroy(&set); 1770 1771 /* 1772 * valid HMAC sign with implicit HS256 key, HS256/64 1773 */ 1774 1775 lwsl_user("%s: hmac-examples/enc-05\n", __func__); 1776 1777 lws_dll2_owner_clear(&set); 1778 if (!lws_cose_key_import(&set, NULL, NULL, key3.set, key3.len)) { 1779 lwsl_notice("%s: key import fail\n", __func__); 1780 return 1; 1781 } 1782 1783 info.sigtype = SIGTYPE_MAC0; 1784 cps = lws_cose_validate_create(&info); 1785 if (!cps) { 1786 lwsl_notice("%s: sign_val_create fail\n", __func__); 1787 goto bail; 1788 } 1789 1790 n = lws_cose_validate_chunk(cps, enc_hmac_05, sizeof(enc_hmac_05), 1791 NULL); 1792 if (n) { 1793 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1794 goto bail1; 1795 } 1796 1797 o = lws_cose_validate_results(cps); 1798 if (o->count != 1) { 1799 lwsl_err("%s: count %d\n", __func__, o->count); 1800 goto bail1; 1801 } 1802 1803 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1804 if (res->result) { 1805 lwsl_err("%s: result is fail\n", __func__); 1806 goto bail1; 1807 } 1808 1809 lws_cose_validate_destroy(&cps); 1810 lws_cose_key_set_destroy(&set); 1811#if 0 1812 /* 1813 * valid Ed25519 signature with countersignature from same key + alg 1814 */ 1815 1816 lwsl_user("%s: countersign/sign-01\n", __func__); 1817 1818 lws_dll2_owner_clear(&set); 1819 if (!lws_cose_key_import(&set, NULL, NULL, key10.set, key10.len)) { 1820 lwsl_notice("%s: key import fail\n", __func__); 1821 return 1; 1822 } 1823 1824 info.sigtype = SIGTYPE_COUNTERSIGNED; 1825 cps = lws_cose_validate_create(&info); 1826 if (!cps) { 1827 lwsl_notice("%s: sign_val_create fail\n", __func__); 1828 goto bail; 1829 } 1830 1831 n = lws_cose_validate_chunk(cps, countersign_sign_01, 1832 sizeof(countersign_sign_01), NULL); 1833 if (n) { 1834 lwsl_notice("%s: sign_val_chunk failed\n", __func__); 1835 goto bail1; 1836 } 1837 1838 o = lws_cose_validate_results(cps); 1839 if (o->count != 1) { 1840 lwsl_err("%s: result count %d\n", __func__, o->count); 1841 goto bail1; 1842 } 1843 1844 res = lws_container_of(o->head, lws_cose_validate_res_t, list); 1845 if (res->result) { 1846 lwsl_err("%s: result is fail\n", __func__); 1847 goto bail1; 1848 } 1849 1850 lws_cose_validate_destroy(&cps); 1851 lws_cose_key_set_destroy(&set); 1852#endif 1853 1854 return 0; 1855 1856bail1: 1857 lws_cose_validate_destroy(&cps); 1858bail: 1859 lws_cose_key_set_destroy(&set); 1860 1861 return 1; 1862} 1863