4022ffc5db
PTK is stored in the PTKSA cache following a successful PASN handshake, however AKMP is removed upon a WPA PASN reset. The PASN handshake is used in the Wi-Fi Aware R4 specification to define the pairing setup process. KDK is used to generate a new set of keys, while AKMP is required for key derivation for pairing. So, keep AKMP in the PTKSA cache. Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
88 lines
2.1 KiB
C
88 lines
2.1 KiB
C
/*
|
|
* RSN PTKSA cache interface
|
|
*
|
|
* Copyright (C) 2019 Intel Corporation
|
|
*
|
|
* This software may be distributed under the terms of the BSD license.
|
|
* See README for more details.
|
|
*/
|
|
|
|
#ifndef PTKSA_CACHE_H
|
|
#define PTKSA_CACHE_H
|
|
|
|
#include "wpa_common.h"
|
|
#include "defs.h"
|
|
#include "list.h"
|
|
|
|
/**
|
|
* struct ptksa_cache_entry - PTKSA cache entry
|
|
*/
|
|
struct ptksa_cache_entry {
|
|
struct dl_list list;
|
|
struct wpa_ptk ptk;
|
|
os_time_t expiration;
|
|
u32 cipher;
|
|
u8 addr[ETH_ALEN];
|
|
u8 own_addr[ETH_ALEN];
|
|
void (*cb)(struct ptksa_cache_entry *e);
|
|
void *ctx;
|
|
u32 akmp;
|
|
};
|
|
|
|
#ifdef CONFIG_PTKSA_CACHE
|
|
|
|
struct ptksa_cache;
|
|
|
|
struct ptksa_cache * ptksa_cache_init(void);
|
|
void ptksa_cache_deinit(struct ptksa_cache *ptksa);
|
|
struct ptksa_cache_entry * ptksa_cache_get(struct ptksa_cache *ptksa,
|
|
const u8 *addr, u32 cipher);
|
|
int ptksa_cache_list(struct ptksa_cache *ptksa, char *buf, size_t len);
|
|
struct ptksa_cache_entry * ptksa_cache_add(struct ptksa_cache *ptksa,
|
|
const u8 *own_addr,
|
|
const u8 *addr, u32 cipher,
|
|
u32 life_time,
|
|
const struct wpa_ptk *ptk,
|
|
void (*cb)
|
|
(struct ptksa_cache_entry *e),
|
|
void *ctx, u32 akmp);
|
|
void ptksa_cache_flush(struct ptksa_cache *ptksa, const u8 *addr, u32 cipher);
|
|
|
|
#else /* CONFIG_PTKSA_CACHE */
|
|
|
|
static inline struct ptksa_cache * ptksa_cache_init(void)
|
|
{
|
|
return (struct ptksa_cache *) 1;
|
|
}
|
|
|
|
static inline void ptksa_cache_deinit(struct ptksa_cache *ptksa)
|
|
{
|
|
}
|
|
|
|
static inline struct ptksa_cache_entry *
|
|
ptksa_cache_get(struct ptksa_cache *ptksa, const u8 *addr, u32 cipher)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline int ptksa_cache_list(struct ptksa_cache *ptksa,
|
|
char *buf, size_t len)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
static inline struct ptksa_cache_entry *
|
|
ptksa_cache_add(struct ptksa_cache *ptksa, const u8 *own_addr, const u8 *addr,
|
|
u32 cipher, u32 life_time, const struct wpa_ptk *ptk,
|
|
void (*cb)(struct ptksa_cache_entry *e), void *ctx, u32 akmp)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline void ptksa_cache_flush(struct ptksa_cache *ptksa,
|
|
const u8 *addr, u32 cipher)
|
|
{
|
|
}
|
|
|
|
#endif /* CONFIG_PTKSA_CACHE */
|
|
#endif /* PTKSA_CACHE_H */
|