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

#ifndef __gnu_java_security_key_rsa_RSAKeyPairGenerator__
#define __gnu_java_security_key_rsa_RSAKeyPairGenerator__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace key
        {
          namespace rsa
          {
              class RSAKeyPairGenerator;
          }
        }
        namespace util
        {
            class PRNG;
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
    namespace security
    {
        class KeyPair;
        class SecureRandom;
    }
  }
}

class gnu::java::security::key::rsa::RSAKeyPairGenerator : public ::java::lang::Object
{

public:
  RSAKeyPairGenerator();
  virtual ::java::lang::String * name();
  virtual void setup(::java::util::Map *);
  virtual ::java::security::KeyPair * generate();
private:
  void nextRandomBytes(JArray< jbyte > *);
  ::gnu::java::security::util::PRNG * getDefaultPRNG();
  static ::java::util::logging::Logger * log;
  static ::java::math::BigInteger * ONE;
  static ::java::math::BigInteger * TWO;
public:
  static ::java::lang::String * MODULUS_LENGTH;
  static ::java::lang::String * SOURCE_OF_RANDOMNESS;
  static ::java::lang::String * RSA_PARAMETERS;
  static ::java::lang::String * PREFERRED_ENCODING_FORMAT;
private:
  static const jint DEFAULT_MODULUS_LENGTH = 1024;
  static const jint DEFAULT_ENCODING_FORMAT = 1;
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) L;
  ::java::math::BigInteger * e;
  ::java::security::SecureRandom * rnd;
  ::gnu::java::security::util::PRNG * prng;
  jint preferredFormat;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_key_rsa_RSAKeyPairGenerator__
