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

#ifndef __gnu_java_security_sig_rsa_EMSA_PSS__
#define __gnu_java_security_sig_rsa_EMSA_PSS__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace hash
        {
            class IMessageDigest;
        }
        namespace sig
        {
          namespace rsa
          {
              class EMSA_PSS;
          }
        }
      }
    }
  }
}

class gnu::java::security::sig::rsa::EMSA_PSS : public ::java::lang::Object
{

  EMSA_PSS(::gnu::java::security::hash::IMessageDigest *);
public:
  static ::gnu::java::security::sig::rsa::EMSA_PSS * getInstance(::java::lang::String *);
  virtual ::java::lang::Object * clone();
  virtual JArray< jbyte > * encode(JArray< jbyte > *, jint, JArray< jbyte > *);
  virtual jboolean decode(JArray< jbyte > *, JArray< jbyte > *, jint, jint);
private:
  JArray< jbyte > * MGF(JArray< jbyte > *, jint);
  static ::java::util::logging::Logger * log;
  ::gnu::java::security::hash::IMessageDigest * __attribute__((aligned(__alignof__( ::java::lang::Object)))) hash;
  jint hLen;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_sig_rsa_EMSA_PSS__
