00001 00016 #include <stdio.h> 00017 #include <string.h> 00018 00019 #include "common.h" 00020 #include "sha1.h" 00021 00022 00023 int main(int argc, char *argv[]) 00024 { 00025 unsigned char psk[32]; 00026 int i; 00027 char *ssid, *passphrase, buf[64], *pos; 00028 00029 if (argc < 2) { 00030 printf("usage: wpa_passphrase <ssid> [passphrase]\n" 00031 "\nIf passphrase is left out, it will be read from " 00032 "stdin\n"); 00033 return 1; 00034 } 00035 00036 ssid = argv[1]; 00037 00038 if (argc > 2) { 00039 passphrase = argv[2]; 00040 } else { 00041 printf("# reading passphrase from stdin\n"); 00042 if (fgets(buf, sizeof(buf), stdin) == NULL) { 00043 printf("Failed to read passphrase\n"); 00044 return 1; 00045 } 00046 buf[sizeof(buf) - 1] = '\0'; 00047 pos = buf; 00048 while (*pos != '\0') { 00049 if (*pos == '\r' || *pos == '\n') { 00050 *pos = '\0'; 00051 break; 00052 } 00053 pos++; 00054 } 00055 passphrase = buf; 00056 } 00057 00058 if (strlen(passphrase) < 8 || strlen(passphrase) > 63) { 00059 printf("Passphrase must be 8..63 characters\n"); 00060 return 1; 00061 } 00062 00063 pbkdf2_sha1(passphrase, ssid, strlen(ssid), 4096, psk, 32); 00064 00065 printf("network={\n"); 00066 printf("\tssid=\"%s\"\n", ssid); 00067 printf("\t#psk=\"%s\"\n", passphrase); 00068 printf("\tpsk="); 00069 for (i = 0; i < 32; i++) 00070 printf("%02x", psk[i]); 00071 printf("\n"); 00072 printf("}\n"); 00073 00074 return 0; 00075 } 00076