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

#ifndef __gnu_java_security_x509_ext_PrivateKeyUsagePeriod__
#define __gnu_java_security_x509_ext_PrivateKeyUsagePeriod__

#pragma interface

#include <gnu/java/security/x509/ext/Extension$Value.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class OID;
        namespace x509
        {
          namespace ext
          {
              class PrivateKeyUsagePeriod;
          }
        }
      }
    }
  }
}

class gnu::java::security::x509::ext::PrivateKeyUsagePeriod : public ::gnu::java::security::x509::ext::Extension$Value
{

public:
  PrivateKeyUsagePeriod(JArray< jbyte > *);
  virtual ::java::util::Date * getNotBefore();
  virtual ::java::util::Date * getNotAfter();
  virtual ::java::lang::String * toString();
  static ::gnu::java::security::OID * ID;
private:
  ::java::util::Date * __attribute__((aligned(__alignof__( ::gnu::java::security::x509::ext::Extension$Value)))) notBefore;
  ::java::util::Date * notAfter;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_x509_ext_PrivateKeyUsagePeriod__
