opie.h revision 92914
1130812Smarcel/* opie.h: Data structures and values for the OPIE authentication 2130812Smarcel system that a program might need. 3130812Smarcel 4130812Smarcel%%% portions-copyright-cmetz-96 5130812SmarcelPortions of this software are Copyright 1996-1999 by Craig Metz, All Rights 6130812SmarcelReserved. The Inner Net License Version 2 applies to these portions of 7130812Smarcelthe software. 8130812SmarcelYou should have received a copy of the license with this software. If 9130812Smarcelyou didn't get a copy, you may request one from <license@inner.net>. 10130812Smarcel 11130812SmarcelPortions of this software are Copyright 1995 by Randall Atkinson and Dan 12130812SmarcelMcDonald, All Rights Reserved. All Rights under this copyright are assigned 13130812Smarcelto the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and 14130812SmarcelLicense Agreement applies to this software. 15130812Smarcel 16130812Smarcel History: 17130812Smarcel 18130812Smarcel Modified by cmetz for OPIE 2.4. Added sequence number limits. Added 19130812Smarcel struct opie_otpkey and made many functions use it. Added 20130812Smarcel opiestrncpy(). Include header with libmissing prototypes. 21130812Smarcel Modified by cmetz for OPIE 2.32. Added symbolic flag names for 22130812Smarcel opiepasswd(). Added __opieparsechallenge() prototype. 23130812Smarcel Modified by cmetz for OPIE 2.31. Removed active attack protection. 24130812Smarcel Modified by cmetz for OPIE 2.3. Renamed PTR to VOIDPTR. Added 25130812Smarcel re-init key and extension file fields to struct opie. Added 26130812Smarcel opie_ prefix on struct opie members. Added opie_flags field 27130812Smarcel and definitions. Added more prototypes. Changed opiehash() 28130812Smarcel prototype. 29130812Smarcel Modified by cmetz for OPIE 2.22. Define __P correctly if this file 30130812Smarcel is included in a third-party program. 31130812Smarcel Modified by cmetz for OPIE 2.2. Re-did prototypes. Added FUNCTION 32130812Smarcel definition et al. Multiple-include protection. Added struct 33 utsname fake. Got rid of gethostname() cruft. Moved UINT4 34 here. Provide for *seek whence values. Move MDx context here 35 and unify. Re-did prototypes. 36 Modified at NRL for OPIE 2.0. 37 Written at Bellcore for the S/Key Version 1 software distribution 38 (skey.h). 39 40$FreeBSD: head/contrib/opie/opie.h 92914 2002-03-21 23:42:52Z markm $ 41*/ 42#ifndef _OPIE_H 43#define _OPIE_H 1 44 45struct opie { 46 int opie_flags; 47 char opie_buf[256]; 48 char *opie_principal; 49 int opie_n; 50 char *opie_seed; 51 char *opie_val; 52 long opie_recstart; 53}; 54 55#define __OPIE_FLAGS_RW 1 56#define __OPIE_FLAGS_READ 2 57 58/* Minimum length of a secret password */ 59#ifndef OPIE_SECRET_MIN 60#define OPIE_SECRET_MIN 10 61#endif /* OPIE_SECRET_MIN */ 62 63/* Maximum length of a secret password */ 64#define OPIE_SECRET_MAX 127 65 66/* Minimum length of a seed */ 67#define OPIE_SEED_MIN 5 68 69/* Maximum length of a seed */ 70#define OPIE_SEED_MAX 16 71 72/* Max length of hash algorithm name (md4/md5) */ 73#define OPIE_HASHNAME_MAX 3 74 75/* Maximum length of a challenge (otp-md? 9999 seed) */ 76#define OPIE_CHALLENGE_MAX (4+OPIE_HASHNAME_MAX+1+4+1+OPIE_SEED_MAX) 77 78/* Maximum length of a response that we allow */ 79#define OPIE_RESPONSE_MAX (9+1+19+1+9+OPIE_SEED_MAX+1+19+1+19+1+19) 80 81/* Maximum length of a principal (read: user name) */ 82#define OPIE_PRINCIPAL_MAX 32 83 84/* Maximum sequence number */ 85#ifndef OPIE_SEQUENCE_MAX 86#define OPIE_SEQUENCE_MAX 9999 87#endif /* OPIE_SEQUENCE_MAX */ 88 89/* Restricted sequence number */ 90#ifndef OPIE_SEQUENCE_RESTRICT 91#define OPIE_SEQUENCE_RESTRICT 9 92#endif /* OPIE_SEQUENCE_RESTRICT */ 93 94#define UINT4 u_int32_t 95 96struct opie_otpkey { 97 UINT4 words[2]; 98}; 99 100#ifndef SEEK_SET 101#define SEEK_SET 0 102#endif /* SEEK_SET */ 103 104#ifndef SEEK_END 105#define SEEK_END 2 106#endif /* SEEK_END */ 107 108__BEGIN_DECLS 109int opieaccessfile __P((char *)); 110int rdnets __P((long)); 111int isaddr __P((register char *)); 112int opiealways __P((char *)); 113char *opieatob8 __P((struct opie_otpkey *, char *)); 114void opiebackspace __P((char *)); 115char *opiebtoa8 __P((char *, struct opie_otpkey *)); 116char *opiebtoe __P((char *, struct opie_otpkey *)); 117char *opiebtoh __P((char *, struct opie_otpkey *)); 118int opieetob __P((struct opie_otpkey *, char *)); 119int opiechallenge __P((struct opie *,char *,char *)); 120int opiegenerator __P((char *,char *,char *)); 121int opiegetsequence __P((struct opie *)); 122void opiehash __P((struct opie_otpkey *, unsigned)); 123int opiehtoi __P((register char)); 124int opiekeycrunch __P((int, struct opie_otpkey *, char *, char *)); 125int opielock __P((char *)); 126int opieunlock __P((void)); 127void opieunlockaeh __P((void)); 128void opiedisableaeh __P((void)); 129int opielookup __P((struct opie *,char *)); 130int opiepasscheck __P((char *)); 131void opierandomchallenge __P((char *)); 132char * opieskipspace __P((register char *)); 133void opiestripcrlf __P((char *)); 134int opieverify __P((struct opie *,char *)); 135int opiepasswd __P((struct opie *, int, char *, int, char *, char *)); 136char *opiereadpass __P((char *, int, int)); 137int opielogin __P((char *line, char *name, char *host)); 138const char *opie_get_algorithm __P((void)); 139int opie_haskey __P((char *username)); 140char *opie_keyinfo __P((char *)); 141int opie_passverify __P((char *username, char *passwd)); 142__END_DECLS 143 144#if _OPIE 145#define VOIDPTR void * 146#define VOIDRET void 147#define NOARGS void 148#define FUNCTION(arglist, args) (args) 149#define AND , 150#define FUNCTION_NOARGS () 151 152__BEGIN_DECLS 153struct utmp; 154int __opiegetutmpentry __P((char *, struct utmp *)); 155#ifdef EOF 156FILE *__opieopen __P((char *, int, int)); 157#endif /* EOF */ 158int __opiereadrec __P((struct opie *)); 159int __opiewriterec __P((struct opie *)); 160int __opieparsechallenge __P((char *buffer, int *algorithm, int *sequence, char **seed, int *exts)); 161__END_DECLS 162 163#define opiestrncpy(dst, src, n) \ 164 do { \ 165 strncpy(dst, src, n-1); \ 166 dst[n-1] = 0; \ 167 } while(0) 168 169/* #include "missing.h" */ 170#endif /* _OPIE */ 171 172#define OPIEPASSWD_CONSOLE 1 173#define OPIEPASSWD_FORCE 2 174 175#endif /* _OPIE_H */ 176