]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/chap.h
Large patch from Frank Cusack <fcusack@fcusack.com> to add proper
[ppp.git] / pppd / chap.h
index 36bad2b6414ef8818bd1d00e1b0a2806530e666b..d15b948c22780d1c6ff61cea8283a63621b726d2 100644 (file)
@@ -1,5 +1,20 @@
 /*
- * chap.h - Cryptographic Handshake Authentication Protocol definitions.
+ * chap.h - Challenge Handshake Authentication Protocol definitions.
+ *
+ * Copyright (c) 1993 The Australian National University.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the Australian National University.  The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * Copyright (c) 1991 Gregory M. Christy
  * All rights reserved.
@@ -15,7 +30,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- * $Id: chap.h,v 1.4 1995/12/18 03:46:21 paulus Exp $
+ * $Id: chap.h,v 1.10 2002/03/01 14:39:18 dfs Exp $
  */
 
 #ifndef __CHAP_INCLUDE__
 
 #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. */
+
+/*
+ * 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
@@ -38,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.
@@ -68,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.
@@ -98,15 +153,8 @@ typedef struct chap_state {
 
 extern chap_state chap[];
 
-void ChapInit __P((int));
 void ChapAuthWithPeer __P((int, char *, int));
 void ChapAuthPeer __P((int, char *, int));
-void ChapLowerUp __P((int));
-void ChapLowerDown __P((int));
-void ChapInput __P((int, u_char *, int));
-void ChapProtocolReject __P((int));
-int  ChapPrintPkt __P((u_char *, int,
-                      void (*) __P((void *, char *, ...)), void *));
 
 extern struct protent chap_protent;