/** * Return certificates for signed bundle, otherwise null. * * @return An array of certificates or null. */ public ArrayList getCertificateChains(boolean onlyTrusted) { if (checkCerts) { Certificate[] c = archive.getCertificates(); checkCerts = false; if (c != null) { ArrayList failed = new ArrayList(); untrustedCerts = Util.getCertificateChains(c, failed); if (!failed.isEmpty()) { // NYI, log Bundle archive has invalid certificates untrustedCerts = null; } } } ArrayList res = trustedCerts; if (!onlyTrusted && untrustedCerts != null) { if (res == null) { res = untrustedCerts; } else { res = new ArrayList(trustedCerts.size() + untrustedCerts.size()); res.addAll(trustedCerts); res.addAll(untrustedCerts); } } return res; }
/** Mark certificate chain as trusted. */ public void trustCertificateChain(List trustedChain) { if (trustedCerts == null) { trustedCerts = new ArrayList(untrustedCerts.size()); } trustedCerts.add(trustedChain); untrustedCerts.remove(trustedChain); if (untrustedCerts.isEmpty()) { untrustedCerts = null; } }
/** * Get a FileArchive handle to a named Jar file or directory within this archive. * * @param path Name of Jar file or directory to get. * @return A FileArchive object representing new archive, null if not found. * @exception IOException if we failed to get top of file archive. */ public FileArchive getFileArchive(String path) { if (".".equals(path)) { return archive; } if (archives == null) { archives = new ArrayList(); } try { Archive a = new Archive(archive, path, archives.size() + 1); archives.add(a); return a; } catch (IOException io) { // TBD, Where to log this return null; } }