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

#ifndef __javax_crypto_spec_DESKeySpec__
#define __javax_crypto_spec_DESKeySpec__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace crypto
    {
      namespace spec
      {
          class DESKeySpec;
      }
    }
  }
}

class javax::crypto::spec::DESKeySpec : public ::java::lang::Object
{

public:
  DESKeySpec(JArray< jbyte > *);
  DESKeySpec(JArray< jbyte > *, jint);
  static jboolean isParityAdjusted(JArray< jbyte > *, jint);
  static jboolean isWeak(JArray< jbyte > *, jint);
private:
  static jboolean equalsOrComplementEquals(JArray< jbyte > *, jint, JArray< jbyte > *);
public:
  virtual JArray< jbyte > * getKey();
  static const jint DES_KEY_LEN = 8;
private:
  JArray< jbyte > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) key;
  static JArray< JArray< jbyte > * > * WEAK_KEYS;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_crypto_spec_DESKeySpec__
