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

#ifndef __gnu_java_security_hash_Whirlpool__
#define __gnu_java_security_hash_Whirlpool__

#pragma interface

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

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

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

public:
  Whirlpool();
private:
  Whirlpool(::gnu::java::security::hash::Whirlpool *);
public:
  ::java::lang::Object * clone();
public: // actually protected
  void transform(JArray< jbyte > *, jint);
  JArray< jbyte > * padBuffer();
  JArray< jbyte > * getResult();
  void resetContext();
public:
  jboolean selfTest();
private:
  static ::java::util::logging::Logger * log;
  static const jint BLOCK_SIZE = 64;
  static ::java::lang::String * DIGEST0;
  static const jint R = 10;
  static ::java::lang::String * S_box;
  static JArray< jlong > * T0;
  static JArray< jlong > * T1;
  static JArray< jlong > * T2;
  static JArray< jlong > * T3;
  static JArray< jlong > * T4;
  static JArray< jlong > * T5;
  static JArray< jlong > * T6;
  static JArray< jlong > * T7;
  static JArray< jlong > * rc;
  static ::java::lang::Boolean * valid;
  jlong __attribute__((aligned(__alignof__( ::gnu::java::security::hash::BaseHash)))) H0;
  jlong H1;
  jlong H2;
  jlong H3;
  jlong H4;
  jlong H5;
  jlong H6;
  jlong H7;
  jlong k00;
  jlong k01;
  jlong k02;
  jlong k03;
  jlong k04;
  jlong k05;
  jlong k06;
  jlong k07;
  jlong Kr0;
  jlong Kr1;
  jlong Kr2;
  jlong Kr3;
  jlong Kr4;
  jlong Kr5;
  jlong Kr6;
  jlong Kr7;
  jlong n0;
  jlong n1;
  jlong n2;
  jlong n3;
  jlong n4;
  jlong n5;
  jlong n6;
  jlong n7;
  jlong nn0;
  jlong nn1;
  jlong nn2;
  jlong nn3;
  jlong nn4;
  jlong nn5;
  jlong nn6;
  jlong nn7;
  jlong w0;
  jlong w1;
  jlong w2;
  jlong w3;
  jlong w4;
  jlong w5;
  jlong w6;
  jlong w7;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_hash_Whirlpool__
