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