/*
* wlantest - IEEE 802.11 protocol monitoring and testing tool
- * Copyright (c) 2010, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2010-2011, Jouni Malinen <j@w1.fi>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
"[-p<passphrase>]\n"
" [-I<wired ifname>] [-R<wired pcap file>] "
"[-P<RADIUS shared secret>]\n"
- " [-w<write pcap file>]\n");
+ " [-w<write pcap file>] [-f<MSK/PMK file>]\n");
}
}
+static int add_pmk_file(struct wlantest *wt, const char *pmk_file)
+{
+ FILE *f;
+ u8 pmk[32];
+ char buf[300], *pos;
+ struct wlantest_pmk *p;
+
+ f = fopen(pmk_file, "r");
+ if (f == NULL) {
+ wpa_printf(MSG_ERROR, "Could not open '%s'", pmk_file);
+ return -1;
+ }
+
+ while (fgets(buf, sizeof(buf), f)) {
+ pos = buf;
+ while (*pos && *pos != '\r' && *pos != '\n')
+ pos++;
+ *pos = '\0';
+ if (pos - buf < 2 * 32)
+ continue;
+ if (hexstr2bin(buf, pmk, 32) < 0)
+ continue;
+ p = os_zalloc(sizeof(*p));
+ if (p == NULL)
+ break;
+ os_memcpy(p->pmk, pmk, 32);
+ dl_list_add(&wt->pmk, &p->list);
+ wpa_hexdump(MSG_DEBUG, "Added PMK from file", pmk, 32);
+ }
+
+ fclose(f);
+ return 0;
+}
+
+
int add_wep(struct wlantest *wt, const char *key)
{
struct wlantest_wep *w;
wlantest_init(&wt);
for (;;) {
- c = getopt(argc, argv, "cdhi:I:p:P:qr:R:w:W:");
+ c = getopt(argc, argv, "cdf:hi:I:p:P:qr:R:w:W:");
if (c < 0)
break;
switch (c) {
if (wpa_debug_level > 0)
wpa_debug_level--;
break;
+ case 'f':
+ if (add_pmk_file(&wt, optarg) < 0)
+ return -1;
+ break;
case 'h':
usage();
return 0;