eap_sim_db.h revision 189251
186231Stmm/*
286231Stmm * hostapd / EAP-SIM database/authenticator gateway
386231Stmm * Copyright (c) 2005-2007, Jouni Malinen <j@w1.fi>
486231Stmm *
586231Stmm * This program is free software; you can redistribute it and/or modify
686231Stmm * it under the terms of the GNU General Public License version 2 as
786231Stmm * published by the Free Software Foundation.
886231Stmm *
986231Stmm * Alternatively, this software may be distributed under the terms of BSD
1086231Stmm * license.
1186231Stmm *
1286231Stmm * See README and COPYING for more details.
1386231Stmm */
1486231Stmm
1586231Stmm#ifndef EAP_SIM_DB_H
1686231Stmm#define EAP_SIM_DB_H
1786231Stmm
1886231Stmm#ifdef EAP_SIM
1986231Stmm
2086231Stmm#include "eap_common/eap_sim_common.h"
2186231Stmm
2286231Stmm/* Identity prefixes */
2386231Stmm#define EAP_SIM_PERMANENT_PREFIX '1'
2486231Stmm#define EAP_SIM_PSEUDONYM_PREFIX '3'
2586231Stmm#define EAP_SIM_REAUTH_ID_PREFIX '5'
2686231Stmm#define EAP_AKA_PERMANENT_PREFIX '0'
2786231Stmm#define EAP_AKA_PSEUDONYM_PREFIX '2'
2886231Stmm#define EAP_AKA_REAUTH_ID_PREFIX '4'
2986231Stmm
3086231Stmmvoid * eap_sim_db_init(const char *config,
3186231Stmm		       void (*get_complete_cb)(void *ctx, void *session_ctx),
3286231Stmm		       void *ctx);
3386231Stmm
3486231Stmmvoid eap_sim_db_deinit(void *priv);
3586231Stmm
3686231Stmmint eap_sim_db_get_gsm_triplets(void *priv, const u8 *identity,
3786231Stmm				size_t identity_len, int max_chal,
3886231Stmm				u8 *_rand, u8 *kc, u8 *sres,
3986231Stmm				void *cb_session_ctx);
4086231Stmm
4186231Stmm#define EAP_SIM_DB_FAILURE -1
4286231Stmm#define EAP_SIM_DB_PENDING -2
4388823Stmm
4486231Stmmint eap_sim_db_identity_known(void *priv, const u8 *identity,
4586231Stmm			      size_t identity_len);
4686231Stmm
4786231Stmmchar * eap_sim_db_get_next_pseudonym(void *priv, int aka);
4886231Stmm
4986231Stmmchar * eap_sim_db_get_next_reauth_id(void *priv, int aka);
5086231Stmm
5186231Stmmint eap_sim_db_add_pseudonym(void *priv, const u8 *identity,
5286231Stmm			     size_t identity_len, char *pseudonym);
5388823Stmm
5488823Stmmint eap_sim_db_add_reauth(void *priv, const u8 *identity,
5586231Stmm			  size_t identity_len, char *reauth_id, u16 counter,
5690617Stmm			  const u8 *mk);
5790617Stmmint eap_sim_db_add_reauth_prime(void *priv, const u8 *identity,
5886231Stmm				size_t identity_len, char *reauth_id,
5986231Stmm				u16 counter, const u8 *k_encr, const u8 *k_aut,
6086231Stmm				const u8 *k_re);
6186231Stmm
6286231Stmmconst u8 * eap_sim_db_get_permanent(void *priv, const u8 *identity,
6386231Stmm				    size_t identity_len, size_t *len);
6486231Stmm
6586231Stmmstruct eap_sim_reauth {
6688823Stmm	struct eap_sim_reauth *next;
6788823Stmm	u8 *identity;
6886231Stmm	size_t identity_len;
6986231Stmm	char *reauth_id;
7086231Stmm	u16 counter;
7186231Stmm	int aka_prime;
7286231Stmm	u8 mk[EAP_SIM_MK_LEN];
7386231Stmm	u8 k_encr[EAP_SIM_K_ENCR_LEN];
7486231Stmm	u8 k_aut[EAP_AKA_PRIME_K_AUT_LEN];
7586231Stmm	u8 k_re[EAP_AKA_PRIME_K_RE_LEN];
7686231Stmm};
7786231Stmm
7886231Stmmstruct eap_sim_reauth *
7986231Stmmeap_sim_db_get_reauth_entry(void *priv, const u8 *identity,
8086231Stmm			    size_t identity_len);
8186231Stmm
8286231Stmmvoid eap_sim_db_remove_reauth(void *priv, struct eap_sim_reauth *reauth);
8386231Stmm
8486231Stmmint eap_sim_db_get_aka_auth(void *priv, const u8 *identity,
8586231Stmm			    size_t identity_len, u8 *_rand, u8 *autn, u8 *ik,
8686231Stmm			    u8 *ck, u8 *res, size_t *res_len,
8786231Stmm			    void *cb_session_ctx);
8886231Stmm
8986231Stmmint eap_sim_db_resynchronize(void *priv, const u8 *identity,
90105274Stmm			     size_t identity_len, const u8 *auts,
91105274Stmm			     const u8 *_rand);
9286231Stmm
9386231Stmm#else /* EAP_SIM */
9486231Stmmstatic inline void *
95eap_sim_db_init(const char *config,
96		void (*get_complete_cb)(void *ctx, void *session_ctx),
97		void *ctx)
98{
99	return (void *) 1;
100}
101
102static inline void eap_sim_db_deinit(void *priv)
103{
104}
105#endif /* EAP_SIM */
106
107#endif /* EAP_SIM_DB_H */
108