Home | History | Annotate | Download | only in wpa_supplicant
      1 /*
      2  * nfc_pw_token - Tool for building NFC password tokens for WPS
      3  * Copyright (c) 2012, Jouni Malinen <j (at) w1.fi>
      4  *
      5  * This software may be distributed under the terms of the BSD license.
      6  * See README for more details.
      7  */
      8 
      9 #include "includes.h"
     10 
     11 #include "utils/common.h"
     12 #include "crypto/random.h"
     13 #include "wpa_supplicant_i.h"
     14 #include "config.h"
     15 #include "wps_supplicant.h"
     16 
     17 
     18 static void print_bin(const char *title, const struct wpabuf *buf)
     19 {
     20 	size_t i, len;
     21 	const u8 *pos;
     22 
     23 	if (buf == NULL)
     24 		return;
     25 
     26 	printf("%s=", title);
     27 
     28 	pos = wpabuf_head(buf);
     29 	len = wpabuf_len(buf);
     30 	for (i = 0; i < len; i++)
     31 		printf("%02X", *pos++);
     32 
     33 	printf("\n");
     34 }
     35 
     36 
     37 int main(int argc, char *argv[])
     38 {
     39 	struct wpa_supplicant wpa_s;
     40 	int ret = -1;
     41 	struct wpabuf *buf = NULL, *ndef = NULL;
     42 	char txt[1000];
     43 
     44 	if (os_program_init())
     45 		return -1;
     46 	random_init(NULL);
     47 
     48 	os_memset(&wpa_s, 0, sizeof(wpa_s));
     49 	wpa_s.conf = os_zalloc(sizeof(*wpa_s.conf));
     50 	if (wpa_s.conf == NULL)
     51 		goto fail;
     52 
     53 	buf = wpas_wps_nfc_token(&wpa_s, 0);
     54 	if (buf == NULL)
     55 		goto fail;
     56 
     57 	ndef = ndef_build_wifi(buf);
     58 	if (ndef == NULL)
     59 		goto fail;
     60 
     61 	wpa_snprintf_hex_uppercase(txt, sizeof(txt), wpabuf_head(buf),
     62 				   wpabuf_len(buf));
     63 	printf("#WPS=%s\n", txt);
     64 
     65 	wpa_snprintf_hex_uppercase(txt, sizeof(txt), wpabuf_head(ndef),
     66 				   wpabuf_len(ndef));
     67 	printf("#NDEF=%s\n", txt);
     68 
     69 	printf("wps_nfc_dev_pw_id=%d\n", wpa_s.conf->wps_nfc_dev_pw_id);
     70 	print_bin("wps_nfc_dh_pubkey", wpa_s.conf->wps_nfc_dh_pubkey);
     71 	print_bin("wps_nfc_dh_privkey", wpa_s.conf->wps_nfc_dh_privkey);
     72 	print_bin("wps_nfc_dev_pw", wpa_s.conf->wps_nfc_dev_pw);
     73 
     74 	ret = 0;
     75 fail:
     76 	wpabuf_free(ndef);
     77 	wpabuf_free(buf);
     78 	wpa_config_free(wpa_s.conf);
     79 	random_deinit();
     80 	os_program_deinit();
     81 
     82 	return ret;
     83 }
     84