|
@@ -0,0 +1,83 @@
|
|
|
+/*
|
|
|
+ * nfc_pw_token - Tool for building NFC password tokens for WPS
|
|
|
+ * Copyright (c) 2012, Jouni Malinen <j@w1.fi>
|
|
|
+ *
|
|
|
+ * This software may be distributed under the terms of the BSD license.
|
|
|
+ * See README for more details.
|
|
|
+ */
|
|
|
+
|
|
|
+#include "includes.h"
|
|
|
+
|
|
|
+#include "utils/common.h"
|
|
|
+#include "crypto/random.h"
|
|
|
+#include "wpa_supplicant_i.h"
|
|
|
+#include "config.h"
|
|
|
+#include "wps_supplicant.h"
|
|
|
+
|
|
|
+
|
|
|
+static void print_bin(const char *title, const struct wpabuf *buf)
|
|
|
+{
|
|
|
+ size_t i, len;
|
|
|
+ const u8 *pos;
|
|
|
+
|
|
|
+ if (buf == NULL)
|
|
|
+ return;
|
|
|
+
|
|
|
+ printf("%s=", title);
|
|
|
+
|
|
|
+ pos = wpabuf_head(buf);
|
|
|
+ len = wpabuf_len(buf);
|
|
|
+ for (i = 0; i < len; i++)
|
|
|
+ printf("%02X", *pos++);
|
|
|
+
|
|
|
+ printf("\n");
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int main(int argc, char *argv[])
|
|
|
+{
|
|
|
+ struct wpa_supplicant wpa_s;
|
|
|
+ int ret = -1;
|
|
|
+ struct wpabuf *buf = NULL, *ndef = NULL;
|
|
|
+ char txt[1000];
|
|
|
+
|
|
|
+ if (os_program_init())
|
|
|
+ return -1;
|
|
|
+ random_init(NULL);
|
|
|
+
|
|
|
+ os_memset(&wpa_s, 0, sizeof(wpa_s));
|
|
|
+ wpa_s.conf = os_zalloc(sizeof(*wpa_s.conf));
|
|
|
+ if (wpa_s.conf == NULL)
|
|
|
+ goto fail;
|
|
|
+
|
|
|
+ buf = wpas_wps_nfc_token(&wpa_s, 0);
|
|
|
+ if (buf == NULL)
|
|
|
+ goto fail;
|
|
|
+
|
|
|
+ ndef = ndef_build_wifi(buf);
|
|
|
+ if (ndef == NULL)
|
|
|
+ goto fail;
|
|
|
+
|
|
|
+ wpa_snprintf_hex_uppercase(txt, sizeof(txt), wpabuf_head(buf),
|
|
|
+ wpabuf_len(buf));
|
|
|
+ printf("#WPS=%s\n", txt);
|
|
|
+
|
|
|
+ wpa_snprintf_hex_uppercase(txt, sizeof(txt), wpabuf_head(ndef),
|
|
|
+ wpabuf_len(ndef));
|
|
|
+ printf("#NDEF=%s\n", txt);
|
|
|
+
|
|
|
+ printf("wps_nfc_dev_pw_id=%d\n", wpa_s.conf->wps_nfc_dev_pw_id);
|
|
|
+ print_bin("wps_nfc_dh_pubkey", wpa_s.conf->wps_nfc_dh_pubkey);
|
|
|
+ print_bin("wps_nfc_dh_privkey", wpa_s.conf->wps_nfc_dh_privkey);
|
|
|
+ print_bin("wps_nfc_dev_pw", wpa_s.conf->wps_nfc_dev_pw);
|
|
|
+
|
|
|
+ ret = 0;
|
|
|
+fail:
|
|
|
+ wpabuf_free(ndef);
|
|
|
+ wpabuf_free(buf);
|
|
|
+ wpa_config_free(wpa_s.conf);
|
|
|
+ random_deinit();
|
|
|
+ os_program_deinit();
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|