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