X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fchap.h;h=d15b948c22780d1c6ff61cea8283a63621b726d2;hp=5e69d24b85c0c830f0bc670ff7b477fbd67e6624;hb=c062322f9e8757b85a3c2281a3190d8af14bcd9b;hpb=09327441c717dc41f5f468730cd077ca0c7a7e22 diff --git a/pppd/chap.h b/pppd/chap.h index 5e69d24..d15b948 100644 --- a/pppd/chap.h +++ b/pppd/chap.h @@ -30,7 +30,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: chap.h,v 1.6 1996/07/01 01:12:21 paulus Exp $ + * $Id: chap.h,v 1.10 2002/03/01 14:39:18 dfs Exp $ */ #ifndef __CHAP_INCLUDE__ @@ -45,7 +45,42 @@ #define CHAP_DIGEST_MD5 5 /* use MD5 algorithm */ #define MD5_SIGNATURE_SIZE 16 /* 16 bytes in a MD5 message digest */ #define CHAP_MICROSOFT 0x80 /* use Microsoft-compatible alg. */ -#define MS_CHAP_RESPONSE_LEN 49 /* Response length for MS-CHAP */ + +/* + * Digest type and selection. + */ + +/* bitmask of supported algorithms */ +#define MDTYPE_MD5 0x1 +#define MDTYPE_MICROSOFT 0x2 + +#ifdef CHAPMS +#define MDTYPE_ALL (MDTYPE_MD5 | MDTYPE_MICROSOFT) +#else +#define MDTYPE_ALL (MDTYPE_MD5) +#endif +#define MDTYPE_NONE 0 + +/* Return the digest alg. ID for the most preferred digest type. */ +#define CHAP_DIGEST(mdtype) \ + ((mdtype) & MDTYPE_MD5)? CHAP_DIGEST_MD5: \ + ((mdtype) & MDTYPE_MICROSOFT)? CHAP_MICROSOFT: \ + 0 + +/* Return the bit flag (lsb set) for our most preferred digest type. */ +#define CHAP_MDTYPE(mdtype) ((mdtype) ^ ((mdtype) - 1)) & (mdtype) + +/* Return the bit flag for a given digest algorithm ID. */ +#define CHAP_MDTYPE_D(digest) \ + ((digest) == CHAP_DIGEST_MD5)? MDTYPE_MD5: \ + ((digest) == CHAP_MICROSOFT)? MDTYPE_MICROSOFT: \ + 0 + +/* Can we do the requested digest? */ +#define CHAP_CANDIGEST(mdtype, digest) \ + ((digest) == CHAP_DIGEST_MD5)? (mdtype) & MDTYPE_MD5: \ + ((digest) == CHAP_MICROSOFT)? (mdtype) & MDTYPE_MICROSOFT: \ + 0 #define CHAP_CHALLENGE 1 #define CHAP_RESPONSE 2 @@ -55,9 +90,9 @@ /* * Challenge lengths (for challenges we send) and other limits. */ -#define MIN_CHALLENGE_LENGTH 32 -#define MAX_CHALLENGE_LENGTH 64 -#define MAX_RESPONSE_LENGTH 16 /* sufficient for MD5 */ +#define MIN_CHALLENGE_LENGTH 16 +#define MAX_CHALLENGE_LENGTH 24 +#define MAX_RESPONSE_LENGTH 64 /* sufficient for MD5 or MS-CHAP */ /* * Each interface is described by a chap structure. @@ -85,6 +120,9 @@ typedef struct chap_state { char *resp_name; /* Our name to send with response */ } chap_state; +/* We need the declaration of chap_state to use this prototype */ +extern int (*chap_auth_hook) __P((char *user, u_char *remmd, + int remmd_len, chap_state *cstate)); /* * Client (peer) states.