opie.h revision 60572
1/* opie.h: Data structures and values for the OPIE authentication
2	system that a program might need.
3
4%%% portions-copyright-cmetz-96
5Portions of this software are Copyright 1996-1998 by Craig Metz, All Rights
6Reserved. The Inner Net License Version 2 applies to these portions of
7the software.
8You should have received a copy of the license with this software. If
9you didn't get a copy, you may request one from <license@inner.net>.
10
11Portions of this software are Copyright 1995 by Randall Atkinson and Dan
12McDonald, All Rights Reserved. All Rights under this copyright are assigned
13to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and
14License Agreement applies to this software.
15
16	History:
17
18	Modified by cmetz for OPIE 2.32. Added symbolic flag names for
19		opiepasswd(). Added __opieparsechallenge() prototype.
20	Modified by cmetz for OPIE 2.31. Removed active attack protection.
21	Modified by cmetz for OPIE 2.3. Renamed PTR to VOIDPTR. Added
22		re-init key and extension file fields to struct opie. Added
23		opie_ prefix on struct opie members. Added opie_flags field
24		and definitions. Added more prototypes. Changed opiehash()
25		prototype.
26	Modified by cmetz for OPIE 2.22. Define __P correctly if this file
27		is included in a third-party program.
28	Modified by cmetz for OPIE 2.2. Re-did prototypes. Added FUNCTION
29                definition et al. Multiple-include protection. Added struct
30		utsname fake. Got rid of gethostname() cruft. Moved UINT4
31                here. Provide for *seek whence values. Move MDx context here
32                and unify. Re-did prototypes.
33	Modified at NRL for OPIE 2.0.
34	Written at Bellcore for the S/Key Version 1 software distribution
35		(skey.h).
36
37$FreeBSD: head/contrib/opie/opie.h 60572 2000-05-15 04:20:54Z kris $
38*/
39#ifndef _OPIE_H
40#define _OPIE_H 1
41
42struct opie {
43  int opie_flags;
44  char opie_buf[256];
45  char *opie_principal;
46  int opie_n;
47  char *opie_seed;
48  char *opie_val;
49  long opie_recstart;
50};
51
52#define __OPIE_FLAGS_RW 1
53#define __OPIE_FLAGS_READ 2
54
55/* Minimum length of a secret password */
56#define OPIE_SECRET_MIN 10
57
58/* Maximum length of a secret password */
59#define OPIE_SECRET_MAX 127
60
61/* Minimum length of a seed */
62#define OPIE_SEED_MIN 5
63
64/* Maximum length of a seed */
65#define OPIE_SEED_MAX 16
66
67/* Max length of hash algorithm name (md4/md5) */
68#define OPIE_HASHNAME_MAX 3
69
70/* Maximum length of a challenge (otp-md? 9999 seed) */
71#define OPIE_CHALLENGE_MAX (4+OPIE_HASHNAME_MAX+1+4+1+OPIE_SEED_MAX)
72
73/* Maximum length of a response that we allow */
74#define OPIE_RESPONSE_MAX (9+1+19+1+9+OPIE_SEED_MAX+1+19+1+19+1+19)
75
76/* Maximum length of a principal (read: user name) */
77#define OPIE_PRINCIPAL_MAX 32
78
79#include <sys/cdefs.h>
80
81__BEGIN_DECLS
82int  opieaccessfile __P((char *));
83int  rdnets __P((long));
84int  isaddr __P((register char *));
85int  opiealways __P((char *));
86char *opieatob8 __P((char *,char *));
87void opiebackspace __P((char *));
88char *opiebtoa8 __P((char *,char *));
89char *opiebtoe __P((char *,char *));
90char *opiebtoh __P((char *,char *));
91int  opieetob __P((char *,char *));
92int  opiechallenge __P((struct opie *,char *,char *));
93int  opiegenerator __P((char *,char *,char *));
94int  opiegetsequence __P((struct opie *));
95void opiehash __P((void *, unsigned));
96int  opiehtoi __P((register char));
97int  opiekeycrunch __P((int, char *, char *, char *));
98int  opielock __P((char *));
99int  opieunlock __P((void));
100void opieunlockaeh __P((void));
101void opiedisableaeh __P((void));
102int  opielookup __P((struct opie *,char *));
103int  opiepasscheck __P((char *));
104void opierandomchallenge __P((char *));
105char * opieskipspace __P((register char *));
106void opiestripcrlf __P((char *));
107int  opieverify __P((struct opie *,char *));
108int opiepasswd __P((struct opie *, int, char *, int, char *, char *));
109char *opiereadpass __P((char *, int, int));
110int opielogin __P((char *line, char *name, char *host));
111const char *opie_get_algorithm __P((void));
112int  opie_haskey __P((char *username));
113char *opie_keyinfo __P((char *));
114int  opie_passverify __P((char *username, char *passwd));
115__END_DECLS
116
117#if _OPIE
118#define VOIDPTR void *
119#define VOIDRET void
120#define NOARGS  void
121#define FUNCTION(arglist, args) (args)
122#define AND ,
123#define FUNCTION_NOARGS ()
124#define UINT4 u_int32_t
125
126__BEGIN_DECLS
127struct utmp;
128int __opiegetutmpentry __P((char *, struct utmp *));
129#ifdef EOF
130FILE *__opieopen __P((char *, int, int));
131#endif /* EOF */
132int __opiereadrec __P((struct opie *));
133int __opiewriterec __P((struct opie *));
134int __opieparsechallenge __P((char *buffer, int *algorithm, int *sequence, char **seed, int *exts));
135__END_DECLS
136#endif /* _OPIE */
137
138#define OPIEPASSWD_CONSOLE 1
139#define OPIEPASSWD_FORCE   2
140
141#endif /* _OPIE_H */
142