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

#ifndef __gnu_java_security_jce_sig_DSSParametersGenerator__
#define __gnu_java_security_jce_sig_DSSParametersGenerator__

#pragma interface

#include <java/security/AlgorithmParameterGeneratorSpi.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace jce
        {
          namespace sig
          {
              class DSSParametersGenerator;
          }
        }
        namespace key
        {
          namespace dss
          {
              class FIPS186;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class AlgorithmParameters;
        class Provider;
        class SecureRandom;
      namespace spec
      {
          class AlgorithmParameterSpec;
      }
    }
  }
}

class gnu::java::security::jce::sig::DSSParametersGenerator : public ::java::security::AlgorithmParameterGeneratorSpi
{

public:
  DSSParametersGenerator();
public: // actually protected
  virtual void engineInit(jint, ::java::security::SecureRandom *);
  virtual void engineInit(::java::security::spec::AlgorithmParameterSpec *, ::java::security::SecureRandom *);
  virtual ::java::security::AlgorithmParameters * engineGenerateParameters();
private:
  static ::java::security::Provider * GNU;
  jint __attribute__((aligned(__alignof__( ::java::security::AlgorithmParameterGeneratorSpi)))) modulusLength;
  ::java::security::SecureRandom * rnd;
  ::gnu::java::security::key::dss::FIPS186 * fips;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_jce_sig_DSSParametersGenerator__
