18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - PMKSA cache for IEEE 802.11i RSN 304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * Copyright (c) 2004-2008, 2012, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef PMKSA_CACHE_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define PMKSA_CACHE_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "radius/radius.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct rsn_pmksa_cache_entry - PMKSA cache entry 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry { 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache_entry *next, *hnext; 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmkid[PMKID_LEN]; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk[PMK_LEN]; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pmk_len; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt os_time_t expiration; 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int akmp; /* WPA_KEY_MGMT_* */ 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 spa[ETH_ALEN]; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *identity; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t identity_len; 2804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *cui; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct radius_class_data radius_class; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 eap_type_authsrv; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int vlan_id; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int opportunistic; 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache * 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *ctx), void *ctx); 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid pmksa_cache_auth_deinit(struct rsn_pmksa_cache *pmksa); 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_get(struct rsn_pmksa_cache *pmksa, 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *spa, const u8 *pmkid); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * pmksa_cache_get_okc( 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache *pmksa, const u8 *spa, const u8 *aa, 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pmkid); 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa, 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pmk, size_t pmk_len, 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *aa, const u8 *spa, int session_timeout, 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_state_machine *eapol, int akmp); 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_add_okc(struct rsn_pmksa_cache *pmksa, 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct rsn_pmksa_cache_entry *old_entry, 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *aa, const u8 *pmkid); 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid pmksa_cache_to_eapol_data(struct rsn_pmksa_cache_entry *entry, 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_state_machine *eapol); 58f7e0a9905988e62e4f70fed8b795722abeab719bDmitry Shmidtvoid pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa, 59f7e0a9905988e62e4f70fed8b795722abeab719bDmitry Shmidt struct rsn_pmksa_cache_entry *entry); 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* PMKSA_CACHE_H */ 62