log.exiting(this.getClass().getName(), "verifySFEntries", Boolean.valueOf(result));
if (Configuration.DEBUG) log.exiting(this.getClass().getName(), "verifySFEntries", Boolean.valueOf(result));
  private boolean verifySFEntries(String alias) throws IOException  {    log.entering(this.getClass().getName(), "verifySFEntries"); //$NON-NLS-1$    // 1. read the signature file    JarEntry jarEntry = jarFile.getJarEntry(JarUtils.META_INF + alias                                            + JarUtils.SF_SUFFIX);    InputStream in = jarFile.getInputStream(jarEntry);    Attributes attr = new Attributes();    Map entries = new HashMap();    JarUtils.readSFManifest(attr, entries, in);    // 2. The .SF file by default includes a header containing a hash of the    // entire manifest file. When the header is present, then the verification    // can check to see whether or not the hash in the header indeed matches    // the hash of the manifest file.    boolean result = false;    String hash = attr.getValue(Main.DIGEST_MANIFEST_ATTR);    if (hash != null)      result = verifyManifest(hash);    // A verification is still considered successful if none of the files that    // were in the JAR file when the signature was generated have been changed    // since then, which is the case if the hashes in the non-header sections    // of the .SF file equal the hashes of the corresponding sections in the    // manifest file.    //    // 3. Read each file in the JAR file that has an entry in the .SF file.    // While reading, compute the file's digest, and then compare the result    // with the digest for this file in the manifest section. The digests    // should be the same, or verification fails.    if (! result)      for (Iterator it = entries.keySet().iterator(); it.hasNext();)        {          Entry me = (Entry) it.next();          String name = (String) me.getKey();          attr = (Attributes) me.getValue();          hash = attr.getValue(Main.DIGEST_ATTR);          result = verifySFEntry(name, hash);          if (! result)            break;        }    log.exiting(this.getClass().getName(), "verifySFEntries",                Boolean.valueOf(result)); //$NON-NLS-1$    return result;  }