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

#ifndef __gnu_java_security_jce_prng_SecureRandomAdapter__
#define __gnu_java_security_jce_prng_SecureRandomAdapter__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace jce
        {
          namespace prng
          {
              class SecureRandomAdapter;
          }
        }
        namespace prng
        {
            class MDGenerator;
        }
      }
    }
  }
}

class gnu::java::security::jce::prng::SecureRandomAdapter : public ::java::security::SecureRandomSpi
{

public: // actually protected
  SecureRandomAdapter(::java::lang::String *);
public:
  static JArray< jbyte > * getSeed(jint);
  virtual JArray< jbyte > * engineGenerateSeed(jint);
  virtual void engineNextBytes(JArray< jbyte > *);
  virtual void engineSetSeed(JArray< jbyte > *);
private:
  jboolean __attribute__((aligned(__alignof__( ::java::security::SecureRandomSpi)))) isSeeded;
  ::gnu::java::security::prng::MDGenerator * adaptee;
  ::java::lang::String * mdName;
  static ::java::util::logging::Logger * logger;
  static ::java::lang::String * SECURERANDOM_SOURCE;
  static ::java::lang::String * JAVA_SECURITY_EGD;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_jce_prng_SecureRandomAdapter__
