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

#ifndef __gnu_javax_crypto_jce_key_SecretKeyFactoryImpl__
#define __gnu_javax_crypto_jce_key_SecretKeyFactoryImpl__

#pragma interface

#include <javax/crypto/SecretKeyFactorySpi.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace jce
        {
          namespace key
          {
              class SecretKeyFactoryImpl;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
      namespace spec
      {
          class KeySpec;
      }
    }
  }
  namespace javax
  {
    namespace crypto
    {
        class SecretKey;
    }
  }
}

class gnu::javax::crypto::jce::key::SecretKeyFactoryImpl : public ::javax::crypto::SecretKeyFactorySpi
{

public: // actually protected
  SecretKeyFactoryImpl();
  virtual ::javax::crypto::SecretKey * engineGenerateSecret(::java::security::spec::KeySpec *);
  virtual ::java::security::spec::KeySpec * engineGetKeySpec(::javax::crypto::SecretKey *, ::java::lang::Class *);
  virtual ::javax::crypto::SecretKey * engineTranslateKey(::javax::crypto::SecretKey *);
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_jce_key_SecretKeyFactoryImpl__
