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

#ifndef __gnu_java_security_hash_Tiger__
#define __gnu_java_security_hash_Tiger__

#pragma interface

#include <gnu/java/security/hash/BaseHash.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace hash
        {
            class Tiger;
        }
      }
    }
  }
}

class gnu::java::security::hash::Tiger : public ::gnu::java::security::hash::BaseHash
{

public:
  Tiger();
private:
  Tiger(::gnu::java::security::hash::Tiger *);
public:
  virtual ::java::lang::Object * clone();
  virtual jboolean selfTest();
public: // actually protected
  virtual JArray< jbyte > * padBuffer();
  virtual JArray< jbyte > * getResult();
  virtual void resetContext();
  virtual void transform(JArray< jbyte > *, jint);
private:
  static const jint HASH_SIZE = 24;
  static const jint BLOCK_SIZE = 64;
  static ::java::lang::String * DIGEST0;
  static const jlong A = 81985529216486895LL;
  static const jlong B = -81985529216486896LL;
  static const jlong C = -1110518062304271993LL;
  static JArray< jlong > * T1;
  static JArray< jlong > * T2;
  static JArray< jlong > * T3;
  static JArray< jlong > * T4;
  static ::java::lang::Boolean * valid;
  jlong __attribute__((aligned(__alignof__( ::gnu::java::security::hash::BaseHash)))) a;
  jlong b;
  jlong c;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_hash_Tiger__
