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

#ifndef __gnu_javax_net_ssl_provider_AbstractHandshake$DHPhase__
#define __gnu_javax_net_ssl_provider_AbstractHandshake$DHPhase__

#pragma interface

#include <gnu/javax/net/ssl/provider/DelegatedTask.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class AbstractHandshake;
              class AbstractHandshake$DHPhase;
          }
        }
      }
    }
  }
  namespace javax
  {
    namespace crypto
    {
      namespace interfaces
      {
          class DHPublicKey;
      }
    }
  }
}

class gnu::javax::net::ssl::provider::AbstractHandshake$DHPhase : public ::gnu::javax::net::ssl::provider::DelegatedTask
{

public: // actually protected
  AbstractHandshake$DHPhase(::gnu::javax::net::ssl::provider::AbstractHandshake *, ::javax::crypto::interfaces::DHPublicKey *);
  AbstractHandshake$DHPhase(::gnu::javax::net::ssl::provider::AbstractHandshake *, ::javax::crypto::interfaces::DHPublicKey *, jboolean);
  virtual void implRun();
private:
  ::javax::crypto::interfaces::DHPublicKey * __attribute__((aligned(__alignof__( ::gnu::javax::net::ssl::provider::DelegatedTask)))) key;
  jboolean full;
public: // actually package-private
  ::gnu::javax::net::ssl::provider::AbstractHandshake * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_AbstractHandshake$DHPhase__
