package de.blinkt.openvpn.core; import android.text.TextUtils; import de.blinkt.openvpn.VpnProfile; import org.spongycastle.util.io.pem.PemObject; import org.spongycastle.util.io.pem.PemReader; import javax.security.auth.x500.X500Principal; import java.io.*; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; public class X509Utils { public static Certificate getCertificateFromFile(String certfilename) throws FileNotFoundException, CertificateException { CertificateFactory certFact = CertificateFactory.getInstance("X.509"); InputStream inStream; if(certfilename.startsWith(VpnProfile.INLINE_TAG)) inStream = new ByteArrayInputStream(certfilename.replace(VpnProfile.INLINE_TAG,"").getBytes()); else inStream = new FileInputStream(certfilename); return certFact.generateCertificate(inStream); } public static PemObject readPemObjectFromFile (String keyfilename) throws CertificateException, IOException { Reader inStream; if(keyfilename.startsWith(VpnProfile.INLINE_TAG)) inStream = new StringReader(keyfilename.replace(VpnProfile.INLINE_TAG,"")); else inStream = new FileReader(new File(keyfilename)); PemReader pr = new PemReader(inStream); PemObject r = pr.readPemObject(); pr.close(); return r; } public static String getCertificateFriendlyName (String filename) { if(!TextUtils.isEmpty(filename)) { try { X509Certificate cert = (X509Certificate) getCertificateFromFile(filename); X500Principal principal = (X500Principal) cert.getSubjectDN(); String friendlyname = principal.getName(); System.out.println(friendlyname); // Really evil hack to decode email address String[] parts = friendlyname.split(","); for (int i=0;i