|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|