1 /*
2 * Test MS-CHAPv1 library code.
3 *
4 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
5 * Use is subject to license terms.
6 *
7 * Originally from the README.MSCHAP80 file written by:
8 * Eric Rosenquist rosenqui@strataware.com
9 * (updated by Paul Mackerras)
10 * (updated by Al Longyear)
11 * (updated by Farrell Woods)
12 */
13
14 #include <stdio.h>
15
16 #include "pppd.h"
17 #include "chap.h"
18 #include "chap_ms.h"
19
20 #pragma ident "%Z%%M% %I% %E% SMI"
21
22 static void
show_response(chap_state * cstate,const char * str)23 show_response(chap_state *cstate, const char *str)
24 {
25 int i;
26
27 printf("%s -- %d bytes:", str, cstate->resp_length);
28
29 for (i = 0; i < cstate->resp_length; i++) {
30 if (i % 8 == 0)
31 putchar('\n');
32 printf("%02X ", (unsigned int)cstate->response[i]);
33 }
34
35 putchar('\n');
36 }
37
main(argc,argv)38 int main(argc, argv)
39 int argc;
40 char *argv[];
41 {
42 u_char challenge[8];
43 int challengeInt[sizeof(challenge)];
44 chap_state cstate;
45 int i;
46
47 if (argc != 3) {
48 fprintf(stderr, "Usage: %s <16-hexchar challenge> <password>\n",
49 argv[0]); exit(1);
50 }
51
52 sscanf(argv[1], "%2x%2x%2x%2x%2x%2x%2x%2x",
53 challengeInt + 0, challengeInt + 1, challengeInt + 2,
54 challengeInt + 3, challengeInt + 4, challengeInt + 5,
55 challengeInt + 6, challengeInt + 7);
56
57 for (i = 0; i < sizeof(challenge); i++)
58 challenge[i] = (u_char)challengeInt[i];
59
60 BZERO(&cstate, sizeof(cstate));
61 ChapMS(&cstate, challenge, sizeof(challenge), argv[2], strlen(argv[2]));
62 #ifdef MSLANMAN
63 show_response(&cstate, "MS-CHAPv1 with LAN Manager");
64 #else
65 show_response(&cstate, "MS-CHAPv1");
66 #endif
67
68 cstate.chal_len = sizeof(challenge);
69 BCOPY(challenge, cstate.challenge, cstate.chal_len);
70 if (!ChapMSValidate(&cstate, cstate.response, cstate.resp_length,
71 argv[2], strlen(argv[2])))
72 printf("Cannot validate own MS-CHAPv1 response.\n");
73
74 #ifdef MSLANMAN
75 cstate.response[MS_CHAP_RESPONSE_LEN-1] = '\0';
76 if (!ChapMSValidate(&cstate, cstate.response, cstate.resp_length,
77 argv[2], strlen(argv[2])))
78 printf("Cannot validate own LAN Manager response.\n");
79 #endif
80
81 #ifdef CHAPMSV2
82 cstate.resp_name = "joe user";
83 ChapMSv2(&cstate, cstate.challenge, 16, argv[2], strlen(argv[2]));
84 show_response(&cstate, "MS-CHAPv2");
85 if (!ChapMSv2Validate(&cstate, cstate.resp_name, cstate.response,
86 cstate.resp_length, argv[2], strlen(argv[2])))
87 printf("Cannot validate own MS-CHAPv2 response.\n");
88 #endif
89
90 return (0);
91 }
92