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