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

#ifndef __gnu_java_security_hash_BaseHash__
#define __gnu_java_security_hash_BaseHash__

#pragma interface

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

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

class gnu::java::security::hash::BaseHash : public ::java::lang::Object
{

public: // actually protected
  BaseHash(::java::lang::String *, jint, jint);
public:
  virtual ::java::lang::String * name();
  virtual jint hashSize();
  virtual jint blockSize();
  virtual void update(jbyte);
  virtual void update(JArray< jbyte > *);
  virtual void update(JArray< jbyte > *, jint, jint);
  virtual JArray< jbyte > * digest();
  virtual void reset();
  virtual ::java::lang::Object * clone() = 0;
  virtual jboolean selfTest() = 0;
public: // actually protected
  virtual JArray< jbyte > * padBuffer() = 0;
  virtual JArray< jbyte > * getResult() = 0;
  virtual void resetContext() = 0;
  virtual void transform(JArray< jbyte > *, jint) = 0;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name__;
  jint hashSize__;
  jint blockSize__;
  jlong count;
  JArray< jbyte > * buffer;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_hash_BaseHash__
