package info.androiddevice.deviceinventory.info;
import android.util.Base64;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import static android.util.Base64.encodeToString;
public class OtacertsProperty implements Property {
@Override
public String getName() {
return "otacerts";
}
@Override
public Object getProperty() throws JSONException {
JSONObject result = new JSONObject();
try {
Iterator<Map.Entry<String, X509Certificate>> certs = getTrustedCerts(new File("/system/etc/security/otacerts.zip")).entrySet().iterator();
while(certs.hasNext()) {
Map.Entry<String, X509Certificate> cert = certs.next();
result.put(cert.getKey(), encodeToString(cert.getValue().getEncoded(), Base64.DEFAULT));
}
} catch (IOException e) {
return JSONObject.NULL;
} catch (GeneralSecurityException e) {
return JSONObject.NULL;
}
return result;
}
private static HashMap<String, X509Certificate> getTrustedCerts(File keystore) throws IOException, GeneralSecurityException {
HashMap<String, X509Certificate> certs = new HashMap<String, X509Certificate>();
ZipFile zip = new ZipFile(keystore);
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Enumeration<? extends ZipEntry> entries = zip.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
InputStream is = zip.getInputStream(entry);
try {
certs.put(entry.getName(), (X509Certificate) cf.generateCertificate(is));
} finally {
is.close();
}
}
} finally {
zip.close();
}
return certs;
}
}