Annotation of embedaddon/coova-chilli/src/main-response.c, revision 1.1
1.1 ! misho 1: /*
! 2: *
! 3: * Copyright (C) 2003, 2004, 2005 Mondru AB.
! 4: * Copyright (c) 2006-2007 David Bird <david@coova.com>
! 5: *
! 6: * The contents of this file may be used under the terms of the GNU
! 7: * General Public License Version 2, provided that the above copyright
! 8: * notice and this permission notice is included in all copies or
! 9: * substantial portions of the software.
! 10: *
! 11: */
! 12:
! 13: #include "system.h"
! 14: #include "md5.h"
! 15: #define MD5LEN 16
! 16:
! 17: static int usage(char *program) {
! 18: fprintf(stderr, "Usage: %s <challenge> <uamsecret> <password>\n", program);
! 19: return 1;
! 20: }
! 21:
! 22: static int hextochar(char *src, unsigned char * dst) {
! 23: char x[3];
! 24: int n;
! 25: int y;
! 26:
! 27: for (n=0; n < MD5LEN; n++) {
! 28: x[0] = src[n*2+0];
! 29: x[1] = src[n*2+1];
! 30: x[2] = 0;
! 31:
! 32: if (sscanf(x, "%2x", &y) != 1)
! 33: return -1;
! 34:
! 35: dst[n] = (unsigned char) y;
! 36: }
! 37:
! 38: return 0;
! 39: }
! 40:
! 41: static int chartohex(unsigned char *src, char *dst) {
! 42: char x[3];
! 43: int n;
! 44:
! 45: for (n=0; n < MD5LEN; n++) {
! 46: snprintf(x, 3, "%.2x", src[n]);
! 47: dst[n*2+0] = x[0];
! 48: dst[n*2+1] = x[1];
! 49: }
! 50: dst[MD5LEN*2] = 0;
! 51: return 0;
! 52: }
! 53:
! 54: int main(int argc, char **argv) {
! 55: unsigned char chap_ident = 0;
! 56: unsigned char challenge[MD5LEN];
! 57: unsigned char response[MD5LEN];
! 58: char buffer[MD5LEN*3];
! 59: MD5_CTX context;
! 60:
! 61: if (argc != 4 && argc != 5)
! 62: return usage(argv[0]);
! 63:
! 64: if (argc == 5)
! 65: chap_ident = atoi(argv[4]);
! 66:
! 67: /* challeng - argv 1 */
! 68: memset(buffer, 0, sizeof(buffer));
! 69: /*fprintf(stderr,"challenge: %s\n",argv[1]);*/
! 70: strcpy(buffer, argv[1]);
! 71: hextochar(buffer, challenge);
! 72:
! 73: MD5Init(&context);
! 74: MD5Update(&context, challenge, MD5LEN);
! 75: /* uamsecret - argv 2 */
! 76: /*fprintf(stderr,"uamsecret: %s\n",argv[2]);*/
! 77: MD5Update(&context, (uint8_t*)argv[2], strlen(argv[2]));
! 78: MD5Final(challenge, &context);
! 79:
! 80: MD5Init(&context);
! 81: MD5Update(&context, (uint8_t*)&chap_ident, 1);
! 82: /* password - argv 3 */
! 83: /*fprintf(stderr,"password: %s\n",argv[3]);*/
! 84: MD5Update(&context, (uint8_t*)argv[3], strlen(argv[3]));
! 85: MD5Update(&context, challenge, MD5LEN);
! 86: MD5Final(response, &context);
! 87:
! 88: chartohex(response, buffer);
! 89: printf("%s\n", buffer);
! 90: return 0;
! 91: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>