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

#ifndef __gnu_javax_crypto_key_dh_GnuDHPrivateKey__
#define __gnu_javax_crypto_key_dh_GnuDHPrivateKey__

#pragma interface

#include <gnu/javax/crypto/key/dh/GnuDHKey.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace key
        {
          namespace dh
          {
              class GnuDHPrivateKey;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
  }
}

class gnu::javax::crypto::key::dh::GnuDHPrivateKey : public ::gnu::javax::crypto::key::dh::GnuDHKey
{

public:
  GnuDHPrivateKey(::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *);
  GnuDHPrivateKey(jint, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *);
  static ::gnu::javax::crypto::key::dh::GnuDHPrivateKey * valueOf(JArray< jbyte > *);
  virtual ::java::math::BigInteger * getX();
  virtual JArray< jbyte > * getEncoded(jint);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * toString();
private:
  ::java::math::BigInteger * __attribute__((aligned(__alignof__( ::gnu::javax::crypto::key::dh::GnuDHKey)))) x;
  ::java::lang::String * str;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_key_dh_GnuDHPrivateKey__
