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