1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.anqp.eap;
2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.HashMap;
4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.Iterator;
5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.Map;
6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist/**
8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * EAP Related constants for the ANQP NAIRealm element, IEEE802.11-2012 section 8.4.4.10
9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist */
10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic abstract class EAP {
11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private static final Map<Integer, EAPMethodID> sEapIds = new HashMap<>();
13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private static final Map<EAPMethodID, Integer> sRevEapIds = new HashMap<>();
14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private static final Map<Integer, AuthInfoID> sAuthIds = new HashMap<>();
15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_MD5 = 4;
17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_OTP = 5;
18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_RSA = 9;
19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_KEA = 11;
20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_KEA_VALIDATE = 12;
21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_TLS = 13;
22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_LEAP = 17;
23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_SIM = 18;
24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_TTLS = 21;
25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_AKA = 23;
26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_3Com = 24;
27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_MSCHAPv2 = 26;
28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_PEAP = 29;
29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_POTP = 32;
30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_ActiontecWireless = 35;
31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_HTTPDigest = 38;
32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_SPEKE = 41;
33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_MOBAC = 42;
34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_FAST = 43;
35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_ZLXEAP = 44;
36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_Link = 45;
37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_PAX = 46;
38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_PSK = 47;
39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_SAKE = 48;
40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_IKEv2 = 49;
41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_AKAPrim = 50;
42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_GPSK = 51;
43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_PWD = 52;
44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_EKE = 53;
45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int EAP_TEAP = 55;
46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public enum EAPMethodID {
48ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_MD5,
49ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_OTP,
50ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_RSA,
51ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_KEA,
52ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_KEA_VALIDATE,
53ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_TLS,
54ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_LEAP,
55ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_SIM,
56ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_TTLS,
57ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_AKA,
58ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_3Com,
59ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_MSCHAPv2,
60ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_PEAP,
61ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_POTP,
62ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_ActiontecWireless,
63ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_HTTPDigest,
64ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_SPEKE,
65ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_MOBAC,
66ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_FAST,
67ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_ZLXEAP,
68ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_Link,
69ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_PAX,
70ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_PSK,
71ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_SAKE,
72ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_IKEv2,
73ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_AKAPrim,
74ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_GPSK,
75ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_PWD,
76ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_EKE,
77ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        EAP_TEAP
78ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
79ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
80ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int ExpandedEAPMethod = 1;
81ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int NonEAPInnerAuthType = 2;
82ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int InnerAuthEAPMethodType = 3;
83ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int ExpandedInnerEAPMethod = 4;
84ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int CredentialType = 5;
85ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int TunneledEAPMethodCredType = 6;
86ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static final int VendorSpecific = 221;
87ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
88ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public enum AuthInfoID {
89ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        Undefined,
90ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        ExpandedEAPMethod,
91ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        NonEAPInnerAuthType,
92ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        InnerAuthEAPMethodType,
93ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        ExpandedInnerEAPMethod,
94ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        CredentialType,
95ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        TunneledEAPMethodCredType,
96ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        VendorSpecific
97ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
98ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
99ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    static {
100ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_MD5, EAPMethodID.EAP_MD5);
101ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_OTP, EAPMethodID.EAP_OTP);
102ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_RSA, EAPMethodID.EAP_RSA);
103ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_KEA, EAPMethodID.EAP_KEA);
104ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_KEA_VALIDATE, EAPMethodID.EAP_KEA_VALIDATE);
105ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_TLS, EAPMethodID.EAP_TLS);
106ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_LEAP, EAPMethodID.EAP_LEAP);
107ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_SIM, EAPMethodID.EAP_SIM);
108ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_TTLS, EAPMethodID.EAP_TTLS);
109ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_AKA, EAPMethodID.EAP_AKA);
110ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_3Com, EAPMethodID.EAP_3Com);
111ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_MSCHAPv2, EAPMethodID.EAP_MSCHAPv2);
112ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_PEAP, EAPMethodID.EAP_PEAP);
113ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_POTP, EAPMethodID.EAP_POTP);
114ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_ActiontecWireless, EAPMethodID.EAP_ActiontecWireless);
115ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_HTTPDigest, EAPMethodID.EAP_HTTPDigest);
116ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_SPEKE, EAPMethodID.EAP_SPEKE);
117ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_MOBAC, EAPMethodID.EAP_MOBAC);
118ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_FAST, EAPMethodID.EAP_FAST);
119ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_ZLXEAP, EAPMethodID.EAP_ZLXEAP);
120ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_Link, EAPMethodID.EAP_Link);
121ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_PAX, EAPMethodID.EAP_PAX);
122ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_PSK, EAPMethodID.EAP_PSK);
123ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_SAKE, EAPMethodID.EAP_SAKE);
124ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_IKEv2, EAPMethodID.EAP_IKEv2);
125ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_AKAPrim, EAPMethodID.EAP_AKAPrim);
126ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_GPSK, EAPMethodID.EAP_GPSK);
127ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_PWD, EAPMethodID.EAP_PWD);
128ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_EKE, EAPMethodID.EAP_EKE);
129ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sEapIds.put(EAP_TEAP, EAPMethodID.EAP_TEAP);
130ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
131ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        for (Map.Entry<Integer, EAPMethodID> entry : sEapIds.entrySet()) {
132ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            sRevEapIds.put(entry.getValue(), entry.getKey());
133ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        }
134ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
135ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sAuthIds.put(ExpandedEAPMethod, AuthInfoID.ExpandedEAPMethod);
136ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sAuthIds.put(NonEAPInnerAuthType, AuthInfoID.NonEAPInnerAuthType);
137ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sAuthIds.put(InnerAuthEAPMethodType, AuthInfoID.InnerAuthEAPMethodType);
138ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sAuthIds.put(ExpandedInnerEAPMethod, AuthInfoID.ExpandedInnerEAPMethod);
139ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sAuthIds.put(CredentialType, AuthInfoID.CredentialType);
140ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sAuthIds.put(TunneledEAPMethodCredType, AuthInfoID.TunneledEAPMethodCredType);
141ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        sAuthIds.put(VendorSpecific, AuthInfoID.VendorSpecific);
142ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
143ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
144ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static EAPMethodID mapEAPMethod(int methodID) {
145ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return sEapIds.get(methodID);
146ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
147ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
148ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static Integer mapEAPMethod(EAPMethodID methodID) {
149ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return sRevEapIds.get(methodID);
150ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
151ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
152ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public static AuthInfoID mapAuthMethod(int methodID) {
153ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return sAuthIds.get(methodID);
154ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
155ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist}
156