enum{ MAXFILESIZE = 10*1024*1024, }; /* PW status bits */ enum{ Enabled = 1<<0, STA = 1<<1, /* extra SecurID step */ }; typedef struct PW{ char *id; /* user id */ ulong expire; /* expiration time (epoch seconds) */ ushort status; /* Enabled, STA, ... */ ushort failed; /* number of failed login attempts */ char *other; /* other information, e.g. sponsor */ mpint *Hi; /* H(passphrase)^-1 mod p */ }PW; PW *getPW(char*, int); int putPW(PW*); void freePW(PW*); char *getpassm(char*); char *validatefile(char*f); /* * *client: SConn, client name, passphrase * *server: SConn, (partial) 1st msg, PW entry * *setpass: Username, hashed passphrase, PW entry */ int PAKclient(SConn*, char*, char*, char**); int PAKserver(SConn*, char*, char*, PW**); char* PAK_Hi(char*, char*, mpint*, mpint*); #define LOG "secstore" #define SECSTORE_DIR "/adm/secstore"