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

#ifndef __java_security_spec_RSAMultiPrimePrivateCrtKeySpec__
#define __java_security_spec_RSAMultiPrimePrivateCrtKeySpec__

#pragma interface

#include <java/security/spec/RSAPrivateKeySpec.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
    namespace security
    {
      namespace spec
      {
          class RSAMultiPrimePrivateCrtKeySpec;
          class RSAOtherPrimeInfo;
      }
    }
  }
}

class java::security::spec::RSAMultiPrimePrivateCrtKeySpec : public ::java::security::spec::RSAPrivateKeySpec
{

public:
  RSAMultiPrimePrivateCrtKeySpec(::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, JArray< ::java::security::spec::RSAOtherPrimeInfo * > *);
  virtual ::java::math::BigInteger * getPublicExponent();
  virtual ::java::math::BigInteger * getPrimeP();
  virtual ::java::math::BigInteger * getPrimeQ();
  virtual ::java::math::BigInteger * getPrimeExponentP();
  virtual ::java::math::BigInteger * getPrimeExponentQ();
  virtual ::java::math::BigInteger * getCrtCoefficient();
  virtual JArray< ::java::security::spec::RSAOtherPrimeInfo * > * getOtherPrimeInfo();
private:
  ::java::math::BigInteger * __attribute__((aligned(__alignof__( ::java::security::spec::RSAPrivateKeySpec)))) publicExponent;
  ::java::math::BigInteger * primeP;
  ::java::math::BigInteger * primeQ;
  ::java::math::BigInteger * primeExponentP;
  ::java::math::BigInteger * primeExponentQ;
  ::java::math::BigInteger * crtCoefficient;
  JArray< ::java::security::spec::RSAOtherPrimeInfo * > * otherPrimeInfo;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_spec_RSAMultiPrimePrivateCrtKeySpec__
