mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-26 18:59:22 +01:00
eap-pwd: update hkdf_extract usage to cast constants
On some architectures, va_arg was behaving strangely with constant values passed as lengths. Casting any constant lengths to size_t fixes the issue.
This commit is contained in:
parent
b8dd39ded0
commit
bde01b1826
@ -307,7 +307,7 @@ static void eap_pwd_handle_id(struct eap_state *eap,
|
|||||||
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 5, pwd_seed, &token, 4,
|
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 5, pwd_seed, &token, 4,
|
||||||
pwd->identity, strlen(pwd->identity), pkt + 9,
|
pwd->identity, strlen(pwd->identity), pkt + 9,
|
||||||
len - 9, pwd->password, strlen(pwd->password),
|
len - 9, pwd->password, strlen(pwd->password),
|
||||||
&counter, 1);
|
&counter, (size_t) 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pwd-value = KDF(pwd-seed, "EAP-pwd Hunting And Pecking",
|
* pwd-value = KDF(pwd-seed, "EAP-pwd Hunting And Pecking",
|
||||||
@ -509,12 +509,13 @@ static void eap_pwd_handle_confirm(struct eap_state *eap,
|
|||||||
*/
|
*/
|
||||||
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 6, confirm_p, kpx, clen,
|
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 6, confirm_p, kpx, clen,
|
||||||
element_p, plen, scalar_p, clen, element_s,
|
element_p, plen, scalar_p, clen, element_s,
|
||||||
plen, scalar_s, clen, &pwd->ciphersuite, 4);
|
plen, scalar_s, clen, &pwd->ciphersuite,
|
||||||
|
(size_t) 4);
|
||||||
|
|
||||||
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 6, expected_confirm_s, kpx,
|
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 6, expected_confirm_s, kpx,
|
||||||
clen, element_s, plen, scalar_s, clen,
|
clen, element_s, plen, scalar_s, clen,
|
||||||
element_p, plen, scalar_p, clen,
|
element_p, plen, scalar_p, clen,
|
||||||
&pwd->ciphersuite, 4);
|
&pwd->ciphersuite, (size_t) 4);
|
||||||
|
|
||||||
if (memcmp(confirm_s, expected_confirm_s, 32)) {
|
if (memcmp(confirm_s, expected_confirm_s, 32)) {
|
||||||
l_error("Confirm_S did not verify");
|
l_error("Confirm_S did not verify");
|
||||||
@ -528,7 +529,7 @@ static void eap_pwd_handle_confirm(struct eap_state *eap,
|
|||||||
|
|
||||||
/* derive MK = H(kp | Confirm_P | Confirm_S ) */
|
/* derive MK = H(kp | Confirm_P | Confirm_S ) */
|
||||||
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 3, mk, kpx, clen, confirm_p,
|
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 3, mk, kpx, clen, confirm_p,
|
||||||
32, confirm_s, 32);
|
(size_t) 32, confirm_s, (size_t) 32);
|
||||||
|
|
||||||
eap_pwd_send_response(eap, resp, pos - resp);
|
eap_pwd_send_response(eap, resp, pos - resp);
|
||||||
|
|
||||||
@ -536,7 +537,8 @@ static void eap_pwd_handle_confirm(struct eap_state *eap,
|
|||||||
|
|
||||||
session_id[0] = 52;
|
session_id[0] = 52;
|
||||||
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 3, session_id + 1,
|
hkdf_extract(L_CHECKSUM_SHA256, NULL, 0, 3, session_id + 1,
|
||||||
&pwd->ciphersuite, 4, scalar_p, clen, scalar_s, clen);
|
&pwd->ciphersuite, (size_t) 4, scalar_p, clen,
|
||||||
|
scalar_s, clen);
|
||||||
|
|
||||||
kdf(mk, 32, (const char *) session_id, 33, msk_emsk, 128);
|
kdf(mk, 32, (const char *) session_id, 33, msk_emsk, 128);
|
||||||
eap_set_key_material(eap, msk_emsk, 64, msk_emsk + 64, 64, NULL, 0);
|
eap_set_key_material(eap, msk_emsk, 64, msk_emsk + 64, 64, NULL, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user