int hostapd_setup_wpa_psk(struct hostapd_bss_config *conf) { struct hostapd_ssid *ssid = &conf->ssid; if (ssid->wpa_passphrase != NULL) { if (ssid->wpa_psk != NULL) { wpa_printf(MSG_DEBUG, "Using pre-configured WPA PSK " "instead of passphrase"); } else { wpa_printf(MSG_DEBUG, "Deriving WPA PSK based on " "passphrase"); if (hostapd_derive_psk(ssid) < 0) return -1; } ssid->wpa_psk->group = 1; } if (ssid->wpa_psk_file) { if (hostapd_config_read_wpa_psk(ssid->wpa_psk_file, &conf->ssid)) return -1; } return 0; }
int hostapd_setup_wpa_psk(struct hostapd_config *conf) { if (conf->wpa_passphrase != NULL) { if (conf->wpa_psk != NULL) { printf("Warning: both WPA PSK and passphrase set. " "Using passphrase.\n"); free(conf->wpa_psk); } conf->wpa_psk = malloc(sizeof(struct hostapd_wpa_psk)); if (conf->wpa_psk == NULL) { printf("Unable to alloc space for PSK\n"); return -1; } wpa_hexdump_ascii(MSG_DEBUG, "SSID", (u8 *) conf->ssid, conf->ssid_len); wpa_hexdump_ascii(MSG_DEBUG, "PSK (ASCII passphrase)", (u8 *) conf->wpa_passphrase, strlen(conf->wpa_passphrase)); memset(conf->wpa_psk, 0, sizeof(struct hostapd_wpa_psk)); pbkdf2_sha1(conf->wpa_passphrase, conf->ssid, conf->ssid_len, 4096, conf->wpa_psk->psk, PMK_LEN); wpa_hexdump(MSG_DEBUG, "PSK (from passphrase)", conf->wpa_psk->psk, PMK_LEN); conf->wpa_psk->group = 1; memset(conf->wpa_passphrase, 0, strlen(conf->wpa_passphrase)); free(conf->wpa_passphrase); conf->wpa_passphrase = 0; } if (conf->wpa_psk_file) { if (hostapd_config_read_wpa_psk(conf->wpa_psk_file, conf)) return -1; free(conf->wpa_psk_file); conf->wpa_psk_file = NULL; } return 0; }