/**
 * This file was generated by the Objective Systems ASN1C Compiler
 * (http://www.obj-sys.com).  Version: 5.63.
 */
#ifndef CRYPTOPRO_CA_H
#define CRYPTOPRO_CA_H

#include <stdio.h>
#include <stdlib.h>
#include "asn1BerCppTypes.h"
#include "rtTable.h"
namespace asn1data {

/**************************************************************/
/*                                                            */
/*  CertificateTemplate                                       */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_CertificateTemplate;

typedef struct EXTERN ASN1T_CertificateTemplate : public ASN1TPDU {
   struct {
      unsigned templateMinorVersionPresent : 1;
   } m;
   ASN1TObjId templateID;
   ASN1UINT templateMajorVersion;
   ASN1UINT templateMinorVersion;
   ASN1T_CertificateTemplate ();
   ASN1T_CertificateTemplate (ASN1C_CertificateTemplate& srcData);
} ASN1T_CertificateTemplate;

class EXTERN ASN1C_CertificateTemplate :
   public ASN1CType
{
protected:
   ASN1T_CertificateTemplate& msgData;
public:
   ASN1C_CertificateTemplate (ASN1T_CertificateTemplate& data);
   ASN1C_CertificateTemplate (
      ASN1MessageBufferIF& msgBuf, ASN1T_CertificateTemplate& data);
   ASN1C_CertificateTemplate (ASN1C_CertificateTemplate& original);

   // standard encode/decode methods (defined in ASN1CType base class):
   // int Encode ();
   // int Decode ();

   // stream encode/decode methods:
   int EncodeTo (ASN1MessageBufferIF& msgBuf);
   int DecodeFrom (ASN1MessageBufferIF& msgBuf);

   ASN1T_CertificateTemplate& getCopy (ASN1T_CertificateTemplate* pDstData = 0);
   ASN1T_CertificateTemplate* newCopy ();

   inline ASN1C_CertificateTemplate& operator= (ASN1C_CertificateTemplate& srcData) {
      srcData.getCopy (&msgData);
      return *this;
   }
} ;

EXTERN int asn1E_CertificateTemplate (ASN1CTXT* pctxt,
   ASN1T_CertificateTemplate *pvalue, ASN1TagType tagging);

EXTERN int asn1D_CertificateTemplate (ASN1CTXT* pctxt,
   ASN1T_CertificateTemplate *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_CertificateTemplate (ASN1CTXT *pctxt, ASN1T_CertificateTemplate* pSrcValue, ASN1T_CertificateTemplate* pDstValue);

/**************************************************************/
/*                                                            */
/*  EnrollmentNameValuePair                                   */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_EnrollmentNameValuePair;

typedef struct EXTERN ASN1T_EnrollmentNameValuePair : public ASN1TPDU {
   ASN1BMPString name;
   ASN1BMPString value;
   ASN1T_EnrollmentNameValuePair ();
   ASN1T_EnrollmentNameValuePair (ASN1C_EnrollmentNameValuePair& srcData);
} ASN1T_EnrollmentNameValuePair;

class EXTERN ASN1C_EnrollmentNameValuePair :
   public ASN1CType
{
protected:
   ASN1T_EnrollmentNameValuePair& msgData;
public:
   ASN1C_EnrollmentNameValuePair (ASN1T_EnrollmentNameValuePair& data);
   ASN1C_EnrollmentNameValuePair (
      ASN1MessageBufferIF& msgBuf, ASN1T_EnrollmentNameValuePair& data);
   ASN1C_EnrollmentNameValuePair (ASN1C_EnrollmentNameValuePair& original);

   // standard encode/decode methods (defined in ASN1CType base class):
   // int Encode ();
   // int Decode ();

   // stream encode/decode methods:
   int EncodeTo (ASN1MessageBufferIF& msgBuf);
   int DecodeFrom (ASN1MessageBufferIF& msgBuf);

   ASN1T_EnrollmentNameValuePair& getCopy (ASN1T_EnrollmentNameValuePair* pDstData = 0);
   ASN1T_EnrollmentNameValuePair* newCopy ();

   inline ASN1C_EnrollmentNameValuePair& operator= (ASN1C_EnrollmentNameValuePair& srcData) {
      srcData.getCopy (&msgData);
      return *this;
   }
} ;

EXTERN int asn1E_EnrollmentNameValuePair (ASN1CTXT* pctxt,
   ASN1T_EnrollmentNameValuePair *pvalue, ASN1TagType tagging);

EXTERN int asn1D_EnrollmentNameValuePair (ASN1CTXT* pctxt,
   ASN1T_EnrollmentNameValuePair *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_EnrollmentNameValuePair (ASN1CTXT *pctxt, ASN1T_EnrollmentNameValuePair* pSrcValue, ASN1T_EnrollmentNameValuePair* pDstValue);

/* Value definitions */

extern EXTERN ASN1OBJID id_Test_Org;
extern EXTERN ASN1OBJID id_Test_Id;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplates;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_genericTemplateRoot;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_rootCa;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_subCa;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_crossCa;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_tlsServer;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_pkiServer;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_pkiClient;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_tlsClient;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_email;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_user;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_tempUser;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_ocsp;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_tsp;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_domainController;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_certificateTemplate_smartCardUser;
extern EXTERN ASN1OBJID id_CryptoPro_cc2_profileAttributes;

}
#endif
