/* * chap.h - Cryptographic Handshake Authentication Protocol definitions. * based on November 1991 draft of PPP Authentication RFC * * Copyright (c) 1991 Gregory M. Christy * 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 author. * * 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. */ #ifndef __CHAP_INCLUDE__ /* Code + ID + length */ #define CHAP_HEADERLEN (sizeof (u_char) + sizeof (u_char) + sizeof (u_short)) /* * CHAP codes. */ #define CHAP_DIGEST_MD5 5 /* use MD5 algorithm */ #define MD5_SIGNATURE_SIZE 16 /* 16 bytes in a MD5 message digest */ #define CHAP_NOCALLBACK 0 /* don't call back after successful auth */ #define CHAP_CALLBACK 1 /* do call back */ #define CHAP_CHALLENGE 1 #define CHAP_RESPONSE 2 #define CHAP_SUCCESS 3 #define CHAP_FAILURE 4 /* * Challenge lengths */ #define MIN_CHALLENGE_LENGTH 64 #define MAX_CHALLENGE_LENGTH 128 #define MAX_SECRET_LEN 128 /* * Each interface is described by chap structure. */ typedef struct chap_state { int unit; /* Interface unit number */ u_char chal_str[MAX_CHALLENGE_LENGTH + 1]; /* challenge string */ u_char chal_len; /* challenge length */ int clientstate; /* Client state */ int serverstate; /* Server state */ int flags; /* Flags */ unsigned char id; /* Current id */ int timeouttime; /* Timeout time in milliseconds */ int retransmits; /* Number of retransmissions */ } chap_state; /* * Client states. */ #define CHAPCS_CLOSED 1 /* Connection down */ #define CHAPCS_CHALLENGE_SENT 2 /* We've sent a challenge */ #define CHAPCS_OPEN 3 /* We've received an Ack */ /* * Server states. */ #define CHAPSS_CLOSED 1 /* Connection down */ #define CHAPSS_LISTEN 2 /* Listening for a challenge */ #define CHAPSS_OPEN 3 /* We've sent an Ack */ /* * Flags. */ #define CHAPF_LOWERUP 0x01 /* The lower level is UP */ #define CHAPF_AWPPENDING 0x02 /* Auth with peer pending */ #define CHAPF_APPENDING 0x04 /* Auth peer pending */ #define CHAPF_UPVALID 0x08 /* values valid */ #define CHAPF_UPPENDING 0x10 /* values pending */ /* * Timeouts. */ #define CHAP_DEFTIMEOUT 3 /* Timeout time in seconds */ extern chap_state chap[]; void ChapInit __ARGS((int)); void ChapAuthWithPeer __ARGS((int)); void ChapAuthPeer __ARGS((int)); void ChapLowerUp __ARGS((int)); void ChapLowerDown __ARGS((int)); void ChapInput __ARGS((int, u_char *, int)); void ChapProtocolReject __ARGS((int)); #define __CHAP_INCLUDE__ #endif /* __CHAP_INCLUDE__ */