Credential.java revision a1edc185d46d85e04930a5e12b465de9fea64afe
171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistpackage com.android.server.wifi.hotspot2.pps;
271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpandeimport android.net.wifi.WifiEnterpriseConfig;
4d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpandeimport android.text.TextUtils;
571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport android.util.Base64;
6af955ffa0082189fb688429732427c333f2491ceVinit Deshpandeimport android.util.Log;
771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpandeimport com.android.server.wifi.anqp.eap.EAP;
971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.anqp.eap.EAPMethod;
1003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpandeimport com.android.server.wifi.anqp.eap.InnerAuthEAP;
1171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.hotspot2.Utils;
1271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.hotspot2.omadm.OMAException;
1371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
1471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport java.nio.charset.StandardCharsets;
15a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvistimport java.security.GeneralSecurityException;
16a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvistimport java.security.MessageDigest;
1771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
1871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistpublic class Credential {
1971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public enum CertType {IEEE, x509v3}
2071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
2171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final long mCtime;
2271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final long mExpTime;
2371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mRealm;
2471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final boolean mCheckAAACert;
2571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
2671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mUserName;
2771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mPassword;
2871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final boolean mMachineManaged;
2971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mSTokenApp;
3071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final boolean mShare;
3171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final EAPMethod mEAPMethod;
3271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
3371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final CertType mCertType;
3471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final byte[] mFingerPrint;
3571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
3671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    private final String mImsi;
3771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
3871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public Credential(long ctime, long expTime, String realm, boolean checkAAACert,
3971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      EAPMethod eapMethod, String userName, String password,
4071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      boolean machineManaged, String stApp, boolean share) {
4171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCtime = ctime;
4271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mExpTime = expTime;
4371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mRealm = realm;
4471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCheckAAACert = checkAAACert;
4571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mEAPMethod = eapMethod;
4671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mUserName = userName;
47d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande
48a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        if (!TextUtils.isEmpty(password)) {
49d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            byte[] pwOctets = Base64.decode(password, Base64.DEFAULT);
50d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            mPassword = new String(pwOctets, StandardCharsets.UTF_8);
51d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        } else {
52d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            mPassword = null;
53d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        }
54d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande
5571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mMachineManaged = machineManaged;
5671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mSTokenApp = stApp;
5771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mShare = share;
5871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
5971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCertType = null;
6071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mFingerPrint = null;
6171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
6271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mImsi = null;
6371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
6471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
6571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public Credential(long ctime, long expTime, String realm, boolean checkAAACert,
6671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      EAPMethod eapMethod, Credential.CertType certType, byte[] fingerPrint) {
6771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCtime = ctime;
6871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mExpTime = expTime;
6971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mRealm = realm;
7071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCheckAAACert = checkAAACert;
7171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mEAPMethod = eapMethod;
7271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCertType = certType;
7371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mFingerPrint = fingerPrint;
7471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
7571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mUserName = null;
7671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mPassword = null;
7771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mMachineManaged = false;
7871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mSTokenApp = null;
7971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mShare = false;
8071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
8171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mImsi = null;
8271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
8371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
8471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public Credential(long ctime, long expTime, String realm, boolean checkAAACert,
8571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                      EAPMethod eapMethod, String imsi) {
8671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCtime = ctime;
8771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mExpTime = expTime;
8871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mRealm = realm;
8971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCheckAAACert = checkAAACert;
9071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mEAPMethod = eapMethod;
9171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mImsi = imsi;
9271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
9371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mCertType = null;
9471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mFingerPrint = null;
9571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
9671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mUserName = null;
9771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mPassword = null;
9871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mMachineManaged = false;
9971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mSTokenApp = null;
10071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        mShare = false;
10171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
10271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
10303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    public Credential(WifiEnterpriseConfig enterpriseConfig) {
10403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mCtime = 0;
10503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mExpTime = 0;
10603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mRealm = enterpriseConfig.getRealm();
10703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mCheckAAACert = true;
10803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mEAPMethod = mapEapMethod(enterpriseConfig.getEapMethod(),
10903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande                enterpriseConfig.getPhase2Method());
11003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mCertType = mapCertType(enterpriseConfig.getEapMethod());
111a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        byte[] fingerPrint = null;
112a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        if (enterpriseConfig.getClientCertificate() != null) {
113a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            try {
114a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                MessageDigest digester = MessageDigest.getInstance("SHA-256");
115a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                fingerPrint = digester.digest(enterpriseConfig.getClientCertificate().getEncoded());
116a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            }
117a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            catch (GeneralSecurityException gse) {
118a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                Log.e("CRED", "Failed to generate certificate fingerprint: " + gse);
119a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist                fingerPrint = null;
120a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            }
121d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        } else {
122a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist            fingerPrint = null;
123d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        }
124a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        mFingerPrint = fingerPrint;
12503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mImsi = enterpriseConfig.getPlmn();
126d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        mUserName = enterpriseConfig.getIdentity();
127d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande        mPassword = enterpriseConfig.getPassword();
12803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mMachineManaged = false;
12903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mSTokenApp = null;
13003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        mShare = false;
13103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    }
13203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande
13371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public static CertType mapCertType(String certType) throws OMAException {
13471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        if (certType.equalsIgnoreCase("x509v3")) {
13571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist            return CertType.x509v3;
13671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        } else if (certType.equalsIgnoreCase("802.1ar")) {
13771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist            return CertType.IEEE;
13871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        } else {
13971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist            throw new OMAException("Invalid cert type: '" + certType + "'");
14071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        }
14171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
14271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
14303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    private static EAPMethod mapEapMethod(int eapMethod, int phase2Method) {
14403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        if (eapMethod == WifiEnterpriseConfig.Eap.TLS) {
14503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_TLS, null);
14603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.TTLS) {
14703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            /* keep this table in sync with WifiEnterpriseConfig.Phase2 enum */
148d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            if (phase2Method == WifiEnterpriseConfig.Phase2.MSCHAPV2) {
149d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande                return new EAPMethod(EAP.EAPMethodID.EAP_TTLS,
150d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande                        new InnerAuthEAP(EAP.EAPMethodID.EAP_MSCHAPv2));
151d3fb9cbb12d013dd70e672ace5c41ab18a3679a0Vinit Deshpande            }
15203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.PEAP) {
15303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            /* restricting passpoint implementation from using PEAP */
15403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return null;
15503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.PWD) {
15603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            /* restricting passpoint implementation from using EAP_PWD */
15703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return null;
15803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.SIM) {
15903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_SIM, null);
16003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else if (eapMethod == WifiEnterpriseConfig.Eap.AKA) {
16103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_AKA, null);
16203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        }
16303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        /*
16403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            TODO: Uncomment this when AKA_PRIME is defined in WifiEnterpriseConfig
16503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        else if (eapMethod == WifiEnterpriseConfig.Eap.AKA_PRIME) {
16603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return new EAPMethod(EAP.EAPMethodID.EAP_AKAPrim, null);
16703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        }
16803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        */
16903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande
170af955ffa0082189fb688429732427c333f2491ceVinit Deshpande        Log.d("PARSE-LOG", "Invalid eap method");
17103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        return null;
17203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    }
17303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande
17403e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    private static CertType mapCertType(int eapMethod) {
17503e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        if (eapMethod == WifiEnterpriseConfig.Eap.TLS
17603e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande                || eapMethod == WifiEnterpriseConfig.Eap.TTLS) {
17703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return CertType.x509v3;
17803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        } else {
179af955ffa0082189fb688429732427c333f2491ceVinit Deshpande            Log.d("PARSE-LOG", "Invalid cert type" + eapMethod);
18003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande            return null;
18103e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande        }
18203e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande    }
18303e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande
18471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public EAPMethod getEAPMethod() {
18571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return mEAPMethod;
18671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
18771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
18871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public String getRealm() {
18971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return mRealm;
19071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
19171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
19271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public String getImsi() {
19371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return mImsi;
19471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
19571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist
19677f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    public String getUserName() {
19777f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return mUserName;
19877f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    }
19977f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist
20077f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    public String getPassword() {
20177f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return mPassword;
20277f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    }
20377f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist
204a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    public CertType getCertType() {
205a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        return mCertType;
206a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    }
207a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist
208a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    public byte[] getFingerPrint() {
209a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist        return mFingerPrint;
210a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist    }
211a1edc185d46d85e04930a5e12b465de9fea64afeJan Nordqvist
21271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    @Override
21371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    public String toString() {
21471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist        return "Credential{" +
21571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                "mCtime=" + Utils.toUTCString(mCtime) +
21671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mExpTime=" + Utils.toUTCString(mExpTime) +
21771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mRealm='" + mRealm + '\'' +
21871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mCheckAAACert=" + mCheckAAACert +
21971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mUserName='" + mUserName + '\'' +
22071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mPassword='" + mPassword + '\'' +
22171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mMachineManaged=" + mMachineManaged +
22271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mSTokenApp='" + mSTokenApp + '\'' +
22371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mShare=" + mShare +
22471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mEAPMethod=" + mEAPMethod +
22571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mCertType=" + mCertType +
22671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mFingerPrint=" + Utils.toHexString(mFingerPrint) +
22771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                ", mImsi='" + mImsi + '\'' +
22871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist                '}';
22971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist    }
23071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist}
231