xref: /netbsd-src/external/bsd/pam-u2f/dist/tests/get_devices.c (revision 540ca2718c85d7b6631d382e3e93f4dc91e51282)
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