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

#ifndef __gnu_javax_net_ssl_provider_SSLHMac__
#define __gnu_javax_net_ssl_provider_SSLHMac__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace hash
        {
            class IMessageDigest;
        }
      }
    }
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class SSLHMac;
          }
        }
      }
    }
  }
}

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

public: // actually package-private
  SSLHMac(::java::lang::String *);
public:
  virtual ::java::lang::Object * clone();
  virtual ::java::lang::String * name();
  virtual jint macSize();
  virtual void init(::java::util::Map *);
  virtual void reset();
  virtual JArray< jbyte > * digest();
  virtual void update(jbyte);
  virtual void update(JArray< jbyte > *, jint, jint);
  virtual jboolean selfTest();
public: // actually package-private
  static const jbyte PAD1 = 54;
  static const jbyte PAD2 = 92;
public: // actually protected
  ::gnu::java::security::hash::IMessageDigest * __attribute__((aligned(__alignof__( ::java::lang::Object)))) md;
  JArray< jbyte > * key;
  JArray< jbyte > * pad1;
  JArray< jbyte > * pad2;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_SSLHMac__
