Credential.java revision a7ead3d4be45cb69bb5851f1a6f9673e93607fc2
171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistpackage com.android.server.wifi.hotspot2.pps;
271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpandeimport android.net.wifi.WifiEnterpriseConfig;
4a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvistimport android.security.Credentials;
5a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvistimport android.security.KeyStore;
6d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpandeimport android.text.TextUtils;
771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport android.util.Base64;
8af955ffa0082189fb688429732427c333f2491ceVinit Deshpandeimport android.util.Log;
971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
1003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpandeimport com.android.server.wifi.anqp.eap.EAP;
1171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.anqp.eap.EAPMethod;
12a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvistimport com.android.server.wifi.anqp.eap.NonEAPInnerAuth;
1371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.hotspot2.Utils;
1471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.hotspot2.omadm.OMAException;
1571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
16a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvistimport java.io.IOException;
1771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport java.nio.charset.StandardCharsets;
18a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvistimport java.security.GeneralSecurityException;
19a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvistimport java.security.MessageDigest;
2071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
2171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistpublic class Credential {
2271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public enum CertType {IEEE, x509v3}
2371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
24a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist    public static final String CertTypeX509 = "x509v3";
25a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist    public static final String CertTypeIEEE = "802.1ar";
26a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist
2771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final long mCtime;
2871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final long mExpTime;
2971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mRealm;
3071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final boolean mCheckAAACert;
3171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
3271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mUserName;
3371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mPassword;
3471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final boolean mMachineManaged;
3571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mSTokenApp;
3671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final boolean mShare;
3771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final EAPMethod mEAPMethod;
3871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
3971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final CertType mCertType;
4071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final byte[] mFingerPrint;
4171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
4271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mImsi;
4371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
4471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public Credential(long ctime, long expTime, String realm, boolean checkAAACert,
4571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      EAPMethod eapMethod, String userName, String password,
4671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      boolean machineManaged, String stApp, boolean share) {
4771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCtime = ctime;
4871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mExpTime = expTime;
4971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mRealm = realm;
5071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCheckAAACert = checkAAACert;
5171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mEAPMethod = eapMethod;
5271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mUserName = userName;
53d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande
54a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        if (!TextUtils.isEmpty(password)) {
55d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            byte[] pwOctets = Base64.decode(password, Base64.DEFAULT);
56d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            mPassword = new String(pwOctets, StandardCharsets.UTF_8);
57d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        } else {
58d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            mPassword = null;
59d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        }
60d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande
6171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mMachineManaged = machineManaged;
6271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mSTokenApp = stApp;
6371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mShare = share;
6471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
6571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCertType = null;
6671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mFingerPrint = null;
6771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
6871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mImsi = null;
6971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
7071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
7171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public Credential(long ctime, long expTime, String realm, boolean checkAAACert,
7271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      EAPMethod eapMethod, Credential.CertType certType, byte[] fingerPrint) {
7371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCtime = ctime;
7471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mExpTime = expTime;
7571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mRealm = realm;
7671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCheckAAACert = checkAAACert;
7771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mEAPMethod = eapMethod;
7871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCertType = certType;
7971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mFingerPrint = fingerPrint;
8071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
8171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mUserName = null;
8271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mPassword = null;
8371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mMachineManaged = false;
8471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mSTokenApp = null;
8571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mShare = false;
8671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
8771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mImsi = null;
8871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
8971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
9071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public Credential(long ctime, long expTime, String realm, boolean checkAAACert,
9171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      EAPMethod eapMethod, String imsi) {
9271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCtime = ctime;
9371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mExpTime = expTime;
9471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mRealm = realm;
9571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCheckAAACert = checkAAACert;
9671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mEAPMethod = eapMethod;
9771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mImsi = imsi;
9871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
9971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCertType = null;
10071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mFingerPrint = null;
10171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
10271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mUserName = null;
10371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mPassword = null;
10471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mMachineManaged = false;
10571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mSTokenApp = null;
10671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mShare = false;
10771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
10871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
109a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist    public Credential(WifiEnterpriseConfig enterpriseConfig) throws IOException {
11003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mCtime = 0;
11103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mExpTime = 0;
11203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mRealm = enterpriseConfig.getRealm();
11303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mCheckAAACert = true;
11403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mEAPMethod = mapEapMethod(enterpriseConfig.getEapMethod(),
11503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande                enterpriseConfig.getPhase2Method());
116a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        mCertType = mEAPMethod.getEAPMethodID() == EAP.EAPMethodID.EAP_TLS ? CertType.x509v3 : null;
117a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        byte[] fingerPrint;
118a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist
119a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        if (enterpriseConfig.getClientCertificate() != null) {
120a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            // !!! Not sure this will be true in any practical instances:
121a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            try {
122a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                MessageDigest digester = MessageDigest.getInstance("SHA-256");
123a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                fingerPrint = digester.digest(enterpriseConfig.getClientCertificate().getEncoded());
124a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            }
125a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            catch (GeneralSecurityException gse) {
126a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                Log.e("CRED", "Failed to generate certificate fingerprint: " + gse);
127a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                fingerPrint = null;
128a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            }
129a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        }
130a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        else if (enterpriseConfig.getClientCertificateAlias() != null) {
131a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            String alias = enterpriseConfig.getClientCertificateAlias();
132a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            Log.d("HS2J", "Client alias '" + alias + "'");
133a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            byte[] octets = KeyStore.getInstance().get(Credentials.USER_CERTIFICATE + alias);
134a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            Log.d("HS2J", "DER: " + (octets == null ? "-" : Integer.toString(octets.length)));
135a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            if (octets != null) {
136a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                try {
137a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    MessageDigest digester = MessageDigest.getInstance("SHA-256");
138a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    fingerPrint = digester.digest(octets);
139a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                }
140a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                catch (GeneralSecurityException gse) {
141a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    Log.e("HS2J", "Failed to construct digest: " + gse);
142a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    fingerPrint = null;
143a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                }
144a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            }
145a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            else // !!! The current alias is *not* derived from the fingerprint...
146a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            {
147a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                try {
148a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    fingerPrint = Base64.decode(enterpriseConfig.getClientCertificateAlias(),
149a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                            Base64.DEFAULT);
150a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                } catch (IllegalArgumentException ie) {
151a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    Log.e("CRED", "Bad base 64 alias");
152a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    fingerPrint = null;
153a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                }
154a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            }
155a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        }
156a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        else {
157a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            fingerPrint = null;
158d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        }
159a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        mFingerPrint = fingerPrint;
16003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mImsi = enterpriseConfig.getPlmn();
161d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        mUserName = enterpriseConfig.getIdentity();
162d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        mPassword = enterpriseConfig.getPassword();
16303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mMachineManaged = false;
16403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mSTokenApp = null;
16503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mShare = false;
16603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    }
16703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande
16871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public static CertType mapCertType(String certType) throws OMAException {
169a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        if (certType.equalsIgnoreCase(CertTypeX509)) {
17071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist            return CertType.x509v3;
171a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist        } else if (certType.equalsIgnoreCase(CertTypeIEEE)) {
17271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist            return CertType.IEEE;
17371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        } else {
17471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist            throw new OMAException("Invalid cert type: '" + certType + "'");
17571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        }
17671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
17771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
178a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist    private static EAPMethod mapEapMethod(int eapMethod, int phase2Method) throws IOException {
17903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        if (eapMethod == WifiEnterpriseConfig.Eap.TLS) {
18003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_TLS, null);
18103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.TTLS) {
18203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            /* keep this table in sync with WifiEnterpriseConfig.Phase2 enum */
183a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            NonEAPInnerAuth inner;
184a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            switch (phase2Method) {
185a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                case WifiEnterpriseConfig.Phase2.PAP:
186a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    inner = new NonEAPInnerAuth(NonEAPInnerAuth.NonEAPType.PAP);
187a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    break;
188a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                case WifiEnterpriseConfig.Phase2.MSCHAP:
189a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    inner = new NonEAPInnerAuth(NonEAPInnerAuth.NonEAPType.MSCHAP);
190a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    break;
191a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                case WifiEnterpriseConfig.Phase2.MSCHAPV2:
192a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    inner = new NonEAPInnerAuth(NonEAPInnerAuth.NonEAPType.MSCHAPv2);
193a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    break;
194a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                default:
195a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                    throw new IOException("TTLS phase2 method " +
196a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist                            phase2Method + " not valid for Passpoint");
197d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            }
198a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist            return new EAPMethod(EAP.EAPMethodID.EAP_TTLS, inner);
19903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.PEAP) {
20003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            /* restricting passpoint implementation from using PEAP */
20103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return null;
20203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.PWD) {
20303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            /* restricting passpoint implementation from using EAP_PWD */
20403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return null;
20503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.SIM) {
20603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_SIM, null);
20703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.AKA) {
20803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_AKA, null);
20903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        }
21003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        /*
21103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            TODO: Uncomment this when AKA_PRIME is defined in WifiEnterpriseConfig
21203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        else if (eapMethod == WifiEnterpriseConfig.Eap.AKA_PRIME) {
21303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_AKAPrim, null);
21403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        }
21503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        */
21603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande
217af955ffa0082189fb688429732427c333f2491ceVinit Deshpande        Log.d("PARSE-LOG", "Invalid eap method");
21803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        return null;
21903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    }
22003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande
22171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public EAPMethod getEAPMethod() {
22271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return mEAPMethod;
22371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
22471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
22571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public String getRealm() {
22671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return mRealm;
22771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
22871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
22971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public String getImsi() {
23071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return mImsi;
23171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
23271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
23377f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    public String getUserName() {
23477f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return mUserName;
23577f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    }
23677f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist
23777f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    public String getPassword() {
23877f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return mPassword;
23977f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    }
24077f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist
241a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    public CertType getCertType() {
242a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        return mCertType;
243a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    }
244a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist
245a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    public byte[] getFingerPrint() {
246a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        return mFingerPrint;
247a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    }
248a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist
24971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    @Override
25071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public String toString() {
25171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return "Credential{" +
25271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                "mCtime=" + Utils.toUTCString(mCtime) +
25371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mExpTime=" + Utils.toUTCString(mExpTime) +
25471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mRealm='" + mRealm + '\'' +
25571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mCheckAAACert=" + mCheckAAACert +
25671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mUserName='" + mUserName + '\'' +
25771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mPassword='" + mPassword + '\'' +
25871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mMachineManaged=" + mMachineManaged +
25971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mSTokenApp='" + mSTokenApp + '\'' +
26071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mShare=" + mShare +
26171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mEAPMethod=" + mEAPMethod +
26271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mCertType=" + mCertType +
26371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mFingerPrint=" + Utils.toHexString(mFingerPrint) +
26471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mImsi='" + mImsi + '\'' +
26571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                '}';
26671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
26771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist}
268