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

#ifndef __gnu_javax_crypto_mac_UHash32$L1Hash32__
#define __gnu_javax_crypto_mac_UHash32$L1Hash32__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace mac
        {
            class UHash32;
            class UHash32$L1Hash32;
            class UHash32$L2Hash32;
            class UHash32$L3Hash32;
        }
      }
    }
  }
}

class gnu::javax::crypto::mac::UHash32$L1Hash32 : public ::java::lang::Object
{

public: // actually package-private
  UHash32$L1Hash32(::gnu::javax::crypto::mac::UHash32 *);
private:
  UHash32$L1Hash32(::gnu::javax::crypto::mac::UHash32 *, ::gnu::javax::crypto::mac::UHash32$L1Hash32 *);
public:
  virtual ::java::lang::Object * clone();
  virtual void init(JArray< jbyte > *, JArray< jbyte > *, JArray< jbyte > *, JArray< jbyte > *);
  virtual void update(jbyte);
  virtual JArray< jbyte > * digest();
  virtual void reset();
private:
  JArray< jbyte > * nh32(jint);
  JArray< jint > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) key;
  JArray< jbyte > * buffer;
  jint count;
  ::java::io::ByteArrayOutputStream * Y;
  jlong totalCount;
  ::gnu::javax::crypto::mac::UHash32$L2Hash32 * l2hash;
  ::gnu::javax::crypto::mac::UHash32$L3Hash32 * l3hash;
public: // actually package-private
  ::gnu::javax::crypto::mac::UHash32 * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_mac_UHash32$L1Hash32__
