
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_util_jar_JarFile__
#define __java_util_jar_JarFile__

#pragma interface

#include <java/util/zip/ZipFile.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class OID;
        namespace pkcs
        {
            class SignerInfo;
        }
        namespace provider
        {
            class Gnu;
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
      namespace cert
      {
          class Certificate;
      }
    }
  }
}

class java::util::jar::JarFile : public ::java::util::zip::ZipFile
{

public: // actually package-private
  static void debug(::java::lang::Object *);
public:
  JarFile(::java::lang::String *);
  JarFile(::java::lang::String *, jboolean);
  JarFile(::java::io::File *);
  JarFile(::java::io::File *, jboolean);
  JarFile(::java::io::File *, jboolean, jint);
private:
  void verify();
  ::java::util::jar::Manifest * readManifest();
public:
  virtual ::java::util::Enumeration * entries();
  virtual ::java::util::zip::ZipEntry * getEntry(::java::lang::String *);
  virtual ::java::io::InputStream * getInputStream(::java::util::zip::ZipEntry *);
  virtual ::java::util::jar::JarEntry * getJarEntry(::java::lang::String *);
  virtual ::java::util::jar::Manifest * getManifest();
public: // actually package-private
  virtual void readSignatures();
private:
  void verify(JArray< ::java::security::cert::Certificate * > *, ::gnu::java::security::pkcs::SignerInfo *, ::java::lang::String *, ::java::util::Set *);
  jboolean verifyHashes(::java::lang::String *, ::java::util::jar::Attributes *, ::java::util::HashMap *);
public:
  static ::java::lang::String * MANIFEST_NAME;
private:
  static ::java::lang::String * META_INF;
  static ::java::lang::String * PKCS7_DSA_SUFFIX;
  static ::java::lang::String * PKCS7_RSA_SUFFIX;
  static ::java::lang::String * DIGEST_KEY_SUFFIX;
  static ::java::lang::String * SF_SUFFIX;
public: // actually package-private
  static ::gnu::java::security::provider::Gnu * provider;
private:
  static ::gnu::java::security::OID * MD2_OID;
  static ::gnu::java::security::OID * MD4_OID;
  static ::gnu::java::security::OID * MD5_OID;
  static ::gnu::java::security::OID * SHA1_OID;
  static ::gnu::java::security::OID * DSA_ENCRYPTION_OID;
  static ::gnu::java::security::OID * RSA_ENCRYPTION_OID;
  ::java::util::jar::Manifest * __attribute__((aligned(__alignof__( ::java::util::zip::ZipFile)))) manifest;
public: // actually package-private
  jboolean verify__;
private:
  jboolean manifestRead;
public: // actually package-private
  jboolean signaturesRead;
  ::java::util::HashMap * verified;
  ::java::util::HashMap * entryCerts;
private:
  ::java::util::HashMap * digestAlgorithms;
public: // actually package-private
  static jboolean DEBUG;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_jar_JarFile__
