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

#ifndef __javax_security_cert_Certificate__
#define __javax_security_cert_Certificate__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class PublicKey;
    }
  }
  namespace javax
  {
    namespace security
    {
      namespace cert
      {
          class Certificate;
      }
    }
  }
}

class javax::security::cert::Certificate : public ::java::lang::Object
{

public:
  Certificate();
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
  virtual JArray< jbyte > * getEncoded() = 0;
  virtual void verify(::java::security::PublicKey *) = 0;
  virtual void verify(::java::security::PublicKey *, ::java::lang::String *) = 0;
  virtual ::java::lang::String * toString() = 0;
  virtual ::java::security::PublicKey * getPublicKey() = 0;
  static ::java::lang::Class class$;
};

#endif // __javax_security_cert_Certificate__
