]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
SAE: Set pwd-value length based on prime length
authorJouni Malinen <j@w1.fi>
Tue, 1 Jan 2013 10:45:18 +0000 (12:45 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 12 Jan 2013 15:51:53 +0000 (17:51 +0200)
The buffer is set based on maximum group prime length, but pwd-value
needs to be correct length for the negotiated group.

Signed-hostap: Jouni Malinen <j@w1.fi>

src/common/sae.c

index 0bd89547145cefe4f4c421070760948474d764a8..ff26e9e3138fca2825537c9718a11eedb84b8387 100644 (file)
@@ -129,16 +129,16 @@ static int sae_test_pwd_seed(struct sae_data *sae, const u8 *pwd_seed,
 
        /* pwd-value = KDF-z(pwd-seed, "SAE Hunting and Pecking", p) */
        sha256_prf(pwd_seed, SHA256_MAC_LEN, "SAE Hunting and Pecking",
-                  prime, sae->prime_len, pwd_value, sizeof(pwd_value));
+                  prime, sae->prime_len, pwd_value, sae->prime_len);
        wpa_hexdump_key(MSG_DEBUG, "SAE: pwd-value",
-                       pwd_value, sizeof(pwd_value));
+                       pwd_value, sae->prime_len);
 
        if (os_memcmp(pwd_value, prime, sae->prime_len) >= 0)
                return 0;
 
        y_bit = pwd_seed[SHA256_MAC_LEN - 1] & 0x01;
 
-       x = crypto_bignum_init_set(pwd_value, sizeof(pwd_value));
+       x = crypto_bignum_init_set(pwd_value, sae->prime_len);
        if (x == NULL)
                return -1;
        if (crypto_ec_point_solve_y_coord(sae->ec, pwe, x, y_bit) < 0) {