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

#ifndef __gnu_javax_crypto_jce_key_SecretKeyGeneratorImpl__
#define __gnu_javax_crypto_jce_key_SecretKeyGeneratorImpl__

#pragma interface

#include <javax/crypto/KeyGeneratorSpi.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace jce
        {
          namespace key
          {
              class SecretKeyGeneratorImpl;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class SecureRandom;
      namespace spec
      {
          class AlgorithmParameterSpec;
      }
    }
  }
  namespace javax
  {
    namespace crypto
    {
        class SecretKey;
    }
  }
}

class gnu::javax::crypto::jce::key::SecretKeyGeneratorImpl : public ::javax::crypto::KeyGeneratorSpi
{

public: // actually protected
  SecretKeyGeneratorImpl(::java::lang::String *);
  virtual ::javax::crypto::SecretKey * engineGenerateKey();
  virtual void engineInit(::java::security::spec::AlgorithmParameterSpec *, ::java::security::SecureRandom *);
  virtual void engineInit(jint, ::java::security::SecureRandom *);
  virtual void engineInit(::java::security::SecureRandom *);
  jint __attribute__((aligned(__alignof__( ::javax::crypto::KeyGeneratorSpi)))) defaultKeySize;
  ::java::util::List * keySizes;
  ::java::lang::String * algorithm;
  jboolean init;
  jint currentKeySize;
  ::java::security::SecureRandom * random;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_jce_key_SecretKeyGeneratorImpl__
