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

#ifndef __gnu_java_security_pkcs_SignerInfo__
#define __gnu_java_security_pkcs_SignerInfo__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class OID;
        namespace ber
        {
            class BERReader;
        }
        namespace pkcs
        {
            class SignerInfo;
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
  }
  namespace javax
  {
    namespace security
    {
      namespace auth
      {
        namespace x500
        {
            class X500Principal;
        }
      }
    }
  }
}

class gnu::java::security::pkcs::SignerInfo : public ::java::lang::Object
{

public:
  SignerInfo(::gnu::java::security::ber::BERReader *);
  SignerInfo(::javax::security::auth::x500::X500Principal *, ::java::math::BigInteger *, ::gnu::java::security::OID *, JArray< jbyte > *, ::gnu::java::security::OID *, JArray< jbyte > *, JArray< jbyte > *);
  virtual ::java::math::BigInteger * getVersion();
  virtual ::java::math::BigInteger * getSerialNumber();
  virtual ::javax::security::auth::x500::X500Principal * getIssuer();
  virtual ::gnu::java::security::OID * getDigestAlgorithmId();
  virtual JArray< jbyte > * getDigestAlgorithmParams();
  virtual JArray< jbyte > * getAuthenticatedAttributes();
  virtual ::gnu::java::security::OID * getDigestEncryptionAlgorithmId();
  virtual JArray< jbyte > * getDigestEncryptionAlgorithmParams();
  virtual JArray< jbyte > * getEncryptedDigest();
  virtual JArray< jbyte > * getUnauthenticatedAttributes();
  virtual void encode(::java::io::OutputStream *);
private:
  static ::java::util::logging::Logger * log;
  ::java::math::BigInteger * __attribute__((aligned(__alignof__( ::java::lang::Object)))) version;
  ::java::math::BigInteger * serialNumber;
  ::javax::security::auth::x500::X500Principal * issuer;
  ::gnu::java::security::OID * digestAlgorithmId;
  JArray< jbyte > * digestAlgorithmParams;
  JArray< jbyte > * authenticatedAttributes;
  ::gnu::java::security::OID * digestEncryptionAlgorithmId;
  JArray< jbyte > * digestEncryptionAlgorithmParams;
  JArray< jbyte > * encryptedDigest;
  JArray< jbyte > * unauthenticatedAttributes;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_pkcs_SignerInfo__
