xref: /openbsd-src/lib/libskey/skey.h (revision a28daedfc357b214be5c701aa8ba8adb29a7f1c2)
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.19 2004/08/05 13:31:36 millert Exp $
14  */
15 
16 #ifndef _SKEY_H_
17 #define _SKEY_H_ 1
18 
19 #include <dirent.h>
20 
21 /* Server-side data structure for reading keys file during login */
22 struct skey {
23 	FILE *keyfile;
24 	DIR  *keydir;
25 	char *logname;
26 	char *seed;
27 	char *val;
28 	unsigned int n;
29 	char buf[256];
30 };
31 
32 /* Client-side structure for scanning data stream for challenge */
33 struct mc {
34 	int skip;
35 	int cnt;
36 	char buf[256];
37 };
38 
39 /* Maximum sequence number we allow */
40 #define SKEY_MAX_SEQ		10000
41 
42 /* Minimum secret password length (rfc2289) */
43 #define SKEY_MIN_PW_LEN		10
44 
45 /* Max secret password length (rfc2289 says 63 but allows more) */
46 #define SKEY_MAX_PW_LEN		255
47 
48 /* Max length of an S/Key seed (rfc2289) */
49 #define SKEY_MAX_SEED_LEN	16
50 
51 /* Max length of S/Key challenge (otp-???? 9999 seed) */
52 #define SKEY_MAX_CHALLENGE	(11 + SKEY_MAX_HASHNAME_LEN + SKEY_MAX_SEED_LEN)
53 
54 /* Max length of hash algorithm name (md4/md5/sha1/rmd160) */
55 #define SKEY_MAX_HASHNAME_LEN	6
56 
57 /* Size of a binary key (not NULL-terminated) */
58 #define SKEY_BINKEY_SIZE	8
59 
60 /* Location of random file for bogus challenges */
61 #define _SKEY_RAND_FILE_PATH_	"/var/db/host.random"
62 
63 /* Directory for S/Key per-user files */
64 #define _PATH_SKEYDIR		"/etc/skey"
65 
66 __BEGIN_DECLS
67 void f(char *);
68 int keycrunch(char *, char *, char *);
69 char *btoe(char *, char *);
70 char *put8(char *, char *);
71 int etob(char *, char *);
72 void rip(char *);
73 int skeychallenge(struct skey *, char *, char *);
74 int skeychallenge2(int, struct skey *, char *, char *);
75 int skeylookup(struct skey *, char *);
76 int skeyverify(struct skey *, char *);
77 int skeyzero(struct skey *);
78 void sevenbit(char *);
79 void backspace(char *);
80 char *skipspace(char *);
81 char *readpass(char *, int);
82 char *readskey(char *, int);
83 int skey_authenticate(char *);
84 int skey_passcheck(char *, char *);
85 char *skey_keyinfo(char *);
86 int skey_haskey(char *);
87 int atob8(char *, char *);
88 int btoa8(char *, char *);
89 int htoi(int);
90 const char *skey_get_algorithm(void);
91 char *skey_set_algorithm(char *);
92 int skeygetnext(struct skey *);
93 int skey_unlock(struct skey *);
94 __END_DECLS
95 
96 #endif /* _SKEY_H_ */
97