EAP-GPSK: Check HMAC-SHA256 result in GKDF and MIC

hmac_sha256() and hmac_sha256_vector() return a result code now, so use
that return value to terminate HMAC-SHA256-based GKDF/MIC similarly to
what was already done with the CMAC-based GKDF/MIC.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2015-10-17 20:19:52 +03:00
parent 2ab957afc5
commit 0504d2da12

View File

@ -92,7 +92,8 @@ static int eap_gpsk_gkdf_sha256(const u8 *psk /* Y */,
n = (len + hashlen - 1) / hashlen; n = (len + hashlen - 1) / hashlen;
for (i = 1; i <= n; i++) { for (i = 1; i <= n; i++) {
WPA_PUT_BE16(ibuf, i); WPA_PUT_BE16(ibuf, i);
hmac_sha256_vector(psk, 32, 2, addr, vlen, hash); if (hmac_sha256_vector(psk, 32, 2, addr, vlen, hash))
return -1;
clen = left > hashlen ? hashlen : left; clen = left > hashlen ? hashlen : left;
os_memcpy(opos, hash, clen); os_memcpy(opos, hash, clen);
opos += clen; opos += clen;
@ -534,8 +535,7 @@ int eap_gpsk_compute_mic(const u8 *sk, size_t sk_len, int vendor,
break; break;
#ifdef EAP_GPSK_SHA256 #ifdef EAP_GPSK_SHA256
case EAP_GPSK_CIPHER_SHA256: case EAP_GPSK_CIPHER_SHA256:
hmac_sha256(sk, sk_len, data, len, mic); ret = hmac_sha256(sk, sk_len, data, len, mic);
ret = 0;
break; break;
#endif /* EAP_GPSK_SHA256 */ #endif /* EAP_GPSK_SHA256 */
default: default:
@ -545,5 +545,8 @@ int eap_gpsk_compute_mic(const u8 *sk, size_t sk_len, int vendor,
break; break;
} }
if (ret)
wpa_printf(MSG_DEBUG, "EAP-GPSK: Could not compute MIC");
return ret; return ret;
} }