1 /* 2 * hostapd / EAP-SIM database/authenticator gateway 3 * Copyright (c) 2005-2008, 2012, Jouni Malinen <j@w1.fi> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 * 9 * Alternatively, this software may be distributed under the terms of BSD 10 * license. 11 * 12 * See README and COPYING for more details. 13 */ 14 15 #ifndef EAP_SIM_DB_H 16 #define EAP_SIM_DB_H 17 18 #include "eap_common/eap_sim_common.h" 19 20 /* Identity prefixes */ 21 #define EAP_SIM_PERMANENT_PREFIX '1' 22 #define EAP_SIM_PSEUDONYM_PREFIX '3' 23 #define EAP_SIM_REAUTH_ID_PREFIX '5' 24 #define EAP_AKA_PERMANENT_PREFIX '0' 25 #define EAP_AKA_PSEUDONYM_PREFIX '2' 26 #define EAP_AKA_REAUTH_ID_PREFIX '4' 27 #define EAP_AKA_PRIME_PERMANENT_PREFIX '6' 28 #define EAP_AKA_PRIME_PSEUDONYM_PREFIX '7' 29 #define EAP_AKA_PRIME_REAUTH_ID_PREFIX '8' 30 31 enum eap_sim_db_method { 32 EAP_SIM_DB_SIM, 33 EAP_SIM_DB_AKA, 34 EAP_SIM_DB_AKA_PRIME 35 }; 36 37 void * eap_sim_db_init(const char *config, 38 void (*get_complete_cb)(void *ctx, void *session_ctx), 39 void *ctx); 40 41 void eap_sim_db_deinit(void *priv); 42 43 int eap_sim_db_get_gsm_triplets(void *priv, const u8 *identity, 44 size_t identity_len, int max_chal, 45 u8 *_rand, u8 *kc, u8 *sres, 46 void *cb_session_ctx); 47 48 #define EAP_SIM_DB_FAILURE -1 49 #define EAP_SIM_DB_PENDING -2 50 51 int eap_sim_db_identity_known(void *priv, const u8 *identity, 52 size_t identity_len); 53 54 char * eap_sim_db_get_next_pseudonym(void *priv, 55 enum eap_sim_db_method method); 56 57 char * eap_sim_db_get_next_reauth_id(void *priv, 58 enum eap_sim_db_method method); 59 60 int eap_sim_db_add_pseudonym(void *priv, const u8 *identity, 61 size_t identity_len, char *pseudonym); 62 63 int eap_sim_db_add_reauth(void *priv, const u8 *identity, 64 size_t identity_len, char *reauth_id, u16 counter, 65 const u8 *mk); 66 int eap_sim_db_add_reauth_prime(void *priv, const u8 *identity, 67 size_t identity_len, char *reauth_id, 68 u16 counter, const u8 *k_encr, const u8 *k_aut, 69 const u8 *k_re); 70 71 const u8 * eap_sim_db_get_permanent(void *priv, const u8 *identity, 72 size_t identity_len, size_t *len); 73 74 struct eap_sim_reauth { 75 struct eap_sim_reauth *next; 76 u8 *identity; 77 size_t identity_len; 78 char *reauth_id; 79 u16 counter; 80 int aka_prime; 81 u8 mk[EAP_SIM_MK_LEN]; 82 u8 k_encr[EAP_SIM_K_ENCR_LEN]; 83 u8 k_aut[EAP_AKA_PRIME_K_AUT_LEN]; 84 u8 k_re[EAP_AKA_PRIME_K_RE_LEN]; 85 }; 86 87 struct eap_sim_reauth * 88 eap_sim_db_get_reauth_entry(void *priv, const u8 *identity, 89 size_t identity_len); 90 91 void eap_sim_db_remove_reauth(void *priv, struct eap_sim_reauth *reauth); 92 93 int eap_sim_db_get_aka_auth(void *priv, const u8 *identity, 94 size_t identity_len, u8 *_rand, u8 *autn, u8 *ik, 95 u8 *ck, u8 *res, size_t *res_len, 96 void *cb_session_ctx); 97 98 int eap_sim_db_resynchronize(void *priv, const u8 *identity, 99 size_t identity_len, const u8 *auts, 100 const u8 *_rand); 101 102 #endif /* EAP_SIM_DB_H */ 103