aboutsummaryrefslogtreecommitdiffstats
path: root/src/eap_server
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2015-03-30 13:16:51 -0700
committerDmitry Shmidt <dimitrysh@google.com>2015-03-30 14:01:30 -0700
commit912c6ecf72fb2c84fbf17dbd0666492778dbd9fc (patch)
treec82fafae71f2017e211192fd70bfe3c13712676a /src/eap_server
parentdda10c2afb8378747491ea5d329a1de635d6d58e (diff)
downloadandroid_external_wpa_supplicant_8-912c6ecf72fb2c84fbf17dbd0666492778dbd9fc.tar.gz
android_external_wpa_supplicant_8-912c6ecf72fb2c84fbf17dbd0666492778dbd9fc.tar.bz2
android_external_wpa_supplicant_8-912c6ecf72fb2c84fbf17dbd0666492778dbd9fc.zip
Cumulative patch from commit 989e784601887734e696b3fac0ad6d101badd7ea
989e784 P2P: Optimize scan frequencies list when re-joining a persistent group 154a1d5 hostapd: Fix some compilation errors ce18c10 Add support for CONFIG_NO_ROAMING to Makefile 65a7b21 OpenSSL: Implement AES-128 CBC using EVP API 22ba05c Explicitly clear temporary stack buffers in tls_prf_sha1_md5() 940a4db Explicitly clear temporary stack buffer in sha1_t_prf() eccca10 Explicitly clear temporary stack buffer in hmac_sha256_kdf() e8e365d wext: Add support for renamed Host AP driver ifname fc48d33 Improve error messages related to EAP DB c469d62 Error out if user configures SQLite DB without CONFIG_SQLITE 270427e HS 2.0R2: Add more logging for hs20-osu-client icon matching 8e31cd2 OSU server: Improve logging for SPP schema validation failures 23dd15a http-curl: Improve log messages e7d285c OSU server: Print out signup ID if there is some problem with it 1b45006 HS 2.0R2: Remove unused argument identifier from hs20-osu-client 2e7a228 HS 2.0R2: Allow custom libcurl linkage for hs20-osu-client a52410c Allow PSK/passphrase to be set only when needed 3e808b8 EAP-pwd peer: Add support for hashed password e4840b3 EAP-pwd server: Add support for hashed password 2bd2ed2 EAP-pwd: Mark helper function arguments const when appropriate 9ccc10f wpa_cli: Use tab as only word separator for networks 5a997b2 wpa_cli: Completion routine for dup_network command 1ca6c0f wpa_cli: Completion for remove, select, disable, enable network 7e6cc90 wpa_cli: Implement completion routine for get_network/set_network 32a097f wpa_cli: Keep track of available networks 94dc0e9 wpa_cli: Allow tab as alternative separator for cli_txt_list words efa232f Add support for virtual interface creation/deletion ba87329 wpa_cli: Use .wpa_cli_history under Android 0f8385e Show OSEN key management properly in scan results e7b4cd0 wpa_gui: Add tray icon based signal strength meter 54d3dc9 AP: Unset HT capabilities for an HT association request without WMM Change-Id: I71425b8e20fe1dfdb777592257dc4e4063da8d85 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/eap_server')
-rw-r--r--src/eap_server/eap_server_pwd.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/src/eap_server/eap_server_pwd.c b/src/eap_server/eap_server_pwd.c
index 943af0d1..66bd5d2e 100644
--- a/src/eap_server/eap_server_pwd.c
+++ b/src/eap_server/eap_server_pwd.c
@@ -10,6 +10,7 @@
#include "common.h"
#include "crypto/sha256.h"
+#include "crypto/ms_funcs.h"
#include "eap_server/eap_i.h"
#include "eap_common/eap_pwd_common.h"
@@ -24,6 +25,7 @@ struct eap_pwd_data {
size_t id_server_len;
u8 *password;
size_t password_len;
+ int password_hash;
u32 token;
u16 group_num;
EAP_PWD_group *grp;
@@ -112,6 +114,7 @@ static void * eap_pwd_init(struct eap_sm *sm)
}
data->password_len = sm->user->password_len;
os_memcpy(data->password, sm->user->password, data->password_len);
+ data->password_hash = sm->user->password_hash;
data->bnctx = BN_CTX_new();
if (data->bnctx == NULL) {
@@ -181,7 +184,8 @@ static void eap_pwd_build_id_req(struct eap_sm *sm, struct eap_pwd_data *data,
wpabuf_put_u8(data->outbuf, EAP_PWD_DEFAULT_RAND_FUNC);
wpabuf_put_u8(data->outbuf, EAP_PWD_DEFAULT_PRF);
wpabuf_put_data(data->outbuf, &data->token, sizeof(data->token));
- wpabuf_put_u8(data->outbuf, EAP_PWD_PREP_NONE);
+ wpabuf_put_u8(data->outbuf, data->password_hash ? EAP_PWD_PREP_MS :
+ EAP_PWD_PREP_NONE);
wpabuf_put_data(data->outbuf, data->id_server, data->id_server_len);
}
@@ -579,6 +583,10 @@ static void eap_pwd_process_id_resp(struct eap_sm *sm,
const u8 *payload, size_t payload_len)
{
struct eap_pwd_id *id;
+ const u8 *password;
+ size_t password_len;
+ u8 pwhashhash[16];
+ int res;
if (payload_len < sizeof(struct eap_pwd_id)) {
wpa_printf(MSG_INFO, "EAP-pwd: Invalid ID response");
@@ -610,11 +618,25 @@ static void eap_pwd_process_id_resp(struct eap_sm *sm,
"group");
return;
}
- if (compute_password_element(data->grp, data->group_num,
- data->password, data->password_len,
- data->id_server, data->id_server_len,
- data->id_peer, data->id_peer_len,
- (u8 *) &data->token)) {
+
+ if (data->password_hash) {
+ res = hash_nt_password_hash(data->password, pwhashhash);
+ if (res)
+ return;
+ password = pwhashhash;
+ password_len = sizeof(pwhashhash);
+ } else {
+ password = data->password;
+ password_len = data->password_len;
+ }
+
+ res = compute_password_element(data->grp, data->group_num,
+ password, password_len,
+ data->id_server, data->id_server_len,
+ data->id_peer, data->id_peer_len,
+ (u8 *) &data->token);
+ os_memset(pwhashhash, 0, sizeof(pwhashhash));
+ if (res) {
wpa_printf(MSG_INFO, "EAP-PWD (server): unable to compute "
"PWE");
return;