1*252470cdSDavid du Colombier #define LOG "secstore" 2*252470cdSDavid du Colombier #define SECSTORE_DIR "/adm/secstore" 39a747e4fSDavid du Colombier 4*252470cdSDavid du Colombier enum { 5*252470cdSDavid du Colombier MAXFILESIZE = 10*1024*1024, 6*252470cdSDavid du Colombier }; 7*252470cdSDavid du Colombier 8*252470cdSDavid du Colombier /* PW status bits */ 9*252470cdSDavid du Colombier enum { 10*252470cdSDavid du Colombier Enabled = 1<<0, 11*252470cdSDavid du Colombier STA = 1<<1, /* extra SecurID step */ 129a747e4fSDavid du Colombier }; 139a747e4fSDavid du Colombier 149a747e4fSDavid du Colombier typedef struct PW { 15*252470cdSDavid du Colombier char *id; /* user id */ 16*252470cdSDavid du Colombier ulong expire; /* expiration time (epoch seconds) */ 17*252470cdSDavid du Colombier ushort status; /* Enabled, STA, ... */ 18*252470cdSDavid du Colombier ushort failed; /* number of failed login attempts */ 19*252470cdSDavid du Colombier char *other; /* other information, e.g. sponsor */ 20*252470cdSDavid du Colombier mpint *Hi; /* H(passphrase)^-1 mod p */ 219a747e4fSDavid du Colombier } PW; 229a747e4fSDavid du Colombier 239a747e4fSDavid du Colombier void freePW(PW*); 24*252470cdSDavid du Colombier PW *getPW(char*, int); 25c65b13b8SDavid du Colombier char *getpassm(char*); 26*252470cdSDavid du Colombier int putPW(PW*); 2711c9ee8bSDavid du Colombier char *validatefile(char*f); 289a747e4fSDavid du Colombier 29*252470cdSDavid du Colombier /* 30*252470cdSDavid du Colombier * *client: SConn, client name, passphrase 31*252470cdSDavid du Colombier * *server: SConn, (partial) 1st msg, PW entry 32*252470cdSDavid du Colombier * *setpass: Username, hashed passphrase, PW entry 33*252470cdSDavid du Colombier */ 349a747e4fSDavid du Colombier int PAKclient(SConn*, char*, char*, char**); 359a747e4fSDavid du Colombier int PAKserver(SConn*, char*, char*, PW**); 369a747e4fSDavid du Colombier char* PAK_Hi(char*, char*, mpint*, mpint*); 37