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

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

/**************************************************************/
/*                                                            */
/*  PKIAuditType                                              */
/*                                                            */
/**************************************************************/

struct EXTERN PKIAuditType {
   enum Root {
      unspecified = 0,
      processCert = 1,
      processCRL = 2,
      rejectCert = 3,
      revokeCert = 4,
      cessationCert = 5,
      resumeCert = 6,
      archiveCert = 7,
      deleteCert = 8,
      startSession = 9,
      affiliation = 10,
      newAuthorizedPerson = 11,
      authorizedPersonStart = 12,
      deleteKey = 13,
      stopSession = 14,
      startSessionNewPin = 15,
      addOrganization = 16,
      changeOrganization = 17,
      deleteOrganization = 18,
      addLicense = 19,
      changeLicense = 20,
      deleteLicense = 21,
      addPolicy = 22,
      changePolicy = 23,
      deletePolicy = 24,
      addOfficial = 25,
      changeOfficial = 26,
      deleteOfficial = 27,
      addCertificate = 28,
      changeCertificate = 29,
      deleteCertificate = 30,
      openAdditionalKey = 31
   } ;
} ;

typedef ASN1UINT ASN1T_PKIAuditType;

class EXTERN ASN1C_PKIAuditType :
   public ASN1CType
{
protected:
   ASN1T_PKIAuditType& msgData;
public:
   ASN1C_PKIAuditType (ASN1T_PKIAuditType& data);
   ASN1C_PKIAuditType (
      ASN1MessageBufferIF& msgBuf, ASN1T_PKIAuditType& data);
   ASN1C_PKIAuditType (ASN1C_PKIAuditType& 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_PKIAuditType& getCopy (ASN1T_PKIAuditType* pDstData = 0);
   ASN1T_PKIAuditType* newCopy ();

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

EXTERN int asn1E_PKIAuditType (ASN1CTXT* pctxt,
   ASN1T_PKIAuditType *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PKIAuditType (ASN1CTXT* pctxt,
   ASN1T_PKIAuditType *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PKIAuditType (ASN1CTXT *pctxt, ASN1T_PKIAuditType* pSrcValue, ASN1T_PKIAuditType* pDstValue);

/**************************************************************/
/*                                                            */
/*  PKIFreeText                                               */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PKIFreeText;

typedef struct EXTERN ASN1T_PKIFreeText : public ASN1TPDU {
   ASN1UINT n;
   ASN1UTF8String *elem;
   ASN1T_PKIFreeText () : n (0), elem(NULL) {} // FIXED for PVS
   ASN1T_PKIFreeText (ASN1C_PKIFreeText& srcData);
   ~ASN1T_PKIFreeText ();
} ASN1T_PKIFreeText;

class EXTERN ASN1C_PKIFreeText :
   public ASN1CType
{
protected:
   ASN1T_PKIFreeText& msgData;
public:
   ASN1C_PKIFreeText (ASN1T_PKIFreeText& data);
   ASN1C_PKIFreeText (
      ASN1MessageBufferIF& msgBuf, ASN1T_PKIFreeText& data);
   ASN1C_PKIFreeText (ASN1C_PKIFreeText& 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_PKIFreeText& getCopy (ASN1T_PKIFreeText* pDstData = 0);
   ASN1T_PKIFreeText* newCopy ();

   ASN1C_PKIFreeText& operator= (ASN1C_PKIFreeText& srcData);
} ;

EXTERN int asn1E_PKIFreeText (ASN1CTXT* pctxt,
   ASN1T_PKIFreeText *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PKIFreeText (ASN1CTXT* pctxt,
   ASN1T_PKIFreeText *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PKIFreeText (ASN1CTXT *pctxt, ASN1T_PKIFreeText* pSrcValue, ASN1T_PKIFreeText* pDstValue);

EXTERN void asn1Free_PKIFreeText (ASN1CTXT *pctxt, ASN1T_PKIFreeText* pvalue);

/**************************************************************/
/*                                                            */
/*  PKIAudit                                                  */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PKIAudit;

typedef struct EXTERN ASN1T_PKIAudit : public ASN1TPDU {
   ASN1T_PKIAuditType type;
   ASN1INT session;
   ASN1INT counter;
   ASN1BOOL success;
   ASN1T_PKIAudit ();
   ASN1T_PKIAudit (ASN1C_PKIAudit& srcData);
} ASN1T_PKIAudit;

class EXTERN ASN1C_PKIAudit :
   public ASN1CType
{
protected:
   ASN1T_PKIAudit& msgData;
public:
   ASN1C_PKIAudit (ASN1T_PKIAudit& data);
   ASN1C_PKIAudit (
      ASN1MessageBufferIF& msgBuf, ASN1T_PKIAudit& data);
   ASN1C_PKIAudit (ASN1C_PKIAudit& 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_PKIAudit& getCopy (ASN1T_PKIAudit* pDstData = 0);
   ASN1T_PKIAudit* newCopy ();

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

EXTERN int asn1E_PKIAudit (ASN1CTXT* pctxt,
   ASN1T_PKIAudit *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PKIAudit (ASN1CTXT* pctxt,
   ASN1T_PKIAudit *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PKIAudit (ASN1CTXT *pctxt, ASN1T_PKIAudit* pSrcValue, ASN1T_PKIAudit* pDstValue);

/**************************************************************/
/*                                                            */
/*  ChangeNameReq                                             */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_ChangeNameReq;

typedef struct EXTERN ASN1T_ChangeNameReq : public ASN1TPDU {
   struct {
      unsigned subjectAltNamePresent : 1;
      unsigned keyPhrasePresent : 1;
      unsigned additionalInfoPresent : 1;
   } m;
   ASN1T_Name subject;
   ASN1T_Name oldSubject;
   ASN1T_GeneralNames subjectAltName;
   ASN1T_PKIFreeText keyPhrase;
   ASN1T_PKIFreeText additionalInfo;
   ASN1T_ChangeNameReq ();
   ASN1T_ChangeNameReq (ASN1C_ChangeNameReq& srcData);
   ~ASN1T_ChangeNameReq ();
} ASN1T_ChangeNameReq;

class EXTERN ASN1C_ChangeNameReq :
   public ASN1CType
{
protected:
   ASN1T_ChangeNameReq& msgData;
public:
   ASN1C_ChangeNameReq (ASN1T_ChangeNameReq& data);
   ASN1C_ChangeNameReq (
      ASN1MessageBufferIF& msgBuf, ASN1T_ChangeNameReq& data);
   ASN1C_ChangeNameReq (ASN1C_ChangeNameReq& 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_ChangeNameReq& getCopy (ASN1T_ChangeNameReq* pDstData = 0);
   ASN1T_ChangeNameReq* newCopy ();

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

EXTERN int asn1E_ChangeNameReq (ASN1CTXT* pctxt,
   ASN1T_ChangeNameReq *pvalue, ASN1TagType tagging);

EXTERN int asn1D_ChangeNameReq (ASN1CTXT* pctxt,
   ASN1T_ChangeNameReq *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_ChangeNameReq (ASN1CTXT *pctxt, ASN1T_ChangeNameReq* pSrcValue, ASN1T_ChangeNameReq* pDstValue);

EXTERN void asn1Free_ChangeNameReq (ASN1CTXT *pctxt, ASN1T_ChangeNameReq* pvalue);

/* Value definitions */

extern EXTERN ASN1OBJID id_CryptoPro_it_PKIAudit;
extern EXTERN ASN1OBJID id_CryptoPro_it_GetMessage;
extern EXTERN ASN1OBJID id_CryptoPro_it_GetMessages;
extern EXTERN ASN1OBJID id_CryptoPro_it_ResumeCertificate;
extern EXTERN ASN1OBJID id_CryptoPro_it_ChangeNameReq;
extern EXTERN ASN1OBJID id_CryptoPro_it_DeleteCustomer;
extern EXTERN ASN1OBJID id_CryptoPro_it_ResumeCertificateReply;
extern EXTERN ASN1OBJID id_CryptoPro_it_Organization;
extern EXTERN ASN1OBJID id_CryptoPro_it_License;
extern EXTERN ASN1OBJID id_CryptoPro_it_Policy;
extern EXTERN ASN1OBJID id_CryptoPro_it_Official;
extern EXTERN ASN1OBJID id_CryptoPro_it_Certificate;

}
#endif
