xref: /openbsd/lib/libskey/skey.h (revision d89ec533)
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 <millert@openbsd.org>
10  *
11  * Main client header
12  *
13  * $OpenBSD: skey.h,v 1.22 2019/01/25 00:19:26 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 (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 /* Directory for S/Key per-user files */
61 #define _PATH_SKEYDIR		"/etc/skey"
62 
63 __BEGIN_DECLS
64 void f(char *);
65 int keycrunch(char *, char *, char *);
66 char *btoe(char *, char *);
67 char *put8(char *, char *);
68 int etob(char *, char *);
69 void rip(char *);
70 int skeychallenge(struct skey *, char *, char *);
71 int skeychallenge2(int, struct skey *, char *, char *);
72 int skeylookup(struct skey *, char *);
73 int skeyverify(struct skey *, char *);
74 int skeyzero(struct skey *);
75 void sevenbit(char *);
76 void backspace(char *);
77 char *skipspace(char *);
78 char *readpass(char *, int);
79 char *readskey(char *, int);
80 int skey_authenticate(char *);
81 int skey_passcheck(char *, char *);
82 char *skey_keyinfo(char *);
83 int skey_haskey(char *);
84 int atob8(char *, char *);
85 int btoa8(char *, char *);
86 int htoi(int);
87 const char *skey_get_algorithm(void);
88 char *skey_set_algorithm(char *);
89 int skeygetnext(struct skey *);
90 int skey_unlock(struct skey *);
91 __END_DECLS
92 
93 #endif /* _SKEY_H_ */
94