OSDN Git Service

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