wpa_passphrase.c revision 302408
1254885Sdumbbell/* 2254885Sdumbbell * WPA Supplicant - ASCII passphrase to WPA PSK tool 3254885Sdumbbell * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi> 4254885Sdumbbell * 5254885Sdumbbell * This software may be distributed under the terms of the BSD license. 6254885Sdumbbell * See README for more details. 7254885Sdumbbell */ 8254885Sdumbbell 9254885Sdumbbell#include "includes.h" 10254885Sdumbbell 11254885Sdumbbell#include "common.h" 12254885Sdumbbell#include "crypto/sha1.h" 13254885Sdumbbell 14254885Sdumbbell 15254885Sdumbbellint main(int argc, char *argv[]) 16254885Sdumbbell{ 17254885Sdumbbell unsigned char psk[32]; 18254885Sdumbbell int i; 19254885Sdumbbell char *ssid, *passphrase, buf[64], *pos; 20254885Sdumbbell 21254885Sdumbbell if (argc < 2) { 22254885Sdumbbell printf("usage: wpa_passphrase <ssid> [passphrase]\n" 23254885Sdumbbell "\nIf passphrase is left out, it will be read from " 24254885Sdumbbell "stdin\n"); 25254885Sdumbbell return 1; 26254885Sdumbbell } 27254885Sdumbbell 28254885Sdumbbell ssid = argv[1]; 29254885Sdumbbell 30254885Sdumbbell if (argc > 2) { 31254885Sdumbbell passphrase = argv[2]; 32254885Sdumbbell } else { 33254885Sdumbbell printf("# reading passphrase from stdin\n"); 34254885Sdumbbell if (fgets(buf, sizeof(buf), stdin) == NULL) { 35254885Sdumbbell printf("Failed to read passphrase\n"); 36254885Sdumbbell return 1; 37254885Sdumbbell } 38254885Sdumbbell buf[sizeof(buf) - 1] = '\0'; 39254885Sdumbbell pos = buf; 40254885Sdumbbell while (*pos != '\0') { 41254885Sdumbbell if (*pos == '\r' || *pos == '\n') { 42254885Sdumbbell *pos = '\0'; 43254885Sdumbbell break; 44254885Sdumbbell } 45254885Sdumbbell pos++; 46254885Sdumbbell } 47254885Sdumbbell passphrase = buf; 48254885Sdumbbell } 49254885Sdumbbell 50254885Sdumbbell if (os_strlen(passphrase) < 8 || os_strlen(passphrase) > 63) { 51254885Sdumbbell printf("Passphrase must be 8..63 characters\n"); 52254885Sdumbbell return 1; 53254885Sdumbbell } 54254885Sdumbbell 55254885Sdumbbell pbkdf2_sha1(passphrase, (u8 *) ssid, os_strlen(ssid), 4096, psk, 32); 56254885Sdumbbell 57254885Sdumbbell printf("network={\n"); 58254885Sdumbbell printf("\tssid=\"%s\"\n", ssid); 59254885Sdumbbell printf("\t#psk=\"%s\"\n", passphrase); 60254885Sdumbbell printf("\tpsk="); 61254885Sdumbbell for (i = 0; i < 32; i++) 62254885Sdumbbell printf("%02x", psk[i]); 63254885Sdumbbell printf("\n"); 64254885Sdumbbell printf("}\n"); 65254885Sdumbbell 66254885Sdumbbell return 0; 67254885Sdumbbell} 68254885Sdumbbell