xref: /netbsd-src/external/bsd/pam-u2f/dist/util.h (revision 37249b01e651388f226248eb849fe374387a9a0b)
1 /*
2  * Copyright (C) 2014-2019 Yubico AB - See COPYING
3  */
4 
5 #ifndef UTIL_H
6 #define UTIL_H
7 
8 #include <stdio.h>
9 #include <security/pam_appl.h>
10 
11 #define BUFSIZE 1024
12 #define MAX_DEVS 24
13 #define DEFAULT_AUTHFILE_DIR_VAR "XDG_CONFIG_HOME"
14 #define DEFAULT_AUTHFILE "Yubico/u2f_keys"
15 #define DEFAULT_AUTHFILE_SSH "id_ecdsa_sk"
16 #define DEFAULT_AUTHFILE_DIR ".config"
17 #define DEFAULT_AUTHFILE_DIR_SSH ".ssh"
18 #define DEFAULT_AUTHPENDING_FILE_PATH "/var/run/user/%d/pam-u2f-authpending"
19 #define DEFAULT_PROMPT "Insert your U2F device, then press ENTER."
20 #define DEFAULT_CUE "Please touch the device."
21 #define DEFAULT_ORIGIN_PREFIX "pam://"
22 #define SSH_ORIGIN "ssh:"
23 
24 #define DEVLIST_LEN 64
25 
26 typedef struct {
27   unsigned max_devs;
28   int manual;
29   int debug;
30   int nouserok;
31   int openasuser;
32   int alwaysok;
33   int interactive;
34   int cue;
35   int nodetect;
36   int userpresence;
37   int userverification;
38   int pinverification;
39   int sshformat;
40   int expand;
41   const char *auth_file;
42   const char *authpending_file;
43   const char *origin;
44   const char *appid;
45   const char *prompt;
46   const char *cue_prompt;
47   FILE *debug_file;
48 } cfg_t;
49 
50 typedef struct {
51   char *publicKey;
52   char *keyHandle;
53   char *coseType;
54   char *attributes;
55   int old_format;
56 } device_t;
57 
58 int get_devices_from_authfile(const cfg_t *cfg, const char *username,
59                               device_t *devices, unsigned *n_devs);
60 void free_devices(device_t *devices, const unsigned n_devs);
61 
62 int do_authentication(const cfg_t *cfg, const device_t *devices,
63                       const unsigned n_devs, pam_handle_t *pamh);
64 int do_manual_authentication(const cfg_t *cfg, const device_t *devices,
65                              const unsigned n_devs, pam_handle_t *pamh);
66 char *converse(pam_handle_t *pamh, int echocode, const char *prompt);
67 int random_bytes(void *, size_t);
68 int cose_type(const char *, int *);
69 const char *cose_string(int);
70 char *expand_variables(const char *, const char *);
71 
72 #if !defined(HAVE_EXPLICIT_BZERO)
73 void explicit_bzero(void *, size_t);
74 #endif
75 
76 #endif /* UTIL_H */
77