NetBSD/usr.sbin/pppd/chap.h

107 lines
2.9 KiB
C

/*
* 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__ */