From 635176d271734c5513b414b278268f61c4131f63 Mon Sep 17 00:00:00 2001 From: solomon Date: Thu, 17 Oct 2002 13:10:18 +0000 Subject: [PATCH] keygen enhancements. --- CHANGES | 1 + THANKS | 1 + add-ons/keygen/keygen.c | 40 +++++++++++++++++++++++++++++++++------- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index f6d95b0..3b9fae2 100644 --- a/CHANGES +++ b/CHANGES @@ -41,6 +41,7 @@ * Intersil Corporation as part of PRISM(R) chipset product development. * * -------------------------------------------------------------------- + - Patch from Tom Prado to make 'keygen' more user-friendly. - bap_timeout parameter only valid on non-usb platforms -pre3 - Added Ident info for the USB Compaq/Intel W200 widget diff --git a/THANKS b/THANKS index 4d43de1..9cfcbcb 100644 --- a/THANKS +++ b/THANKS @@ -93,6 +93,7 @@ Michael Beattie Joey Hess Clay Jones Matthew Rush +Tom Prado [Many, many more. If I've overlooked you and you want to be listed here, send me e-mail and I'll fix it. I _know_ a bunch of linux-wlan contributors diff --git a/add-ons/keygen/keygen.c b/add-ons/keygen/keygen.c index f5288cd..fe29738 100644 --- a/add-ons/keygen/keygen.c +++ b/add-ons/keygen/keygen.c @@ -22,6 +22,7 @@ #define WEPSTRONGKEYSIZE 13 #define WEPKEYS 4 #define WEPKEYSTORE (WEPKEYSIZE * WEPKEYS) +#define WEPSTRONGKEYSTORE (WEPSTRONGKEYSIZE * WEPKEYS) /* * generate four subkeys from a seed using the defacto standard @@ -67,11 +68,11 @@ wep_keygen128(char *str, u_char *keys) MD5_Update(&ctx, buf, sizeof buf); MD5_Final(buf, &ctx); - memcpy(keys, buf, WEPKEYSTORE); + memcpy(keys, buf, WEPSTRONGKEYSTORE); for(i = 0; i < WEPSTRONGKEYSIZE; i++) { keys[i] = buf[i]; } - for(; i < WEPKEYSTORE; i++) { + for(; i < WEPSTRONGKEYSTORE; i++) { keys[i] = 0; } return; @@ -103,7 +104,7 @@ wep_keygen40(char *str, u_char *keys) } void -wep_keyprint(u_char *keys) +wep_keyprint40(u_char *keys) { int i; char sepchar; @@ -115,10 +116,22 @@ wep_keyprint(u_char *keys) return; } +void +wep_keyprint128(u_char *keys) +{ + int i; + char sepchar; + + for(i = 0; i < WEPSTRONGKEYSTORE; i++) { + sepchar = (i % WEPSTRONGKEYSIZE == WEPSTRONGKEYSIZE - 1) ? '\n' : ':'; + printf("%02x%c", keys[i], sepchar); + } + return; +} void usage(char *prog) { - printf("Usage: %s [-s] keystring\n", prog); + printf("Usage: %s keystring [-s || 5 || 13]\n", prog); exit(1); } @@ -126,6 +139,7 @@ int main(int argc, char **argv) { u_char keys[WEPKEYSTORE]; + u_char strongkeys[WEPSTRONGKEYSTORE]; char *prog, *genstr; int strong, ch; @@ -143,15 +157,27 @@ main(int argc, char **argv) argc -= optind; argv += optind; + if(argc==2) + if(!strcmp(argv[1],"13")) + { + strong++; + argc--; + } + else argc--; + if(argc != 1) usage(prog); genstr = argv[0]; if(strong) - wep_keygen128(genstr, keys); + { + wep_keygen128(genstr, strongkeys); + wep_keyprint128(strongkeys); + } else + { wep_keygen40(genstr, keys); - - wep_keyprint(keys); + wep_keyprint40(keys); + } return 0; }