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

#ifndef __gnu_java_security_key_dss_DSSPublicKey__
#define __gnu_java_security_key_dss_DSSPublicKey__

#pragma interface

#include <gnu/java/security/key/dss/DSSKey.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace key
        {
          namespace dss
          {
              class DSSPublicKey;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
  }
}

class gnu::java::security::key::dss::DSSPublicKey : public ::gnu::java::security::key::dss::DSSKey
{

public:
  DSSPublicKey(::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *);
  DSSPublicKey(jint, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *, ::java::math::BigInteger *);
  static ::gnu::java::security::key::dss::DSSPublicKey * valueOf(JArray< jbyte > *);
  virtual ::java::math::BigInteger * getY();
  virtual JArray< jbyte > * getEncoded(jint);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * toString();
private:
  ::java::math::BigInteger * __attribute__((aligned(__alignof__( ::gnu::java::security::key::dss::DSSKey)))) y;
  ::java::lang::String * str;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_key_dss_DSSPublicKey__
