1 /* 2 * OpenBSD S/Key (skey.h) 3 * 4 * Authors: 5 * Neil M. Haller <nmh@thumper.bellcore.com> 6 * Philip R. Karn <karn@chicago.qualcomm.com> 7 * John S. Walden <jsw@thumper.bellcore.com> 8 * Scott Chasin <chasin@crimelab.com> 9 * Todd C. Miller <Todd.Miller@courtesan.com> 10 * 11 * Main client header 12 * 13 * $OpenBSD: skey.h,v 1.16 2001/06/23 22:28:23 millert Exp $ 14 */ 15 16 #ifndef _SKEY_H_ 17 #define _SKEY_H_ 1 18 19 #include <sys/cdefs.h> 20 21 /* Server-side data structure for reading keys file during login */ 22 struct skey { 23 FILE *keyfile; 24 char *logname; 25 char *seed; 26 char *val; 27 int n; 28 int len; 29 long recstart; /* needed so reread of buffer is efficient */ 30 char buf[256]; 31 }; 32 33 /* Client-side structure for scanning data stream for challenge */ 34 struct mc { 35 int skip; 36 int cnt; 37 char buf[256]; 38 }; 39 40 /* Maximum sequence number we allow */ 41 #define SKEY_MAX_SEQ 10000 42 43 /* Minimum secret password length (rfc2289) */ 44 #define SKEY_MIN_PW_LEN 10 45 46 /* Max secret password length (rfc2289 says 63 but allows more) */ 47 #define SKEY_MAX_PW_LEN 255 48 49 /* Max length of an S/Key seed (rfc2289) */ 50 #define SKEY_MAX_SEED_LEN 16 51 52 /* Max length of S/Key challenge (otp-???? 9999 seed) */ 53 #define SKEY_MAX_CHALLENGE (11 + SKEY_MAX_HASHNAME_LEN + SKEY_MAX_SEED_LEN) 54 55 /* Max length of hash algorithm name (md4/md5/sha1/rmd160) */ 56 #define SKEY_MAX_HASHNAME_LEN 6 57 58 /* Size of a binary key (not NULL-terminated) */ 59 #define SKEY_BINKEY_SIZE 8 60 61 /* Location of random file for bogus challenges */ 62 #define _SKEY_RAND_FILE_PATH_ "/var/db/host.random" 63 64 __BEGIN_DECLS 65 void f __P((char *)); 66 int keycrunch __P((char *, char *, char *)); 67 char *btoe __P((char *, char *)); 68 char *put8 __P((char *, char *)); 69 int etob __P((char *, char *)); 70 void rip __P((char *)); 71 int skeychallenge __P((struct skey *, char *, char *)); 72 int skeylookup __P((struct skey *, char *)); 73 int skeyverify __P((struct skey *, char *)); 74 int skeyzero __P((struct skey *)); 75 void sevenbit __P((char *)); 76 void backspace __P((char *)); 77 char *skipspace __P((char *)); 78 char *readpass __P((char *, int)); 79 char *readskey __P((char *, int)); 80 int skey_authenticate __P((char *)); 81 int skey_passcheck __P((char *, char *)); 82 char *skey_keyinfo __P((char *)); 83 int skey_haskey __P((char *)); 84 int atob8 __P((char *, char *)); 85 int btoa8 __P((char *, char *)); 86 int htoi __P((int)); 87 const char *skey_get_algorithm __P((void)); 88 char *skey_set_algorithm __P((char *)); 89 int skeygetnext __P((struct skey *)); 90 int skey_unlock __P((struct skey *)); 91 __END_DECLS 92 93 #endif /* _SKEY_H_ */ 94