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

#ifndef __gnu_java_security_x509_ext_KeyUsage__
#define __gnu_java_security_x509_ext_KeyUsage__

#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 der
        {
            class BitString;
        }
        namespace x509
        {
          namespace ext
          {
              class KeyUsage;
          }
        }
      }
    }
  }
}

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

public:
  KeyUsage(JArray< jbyte > *);
  virtual ::gnu::java::security::der::BitString * getKeyUsage();
  virtual ::java::lang::String * toString();
  static ::gnu::java::security::OID * ID;
  static const jint DIGITAL_SIGNATURE = 0;
  static const jint NON_REPUDIATION = 1;
  static const jint KEY_ENCIPHERMENT = 2;
  static const jint DATA_ENCIPHERMENT = 3;
  static const jint KEY_AGREEMENT = 4;
  static const jint KEY_CERT_SIGN = 5;
  static const jint CRL_SIGN = 6;
  static const jint ENCIPHER_ONLY = 7;
  static const jint DECIPHER_ONLY = 8;
private:
  ::gnu::java::security::der::BitString * __attribute__((aligned(__alignof__( ::gnu::java::security::x509::ext::Extension$Value)))) keyUsage;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_x509_ext_KeyUsage__
