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

#ifndef __gnu_javax_net_ssl_provider_SSLRSASignatureImpl__
#define __gnu_javax_net_ssl_provider_SSLRSASignatureImpl__

#pragma interface

#include <java/security/SignatureSpi.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace classpath
    {
      namespace debug
      {
          class SystemLogger;
      }
    }
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class SSLRSASignatureImpl;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class MessageDigest;
        class PrivateKey;
        class PublicKey;
      namespace interfaces
      {
          class RSAPrivateKey;
          class RSAPublicKey;
      }
    }
  }
}

class gnu::javax::net::ssl::provider::SSLRSASignatureImpl : public ::java::security::SignatureSpi
{

public:
  SSLRSASignatureImpl();
public: // actually protected
  virtual void engineInitVerify(::java::security::PublicKey *);
  virtual void engineInitSign(::java::security::PrivateKey *);
  virtual void engineUpdate(jbyte);
  virtual void engineUpdate(JArray< jbyte > *, jint, jint);
  virtual JArray< jbyte > * engineSign();
  virtual jboolean engineVerify(JArray< jbyte > *);
  virtual void engineSetParameter(::java::lang::String *, ::java::lang::Object *);
  virtual ::java::lang::Object * engineGetParameter(::java::lang::String *);
private:
  static ::gnu::classpath::debug::SystemLogger * logger;
  ::java::security::interfaces::RSAPublicKey * __attribute__((aligned(__alignof__( ::java::security::SignatureSpi)))) pubkey;
  ::java::security::interfaces::RSAPrivateKey * privkey;
  ::java::security::MessageDigest * md5;
  ::java::security::MessageDigest * sha;
  jboolean initSign;
  jboolean initVerify;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_SSLRSASignatureImpl__
