if (chain != null && chain.getSigner() != null) chainList.add(chain);
	void setBundleFile(BundleFile bundleFile) throws IOException {		this.bundleFile = bundleFile;		if (certsInitialized)			return;		ArrayList chainList = new ArrayList();		BundleEntry be = bundleFile.getEntry("META-INF/MANIFEST.MF"); //$NON-NLS-1$		if (be == null) {			return;		}		byte manifestBytes[] = readIntoArray(be);		Enumeration en = bundleFile.getEntryPaths("META-INF/"); //$NON-NLS-1$		while (en.hasMoreElements()) {			String name = (String) en.nextElement();			if ((name.endsWith(".DSA") || name.endsWith(".RSA")) && name.indexOf('/') == name.lastIndexOf('/')) { //$NON-NLS-1$ //$NON-NLS-2$				be = bundleFile.getEntry(name);				byte pkcs7Bytes[] = readIntoArray(be);				int dotIndex = name.lastIndexOf('.');				be = bundleFile.getEntry(name.substring(0, dotIndex) + ".SF"); //$NON-NLS-1$				byte sfBytes[] = readIntoArray(be);				// Get the manifest out of the signature file and make sure				// it matches MANIFEST.MF				if (!checkManifestDigest(manifestBytes, sfBytes)) {					// We only recognize signatures over the Manifest					// XXX should log something here					continue;				}				// Now that the manifest digest checks out, check the signature				PKCS7Processor chain = null;				try {					chain = new PKCS7Processor(pkcs7Bytes, 0, pkcs7Bytes.length, sfBytes, 0, sfBytes.length);				} catch (Exception e) {					// For any problems we just bag this signature and move on					SignedBundleHook.log("Invalid or untrusted certificate: " + bundleFile.getBaseFile(), FrameworkLogEntry.WARNING, e); //$NON-NLS-1$					continue;				}				if (chain != null && chain.getSigner() != null)					chainList.add(chain);			}		}		chains = chainList.size() == 0 ? null : (CertificateChain[]) chainList.toArray(new CertificateChain[chainList.size()]);		if (chains != null)			populateManifest(manifestBytes);	}