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

#ifndef __gnu_javax_crypto_key_dh_DiffieHellmanReceiver__
#define __gnu_javax_crypto_key_dh_DiffieHellmanReceiver__

#pragma interface

#include <gnu/javax/crypto/key/dh/DiffieHellmanKeyAgreement.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace key
        {
            class IncomingMessage;
            class OutgoingMessage;
          namespace dh
          {
              class DiffieHellmanReceiver;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
  }
}

class gnu::javax::crypto::key::dh::DiffieHellmanReceiver : public ::gnu::javax::crypto::key::dh::DiffieHellmanKeyAgreement
{

public:
  DiffieHellmanReceiver();
public: // actually protected
  virtual void engineInit(::java::util::Map *);
  virtual ::gnu::javax::crypto::key::OutgoingMessage * engineProcessMessage(::gnu::javax::crypto::key::IncomingMessage *);
private:
  ::gnu::javax::crypto::key::OutgoingMessage * computeSharedSecret(::gnu::javax::crypto::key::IncomingMessage *);
  ::java::math::BigInteger * __attribute__((aligned(__alignof__( ::gnu::javax::crypto::key::dh::DiffieHellmanKeyAgreement)))) y;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_key_dh_DiffieHellmanReceiver__
