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

#ifndef __gnu_java_security_pkcs_PKCS7SignedData__
#define __gnu_java_security_pkcs_PKCS7SignedData__

#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 PKCS7Data;
            class PKCS7SignedData;
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
    namespace security
    {
      namespace cert
      {
          class CRL;
          class Certificate;
          class X509CRL;
      }
    }
  }
}

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

public:
  PKCS7SignedData(::java::io::InputStream *);
  PKCS7SignedData(::gnu::java::security::ber::BERReader *);
  PKCS7SignedData(::java::util::Set *, ::gnu::java::security::pkcs::PKCS7Data *, JArray< ::java::security::cert::Certificate * > *, JArray< ::java::security::cert::X509CRL * > *, ::java::util::Set *);
  virtual ::java::math::BigInteger * getVersion();
  virtual JArray< ::java::security::cert::Certificate * > * getCertificates();
  virtual ::gnu::java::security::OID * getContentType();
  virtual JArray< jbyte > * getContent();
  virtual ::java::util::Set * getDigestAlgorithms();
  virtual ::java::util::Set * getSignerInfos();
  virtual void encode(::java::io::OutputStream *);
private:
  static ::java::util::logging::Logger * log;
public:
  static ::gnu::java::security::OID * PKCS7_SIGNED_DATA;
private:
  ::java::math::BigInteger * __attribute__((aligned(__alignof__( ::java::lang::Object)))) version;
  ::java::util::Set * digestAlgorithms;
  ::gnu::java::security::OID * contentType;
  JArray< jbyte > * content;
  JArray< ::java::security::cert::Certificate * > * certificates;
  JArray< ::java::security::cert::CRL * > * crls;
  ::java::util::Set * signerInfos;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_pkcs_PKCS7SignedData__
