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

#ifndef __gnu_java_security_key_dss_DSSKeyPairX509Codec__
#define __gnu_java_security_key_dss_DSSKeyPairX509Codec__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class OID;
        namespace key
        {
          namespace dss
          {
              class DSSKeyPairX509Codec;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class PrivateKey;
        class PublicKey;
    }
  }
}

class gnu::java::security::key::dss::DSSKeyPairX509Codec : public ::java::lang::Object
{

public:
  DSSKeyPairX509Codec();
  virtual jint getFormatID();
  virtual JArray< jbyte > * encodePublicKey(::java::security::PublicKey *);
  virtual JArray< jbyte > * encodePrivateKey(::java::security::PrivateKey *);
  virtual ::java::security::PublicKey * decodePublicKey(JArray< jbyte > *);
  virtual ::java::security::PrivateKey * decodePrivateKey(JArray< jbyte > *);
private:
  static ::gnu::java::security::OID * DSA_ALG_OID;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_key_dss_DSSKeyPairX509Codec__
