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

#ifndef __java_security_cert_X509CRLEntry__
#define __java_security_cert_X509CRLEntry__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
    namespace security
    {
      namespace cert
      {
          class X509CRLEntry;
      }
    }
  }
}

class java::security::cert::X509CRLEntry : public ::java::lang::Object
{

public:
  X509CRLEntry();
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
  virtual JArray< jbyte > * getEncoded() = 0;
  virtual ::java::math::BigInteger * getSerialNumber() = 0;
  virtual ::java::util::Date * getRevocationDate() = 0;
  virtual jboolean hasExtensions() = 0;
  virtual ::java::lang::String * toString() = 0;
  virtual jboolean hasUnsupportedCriticalExtension() = 0;
  virtual ::java::util::Set * getCriticalExtensionOIDs() = 0;
  virtual ::java::util::Set * getNonCriticalExtensionOIDs() = 0;
  virtual JArray< jbyte > * getExtensionValue(::java::lang::String *) = 0;
  static ::java::lang::Class class$;
};

#endif // __java_security_cert_X509CRLEntry__
