wpabuf_len(pasn->secret),
pasn_get_ptk(sta->pasn), pasn_get_akmp(sta->pasn),
pasn_get_cipher(sta->pasn), sta->pasn->kdk_len,
- sta->pasn->kek_len);
+ sta->pasn->kek_len, &sta->pasn->hash_alg);
if (ret) {
wpa_printf(MSG_DEBUG, "PASN: FILS: Failed to derive PTK");
goto fail;
};
struct wpa_ptk ptk;
int ret;
+ enum rsn_hash_alg hash_alg;
ret = pasn_pmk_to_ptk(pmk, sizeof(pmk),
spa_addr, bssid,
dhss, sizeof(dhss),
&ptk, WPA_KEY_MGMT_PASN, WPA_CIPHER_CCMP,
- WPA_KDK_MAX_LEN, 0);
+ WPA_KDK_MAX_LEN, 0, &hash_alg);
if (ret)
return ret;
* @cipher: Negotiated pairwise cipher
* @kdk_len: the length in octets that should be derived for HTLK. Can be zero.
* @kek_len: The length in octets that should be derived for KEK. Can be zero.
+ * @alg: Output variable for indicating the selected hash algorithm
* Returns: 0 on success, -1 on failure
*/
int pasn_pmk_to_ptk(const u8 *pmk, size_t pmk_len,
const u8 *spa, const u8 *bssid,
const u8 *dhss, size_t dhss_len,
struct wpa_ptk *ptk, int akmp, int cipher,
- size_t kdk_len, size_t kek_len)
+ size_t kdk_len, size_t kek_len, enum rsn_hash_alg *alg)
{
u8 tmp[WPA_KCK_MAX_LEN + WPA_KEK_MAX_LEN + WPA_TK_MAX_LEN +
WPA_KDK_MAX_LEN];
if (ptk_len > sizeof(tmp))
goto err;
+ *alg = pasn_use_sha384(akmp, cipher) ? RSN_HASH_SHA384 :
+ RSN_HASH_SHA256;
+
if (pasn_use_sha384(akmp, cipher)) {
wpa_printf(MSG_DEBUG, "PASN: PTK derivation using SHA384");
#define OWE_DH_GROUP 19
+enum rsn_hash_alg {
+ RSN_HASH_SHA256,
+ RSN_HASH_SHA384,
+ RSN_HASH_SHA512,
+};
+
#ifdef CONFIG_NO_TKIP
#define WPA_ALLOWED_PAIRWISE_CIPHERS \
(WPA_CIPHER_CCMP | WPA_CIPHER_GCMP | WPA_CIPHER_NONE | \
const u8 *spa, const u8 *bssid,
const u8 *dhss, size_t dhss_len,
struct wpa_ptk *ptk, int akmp, int cipher,
- size_t kdk_len, size_t kek_len);
+ size_t kdk_len, size_t kek_len, enum rsn_hash_alg *alg);
u8 pasn_mic_len(int akmp, int cipher);
size_t pmk_len;
u8 pmk[PMK_LEN_MAX];
bool using_pmksa;
+ enum rsn_hash_alg hash_alg;
u8 hash[SHA384_MAC_LEN];
pasn->own_addr, pasn->peer_addr,
wpabuf_head(secret), wpabuf_len(secret),
&pasn->ptk, pasn->akmp, pasn->cipher,
- pasn->kdk_len, pasn->kek_len);
+ pasn->kdk_len, pasn->kek_len, &pasn->hash_alg);
if (ret) {
wpa_printf(MSG_DEBUG, "PASN: Failed to derive PTK");
goto fail;
ret = pasn_pmk_to_ptk(pmk, pmk_len, peer_addr, own_addr,
wpabuf_head(secret), wpabuf_len(secret),
&pasn->ptk, pasn->akmp,
- pasn->cipher, pasn->kdk_len, pasn->kek_len);
+ pasn->cipher, pasn->kdk_len, pasn->kek_len,
+ &pasn->hash_alg);
if (ret) {
wpa_printf(MSG_DEBUG, "PASN: Failed to derive PTK");
return -1;