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

#ifndef __java_security_DummyMessageDigest__
#define __java_security_DummyMessageDigest__

#pragma interface

#include <java/security/MessageDigest.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class DummyMessageDigest;
        class MessageDigestSpi;
    }
  }
}

class java::security::DummyMessageDigest : public ::java::security::MessageDigest
{

public:
  DummyMessageDigest(::java::security::MessageDigestSpi *, ::java::lang::String *);
  ::java::lang::Object * clone();
  JArray< jbyte > * engineDigest();
  jint engineDigest(JArray< jbyte > *, jint, jint);
  jint engineGetDigestLength();
  void engineReset();
  void engineUpdate(jbyte);
  void engineUpdate(JArray< jbyte > *, jint, jint);
private:
  ::java::security::MessageDigestSpi * __attribute__((aligned(__alignof__( ::java::security::MessageDigest)))) mdSpi;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_DummyMessageDigest__
