1 /* 2 * Copyright (C) 2014-2022 Yubico AB - See COPYING 3 */ 4 5 #undef NDEBUG 6 #include <sys/types.h> 7 #include <assert.h> 8 #include <pwd.h> 9 #include <stdio.h> 10 #include <stdlib.h> 11 #include <unistd.h> 12 13 #include <string.h> 14 #include "../util.h" 15 16 #include "openbsd-compat.h" 17 18 static void test_nouserok(const char *username) { 19 device_t *dev; 20 unsigned ndevs; 21 cfg_t cfg; 22 int rc; 23 24 memset(&cfg, 0, sizeof(cfg_t)); 25 cfg.auth_file = "credentials/this_file_does_not_exist.cred"; 26 cfg.debug = 1; 27 cfg.debug_file = stderr; 28 cfg.max_devs = 1; 29 cfg.nouserok = 1; 30 31 dev = calloc(cfg.max_devs, sizeof(*dev)); 32 assert(dev != NULL); 33 34 rc = get_devices_from_authfile(&cfg, username, dev, &ndevs); 35 assert(rc == PAM_IGNORE); 36 37 cfg.auth_file = "credentials/empty.cred"; 38 rc = get_devices_from_authfile(&cfg, username, dev, &ndevs); 39 assert(rc == PAM_IGNORE); 40 41 free_devices(dev, ndevs); 42 } 43 44 static void test_ssh_credential(const char *username) { 45 device_t *dev; 46 unsigned ndevs; 47 cfg_t cfg; 48 int rc; 49 50 memset(&cfg, 0, sizeof(cfg_t)); 51 cfg.auth_file = "credentials/ssh_credential.cred"; 52 cfg.debug = 1; 53 cfg.debug_file = stderr; 54 cfg.max_devs = 1; 55 cfg.sshformat = 1; 56 57 dev = calloc(cfg.max_devs, sizeof(*dev)); 58 assert(dev != NULL); 59 60 rc = get_devices_from_authfile(&cfg, username, dev, &ndevs); 61 assert(rc == PAM_SUCCESS); 62 assert(ndevs == 1); 63 assert(strcmp(dev[0].coseType, "es256") == 0); 64 assert(strcmp(dev[0].attributes, "+presence") == 0); 65 assert(strcmp(dev[0].keyHandle, 66 "Li4NkUKcvFym8V6aGagSAI11MXPuKSu6kqdWhdxNmQo3i25Ab" 67 "1Lkun2I2H2bz4EjuwLD1UQpJjLG5vjbKG8efg==") == 0); 68 assert(strcmp(dev[0].publicKey, 69 "439pGle7126d1YORADduke347N2t2XyKzOSv8M4naCUjlFYDt" 70 "TVhP/MXO41wzHFUIzrrzfEzzCGWoOH5FU5Adw==") == 0); 71 assert(dev[0].old_format == 0); 72 free_devices(dev, ndevs); 73 } 74 75 static void test_old_credential(const char *username) { 76 device_t *dev; 77 unsigned ndevs; 78 cfg_t cfg; 79 int rc; 80 81 memset(&cfg, 0, sizeof(cfg_t)); 82 cfg.auth_file = "credentials/old_credential.cred"; 83 cfg.sshformat = 0; 84 cfg.debug = 1; 85 cfg.debug_file = stderr; 86 cfg.max_devs = 1; 87 cfg.sshformat = 0; 88 89 dev = calloc(cfg.max_devs, sizeof(*dev)); 90 rc = get_devices_from_authfile(&cfg, username, dev, &ndevs); 91 assert(rc == PAM_SUCCESS); 92 assert(ndevs == 1); 93 assert(strcmp(dev[0].coseType, "es256") == 0); 94 assert(strcmp(dev[0].attributes, "+presence") == 0); 95 assert(strcmp(dev[0].keyHandle, 96 "mGvXxDqTMSVkSlDnDRNTVsP5Ij9cceCkdZkSJYeaJCHCOpBtM" 97 "IFGQXKBBkvZpV5bWuEuJkoElIiMKirhCPAU8Q==") == 0); 98 assert( 99 strcmp(dev[0].publicKey, 100 "0405a35641a6f5b63e2ef4449393e7e1cb2b96711e797fc74dbd63e99dbf410ffe7" 101 "425e79f8c41d8f049c8f7241a803563a43c139f923f0ab9007fbd0dcc722927") == 102 0); 103 assert(dev[0].old_format == 1); 104 free_devices(dev, ndevs); 105 } 106 107 static void test_limited_count(const char *username) { 108 cfg_t cfg; 109 device_t *dev; 110 int rc; 111 unsigned ndevs; 112 113 memset(&cfg, 0, sizeof(cfg_t)); 114 cfg.debug = 1; 115 cfg.debug_file = stderr; 116 117 /* authfile contains three credentials (eddsa, es256, eddsa) */ 118 cfg.auth_file = "credentials/new_limited_count.cred"; 119 cfg.max_devs = 1; 120 121 dev = calloc(cfg.max_devs, sizeof(*dev)); 122 assert(dev != NULL); 123 rc = get_devices_from_authfile(&cfg, username, dev, &ndevs); 124 assert(rc == PAM_SUCCESS); 125 assert(ndevs == 1); 126 assert(strcmp(dev[0].coseType, "eddsa") == 0); 127 assert(strcmp(dev[0].keyHandle, 128 "3mh1qzbVrSyy+zp4rM5JSIQzGAnzolAnqEp/13wt0Ea/" 129 "V0q6rDcoRC3Eyw6tx71mBKDiT5k1fSvtqGYf49r+" 130 "lcnk6kyYQrWBoBaUhrgmF89EUkpXQk59Z+HysoW3HJ/" 131 "S6N56DMmElFRMrmf0n3uTNBE9Y5/lHfWT+5gvCvmgd/0=") == 0); 132 assert(strcmp(dev[0].publicKey, 133 "LpQP+xyOjupzQTMQ2L6B5kv1SnAntUC5zANmZ8Zntdo=") == 0); 134 assert(strcmp(dev[0].attributes, "+presence+verification+pin") == 0); 135 assert(dev[0].old_format == 0); 136 free_devices(dev, ndevs); 137 138 cfg.max_devs = 2; 139 dev = calloc(cfg.max_devs, sizeof(*dev)); 140 assert(dev != NULL); 141 rc = get_devices_from_authfile(&cfg, username, dev, &ndevs); 142 assert(rc == PAM_SUCCESS); 143 assert(ndevs == 2); 144 assert(strcmp(dev[0].coseType, "eddsa") == 0); 145 assert(strcmp(dev[0].keyHandle, 146 "3mh1qzbVrSyy+zp4rM5JSIQzGAnzolAnqEp/13wt0Ea/" 147 "V0q6rDcoRC3Eyw6tx71mBKDiT5k1fSvtqGYf49r+" 148 "lcnk6kyYQrWBoBaUhrgmF89EUkpXQk59Z+HysoW3HJ/" 149 "S6N56DMmElFRMrmf0n3uTNBE9Y5/lHfWT+5gvCvmgd/0=") == 0); 150 assert(strcmp(dev[0].publicKey, 151 "LpQP+xyOjupzQTMQ2L6B5kv1SnAntUC5zANmZ8Zntdo=") == 0); 152 assert(strcmp(dev[0].attributes, "+presence+verification+pin") == 0); 153 assert(dev[0].old_format == 0); 154 assert(strcmp(dev[1].coseType, "es256") == 0); 155 assert(strcmp(dev[1].keyHandle, 156 "vCM/NAYjRqhbodPhR3wA0ElFEvAtGLH20WpRuGPb/MOYEQskUZgq6Jm51x5m/" 157 "CnbmPYp/KDjy8kOZgwssgCCew==") == 0); 158 assert(strcmp(dev[1].publicKey, 159 "qqx7ciL1kv4Tdg6Nxs99sx6u3gLE9rQcYoOwcOJymcp5ikQQH" 160 "7Ijh+D3gIQ89FGUUgmNWlteaXS9VtDsmN16Wg==") == 0); 161 assert(strcmp(dev[1].attributes, "+presence+verification+pin") == 0); 162 assert(dev[1].old_format == 0); 163 free_devices(dev, ndevs); 164 } 165 166 static void test_new_credentials(const char *username) { 167 cfg_t cfg; 168 device_t *dev; 169 unsigned n_devs; 170 int rc; 171 172 memset(&cfg, 0, sizeof(cfg_t)); 173 cfg.debug = 1; 174 cfg.debug_file = stderr; 175 cfg.max_devs = 24; 176 177 /* clang-format off */ 178 /* BEGIN REGENERATE_CREDENTIALS.PY */ 179 dev = calloc(cfg.max_devs, sizeof(*dev)); 180 assert(dev != NULL); 181 cfg.auth_file = "credentials/new_.cred"; 182 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 183 assert(rc == PAM_SUCCESS); 184 assert(n_devs == 1); 185 assert(strcmp(dev[0].coseType, "es256") == 0); 186 assert(strcmp(dev[0].keyHandle, "vlcWFQFik8gJySuxMTlRwSDvnq9u/mlMXRIqv4rd7Kq2CJj1V9Uh9PqbTF8UkY3EcQfHeS0G3nY0ibyxXE0pdw==") == 0); 187 assert(strcmp(dev[0].publicKey, "CTTRrHrqQmqfyI7/bhtAknx9TGCqhd936JdcoekUxUa6PNA6uYzsvFN0qaE+j2LchLPU4vajQPdAOcvvvNfWCA==") == 0); 188 assert(strcmp(dev[0].attributes, "+presence") == 0); 189 assert(dev[0].old_format == 0); 190 free_devices(dev, n_devs); 191 192 dev = calloc(cfg.max_devs, sizeof(*dev)); 193 assert(dev != NULL); 194 cfg.auth_file = "credentials/new_-V.cred"; 195 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 196 assert(rc == PAM_SUCCESS); 197 assert(n_devs == 1); 198 assert(strcmp(dev[0].coseType, "es256") == 0); 199 assert(strcmp(dev[0].keyHandle, "qf/qcQqFloToNoUMnp2cWg8pUPKoJ0CJFyP0wqpbpOgcD+hzEOJEBaHFbnnYP9d/zLKuwTsQ1nRpSc/aDJTEeQ==") == 0); 200 assert(strcmp(dev[0].publicKey, "kwca39tt8HI+MV7skKO1W1K4y0ptbXv6lFW/nwxZ0GSVeMAwTZgf/XP1O7O0i9+D227F/Ppo5eIc6gquvjiXdA==") == 0); 201 assert(strcmp(dev[0].attributes, "+presence+verification") == 0); 202 assert(dev[0].old_format == 0); 203 free_devices(dev, n_devs); 204 205 dev = calloc(cfg.max_devs, sizeof(*dev)); 206 assert(dev != NULL); 207 cfg.auth_file = "credentials/new_-N.cred"; 208 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 209 assert(rc == PAM_SUCCESS); 210 assert(n_devs == 1); 211 assert(strcmp(dev[0].coseType, "es256") == 0); 212 assert(strcmp(dev[0].keyHandle, "IPbgFVDLguVOr5GzdV7C5MH4Ec+bWfG2hifOy0IWWvNsHUZyN5x0rqbAoGWQPgxbAuQTKfk/n+3U9h4AWf8QXg==") == 0); 213 assert(strcmp(dev[0].publicKey, "5KfKYcZofwqflFbr+d+df0e9b8nfLulducJ1WMyTBO00Rf3rL3JInYeccS2+xvI+eYNsZmJ3RR6zFAPkkBUhzA==") == 0); 214 assert(strcmp(dev[0].attributes, "+presence+pin") == 0); 215 assert(dev[0].old_format == 0); 216 free_devices(dev, n_devs); 217 218 dev = calloc(cfg.max_devs, sizeof(*dev)); 219 assert(dev != NULL); 220 cfg.auth_file = "credentials/new_-V-N.cred"; 221 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 222 assert(rc == PAM_SUCCESS); 223 assert(n_devs == 1); 224 assert(strcmp(dev[0].coseType, "es256") == 0); 225 assert(strcmp(dev[0].keyHandle, "HftI6IHewEFB4OhBMeT9WjnG097GYvpE4dTxSS33JTRzRP6V/oBPyj3vurnTRJwif98V8YhceMAH8lDePA1dxQ==") == 0); 226 assert(strcmp(dev[0].publicKey, "7h0f9+MuzG087QC8zjLK9UoEksAXHmmGmoHGPvWwfkfSsH2cqqp7Qyi4LO7Y58OxlEq79gbWqNYEP0H56zvZ4Q==") == 0); 227 assert(strcmp(dev[0].attributes, "+presence+verification+pin") == 0); 228 assert(dev[0].old_format == 0); 229 free_devices(dev, n_devs); 230 231 dev = calloc(cfg.max_devs, sizeof(*dev)); 232 assert(dev != NULL); 233 cfg.auth_file = "credentials/new_-P.cred"; 234 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 235 assert(rc == PAM_SUCCESS); 236 assert(n_devs == 1); 237 assert(strcmp(dev[0].coseType, "es256") == 0); 238 assert(strcmp(dev[0].keyHandle, "yvFPHZBdPoBcdhF86mImwNQm2DUgfPw0s26QCpm4XQO0is4qlx3nIdyVP9WHszpJ5uFV/1mjd09L3P6ton1fAw==") == 0); 239 assert(strcmp(dev[0].publicKey, "JTP+Uu9VE/79hD1H+Uzf9yqSCi9HgeMLeuc3jQ43TCxg5o+GeFL7Q6e63p3Dn4/uch2YJ8iNNJmDlktrLouWSg==") == 0); 240 assert(strcmp(dev[0].attributes, "") == 0); 241 assert(dev[0].old_format == 0); 242 free_devices(dev, n_devs); 243 244 dev = calloc(cfg.max_devs, sizeof(*dev)); 245 assert(dev != NULL); 246 cfg.auth_file = "credentials/new_-P-V.cred"; 247 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 248 assert(rc == PAM_SUCCESS); 249 assert(n_devs == 1); 250 assert(strcmp(dev[0].coseType, "es256") == 0); 251 assert(strcmp(dev[0].keyHandle, "WSSDFwB8Bv4wg5pOLzYNRsqyJYi6/rbuxL6nzuvPOkpSslyNX/8lcZSsPfBmuWkRE1CNh7xvalAlBUz1/LUcbg==") == 0); 252 assert(strcmp(dev[0].publicKey, "XUIVb5hwOunVJvtwDXAWr5/FTd7tkbYN6ahTzrSwmLtd8ISBJq9LBJ9v1NwfHBMakdCOBbl8LMVc7bDBSrMoZw==") == 0); 253 assert(strcmp(dev[0].attributes, "+verification") == 0); 254 assert(dev[0].old_format == 0); 255 free_devices(dev, n_devs); 256 257 dev = calloc(cfg.max_devs, sizeof(*dev)); 258 assert(dev != NULL); 259 cfg.auth_file = "credentials/new_-P-N.cred"; 260 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 261 assert(rc == PAM_SUCCESS); 262 assert(n_devs == 1); 263 assert(strcmp(dev[0].coseType, "es256") == 0); 264 assert(strcmp(dev[0].keyHandle, "+/l9LJ6dwbnDLff0PqkDhMEOWsruM+aYP+bzQdaCq3QmTGnh0dbcblfLaYs86XgcirS9OEoEkohB5pd8mhwSMQ==") == 0); 265 assert(strcmp(dev[0].publicKey, "d7sKBe6vgaoYTEXcyovikiB/7IZXLyUPv8qfdaxwWvy7WaGYhwkMvr2H/q6YBBHJmRl0OCU3WTD/hfeAo2RknA==") == 0); 266 assert(strcmp(dev[0].attributes, "+pin") == 0); 267 assert(dev[0].old_format == 0); 268 free_devices(dev, n_devs); 269 270 dev = calloc(cfg.max_devs, sizeof(*dev)); 271 assert(dev != NULL); 272 cfg.auth_file = "credentials/new_-P-V-N.cred"; 273 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 274 assert(rc == PAM_SUCCESS); 275 assert(n_devs == 1); 276 assert(strcmp(dev[0].coseType, "es256") == 0); 277 assert(strcmp(dev[0].keyHandle, "vw9z9n3ndQkTKPY3+LDy1Fd2otIsV5LgcYE+dR0buViSZnKcLJ1kav46mQ47jtelw82/6q3Z2/VKQ44F763tVg==") == 0); 278 assert(strcmp(dev[0].publicKey, "X+GY5K9BSG24K9uVnaWgE8wlRhElIPp526M0Xw8H7zqVkGJm2OFT1ZQeowjxqEx4agArzPTT5WvukpERNLe81Q==") == 0); 279 assert(strcmp(dev[0].attributes, "+verification+pin") == 0); 280 assert(dev[0].old_format == 0); 281 free_devices(dev, n_devs); 282 283 dev = calloc(cfg.max_devs, sizeof(*dev)); 284 assert(dev != NULL); 285 cfg.auth_file = "credentials/new_-r.cred"; 286 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 287 assert(rc == PAM_SUCCESS); 288 assert(n_devs == 1); 289 assert(strcmp(dev[0].coseType, "es256") == 0); 290 assert(strcmp(dev[0].keyHandle, "*") == 0); 291 assert(strcmp(dev[0].publicKey, "b9G0ZYtAB4TQQBnpUfptgTzDArSqLMP3/LxtHYZQrIpXrUnGsqi0gYrKa8ThJoKRlj6f3EJdsJMRdnOr6323+w==") == 0); 292 assert(strcmp(dev[0].attributes, "+presence") == 0); 293 assert(dev[0].old_format == 0); 294 free_devices(dev, n_devs); 295 296 dev = calloc(cfg.max_devs, sizeof(*dev)); 297 assert(dev != NULL); 298 cfg.auth_file = "credentials/new_-r-V.cred"; 299 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 300 assert(rc == PAM_SUCCESS); 301 assert(n_devs == 1); 302 assert(strcmp(dev[0].coseType, "es256") == 0); 303 assert(strcmp(dev[0].keyHandle, "*") == 0); 304 assert(strcmp(dev[0].publicKey, "D/ZqT9AuR83CV07njO9NKFuzREbmec3Da+NS2HMG346rh8Jq2zd9rbB35tedrUC4fZiRa3yRXlWYz1L9GXku7Q==") == 0); 305 assert(strcmp(dev[0].attributes, "+presence+verification") == 0); 306 assert(dev[0].old_format == 0); 307 free_devices(dev, n_devs); 308 309 dev = calloc(cfg.max_devs, sizeof(*dev)); 310 assert(dev != NULL); 311 cfg.auth_file = "credentials/new_-r-N.cred"; 312 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 313 assert(rc == PAM_SUCCESS); 314 assert(n_devs == 1); 315 assert(strcmp(dev[0].coseType, "es256") == 0); 316 assert(strcmp(dev[0].keyHandle, "*") == 0); 317 assert(strcmp(dev[0].publicKey, "+rrhFmn3HrQXi+TMvQbide4/rE24y3feLU9wJfhHsEgmaJiLTwAfiBw5z0ASlyZu3vPU5/MaNuJdAZqvz/zEJQ==") == 0); 318 assert(strcmp(dev[0].attributes, "+presence+pin") == 0); 319 assert(dev[0].old_format == 0); 320 free_devices(dev, n_devs); 321 322 dev = calloc(cfg.max_devs, sizeof(*dev)); 323 assert(dev != NULL); 324 cfg.auth_file = "credentials/new_-r-V-N.cred"; 325 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 326 assert(rc == PAM_SUCCESS); 327 assert(n_devs == 1); 328 assert(strcmp(dev[0].coseType, "es256") == 0); 329 assert(strcmp(dev[0].keyHandle, "*") == 0); 330 assert(strcmp(dev[0].publicKey, "sDQr9MGvetCg0dfPJ3fW804stpJC5VDsPld+zv3C1k6e4I6uyOg9I2lfaZU0/sp83CaODgmGsMd7O3Zo80c64Q==") == 0); 331 assert(strcmp(dev[0].attributes, "+presence+verification+pin") == 0); 332 assert(dev[0].old_format == 0); 333 free_devices(dev, n_devs); 334 335 dev = calloc(cfg.max_devs, sizeof(*dev)); 336 assert(dev != NULL); 337 cfg.auth_file = "credentials/new_-r-P.cred"; 338 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 339 assert(rc == PAM_SUCCESS); 340 assert(n_devs == 1); 341 assert(strcmp(dev[0].coseType, "es256") == 0); 342 assert(strcmp(dev[0].keyHandle, "*") == 0); 343 assert(strcmp(dev[0].publicKey, "yBQxzNyU+UEP7nQtlyuwzLmWXslkYCAHFSl5Fq2GxKIz9V0ocqbG7vRqbU+RGT73M4e8OLrBoX1gAZO7/2Q82Q==") == 0); 344 assert(strcmp(dev[0].attributes, "") == 0); 345 assert(dev[0].old_format == 0); 346 free_devices(dev, n_devs); 347 348 dev = calloc(cfg.max_devs, sizeof(*dev)); 349 assert(dev != NULL); 350 cfg.auth_file = "credentials/new_-r-P-V.cred"; 351 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 352 assert(rc == PAM_SUCCESS); 353 assert(n_devs == 1); 354 assert(strcmp(dev[0].coseType, "es256") == 0); 355 assert(strcmp(dev[0].keyHandle, "*") == 0); 356 assert(strcmp(dev[0].publicKey, "GhUPBL+KXG7F7PwhO+F3WDZx4KfxoxYwh7h5rqAzsIqkFESR21CqE7vkCvoWm2dFTU51aJd2qdw/VmxJ0N/vRQ==") == 0); 357 assert(strcmp(dev[0].attributes, "+verification") == 0); 358 assert(dev[0].old_format == 0); 359 free_devices(dev, n_devs); 360 361 dev = calloc(cfg.max_devs, sizeof(*dev)); 362 assert(dev != NULL); 363 cfg.auth_file = "credentials/new_-r-P-N.cred"; 364 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 365 assert(rc == PAM_SUCCESS); 366 assert(n_devs == 1); 367 assert(strcmp(dev[0].coseType, "es256") == 0); 368 assert(strcmp(dev[0].keyHandle, "*") == 0); 369 assert(strcmp(dev[0].publicKey, "9cthNaXFY62096qpe7OF45+KKFMqPb2csGkfa1q35J/3l8Re7SS9gkgSwvQOOAkxaqWYIWKAP1foPr58eerF0A==") == 0); 370 assert(strcmp(dev[0].attributes, "+pin") == 0); 371 assert(dev[0].old_format == 0); 372 free_devices(dev, n_devs); 373 374 dev = calloc(cfg.max_devs, sizeof(*dev)); 375 assert(dev != NULL); 376 cfg.auth_file = "credentials/new_-r-P-V-N.cred"; 377 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 378 assert(rc == PAM_SUCCESS); 379 assert(n_devs == 1); 380 assert(strcmp(dev[0].coseType, "es256") == 0); 381 assert(strcmp(dev[0].keyHandle, "*") == 0); 382 assert(strcmp(dev[0].publicKey, "oO3z71rtDS86RH3EdZFxr/y6ZUOZ7/csyhia9UhiDWWpq7oUoxqvN0qmky9R14Clm6RovaOThX89oIbI84BqxA==") == 0); 383 assert(strcmp(dev[0].attributes, "+verification+pin") == 0); 384 assert(dev[0].old_format == 0); 385 free_devices(dev, n_devs); 386 387 dev = calloc(cfg.max_devs, sizeof(*dev)); 388 assert(dev != NULL); 389 cfg.auth_file = "credentials/new_double_.cred"; 390 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 391 assert(rc == PAM_SUCCESS); 392 assert(n_devs == 2); 393 assert(strcmp(dev[0].coseType, "es256") == 0); 394 assert(strcmp(dev[0].keyHandle, "THwoppI4JkuHWwQsSvsH6E987xAokX4MjB8Vh/lVghzW3iBtMglBw1epdwjbVEpKMVNqwYq6h71p3sQqnaTgLQ==") == 0); 395 assert(strcmp(dev[0].publicKey, "CB2xx1o7OBmX27Ph6wiqFUodmAiSiz2EuYg3UV/yEE0Fe9zeMYrk3k2+Una+O9m1P2uzuU3UypOqszVG1WNvYQ==") == 0); 396 assert(strcmp(dev[0].attributes, "+presence") == 0); 397 assert(dev[0].old_format == 0); 398 assert(strcmp(dev[1].coseType, "es256") == 0); 399 assert(strcmp(dev[1].keyHandle, "i1grPL1cYGGda7VDTA5C4eqaLZXaW7u8LdIIz2QR8f0L07myFDVWFpHmdhEzFAPGtL2kgwdXwx4NvC8VfEKwjA==") == 0); 400 assert(strcmp(dev[1].publicKey, "14+UmD2jiBtceZTsshDPl3rKvHFOWeLdNx9nfq4gTHwi+4GmzUvA+XwCohusQsjWocfoyTejYWKL/ZKc5wRuYQ==") == 0); 401 assert(strcmp(dev[1].attributes, "+presence") == 0); 402 assert(dev[1].old_format == 0); 403 free_devices(dev, n_devs); 404 405 dev = calloc(cfg.max_devs, sizeof(*dev)); 406 assert(dev != NULL); 407 cfg.auth_file = "credentials/new_double_-V.cred"; 408 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 409 assert(rc == PAM_SUCCESS); 410 assert(n_devs == 2); 411 assert(strcmp(dev[0].coseType, "es256") == 0); 412 assert(strcmp(dev[0].keyHandle, "oBQ1hIWiYfhJ8g6DFWawe0xOAlKtcPiBDKyoS8ydd/zwXbIEU+fHfnzjh46gLjV67+rt1ycCTTMj+P/7EsLNhg==") == 0); 413 assert(strcmp(dev[0].publicKey, "exBDguUdnZhG4+sXOnKPJtrMvn+Rb7pn2E52wyEieitaLY3Yhb2mSFth5sxNjuwl7/n+0mMN6gQtmzVxCNvTXw==") == 0); 414 assert(strcmp(dev[0].attributes, "+presence+verification") == 0); 415 assert(dev[0].old_format == 0); 416 assert(strcmp(dev[1].coseType, "es256") == 0); 417 assert(strcmp(dev[1].keyHandle, "/8NBWj19H4Wr+/avzu9Qg5PGwE7fmdrFWGqlNega38eV1nnajviBOS6AbaHmQwqsmVcE+DPNrP7KDFI3ZqjPew==") == 0); 418 assert(strcmp(dev[1].publicKey, "+sW8XEp5RJe/ZyPykO6AP2Wm5ySTuLshZ13ohwl0VsypepsyhJxfPmEQGIXysn47uK5egh4eWMvNyMA4Ww0fPg==") == 0); 419 assert(strcmp(dev[1].attributes, "+presence+verification") == 0); 420 assert(dev[1].old_format == 0); 421 free_devices(dev, n_devs); 422 423 dev = calloc(cfg.max_devs, sizeof(*dev)); 424 assert(dev != NULL); 425 cfg.auth_file = "credentials/new_double_-N.cred"; 426 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 427 assert(rc == PAM_SUCCESS); 428 assert(n_devs == 2); 429 assert(strcmp(dev[0].coseType, "es256") == 0); 430 assert(strcmp(dev[0].keyHandle, "WWJqEWaCASU+nsp2bTFh4LbJVOnf1ZRgNxmDcBuThynSTxDgO1GxGcTYg0Ilo/RF4YXvVCur7gfALYZA69lDTg==") == 0); 431 assert(strcmp(dev[0].publicKey, "ZN+ud1nR+Lk5B6CzcbhvdJztDzgaK0MRLn7MOKPbOWfYpr8bLsYRYIfnVUFfSwnGPF6iMK3/FjHRe1mGhOddkg==") == 0); 432 assert(strcmp(dev[0].attributes, "+presence+pin") == 0); 433 assert(dev[0].old_format == 0); 434 assert(strcmp(dev[1].coseType, "es256") == 0); 435 assert(strcmp(dev[1].keyHandle, "auU99KPIIvKGbRcVmsiEyGp/rPx1RNruXI2qS8+JgX1e7nWPczLvmlkx8/0Z8ZBNqy69aocwQgGHRWKEbDdwlw==") == 0); 436 assert(strcmp(dev[1].publicKey, "oG+oN40QezgwX3S6xFk2sR3jiQnobXxxFQy7Mo5vv9hryeIHX13zG0OZK0KJuhj4A71OAeNXd065P9tVHeQtOQ==") == 0); 437 assert(strcmp(dev[1].attributes, "+presence+pin") == 0); 438 assert(dev[1].old_format == 0); 439 free_devices(dev, n_devs); 440 441 dev = calloc(cfg.max_devs, sizeof(*dev)); 442 assert(dev != NULL); 443 cfg.auth_file = "credentials/new_double_-V-N.cred"; 444 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 445 assert(rc == PAM_SUCCESS); 446 assert(n_devs == 2); 447 assert(strcmp(dev[0].coseType, "es256") == 0); 448 assert(strcmp(dev[0].keyHandle, "5sVKkhoc+afHBtAp7csIg/Sq4RFi1arnr/Qi9quwpNZ4gPhlI6FFBP4CmH8HLw/n5xt8iQxUD83aue23WbrDVA==") == 0); 449 assert(strcmp(dev[0].publicKey, "K1oB5vq8XezU8NCA9jEuuxtLjbNS8bTAFEZXeNWvCQ5vF6viE7hvjBPfTrf2KoLz1JtYxHAngZMW+XOZIloVzw==") == 0); 450 assert(strcmp(dev[0].attributes, "+presence+verification+pin") == 0); 451 assert(dev[0].old_format == 0); 452 assert(strcmp(dev[1].coseType, "es256") == 0); 453 assert(strcmp(dev[1].keyHandle, "RQWf8kjjCXCNrMhUHHHIeWvQVlft96SShOsfTylA0QUO8UzuSY1mQQFaOPGde1wSX9b2P7tpfTlhYflfgAwkuQ==") == 0); 454 assert(strcmp(dev[1].publicKey, "SGFYgZZ0rJoAPhj7KzDKSpm2a7y4lE8PIZ6T8WYeDqrsZxrrxShc2sx2cAu+r70c8sb6etjab3m9CxobV8ADcA==") == 0); 455 assert(strcmp(dev[1].attributes, "+presence+verification+pin") == 0); 456 assert(dev[1].old_format == 0); 457 free_devices(dev, n_devs); 458 459 dev = calloc(cfg.max_devs, sizeof(*dev)); 460 assert(dev != NULL); 461 cfg.auth_file = "credentials/new_double_-P.cred"; 462 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 463 assert(rc == PAM_SUCCESS); 464 assert(n_devs == 2); 465 assert(strcmp(dev[0].coseType, "es256") == 0); 466 assert(strcmp(dev[0].keyHandle, "ACoC1fhEYhdOstzkaCb1PqcU4T6xMrXxe5GEQjPDsheOxJzWGXTpaA3abmHZ3khcJ8Off/ecyPq2kMMqh3l7Xg==") == 0); 467 assert(strcmp(dev[0].publicKey, "c79BTe8BahuDUaeBAATyT8NKq+mwV87aaor4s79WI5g9gn7BQDjnyUd1C7aaQMGGtu88h/YOGvDVKMVDal6OJQ==") == 0); 468 assert(strcmp(dev[0].attributes, "") == 0); 469 assert(dev[0].old_format == 0); 470 assert(strcmp(dev[1].coseType, "es256") == 0); 471 assert(strcmp(dev[1].keyHandle, "0BdgF8gbsYuFfUrpI3K01LcEwnWBxZ6Ewj61GXZJPQh3IcK4H+QMMG6nqzBhfLipVwGqUugZxCZP2eR9151kog==") == 0); 472 assert(strcmp(dev[1].publicKey, "X0vskPE+AKWmGrp3ZGhUJVXeAm+sN6nCbMeC30IpItVhMdSosP9I0jOMmsQeF+rKh+00K30iNucHdXguLPYL7g==") == 0); 473 assert(strcmp(dev[1].attributes, "") == 0); 474 assert(dev[1].old_format == 0); 475 free_devices(dev, n_devs); 476 477 dev = calloc(cfg.max_devs, sizeof(*dev)); 478 assert(dev != NULL); 479 cfg.auth_file = "credentials/new_double_-P-V.cred"; 480 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 481 assert(rc == PAM_SUCCESS); 482 assert(n_devs == 2); 483 assert(strcmp(dev[0].coseType, "es256") == 0); 484 assert(strcmp(dev[0].keyHandle, "7jPjHZzm/Ec6oKy6gpq+XXI3P435OLJFO4o3iGH8KUQlEw+1Zv0FmUtguJ2HIZifRsIyMILdu2rwCDgcqmuj9Q==") == 0); 485 assert(strcmp(dev[0].publicKey, "xzrbCZKe8sNdrE0F3dkRwsfkwInYUrKHEAMeeHkNrRLbQqlJHn9C2j5puty3FDVKMV5y1MCrwyJ8IEZHtX2H+Q==") == 0); 486 assert(strcmp(dev[0].attributes, "+verification") == 0); 487 assert(dev[0].old_format == 0); 488 assert(strcmp(dev[1].coseType, "es256") == 0); 489 assert(strcmp(dev[1].keyHandle, "ghKvm1MLkHIWwr6qjzenROIPfoJCUfrFTlqOXLrMktBSqHaYhoA7NpqwVa3jJ86hpJFekWDOqoV1sLz+GZ9UtQ==") == 0); 490 assert(strcmp(dev[1].publicKey, "SyrD8BKIReOUHLII642tgpA+i1S8d+6MOcnfGapk32blq0/qYWmgzJ5lqv+BsO0nBoOG6uXLqLqMkKt3/zLj1w==") == 0); 491 assert(strcmp(dev[1].attributes, "+verification") == 0); 492 assert(dev[1].old_format == 0); 493 free_devices(dev, n_devs); 494 495 dev = calloc(cfg.max_devs, sizeof(*dev)); 496 assert(dev != NULL); 497 cfg.auth_file = "credentials/new_double_-P-N.cred"; 498 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 499 assert(rc == PAM_SUCCESS); 500 assert(n_devs == 2); 501 assert(strcmp(dev[0].coseType, "es256") == 0); 502 assert(strcmp(dev[0].keyHandle, "USgDNJZ9Z8GXzQgWdrkFJ5S+WsqKhdg9zHmoMifow3xBd8Rn0ZH2udPuRs6Q8Y/13BOCL9lEhdxc+1JAoP0j8w==") == 0); 503 assert(strcmp(dev[0].publicKey, "Is31uMHcVRQYiCxCe3E1tJfKSA92Q47JoppIfLcRLd9sh+e7QR9Gix4LrA2+RPw24eKI0iqpMm5ayvPMx2nmxA==") == 0); 504 assert(strcmp(dev[0].attributes, "+pin") == 0); 505 assert(dev[0].old_format == 0); 506 assert(strcmp(dev[1].coseType, "es256") == 0); 507 assert(strcmp(dev[1].keyHandle, "uBTQIj0EUe2YoeLfVXksAo9gXTJJ2cXMyPqOMNvE2g9pDwetJIdPTR9oUorMiuRZiXALAlfaayc4vMgQvWXdxw==") == 0); 508 assert(strcmp(dev[1].publicKey, "cToPi0zc8+U6g1kpqJ2pHXCKQyxyNrJAvuLqBmknwxhciBj0+iTDFaut0Vc1MSu/r6yrw2mHSnuYXTmPx3mhmw==") == 0); 509 assert(strcmp(dev[1].attributes, "+pin") == 0); 510 assert(dev[1].old_format == 0); 511 free_devices(dev, n_devs); 512 513 dev = calloc(cfg.max_devs, sizeof(*dev)); 514 assert(dev != NULL); 515 cfg.auth_file = "credentials/new_double_-P-V-N.cred"; 516 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 517 assert(rc == PAM_SUCCESS); 518 assert(n_devs == 2); 519 assert(strcmp(dev[0].coseType, "es256") == 0); 520 assert(strcmp(dev[0].keyHandle, "Ypw0/A5KEPshXH0zO72Qlgt1uHvB4VnVRBpObzVGDeS8LxR9smealISARIOo3rlOLgjqj6dkJxqu1LoLm22UpA==") == 0); 521 assert(strcmp(dev[0].publicKey, "dFnZLWVzEvbSw6O4ld9Fjb1Pki4NptNpvASGEthr5GsaWRp6pLe1Uqwm/IrVrOgwO2Q6sB0SXsQKdAIWbMrPHw==") == 0); 522 assert(strcmp(dev[0].attributes, "+verification+pin") == 0); 523 assert(dev[0].old_format == 0); 524 assert(strcmp(dev[1].coseType, "es256") == 0); 525 assert(strcmp(dev[1].keyHandle, "IMaY3yG6NuO4oVjrKUrCArluNfimT+5pnxB2jA0CXD7xjmhUO+90lILLwxxnGYKvbq2X5wlxLNnuQLm5gpt7ig==") == 0); 526 assert(strcmp(dev[1].publicKey, "bDTCB4xWqBY9gh6BLP8b4gJmUIYIQbckvrSMDX/8lyftL/uesJBxblHkDVzfCIatAzqKZ6kltokEHE8saX8phA==") == 0); 527 assert(strcmp(dev[1].attributes, "+verification+pin") == 0); 528 assert(dev[1].old_format == 0); 529 free_devices(dev, n_devs); 530 531 dev = calloc(cfg.max_devs, sizeof(*dev)); 532 assert(dev != NULL); 533 cfg.auth_file = "credentials/new_double_-r.cred"; 534 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 535 assert(rc == PAM_SUCCESS); 536 assert(n_devs == 2); 537 assert(strcmp(dev[0].coseType, "es256") == 0); 538 assert(strcmp(dev[0].keyHandle, "*") == 0); 539 assert(strcmp(dev[0].publicKey, "JvWtmu8JaeUNYklKkii5KflmS9vVXtTGcqLdWNXcRHza5qCuBoYX/QNWlKoZklPfsmjTVkXcnBh+B4DSZM55fw==") == 0); 540 assert(strcmp(dev[0].attributes, "+presence") == 0); 541 assert(dev[0].old_format == 0); 542 assert(strcmp(dev[1].coseType, "es256") == 0); 543 assert(strcmp(dev[1].keyHandle, "*") == 0); 544 assert(strcmp(dev[1].publicKey, "4AXGf9eUWUXpfLNJ+2uySBvz2FmkK2EZP+wyKuTf73UDS8/vi+DZVllXuhrXmQA36NLwqS8YPEIq6pRLYE6m2A==") == 0); 545 assert(strcmp(dev[1].attributes, "+presence") == 0); 546 assert(dev[1].old_format == 0); 547 free_devices(dev, n_devs); 548 549 dev = calloc(cfg.max_devs, sizeof(*dev)); 550 assert(dev != NULL); 551 cfg.auth_file = "credentials/new_double_-r-V.cred"; 552 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 553 assert(rc == PAM_SUCCESS); 554 assert(n_devs == 2); 555 assert(strcmp(dev[0].coseType, "es256") == 0); 556 assert(strcmp(dev[0].keyHandle, "*") == 0); 557 assert(strcmp(dev[0].publicKey, "qZywZ2yedeQu4bPAy6rk7pPcHPprUd+DOxGf10MgwteNYKyAWuyPd7tREc0X3ZzoDejzmM3+X0dWALnBBSVWyA==") == 0); 558 assert(strcmp(dev[0].attributes, "+presence+verification") == 0); 559 assert(dev[0].old_format == 0); 560 assert(strcmp(dev[1].coseType, "es256") == 0); 561 assert(strcmp(dev[1].keyHandle, "*") == 0); 562 assert(strcmp(dev[1].publicKey, "IcQsmgW/Y5UQUW/Bz7eYU1azOfyhQWTr8R6mk0gpBJ4l5qq4BstimedubRFvoIAanumNrrqgvo1CA+9rzHG6Hg==") == 0); 563 assert(strcmp(dev[1].attributes, "+presence+verification") == 0); 564 assert(dev[1].old_format == 0); 565 free_devices(dev, n_devs); 566 567 dev = calloc(cfg.max_devs, sizeof(*dev)); 568 assert(dev != NULL); 569 cfg.auth_file = "credentials/new_double_-r-N.cred"; 570 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 571 assert(rc == PAM_SUCCESS); 572 assert(n_devs == 2); 573 assert(strcmp(dev[0].coseType, "es256") == 0); 574 assert(strcmp(dev[0].keyHandle, "*") == 0); 575 assert(strcmp(dev[0].publicKey, "BEOf/KU74hsdWbvfUn7yIXH2aktz/DY2ChTLpljbntz5xpwsOv+4x9r6LySuVYWuoWH11fgKv4Bqt57MHiPYUg==") == 0); 576 assert(strcmp(dev[0].attributes, "+presence+pin") == 0); 577 assert(dev[0].old_format == 0); 578 assert(strcmp(dev[1].coseType, "es256") == 0); 579 assert(strcmp(dev[1].keyHandle, "*") == 0); 580 assert(strcmp(dev[1].publicKey, "4vbnuZSSrYJ/qzOpnVgy8cqm7yq6m9+GQlpNnMbPN2kXr+B0vL91O6d7/0VitOqW8GX2FFQaXvV3mHETtsUYAg==") == 0); 581 assert(strcmp(dev[1].attributes, "+presence+pin") == 0); 582 assert(dev[1].old_format == 0); 583 free_devices(dev, n_devs); 584 585 dev = calloc(cfg.max_devs, sizeof(*dev)); 586 assert(dev != NULL); 587 cfg.auth_file = "credentials/new_double_-r-V-N.cred"; 588 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 589 assert(rc == PAM_SUCCESS); 590 assert(n_devs == 2); 591 assert(strcmp(dev[0].coseType, "es256") == 0); 592 assert(strcmp(dev[0].keyHandle, "*") == 0); 593 assert(strcmp(dev[0].publicKey, "5zx2nk/ANhsncQV0np0kDYT+jf5w3dQ8rvVM5fqwDcHbh8AzBHbcGiRcNfPE/6v09cEomfVrIAT+IvyAcZnuow==") == 0); 594 assert(strcmp(dev[0].attributes, "+presence+verification+pin") == 0); 595 assert(dev[0].old_format == 0); 596 assert(strcmp(dev[1].coseType, "es256") == 0); 597 assert(strcmp(dev[1].keyHandle, "*") == 0); 598 assert(strcmp(dev[1].publicKey, "FJ6553yOZoAJKnR2Ysai/5k1i6PpHz/8HusKkFjOqBSIsAK9vALAb/M223hz8remwuqPyNXczq1WgBcN4P9wKw==") == 0); 599 assert(strcmp(dev[1].attributes, "+presence+verification+pin") == 0); 600 assert(dev[1].old_format == 0); 601 free_devices(dev, n_devs); 602 603 dev = calloc(cfg.max_devs, sizeof(*dev)); 604 assert(dev != NULL); 605 cfg.auth_file = "credentials/new_double_-r-P.cred"; 606 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 607 assert(rc == PAM_SUCCESS); 608 assert(n_devs == 2); 609 assert(strcmp(dev[0].coseType, "es256") == 0); 610 assert(strcmp(dev[0].keyHandle, "*") == 0); 611 assert(strcmp(dev[0].publicKey, "kuY0RmjxQfbzMREZM8l++bbKTFHSGTYK+OI0owggVKCXSaD5YHsk2EONGtwWoafg8KypNQIYhxxxT2RlWWVcGw==") == 0); 612 assert(strcmp(dev[0].attributes, "") == 0); 613 assert(dev[0].old_format == 0); 614 assert(strcmp(dev[1].coseType, "es256") == 0); 615 assert(strcmp(dev[1].keyHandle, "*") == 0); 616 assert(strcmp(dev[1].publicKey, "t94+brQxTF62oQw642Pq6qDFFfPx1A7GbjU/2i+H7OiHLeIALTzm9AwLVZuyofXURgiIrmLAG26ww2KVv6ji+A==") == 0); 617 assert(strcmp(dev[1].attributes, "") == 0); 618 assert(dev[1].old_format == 0); 619 free_devices(dev, n_devs); 620 621 dev = calloc(cfg.max_devs, sizeof(*dev)); 622 assert(dev != NULL); 623 cfg.auth_file = "credentials/new_double_-r-P-V.cred"; 624 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 625 assert(rc == PAM_SUCCESS); 626 assert(n_devs == 2); 627 assert(strcmp(dev[0].coseType, "es256") == 0); 628 assert(strcmp(dev[0].keyHandle, "*") == 0); 629 assert(strcmp(dev[0].publicKey, "KBBozy1XYywARLB1AcY5hYvUN2hYHpGY2YyxAIczZ7GXrfWeZ8RGOW7+Z34DaozgLFeHMQSCXJuNYK+fw8khEw==") == 0); 630 assert(strcmp(dev[0].attributes, "+verification") == 0); 631 assert(dev[0].old_format == 0); 632 assert(strcmp(dev[1].coseType, "es256") == 0); 633 assert(strcmp(dev[1].keyHandle, "*") == 0); 634 assert(strcmp(dev[1].publicKey, "LABCxfeOxfctKo8HmDA/PYyPlwTYj3i2tQu2QWEmi7tytaPQA8ZZZP7hddzpkUQVHRu2oASGigS7oBwt38WFCw==") == 0); 635 assert(strcmp(dev[1].attributes, "+verification") == 0); 636 assert(dev[1].old_format == 0); 637 free_devices(dev, n_devs); 638 639 dev = calloc(cfg.max_devs, sizeof(*dev)); 640 assert(dev != NULL); 641 cfg.auth_file = "credentials/new_double_-r-P-N.cred"; 642 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 643 assert(rc == PAM_SUCCESS); 644 assert(n_devs == 2); 645 assert(strcmp(dev[0].coseType, "es256") == 0); 646 assert(strcmp(dev[0].keyHandle, "*") == 0); 647 assert(strcmp(dev[0].publicKey, "se1ih71yYTjlvF6p3Kc+wB0PtXv+5RM8O/0/yFy5RcvEXCvirQPbxhmSIhh5QYP17fkAFGLfJYQtmV7RNU0xDg==") == 0); 648 assert(strcmp(dev[0].attributes, "+pin") == 0); 649 assert(dev[0].old_format == 0); 650 assert(strcmp(dev[1].coseType, "es256") == 0); 651 assert(strcmp(dev[1].keyHandle, "*") == 0); 652 assert(strcmp(dev[1].publicKey, "v6hgPffPopqHTh19Y0Wf11cF/lChqwlT0f5/6K+Dsdzq1OPZxKBqTaW6jCU0x5Pr9HgntWyTtQ1TS7EM22uhyQ==") == 0); 653 assert(strcmp(dev[1].attributes, "+pin") == 0); 654 assert(dev[1].old_format == 0); 655 free_devices(dev, n_devs); 656 657 dev = calloc(cfg.max_devs, sizeof(*dev)); 658 assert(dev != NULL); 659 cfg.auth_file = "credentials/new_double_-r-P-V-N.cred"; 660 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 661 assert(rc == PAM_SUCCESS); 662 assert(n_devs == 2); 663 assert(strcmp(dev[0].coseType, "es256") == 0); 664 assert(strcmp(dev[0].keyHandle, "*") == 0); 665 assert(strcmp(dev[0].publicKey, "+zfrwyH/M5/tEVfijRKzRqNh+QoC3JBweJFa0heINIDkCjLAYqUb2hSTecTxoKh2bzpxSqeg6nJJPJNBqDD2aA==") == 0); 666 assert(strcmp(dev[0].attributes, "+verification+pin") == 0); 667 assert(dev[0].old_format == 0); 668 assert(strcmp(dev[1].coseType, "es256") == 0); 669 assert(strcmp(dev[1].keyHandle, "*") == 0); 670 assert(strcmp(dev[1].publicKey, "W1vVZhmkt3KG16sraGayBP8elRXSl5UGMl+oojLI15yyIAVUUzoEKNUQtf3j3s3sVtjD009nLxHOpkf2zjIpQQ==") == 0); 671 assert(strcmp(dev[1].attributes, "+verification+pin") == 0); 672 assert(dev[1].old_format == 0); 673 free_devices(dev, n_devs); 674 675 dev = calloc(cfg.max_devs, sizeof(*dev)); 676 assert(dev != NULL); 677 cfg.auth_file = "credentials/new_mixed_12.cred"; 678 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 679 assert(rc == PAM_SUCCESS); 680 assert(n_devs == 2); 681 assert(strcmp(dev[0].coseType, "es256") == 0); 682 assert(strcmp(dev[0].keyHandle, "ooq2bCWeHFXzWqKwWFRliREQjOtUWKtWJbr7KwSh3FLNiCFgBuie4tqq3Pee86o7ew32u1+ITLsCBEYPrTQMAg==") == 0); 683 assert(strcmp(dev[0].publicKey, "39hCGEGO7kqz3Pig/bL0ycZxLfcpWPtX8fKxb/S8xx2BdSUs6HXTzIDmifuFv6pabpy3DxUvcA0yIygMAO1ZQw==") == 0); 684 assert(strcmp(dev[0].attributes, "+presence") == 0); 685 assert(dev[0].old_format == 0); 686 assert(strcmp(dev[1].coseType, "es256") == 0); 687 assert(strcmp(dev[1].keyHandle, "2O2vxjSMeMl6obzQCkIE3VL2Qtija5sLJuJkMrP+/bAFeoLp7m2SPKKRUFFXsO8Z44HTL7PKoFmY4+r5Qwt00w==") == 0); 688 assert(strcmp(dev[1].publicKey, "qZIaqR+mGxEnvo04LtsX4krKV5r5PBVBfJYDXi2zS7uXSHgRr7KOQHaNgx70E2IBrVmUlaFAH4QhDnDAeishBA==") == 0); 689 assert(strcmp(dev[1].attributes, "+presence") == 0); 690 assert(dev[1].old_format == 0); 691 free_devices(dev, n_devs); 692 693 dev = calloc(cfg.max_devs, sizeof(*dev)); 694 assert(dev != NULL); 695 cfg.auth_file = "credentials/new_mixed_1-P2.cred"; 696 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 697 assert(rc == PAM_SUCCESS); 698 assert(n_devs == 2); 699 assert(strcmp(dev[0].coseType, "es256") == 0); 700 assert(strcmp(dev[0].keyHandle, "9HY72OR/kQECy5PbwfJwSaWZFlLL1CHamlm1LMZFozCBj6hzq4V9BpkkkMObxNL9gFd8yOXKDflFiVVoGq7sWQ==") == 0); 701 assert(strcmp(dev[0].publicKey, "sn+cAxAvdlnwwwvLCLoEjiza2G0aPniyqgomxmm1aLisMl1z9VpvdlGgO4nOPLYZSoRkW6nKvOBzztGYq/knfQ==") == 0); 702 assert(strcmp(dev[0].attributes, "+presence") == 0); 703 assert(dev[0].old_format == 0); 704 assert(strcmp(dev[1].coseType, "es256") == 0); 705 assert(strcmp(dev[1].keyHandle, "43JAMt5EnG72Sx/4C9ptEd+6/f1RMOKWBSQj4U6pnQyVvPFI/nX2jvN4EYqMQrdGYaszRbh0AL0an3hKZJNqLw==") == 0); 706 assert(strcmp(dev[1].publicKey, "aPlEf4vR+SUrOykB1tk+H1XKsEiSIBMK252bPz7kLHusnAgqgPZLqcruFEegChmYyhytWDPluPrw1o16FFyf5Q==") == 0); 707 assert(strcmp(dev[1].attributes, "") == 0); 708 assert(dev[1].old_format == 0); 709 free_devices(dev, n_devs); 710 711 dev = calloc(cfg.max_devs, sizeof(*dev)); 712 assert(dev != NULL); 713 cfg.auth_file = "credentials/new_mixed_-P12.cred"; 714 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 715 assert(rc == PAM_SUCCESS); 716 assert(n_devs == 2); 717 assert(strcmp(dev[0].coseType, "es256") == 0); 718 assert(strcmp(dev[0].keyHandle, "kNfZ8Uot7TcImjCXhji32Apur3172TYc4XLA0uDQsdW1lrIRecyZP5chyPrkNxIrRIZ58UgiMxD72fiaCiQghw==") == 0); 719 assert(strcmp(dev[0].publicKey, "QiscDH8fpvC9imwd7UiQ8n2XeqNRWW5sUxmboMbiNLUXWrvuG7pEBvWYQA3yLdmOvvb/3MijCh6AZr/3fpwZKQ==") == 0); 720 assert(strcmp(dev[0].attributes, "") == 0); 721 assert(dev[0].old_format == 0); 722 assert(strcmp(dev[1].coseType, "es256") == 0); 723 assert(strcmp(dev[1].keyHandle, "4ICSXy6FCp7NUErnJAOoyqGOnszEMmnIxjgH2NmiC9cyn0XqBxmr1+YHt9fv6yhbrPrnn9/QLvysS+VZBc9twQ==") == 0); 724 assert(strcmp(dev[1].publicKey, "IJMQOa1WrUkBwZKKviNxkMlvKGkiIbXcIdWf+Rv1BPWI9Xo1edi1LF7ux8sZs6mbQEn3z+v+UCSgO13ZtFzI/w==") == 0); 725 assert(strcmp(dev[1].attributes, "+presence") == 0); 726 assert(dev[1].old_format == 0); 727 free_devices(dev, n_devs); 728 729 dev = calloc(cfg.max_devs, sizeof(*dev)); 730 assert(dev != NULL); 731 cfg.auth_file = "credentials/new_mixed_-P1-P2.cred"; 732 rc = get_devices_from_authfile(&cfg, username, dev, &n_devs); 733 assert(rc == PAM_SUCCESS); 734 assert(n_devs == 2); 735 assert(strcmp(dev[0].coseType, "es256") == 0); 736 assert(strcmp(dev[0].keyHandle, "gqCuXGhiA9P4PhXPgrMjQCdgBPkLHHmQcDF/AMOp9vMuCoreRgwWlckMvCdHnsRTohdGqKZgVT/M3HVu4/UiXA==") == 0); 737 assert(strcmp(dev[0].publicKey, "DJaEFTDU5XMq5+KwhEwj69zo5KthqvPRcrCE8Rhu6v1FkgFww/gHYeCZi8s6IRbzmmkxSANXuBAGcpVAM6Zo3A==") == 0); 738 assert(strcmp(dev[0].attributes, "") == 0); 739 assert(dev[0].old_format == 0); 740 assert(strcmp(dev[1].coseType, "es256") == 0); 741 assert(strcmp(dev[1].keyHandle, "RFgUluPS2nAXHy3++1dyyu5k0Rnr9KHUccYSH2oMdpw+QWOu5lvHki3lyAxhKm7HTu8wfMK86qIHakTMYDiYSA==") == 0); 742 assert(strcmp(dev[1].publicKey, "sgoB52Vmw6fqQMDsBHKMsSeft6AfXoULH+mHNi3nOS6KHnvobo82LFGjvQqxrbSNfIul/cpD3MSdz8R0Tfhl3w==") == 0); 743 assert(strcmp(dev[1].attributes, "") == 0); 744 assert(dev[1].old_format == 0); 745 free_devices(dev, n_devs); 746 747 /* END REGENERATE_CREDENTIALS.PY */ 748 /* clang-format on*/ 749 } 750 751 int main(void) { 752 struct passwd *pwd; 753 char *username; 754 755 assert((pwd = getpwuid(geteuid())) != NULL); 756 assert((username = strdup(pwd->pw_name)) != NULL); 757 758 test_nouserok(username); 759 test_ssh_credential(username); 760 test_old_credential(username); 761 test_limited_count(username); 762 test_new_credentials(username); 763 764 free(username); 765 } 766