xref: /openbsd/lib/libskey/skey.h (revision 78b63d65)
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