/*
 * 16/11/2010 15:35
 * @author Mr Bertelle Nicolas, Nicoweb, 2010
 * wifikey.c
 */

#include <stdio.h>
#include <time.h>
#include <string.h>

//
#ifndef PROTOTYPES
#define PROTOTYPES 0
#endif

//
#if PROTOTYPES
#define PROTO_LIST(list) list
#else
#define PROTO_LIST(list) ()
#endif

char WEP[16] = "0123456789ABCDEF";
int WEP_RAND_MAX = 15;
char WPA[85] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-;.?,:!%*^&~{}()|@=+<>";
int WPA_RAND_MAX = 84;

void setKeyFormat PROTO_LIST ((char *));
void setKeyLength PROTO_LIST ((int));

char *keyformat[1] = {"wpa"};
int isKeyformatSet = 0;
int wepkeyMaxlength = 58;
int keylength[1] = {63};
int isKeylengthSet = 0;
char key[256] = "";

/*
 * main ()
 */
int main (int argc, char *argv[])
{
  int i;

  if (argc > 1)
  for (i = 1; i < argc; i++){
    if ((strcmp(argv[i],"-wpa")==0||strcmp(argv[i],"-wep")==0)&&isKeyformatSet==0) {
     setKeyFormat(argv[i]+1);
     isKeyformatSet++;
    }
    else if (argv[i]>0&&isKeylengthSet==0) {
     setKeyLength(argv[i]);
     isKeylengthSet++;
    }
  } // sinon utilisation des valeurs par défaut
  
  // wep.fix
  if(isKeylengthSet==0 && strcmp(keyformat[0],"wep")==0) keylength[0] = wepkeyMaxlength;
  
  //
  getKey();
  
  //
  printf("%s\n",key);
  
  return (0);
}

/*
 * getKey ()
 */
int getKey (){
    int i; int nombre;
    char mychar;
    char chars[] = "";
    //
    srand(time(NULL));
    for(i=0;i<keylength[0];i++){
     //
     if(strcmp(keyformat[0],"wpa")==0) nombre = rand()%WPA_RAND_MAX;
     else nombre = rand()%WEP_RAND_MAX;
     //
     if(strcmp(keyformat[0],"wpa")==0) key[i] = WPA[nombre];
     else key[i] = WEP[nombre];
    } 
    
    return (1);
}

/*
 * setKeyFormat ()
 */
void setKeyFormat (char *mykeyformat){
    keyformat[0] = mykeyformat;
}

/*
 * setKeyLength ()
 */
void setKeyLength (int mykeylength){
    keylength[0] = atoi(mykeylength);
    if(strcmp(keyformat[0],"wep")==0&&keylength[0]>wepkeyMaxlength) keylength[0] = wepkeyMaxlength;
}


