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

#ifndef __gnu_java_security_jce_sig_RSAKeyFactory__
#define __gnu_java_security_jce_sig_RSAKeyFactory__

#pragma interface

#include <java/security/KeyFactorySpi.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace jce
        {
          namespace sig
          {
              class RSAKeyFactory;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class Key;
        class PrivateKey;
        class PublicKey;
      namespace spec
      {
          class KeySpec;
      }
    }
  }
}

class gnu::java::security::jce::sig::RSAKeyFactory : public ::java::security::KeyFactorySpi
{

public:
  RSAKeyFactory();
public: // actually protected
  virtual ::java::security::PublicKey * engineGeneratePublic(::java::security::spec::KeySpec *);
  virtual ::java::security::PrivateKey * engineGeneratePrivate(::java::security::spec::KeySpec *);
  virtual ::java::security::spec::KeySpec * engineGetKeySpec(::java::security::Key *, ::java::lang::Class *);
  virtual ::java::security::Key * engineTranslateKey(::java::security::Key *);
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_jce_sig_RSAKeyFactory__
