pmksa_cache_auth.h revision f7e0a9905988e62e4f70fed8b795722abeab719b
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * hostapd - PMKSA cache for IEEE 802.11i RSN
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 2004-2008, 2012, Jouni Malinen <j@w1.fi>
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This software may be distributed under the terms of the BSD license.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See README for more details.
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef PMKSA_CACHE_H
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PMKSA_CACHE_H
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "radius/radius.h"
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * struct rsn_pmksa_cache_entry - PMKSA cache entry
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct rsn_pmksa_cache_entry {
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	struct rsn_pmksa_cache_entry *next, *hnext;
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u8 pmkid[PMKID_LEN];
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u8 pmk[PMK_LEN];
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	size_t pmk_len;
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	os_time_t expiration;
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	int akmp; /* WPA_KEY_MGMT_* */
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u8 spa[ETH_ALEN];
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u8 *identity;
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	size_t identity_len;
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	struct wpabuf *cui;
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	struct radius_class_data radius_class;
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u8 eap_type_authsrv;
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	int vlan_id;
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	int opportunistic;
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct rsn_pmksa_cache;
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct rsn_pmksa_cache *
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpmksa_cache_auth_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry,
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org				      void *ctx), void *ctx);
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid pmksa_cache_auth_deinit(struct rsn_pmksa_cache *pmksa);
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct rsn_pmksa_cache_entry *
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpmksa_cache_auth_get(struct rsn_pmksa_cache *pmksa,
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		     const u8 *spa, const u8 *pmkid);
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct rsn_pmksa_cache_entry * pmksa_cache_get_okc(
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	struct rsn_pmksa_cache *pmksa, const u8 *spa, const u8 *aa,
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	const u8 *pmkid);
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct rsn_pmksa_cache_entry *
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa,
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		     const u8 *pmk, size_t pmk_len,
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		     const u8 *aa, const u8 *spa, int session_timeout,
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		     struct eapol_state_machine *eapol, int akmp);
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct rsn_pmksa_cache_entry *
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpmksa_cache_add_okc(struct rsn_pmksa_cache *pmksa,
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		    const struct rsn_pmksa_cache_entry *old_entry,
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		    const u8 *aa, const u8 *pmkid);
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid pmksa_cache_to_eapol_data(struct rsn_pmksa_cache_entry *entry,
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			       struct eapol_state_machine *eapol);
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa,
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			    struct rsn_pmksa_cache_entry *entry);
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* PMKSA_CACHE_H */
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org