|
@@ -828,6 +828,8 @@ static u16 sae_parse_commit_element_ecc(struct sae_data *sae, const u8 *pos,
|
|
|
static u16 sae_parse_commit_element_ffc(struct sae_data *sae, const u8 *pos,
|
|
|
const u8 *end)
|
|
|
{
|
|
|
+ struct crypto_bignum *res;
|
|
|
+
|
|
|
if (pos + sae->tmp->prime_len > end) {
|
|
|
wpa_printf(MSG_DEBUG, "SAE: Not enough data for "
|
|
|
"commit-element");
|
|
@@ -849,6 +851,18 @@ static u16 sae_parse_commit_element_ffc(struct sae_data *sae, const u8 *pos,
|
|
|
return WLAN_STATUS_UNSPECIFIED_FAILURE;
|
|
|
}
|
|
|
|
|
|
+ /* scalar-op(r, ELEMENT) = 1 modulo p */
|
|
|
+ res = crypto_bignum_init();
|
|
|
+ if (res == NULL ||
|
|
|
+ crypto_bignum_exptmod(sae->tmp->peer_commit_element_ffc,
|
|
|
+ sae->tmp->order, sae->tmp->prime, res) < 0 ||
|
|
|
+ !crypto_bignum_is_one(res)) {
|
|
|
+ wpa_printf(MSG_DEBUG, "SAE: Invalid peer element (scalar-op)");
|
|
|
+ crypto_bignum_deinit(res, 0);
|
|
|
+ return WLAN_STATUS_UNSPECIFIED_FAILURE;
|
|
|
+ }
|
|
|
+ crypto_bignum_deinit(res, 0);
|
|
|
+
|
|
|
return WLAN_STATUS_SUCCESS;
|
|
|
}
|
|
|
|