1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- * 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;
- }
|