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

#ifndef __gnu_javax_net_ssl_provider_Finished__
#define __gnu_javax_net_ssl_provider_Finished__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class Finished;
              class ProtocolVersion;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
    }
  }
}

class gnu::javax::net::ssl::provider::Finished : public ::java::lang::Object
{

public: // actually package-private
  Finished(::java::nio::ByteBuffer *, ::gnu::javax::net::ssl::provider::ProtocolVersion *);
public:
  jint length();
public: // actually package-private
  JArray< jbyte > * verifyData();
  JArray< jbyte > * md5Hash();
  JArray< jbyte > * shaHash();
  void setVerifyData(JArray< jbyte > *, jint);
  void setMD5Hash(JArray< jbyte > *, jint);
  void setShaHash(JArray< jbyte > *, jint);
public:
  ::java::lang::String * toString();
  ::java::lang::String * toString(::java::lang::String *);
private:
  ::java::nio::ByteBuffer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) buffer;
  ::gnu::javax::net::ssl::provider::ProtocolVersion * version;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_Finished__
