void pasn_set_responder_pmksa(struct pasn_data *pasn,
struct rsn_pmksa_cache *pmksa);
int pasn_set_pt(struct pasn_data *pasn, struct sae_pt *pt);
+struct rsn_pmksa_cache * pasn_initiator_pmksa_cache_init(void);
+void pasn_initiator_pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa);
+int pasn_initiator_pmksa_cache_add(struct rsn_pmksa_cache *pmksa,
+ const u8 *own_addr, const u8 *bssid, u8 *pmk,
+ size_t pmk_len, u8 *pmkid);
+int pasn_initiator_pmksa_cache_get(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid, u8 *pmkid, u8 *pmk,
+ size_t *pmk_len);
+void pasn_initiator_pmksa_cache_remove(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid);
+void pasn_initiator_pmksa_cache_flush(struct rsn_pmksa_cache *pmksa);
/* Responder */
void pasn_set_noauth(struct pasn_data *pasn, bool noauth);
void pasn_set_custom_pmkid(struct pasn_data *pasn, const u8 *pmkid);
int pasn_set_extra_ies(struct pasn_data *pasn, const u8 *extra_ies,
size_t extra_ies_len);
+struct rsn_pmksa_cache * pasn_responder_pmksa_cache_init(void);
+void pasn_responder_pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa);
+int pasn_responder_pmksa_cache_add(struct rsn_pmksa_cache *pmksa,
+ const u8 *own_addr, const u8 *bssid, u8 *pmk,
+ size_t pmk_len, u8 *pmkid);
+int pasn_responder_pmksa_cache_get(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid, u8 *pmkid, u8 *pmk,
+ size_t *pmk_len);
+void pasn_responder_pmksa_cache_remove(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid);
+void pasn_responder_pmksa_cache_flush(struct rsn_pmksa_cache *pmksa);
int pasn_get_akmp(struct pasn_data *pasn);
int pasn_get_cipher(struct pasn_data *pasn);
#include "pasn_common.h"
+struct rsn_pmksa_cache * pasn_initiator_pmksa_cache_init(void)
+{
+ return pmksa_cache_init(NULL, NULL, NULL, NULL, NULL);
+}
+
+
+void pasn_initiator_pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa)
+{
+ return pmksa_cache_deinit(pmksa);
+}
+
+
+int pasn_initiator_pmksa_cache_add(struct rsn_pmksa_cache *pmksa,
+ const u8 *own_addr, const u8 *bssid, u8 *pmk,
+ size_t pmk_len, u8 *pmkid)
+{
+ if (pmksa_cache_add(pmksa, pmk, pmk_len, pmkid, NULL, 0, bssid,
+ own_addr, NULL, WPA_KEY_MGMT_SAE, 0))
+ return 0;
+ return -1;
+}
+
+
+void pasn_initiator_pmksa_cache_remove(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid)
+{
+ struct rsn_pmksa_cache_entry *entry;
+
+ entry = pmksa_cache_get(pmksa, bssid, NULL, NULL, NULL, 0);
+ if (!entry)
+ return;
+
+ pmksa_cache_remove(pmksa, entry);
+}
+
+
+int pasn_initiator_pmksa_cache_get(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid, u8 *pmkid, u8 *pmk,
+ size_t *pmk_len)
+{
+ struct rsn_pmksa_cache_entry *entry;
+
+ entry = pmksa_cache_get(pmksa, bssid, NULL, NULL, NULL, 0);
+ if (entry) {
+ os_memcpy(pmkid, entry->pmkid, PMKID_LEN);
+ os_memcpy(pmk, entry->pmk, entry->pmk_len);
+ *pmk_len = entry->pmk_len;
+ return 0;
+ }
+ return -1;
+}
+
+
+void pasn_initiator_pmksa_cache_flush(struct rsn_pmksa_cache *pmksa)
+{
+ return pmksa_cache_flush(pmksa, NULL, NULL, 0, false);
+}
+
+
void pasn_set_initiator_pmksa(struct pasn_data *pasn,
struct rsn_pmksa_cache *pmksa)
{
#include "pasn_common.h"
+struct rsn_pmksa_cache * pasn_responder_pmksa_cache_init(void)
+{
+ return pmksa_cache_auth_init(NULL, NULL);
+}
+
+
+void pasn_responder_pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa)
+{
+ return pmksa_cache_auth_deinit(pmksa);
+}
+
+
+int pasn_responder_pmksa_cache_add(struct rsn_pmksa_cache *pmksa,
+ const u8 *own_addr, const u8 *bssid, u8 *pmk,
+ size_t pmk_len, u8 *pmkid)
+{
+ if (pmksa_cache_auth_add(pmksa, pmk, pmk_len, pmkid, NULL, 0, own_addr,
+ bssid, 0, NULL, WPA_KEY_MGMT_SAE))
+ return 0;
+ return -1;
+}
+
+
+int pasn_responder_pmksa_cache_get(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid, u8 *pmkid, u8 *pmk,
+ size_t *pmk_len)
+{
+ struct rsn_pmksa_cache_entry *entry;
+
+ entry = pmksa_cache_auth_get(pmksa, bssid, NULL);
+ if (entry) {
+ os_memcpy(pmkid, entry->pmkid, PMKID_LEN);
+ os_memcpy(pmk, entry->pmk, entry->pmk_len);
+ *pmk_len = entry->pmk_len;
+ return 0;
+ }
+ return -1;
+}
+
+
+void pasn_responder_pmksa_cache_remove(struct rsn_pmksa_cache *pmksa,
+ const u8 *bssid)
+{
+ struct rsn_pmksa_cache_entry *entry;
+
+ entry = pmksa_cache_auth_get(pmksa, bssid, NULL);
+ if (!entry)
+ return;
+
+ pmksa_cache_free_entry(pmksa, entry);
+}
+
+
+void pasn_responder_pmksa_cache_flush(struct rsn_pmksa_cache *pmksa)
+{
+ return pmksa_cache_auth_flush(pmksa);
+}
+
+
void pasn_set_responder_pmksa(struct pasn_data *pasn,
struct rsn_pmksa_cache *pmksa)
{