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

#ifndef __gnu_java_security_sig_rsa_RSA__
#define __gnu_java_security_sig_rsa_RSA__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace sig
        {
          namespace rsa
          {
              class RSA;
          }
        }
        namespace util
        {
            class PRNG;
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
    namespace security
    {
        class PrivateKey;
        class PublicKey;
      namespace interfaces
      {
          class RSAPrivateKey;
          class RSAPublicKey;
      }
    }
  }
}

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

  RSA();
public:
  static ::java::math::BigInteger * sign(::java::security::PrivateKey *, ::java::math::BigInteger *);
  static ::java::math::BigInteger * verify(::java::security::PublicKey *, ::java::math::BigInteger *);
  static ::java::math::BigInteger * encrypt(::java::security::PublicKey *, ::java::math::BigInteger *);
  static ::java::math::BigInteger * decrypt(::java::security::PrivateKey *, ::java::math::BigInteger *);
  static JArray< jbyte > * I2OSP(::java::math::BigInteger *, jint);
private:
  static ::java::math::BigInteger * RSAEP(::java::security::interfaces::RSAPublicKey *, ::java::math::BigInteger *);
  static ::java::math::BigInteger * RSADP(::java::security::interfaces::RSAPrivateKey *, ::java::math::BigInteger *);
  static ::java::math::BigInteger * newR(::java::math::BigInteger *);
  static ::java::math::BigInteger * ZERO;
  static ::java::math::BigInteger * ONE;
  static ::gnu::java::security::util::PRNG * prng;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_sig_rsa_RSA__
