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