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