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

#include <stdio.h>
#include <stdlib.h>
#include "asn1BerCppTypes.h"
#include "asn1XerCppTypes.h"
#include "rtTable.h"
#include "ASN1CXerOpenType.h"
#include "ASN1CBitStr.h"
#include "ASN1CGeneralizedTime.h"
#include "ASN1CSeqOfList.h"
#include "CertificateExtensionsClass.h"
#include "UsefulDefinitions.h"
#include "PKIXOCSPClass.h"
#include "PKIX1Explicit88Class.h"
#include "Gost-Qualified-Certificate.h"
#include "PKIX1Explicit88BaseTypesClass.h"
#include "Cryptographic-Gost-Useful-DefinitionsClass.h"
#include "PKIXCMPClass.h"
#include "CryptographicMessageSyntaxClass.h"
#include "ETS-ElectronicSignatureFormats-97SyntaxClass.h"
namespace asn1data {

/* Object definitions */

/**************************************************************/
/*                                                            */
/*  authorityInfoAccess                                       */
/*                                                            */
/**************************************************************/

class EXTERN authorityInfoAccess : public EXTENSION {
 public:
   authorityInfoAccess();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~authorityInfoAccess() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  subjectInfoAccess                                         */
/*                                                            */
/**************************************************************/

class EXTERN subjectInfoAccess : public EXTENSION {
 public:
   subjectInfoAccess();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~subjectInfoAccess() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  authorityKeyIdentifier                                    */
/*                                                            */
/**************************************************************/

class EXTERN authorityKeyIdentifier : public EXTENSION {
 public:
   authorityKeyIdentifier();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~authorityKeyIdentifier() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  subjectKeyIdentifier                                      */
/*                                                            */
/**************************************************************/

class EXTERN subjectKeyIdentifier : public EXTENSION {
 public:
   subjectKeyIdentifier();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~subjectKeyIdentifier() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  keyUsage                                                  */
/*                                                            */
/**************************************************************/

class EXTERN keyUsage : public EXTENSION {
 public:
   keyUsage();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~keyUsage() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  extKeyUsage                                               */
/*                                                            */
/**************************************************************/

class EXTERN extKeyUsage : public EXTENSION {
 public:
   extKeyUsage();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~extKeyUsage() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  privateKeyUsagePeriod                                     */
/*                                                            */
/**************************************************************/

class EXTERN privateKeyUsagePeriod : public EXTENSION {
 public:
   privateKeyUsagePeriod();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~privateKeyUsagePeriod() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificatePolicies                                       */
/*                                                            */
/**************************************************************/

class EXTERN certificatePolicies : public EXTENSION {
 public:
   certificatePolicies();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~certificatePolicies() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  qtCpsQualifier                                            */
/*                                                            */
/**************************************************************/

class EXTERN qtCpsQualifier : public CERT_POLICY_QUALIFIER {
 public:
   qtCpsQualifier();

   virtual void* constructASN1TQualifier
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CQualifier
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CQualifier
       (ASN1CType* obj);

   virtual ~qtCpsQualifier() {}

   virtual int encodeBERQualifier
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERQualifier
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyQualifier
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeQualifier
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  qtUnoticeQualifier                                        */
/*                                                            */
/**************************************************************/

class EXTERN qtUnoticeQualifier : public CERT_POLICY_QUALIFIER {
 public:
   qtUnoticeQualifier();

   virtual void* constructASN1TQualifier
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CQualifier
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CQualifier
       (ASN1CType* obj);

   virtual ~qtUnoticeQualifier() {}

   virtual int encodeBERQualifier
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERQualifier
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyQualifier
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeQualifier
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  policyMappings                                            */
/*                                                            */
/**************************************************************/

class EXTERN policyMappings : public EXTENSION {
 public:
   policyMappings();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~policyMappings() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  subjectAltName                                            */
/*                                                            */
/**************************************************************/

class EXTERN subjectAltName : public EXTENSION {
 public:
   subjectAltName();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~subjectAltName() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  issuerAltName                                             */
/*                                                            */
/**************************************************************/

class EXTERN issuerAltName : public EXTENSION {
 public:
   issuerAltName();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~issuerAltName() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  subjectDirectoryAttributes                                */
/*                                                            */
/**************************************************************/

class EXTERN subjectDirectoryAttributes : public EXTENSION {
 public:
   subjectDirectoryAttributes();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~subjectDirectoryAttributes() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  basicConstraints                                          */
/*                                                            */
/**************************************************************/

class EXTERN basicConstraints : public EXTENSION {
 public:
   basicConstraints();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~basicConstraints() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  nameConstraints                                           */
/*                                                            */
/**************************************************************/

class EXTERN nameConstraints : public EXTENSION {
 public:
   nameConstraints();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~nameConstraints() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  policyConstraints                                         */
/*                                                            */
/**************************************************************/

class EXTERN policyConstraints : public EXTENSION {
 public:
   policyConstraints();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~policyConstraints() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  cRLNumber                                                 */
/*                                                            */
/**************************************************************/

class EXTERN cRLNumber : public EXTENSION {
 public:
   cRLNumber();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~cRLNumber() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  reasonCode                                                */
/*                                                            */
/**************************************************************/

class EXTERN reasonCode : public EXTENSION {
 public:
   reasonCode();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~reasonCode() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  instructionCode                                           */
/*                                                            */
/**************************************************************/

class EXTERN instructionCode : public EXTENSION {
 public:
   instructionCode();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~instructionCode() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  invalidityDate                                            */
/*                                                            */
/**************************************************************/

class EXTERN invalidityDate : public EXTENSION {
 public:
   invalidityDate();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~invalidityDate() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  cRLDistributionPoints                                     */
/*                                                            */
/**************************************************************/

class EXTERN cRLDistributionPoints : public EXTENSION {
 public:
   cRLDistributionPoints();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~cRLDistributionPoints() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  issuingDistributionPoint                                  */
/*                                                            */
/**************************************************************/

class EXTERN issuingDistributionPoint : public EXTENSION {
 public:
   issuingDistributionPoint();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~issuingDistributionPoint() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificateIssuer                                         */
/*                                                            */
/**************************************************************/

class EXTERN certificateIssuer : public EXTENSION {
 public:
   certificateIssuer();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~certificateIssuer() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  deltaCRLIndicator                                         */
/*                                                            */
/**************************************************************/

class EXTERN deltaCRLIndicator : public EXTENSION {
 public:
   deltaCRLIndicator();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~deltaCRLIndicator() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  freshestCrl                                               */
/*                                                            */
/**************************************************************/

class EXTERN freshestCrl : public EXTENSION {
 public:
   freshestCrl();

   virtual void* constructASN1TExtnType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CExtnType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CExtnType
       (ASN1CType* obj);

   virtual ~freshestCrl() {}

   virtual int encodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyExtnType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeExtnType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificateExactMatch                                     */
/*                                                            */
/**************************************************************/

class EXTERN certificateExactMatch : public MATCHING_RULE {
 public:
   certificateExactMatch();

   virtual void* constructASN1TAssertionType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CAssertionType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CAssertionType
       (ASN1CType* obj);

   virtual ~certificateExactMatch() {}

   virtual int encodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificateMatch                                          */
/*                                                            */
/**************************************************************/

class EXTERN certificateMatch : public MATCHING_RULE {
 public:
   certificateMatch();

   virtual void* constructASN1TAssertionType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CAssertionType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CAssertionType
       (ASN1CType* obj);

   virtual ~certificateMatch() {}

   virtual int encodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificatePairExactMatch                                 */
/*                                                            */
/**************************************************************/

class EXTERN certificatePairExactMatch : public MATCHING_RULE {
 public:
   certificatePairExactMatch();

   virtual void* constructASN1TAssertionType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CAssertionType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CAssertionType
       (ASN1CType* obj);

   virtual ~certificatePairExactMatch() {}

   virtual int encodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificatePairMatch                                      */
/*                                                            */
/**************************************************************/

class EXTERN certificatePairMatch : public MATCHING_RULE {
 public:
   certificatePairMatch();

   virtual void* constructASN1TAssertionType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CAssertionType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CAssertionType
       (ASN1CType* obj);

   virtual ~certificatePairMatch() {}

   virtual int encodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificateListExactMatch                                 */
/*                                                            */
/**************************************************************/

class EXTERN certificateListExactMatch : public MATCHING_RULE {
 public:
   certificateListExactMatch();

   virtual void* constructASN1TAssertionType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CAssertionType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CAssertionType
       (ASN1CType* obj);

   virtual ~certificateListExactMatch() {}

   virtual int encodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  certificateListMatch                                      */
/*                                                            */
/**************************************************************/

class EXTERN certificateListMatch : public MATCHING_RULE {
 public:
   certificateListMatch();

   virtual void* constructASN1TAssertionType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CAssertionType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CAssertionType
       (ASN1CType* obj);

   virtual ~certificateListMatch() {}

   virtual int encodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;

/**************************************************************/
/*                                                            */
/*  algorithmIdentifierMatch                                  */
/*                                                            */
/**************************************************************/

class EXTERN algorithmIdentifierMatch : public MATCHING_RULE {
 public:
   algorithmIdentifierMatch();

   virtual void* constructASN1TAssertionType
       (ASN1CTXT* pctxt);

   virtual ASN1CType* constructASN1CAssertionType
       (ASN1MessageBufferIF& msgBuf, void* data);

   virtual void destructASN1CAssertionType
       (ASN1CType* obj);

   virtual ~algorithmIdentifierMatch() {}

   virtual int encodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual int decodeBERAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);

   virtual void copyAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& srcObject, ASN1TObject& dstObject);
   virtual void freeAssertionType
      (ASN1CTXT* pctxt, ASN1TObject& object);
} ;


/* ObjectSet definitions */

/**************************************************************/
/*                                                            */
/*  SupportedPolicyQualifiers                                 */
/*                                                            */
/**************************************************************/

class EXTERN SupportedPolicyQualifiers {
 protected:
   CERT_POLICY_QUALIFIER* mObjectSet[2];
   const size_t mNumObjects;
   static SupportedPolicyQualifiers* mpInstance;
   SupportedPolicyQualifiers (ASN1CTXT *pctxt);

 public:
   CERT_POLICY_QUALIFIER* lookupObject (ASN1TObjId _id);

   static SupportedPolicyQualifiers* instance(ASN1CTXT *pctxt = 0);
} ;

/**************************************************************/
/*                                                            */
/*  ExtensionSet                                              */
/*                                                            */
/**************************************************************/

class EXTERN ExtensionSet {
 protected:
   EXTENSION* mObjectSet[36];
   const size_t mNumObjects;
   static ExtensionSet* mpInstance;
   ExtensionSet (ASN1CTXT *pctxt);

 public:
   EXTENSION* lookupObject (ASN1TObjId _id);

   static ExtensionSet* instance(ASN1CTXT *pctxt = 0);
} ;


}
#endif
