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

#ifndef __java_security_SecureRandom__
#define __java_security_SecureRandom__

#pragma interface

#include <java/util/Random.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Provider;
        class SecureRandom;
        class SecureRandomSpi;
    }
  }
}

class java::security::SecureRandom : public ::java::util::Random
{

public:
  SecureRandom();
  SecureRandom(JArray< jbyte > *);
public: // actually protected
  SecureRandom(::java::security::SecureRandomSpi *, ::java::security::Provider *);
private:
  SecureRandom(::java::security::SecureRandomSpi *, ::java::security::Provider *, ::java::lang::String *);
public:
  static ::java::security::SecureRandom * getInstance(::java::lang::String *);
  static ::java::security::SecureRandom * getInstance(::java::lang::String *, ::java::lang::String *);
  static ::java::security::SecureRandom * getInstance(::java::lang::String *, ::java::security::Provider *);
  virtual ::java::security::Provider * getProvider();
  virtual ::java::lang::String * getAlgorithm();
  virtual void setSeed(JArray< jbyte > *);
  virtual void setSeed(jlong);
  virtual void nextBytes(JArray< jbyte > *);
public: // actually protected
  virtual jint next(jint);
public:
  static JArray< jbyte > * getSeed(jint);
  virtual JArray< jbyte > * generateSeed(jint);
private:
  static ::java::lang::String * SECURE_RANDOM;
  static const jlong serialVersionUID = 4940670005562187LL;
public: // actually package-private
  jlong __attribute__((aligned(__alignof__( ::java::util::Random)))) counter;
  ::java::security::Provider * provider;
  JArray< jbyte > * randomBytes;
  jint randomBytesUsed;
  ::java::security::SecureRandomSpi * secureRandomSpi;
  JArray< jbyte > * state;
private:
  ::java::lang::String * algorithm;
  jboolean isSeeded;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_SecureRandom__
