Annotation of embedaddon/libpdel/ppp/ppp_auth.h, revision 1.1.1.1
1.1 misho 1:
2: /*
3: * Copyright (c) 2001-2002 Packet Design, LLC.
4: * All rights reserved.
5: *
6: * Subject to the following obligations and disclaimer of warranty,
7: * use and redistribution of this software, in source or object code
8: * forms, with or without modifications are expressly permitted by
9: * Packet Design; provided, however, that:
10: *
11: * (i) Any and all reproductions of the source or object code
12: * must include the copyright notice above and the following
13: * disclaimer of warranties; and
14: * (ii) No rights are granted, in any manner or form, to use
15: * Packet Design trademarks, including the mark "PACKET DESIGN"
16: * on advertising, endorsements, or otherwise except as such
17: * appears in the above copyright notice or in the software.
18: *
19: * THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND
20: * TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO
21: * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING
22: * THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED
23: * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
24: * OR NON-INFRINGEMENT. PACKET DESIGN DOES NOT WARRANT, GUARANTEE,
25: * OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS
26: * OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY,
27: * RELIABILITY OR OTHERWISE. IN NO EVENT SHALL PACKET DESIGN BE
28: * LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE
29: * OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT,
30: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL
31: * DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF
32: * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
33: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
35: * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
36: * THE POSSIBILITY OF SUCH DAMAGE.
37: *
38: * Author: Archie Cobbs <archie@freebsd.org>
39: */
40:
41: #ifndef _PDEL_PPP_PPP_AUTH_H_
42: #define _PDEL_PPP_PPP_AUTH_H_
43:
44: struct ppp_auth_config;
45: struct ppp_fsm_option;
46: struct ppp_link;
47: struct ppp_log;
48:
49: /* Types of authentication (in reverse order of preference) */
50: enum ppp_auth_index {
51: PPP_AUTH_NONE = 0,
52: PPP_AUTH_PAP,
53: PPP_AUTH_CHAP_MSV1,
54: PPP_AUTH_CHAP_MSV2,
55: PPP_AUTH_CHAP_MD5,
56: PPP_AUTH_MAX
57: };
58:
59: #ifndef MD5_DIGEST_LENGTH
60: #define MD5_DIGEST_LENGTH 16
61: #endif
62:
63: /* Max authorization username and password length */
64: #define PPP_MAX_AUTHNAME 64
65: #define PPP_MAX_AUTHPASS 64
66:
67: /* Max challenge/response data length */
68: #define PPP_MAX_AUTHVALUE 64
69:
70: /* Microsoft stuff */
71: #define PPP_MSOFT_LM_HASH_LEN 24
72: #define PPP_MSOFT_NT_HASH_LEN 24
73: #define PPP_MSOFTV1_CHAL_LEN 8
74: #define PPP_MSOFTV2_CHAL_LEN 16
75: #define PPP_MSOFT_RESP_LEN 49
76: #define PPP_MSOFTV2_AUTHRESP_LEN 20
77:
78: #define PPP_MPPE_DATA_MAX MAX(PPP_MSOFTV1_CHAL_LEN, PPP_MSOFT_NT_HASH_LEN)
79:
80: /***********************************************************************
81: AUTHORIZATION CREDENTIALS
82: ***********************************************************************/
83:
84: /* Credentials for PAP */
85: struct ppp_auth_cred_pap {
86: char name[PPP_MAX_AUTHNAME];
87: char password[PPP_MAX_AUTHPASS];
88: };
89:
90: /* Response data for MD5 CHAP */
91: struct ppp_auth_cred_chap_md5 {
92: u_char id;
93: u_char hash[MD5_DIGEST_LENGTH];
94: };
95:
96: /* Response data for MSoft CHAPv1 */
97: struct ppp_auth_cred_chap_msv1 {
98: u_char lm_hash[PPP_MSOFT_LM_HASH_LEN];
99: u_char nt_hash[PPP_MSOFT_NT_HASH_LEN];
100: u_char use_nt;
101: };
102:
103: /* Response data for MSoft CHAPv2 */
104: struct ppp_auth_cred_chap_msv2 {
105: u_char peer_chal[PPP_MSOFTV2_CHAL_LEN];
106: u_char reserved[8];
107: u_char nt_response[PPP_MSOFT_NT_HASH_LEN];
108: u_char flags;
109: };
110:
111: /* Credentials for CHAP */
112: struct ppp_auth_cred_chap {
113: char name[PPP_MAX_AUTHNAME];
114: u_char chal_len;
115: u_char chal_data[PPP_MAX_AUTHVALUE];
116: union {
117: struct ppp_auth_cred_chap_md5 md5;
118: struct ppp_auth_cred_chap_msv1 msv1;
119: struct ppp_auth_cred_chap_msv2 msv2;
120: } u;
121: };
122:
123: /* Authorization credentials info */
124: struct ppp_auth_cred {
125: enum ppp_auth_index type;
126: union {
127: struct ppp_auth_cred_pap pap;
128: struct ppp_auth_cred_chap chap;
129: } u;
130: };
131:
132: /***********************************************************************
133: AUTHORIZATION RESPONSE
134: ***********************************************************************/
135:
136: /* Microsoft MPPE information derived from CHAP exchange */
137: struct ppp_auth_mppe_chapv1 {
138: u_char key_64[8]; /* lan-man hash (40, 56 bits) */
139: u_char key_128[16]; /* start key (128 bits) */
140: };
141:
142: struct ppp_auth_mppe_chapv2 {
143: u_char keys[2][16]; /* server xmit key is first */
144: };
145:
146: union ppp_auth_mppe {
147: struct ppp_auth_mppe_chapv1 msv1;
148: struct ppp_auth_mppe_chapv2 msv2;
149: };
150:
151: /* Authorization response info */
152: struct ppp_auth_resp {
153: u_char authresp[PPP_MSOFTV2_AUTHRESP_LEN];
154: union ppp_auth_mppe mppe; /* mppe keys */
155: char errmsg[64]; /* error message */
156: };
157:
158: /***********************************************************************
159: CREDENTIALS CALLBACKS
160: ***********************************************************************/
161:
162: /*
163: * Function type for acquiring credentials. Any name and/or challenge
164: * data will already be present in the credentials structure.
165: *
166: * Note: if type is PPP_AUTH_CHAP_MSV2, the caller MUST fill in the
167: * "authresp" array with the 20 byte MS-CHAPv2 authenticator response.
168: *
169: * Note: if type is PPP_AUTH_CHAP_MSV1 or PPP_AUTH_CHAP_MSV2, the caller
170: * SHOULD fill in the "mppe" structure with the MPPE key(s).
171: *
172: * Note: this function will be called in a separate thread that may
173: * be canceled at any time; it should be prepared to clean up if so.
174: *
175: * Note: 'resp' has been zeroed out when this function is invoked.
176: * The MPPE key fields should remain zeroed out unless valid keys
177: * are present.
178: *
179: * Returns:
180: * 0 Credentials found
181: * -1 Credentials can't be found. Set errno or resp->errmsg.
182: */
183: typedef int ppp_auth_acquire_t(struct ppp_link *link,
184: struct ppp_auth_cred *creds,
185: struct ppp_auth_resp *resp);
186:
187: /*
188: * Function type for checking credentials.
189: *
190: * Note: if type is PPP_AUTH_CHAP_MSV2, the caller must fill in the
191: * "authresp" array with the 20 byte MS-CHAPv2 authenticator response.
192: *
193: * Note: if type is PPP_AUTH_CHAP_MSV1 or PPP_AUTH_CHAP_MSV2, the caller
194: * SHOULD fill in the "mppe" structure with the MPPE key(s).
195: *
196: * Note: this function will be called in a separate thread that may
197: * be canceled at any time; it should be prepared to clean up if so.
198: *
199: * Note: 'resp' has been zeroed out when this function is invoked.
200: * The MPPE key fields should remain zeroed out unless valid keys
201: * are present.
202: *
203: * Returns:
204: * 0 Credentials are valid
205: * -1 Credentials can't be validated. Set errno or resp->errmsg.
206: */
207: typedef int ppp_auth_check_t(struct ppp_link *link,
208: const struct ppp_auth_cred *creds,
209: struct ppp_auth_resp *resp);
210:
211: /*
212: * Authorization information supplied by caller.
213: */
214: struct ppp_auth_meth {
215: ppp_auth_acquire_t *acquire;
216: ppp_auth_check_t *check;
217: };
218:
219: /* Authorization configuration for a link */
220: struct ppp_auth_config {
221: struct ppp_auth_meth *meth; /* auth_config callbacks */
222: u_int32_t allow[2]; /* auth types allowed (bits) */
223: };
224:
225: /***********************************************************************
226: PPP PRIVATE STUFF
227: ***********************************************************************/
228:
229: #ifdef _PDEL_PPP_PRIVATE_H_
230:
231: /*
232: * Authorization type methods
233: */
234: typedef void *ppp_authtype_start_t(struct pevent_ctx *ev_ctx,
235: struct ppp_link *link, pthread_mutex_t *mutex,
236: int dir, u_int16_t *protop, struct ppp_log *log);
237: typedef void ppp_authtype_cancel_t(void *arg);
238: typedef void ppp_authtype_input_t(void *arg,
239: int dir, void *data, size_t len);
240:
241: /* Authorization type descriptor */
242: struct ppp_auth_type {
243: const char *name; /* name */
244: enum ppp_auth_index index; /* auth type index */
245: ppp_authtype_start_t *start; /* start method */
246: ppp_authtype_cancel_t *cancel; /* cancel method */
247: ppp_authtype_input_t *input; /* input packet method */
248: u_int len; /* length of option data */
249: const u_char data[8]; /* option data */
250: };
251:
252: __BEGIN_DECLS
253:
254: /* Authorization type functions */
255: extern const struct ppp_auth_type *ppp_auth_by_option(
256: const struct ppp_fsm_option *opt);
257: extern const struct ppp_auth_type *ppp_auth_by_index(
258: enum ppp_auth_index index);
259:
260: extern opt_pr_t ppp_auth_print;
261:
262: __END_DECLS
263:
264: #endif /* _PDEL_PPP_PRIVATE_H_ */
265:
266: #endif /* _PDEL_PPP_PPP_AUTH_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>