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

#include <stdio.h>
#include <stdlib.h>
#include "asn1BerCppTypes.h"
#include "asn1XerCppTypes.h"
#include "rtTable.h"
#include "ASN1CXerOpenType.h"
#include "GostR3410-2001-PKISyntax.h"
#include "GostR3410-2012-PKISyntax.h"
#include "Gost28147-89-EncryptionSyntax.h"
#include "GostR3411-94-DigestSyntax.h"
#include "Cryptographic-Gost-Useful-Definitions.h"
namespace asn1data {

/**************************************************************/
/*                                                            */
/*  NULLParams                                                */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_NULLParams :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
public:
   ASN1C_NULLParams ();
   ASN1C_NULLParams (
      ASN1MessageBufferIF& msgBuf);
   ASN1C_NULLParams (ASN1C_NULLParams& 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);


   inline ASN1C_NULLParams& operator= (ASN1C_NULLParams& srcData) {
      return *this;
   }
} ;

EXTERN int asn1E_NULLParams_ (ASN1CTXT* pctxt,
   void *pvalue, ASN1TagType tagging);
#define asn1E_NULLParams(pctxt, tagging) \
asn1E_NULLParams_(pctxt, NULL, tagging)

EXTERN int asn1D_NULLParams_ (ASN1CTXT* pctxt,
   void* pvalue, ASN1TagType tagging, int length);
#define asn1D_NULLParams(pctxt, tagging, length) \
asn1D_NULLParams_(pctxt, NULL, tagging, length)

EXTERN int asn1XE_NULLParams
  (ASN1CTXT* pctxt,
   ASN1ConstCharPtr elemName,    ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_NULLParams_ (ASN1CTXT *pctxt, void* pSrcValue, void* pDstValue);
#define asn1Copy_NULLParams(name) \
asn1Copy_NULLParams_(name, NULL, NULL)

/**************************************************************/
/*                                                            */
/*  _gost2001PubKey_Type                                      */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gost2001PubKey_Type_null_    1
#define T__gost2001PubKey_Type_params   2

class EXTERN ASN1C__gost2001PubKey_Type;

typedef struct EXTERN ASN1T__gost2001PubKey_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3410_2001_PublicKeyParameters *params;
   } u;
   ASN1T__gost2001PubKey_Type () {}
   ASN1T__gost2001PubKey_Type (ASN1C__gost2001PubKey_Type& srcData);
   ~ASN1T__gost2001PubKey_Type ();
} ASN1T__gost2001PubKey_Type;

class EXTERN ASN1C__gost2001PubKey_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gost2001PubKey_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_GostR3410_2001_PublicKeyParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__gost2001PubKey_Type (ASN1T__gost2001PubKey_Type& data);
   ASN1C__gost2001PubKey_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gost2001PubKey_Type& data);
   ASN1C__gost2001PubKey_Type (ASN1C__gost2001PubKey_Type& original);

   ~ASN1C__gost2001PubKey_Type();
   // 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__gost2001PubKey_Type& getCopy (ASN1T__gost2001PubKey_Type* pDstData = 0);
   ASN1T__gost2001PubKey_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gost2001PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2001PubKey_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gost2001PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2001PubKey_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gost2001PubKey_Type
  (ASN1CTXT* pctxt, ASN1T__gost2001PubKey_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gost2001PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2001PubKey_Type* pSrcValue, ASN1T__gost2001PubKey_Type* pDstValue);

EXTERN void asn1Free__gost2001PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2001PubKey_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _gost2001DHPubKey_Type                                    */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gost2001DHPubKey_Type_null_  1
#define T__gost2001DHPubKey_Type_params 2

class EXTERN ASN1C__gost2001DHPubKey_Type;

typedef struct EXTERN ASN1T__gost2001DHPubKey_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3410_2001_PublicKeyParameters *params;
   } u;
   ASN1T__gost2001DHPubKey_Type () {}
   ASN1T__gost2001DHPubKey_Type (ASN1C__gost2001DHPubKey_Type& srcData);
   ~ASN1T__gost2001DHPubKey_Type ();
} ASN1T__gost2001DHPubKey_Type;

class EXTERN ASN1C__gost2001DHPubKey_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gost2001DHPubKey_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_GostR3410_2001_PublicKeyParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__gost2001DHPubKey_Type (ASN1T__gost2001DHPubKey_Type& data);
   ASN1C__gost2001DHPubKey_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gost2001DHPubKey_Type& data);
   ASN1C__gost2001DHPubKey_Type (ASN1C__gost2001DHPubKey_Type& original);

   ~ASN1C__gost2001DHPubKey_Type();
   // 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__gost2001DHPubKey_Type& getCopy (ASN1T__gost2001DHPubKey_Type* pDstData = 0);
   ASN1T__gost2001DHPubKey_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gost2001DHPubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2001DHPubKey_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gost2001DHPubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2001DHPubKey_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gost2001DHPubKey_Type
  (ASN1CTXT* pctxt, ASN1T__gost2001DHPubKey_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gost2001DHPubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2001DHPubKey_Type* pSrcValue, ASN1T__gost2001DHPubKey_Type* pDstValue);

EXTERN void asn1Free__gost2001DHPubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2001DHPubKey_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _gost2012_256_PubKey_Type                                 */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gost2012_256_PubKey_Type_null_ 1
#define T__gost2012_256_PubKey_Type_params 2

class EXTERN ASN1C__gost2012_256_PubKey_Type;

typedef struct EXTERN ASN1T__gost2012_256_PubKey_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3410_2012_PublicKeyParameters *params;
   } u;
   ASN1T__gost2012_256_PubKey_Type () {}
   ASN1T__gost2012_256_PubKey_Type (ASN1C__gost2012_256_PubKey_Type& srcData);
   ~ASN1T__gost2012_256_PubKey_Type ();
} ASN1T__gost2012_256_PubKey_Type;

class EXTERN ASN1C__gost2012_256_PubKey_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gost2012_256_PubKey_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_GostR3410_2012_PublicKeyParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__gost2012_256_PubKey_Type (ASN1T__gost2012_256_PubKey_Type& data);
   ASN1C__gost2012_256_PubKey_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gost2012_256_PubKey_Type& data);
   ASN1C__gost2012_256_PubKey_Type (ASN1C__gost2012_256_PubKey_Type& original);

   ~ASN1C__gost2012_256_PubKey_Type();
   // 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__gost2012_256_PubKey_Type& getCopy (ASN1T__gost2012_256_PubKey_Type* pDstData = 0);
   ASN1T__gost2012_256_PubKey_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gost2012_256_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_256_PubKey_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gost2012_256_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_256_PubKey_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gost2012_256_PubKey_Type
  (ASN1CTXT* pctxt, ASN1T__gost2012_256_PubKey_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gost2012_256_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_256_PubKey_Type* pSrcValue, ASN1T__gost2012_256_PubKey_Type* pDstValue);

EXTERN void asn1Free__gost2012_256_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_256_PubKey_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _gost2012_512_PubKey_Type                                 */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gost2012_512_PubKey_Type_null_ 1
#define T__gost2012_512_PubKey_Type_params 2

class EXTERN ASN1C__gost2012_512_PubKey_Type;

typedef struct EXTERN ASN1T__gost2012_512_PubKey_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3410_2012_PublicKeyParameters *params;
   } u;
   ASN1T__gost2012_512_PubKey_Type () {}
   ASN1T__gost2012_512_PubKey_Type (ASN1C__gost2012_512_PubKey_Type& srcData);
   ~ASN1T__gost2012_512_PubKey_Type ();
} ASN1T__gost2012_512_PubKey_Type;

class EXTERN ASN1C__gost2012_512_PubKey_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gost2012_512_PubKey_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_GostR3410_2012_PublicKeyParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__gost2012_512_PubKey_Type (ASN1T__gost2012_512_PubKey_Type& data);
   ASN1C__gost2012_512_PubKey_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gost2012_512_PubKey_Type& data);
   ASN1C__gost2012_512_PubKey_Type (ASN1C__gost2012_512_PubKey_Type& original);

   ~ASN1C__gost2012_512_PubKey_Type();
   // 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__gost2012_512_PubKey_Type& getCopy (ASN1T__gost2012_512_PubKey_Type* pDstData = 0);
   ASN1T__gost2012_512_PubKey_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gost2012_512_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_512_PubKey_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gost2012_512_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_512_PubKey_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gost2012_512_PubKey_Type
  (ASN1CTXT* pctxt, ASN1T__gost2012_512_PubKey_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gost2012_512_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_512_PubKey_Type* pSrcValue, ASN1T__gost2012_512_PubKey_Type* pDstValue);

EXTERN void asn1Free__gost2012_512_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_512_PubKey_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _gost94WithGostR34102001Sign_Type                         */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gost94WithGostR34102001Sign_Type_null_ 1
#define T__gost94WithGostR34102001Sign_Type_params 2

class EXTERN ASN1C__gost94WithGostR34102001Sign_Type;

typedef struct EXTERN ASN1T__gost94WithGostR34102001Sign_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3410_2001_PublicKeyParameters *params;
   } u;
   ASN1T__gost94WithGostR34102001Sign_Type () {}
   ASN1T__gost94WithGostR34102001Sign_Type (ASN1C__gost94WithGostR34102001Sign_Type& srcData);
   ~ASN1T__gost94WithGostR34102001Sign_Type ();
} ASN1T__gost94WithGostR34102001Sign_Type;

class EXTERN ASN1C__gost94WithGostR34102001Sign_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gost94WithGostR34102001Sign_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_GostR3410_2001_PublicKeyParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__gost94WithGostR34102001Sign_Type (ASN1T__gost94WithGostR34102001Sign_Type& data);
   ASN1C__gost94WithGostR34102001Sign_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gost94WithGostR34102001Sign_Type& data);
   ASN1C__gost94WithGostR34102001Sign_Type (ASN1C__gost94WithGostR34102001Sign_Type& original);

   ~ASN1C__gost94WithGostR34102001Sign_Type();
   // 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__gost94WithGostR34102001Sign_Type& getCopy (ASN1T__gost94WithGostR34102001Sign_Type* pDstData = 0);
   ASN1T__gost94WithGostR34102001Sign_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gost94WithGostR34102001Sign_Type (ASN1CTXT* pctxt,
   ASN1T__gost94WithGostR34102001Sign_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gost94WithGostR34102001Sign_Type (ASN1CTXT* pctxt,
   ASN1T__gost94WithGostR34102001Sign_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gost94WithGostR34102001Sign_Type
  (ASN1CTXT* pctxt, ASN1T__gost94WithGostR34102001Sign_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gost94WithGostR34102001Sign_Type (ASN1CTXT *pctxt, ASN1T__gost94WithGostR34102001Sign_Type* pSrcValue, ASN1T__gost94WithGostR34102001Sign_Type* pDstValue);

EXTERN void asn1Free__gost94WithGostR34102001Sign_Type (ASN1CTXT *pctxt, ASN1T__gost94WithGostR34102001Sign_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _gostR341194DigestParams_Type                             */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gostR341194DigestParams_Type_null_ 1
#define T__gostR341194DigestParams_Type_params 2

class EXTERN ASN1C__gostR341194DigestParams_Type;

typedef struct EXTERN ASN1T__gostR341194DigestParams_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3411_94_DigestParameters *params;
   } u;
   ASN1T__gostR341194DigestParams_Type () {}
   ASN1T__gostR341194DigestParams_Type (ASN1C__gostR341194DigestParams_Type& srcData);
   ~ASN1T__gostR341194DigestParams_Type ();
} ASN1T__gostR341194DigestParams_Type;

class EXTERN ASN1C__gostR341194DigestParams_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gostR341194DigestParams_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   ASN1MemBuf mCurrElemValue;
public:
   ASN1C__gostR341194DigestParams_Type (ASN1T__gostR341194DigestParams_Type& data);
   ASN1C__gostR341194DigestParams_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gostR341194DigestParams_Type& data);
   ASN1C__gostR341194DigestParams_Type (ASN1C__gostR341194DigestParams_Type& 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__gostR341194DigestParams_Type& getCopy (ASN1T__gostR341194DigestParams_Type* pDstData = 0);
   ASN1T__gostR341194DigestParams_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gostR341194DigestParams_Type (ASN1CTXT* pctxt,
   ASN1T__gostR341194DigestParams_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gostR341194DigestParams_Type (ASN1CTXT* pctxt,
   ASN1T__gostR341194DigestParams_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gostR341194DigestParams_Type
  (ASN1CTXT* pctxt, ASN1T__gostR341194DigestParams_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gostR341194DigestParams_Type (ASN1CTXT *pctxt, ASN1T__gostR341194DigestParams_Type* pSrcValue, ASN1T__gostR341194DigestParams_Type* pDstValue);

EXTERN void asn1Free__gostR341194DigestParams_Type (ASN1CTXT *pctxt, ASN1T__gostR341194DigestParams_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  Dss_Parms                                                 */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Dss_Parms;

typedef struct EXTERN ASN1T_Dss_Parms : public ASN1TPDU {
   ASN1INT p;
   ASN1INT q;
   ASN1INT g;
   ASN1T_Dss_Parms ();
   ASN1T_Dss_Parms (ASN1C_Dss_Parms& srcData);
} ASN1T_Dss_Parms;

class EXTERN ASN1C_Dss_Parms :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_Dss_Parms& msgData;
   struct ElementID {
      enum {
         _unknown, p, q, g
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_Dss_Parms (ASN1T_Dss_Parms& data);
   ASN1C_Dss_Parms (
      ASN1MessageBufferIF& msgBuf, ASN1T_Dss_Parms& data);
   ASN1C_Dss_Parms (ASN1C_Dss_Parms& 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_Dss_Parms& getCopy (ASN1T_Dss_Parms* pDstData = 0);
   ASN1T_Dss_Parms* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_Dss_Parms (ASN1CTXT* pctxt,
   ASN1T_Dss_Parms *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Dss_Parms (ASN1CTXT* pctxt,
   ASN1T_Dss_Parms *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Dss_Parms
  (ASN1CTXT* pctxt, ASN1T_Dss_Parms* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Dss_Parms (ASN1CTXT *pctxt, ASN1T_Dss_Parms* pSrcValue, ASN1T_Dss_Parms* pDstValue);

/**************************************************************/
/*                                                            */
/*  ValidationParms                                           */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_ValidationParms;

typedef struct EXTERN ASN1T_ValidationParms : public ASN1TPDU {
   ASN1TDynBitStr seed;
   ASN1INT pgenCounter;
   ASN1T_ValidationParms ();
   ASN1T_ValidationParms (ASN1C_ValidationParms& srcData);
   ~ASN1T_ValidationParms ();
} ASN1T_ValidationParms;

class EXTERN ASN1C_ValidationParms :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_ValidationParms& msgData;
   struct ElementID {
      enum {
         _unknown, seed, pgenCounter
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_ValidationParms (ASN1T_ValidationParms& data);
   ASN1C_ValidationParms (
      ASN1MessageBufferIF& msgBuf, ASN1T_ValidationParms& data);
   ASN1C_ValidationParms (ASN1C_ValidationParms& 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_ValidationParms& getCopy (ASN1T_ValidationParms* pDstData = 0);
   ASN1T_ValidationParms* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_ValidationParms (ASN1CTXT* pctxt,
   ASN1T_ValidationParms *pvalue, ASN1TagType tagging);

EXTERN int asn1D_ValidationParms (ASN1CTXT* pctxt,
   ASN1T_ValidationParms *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_ValidationParms
  (ASN1CTXT* pctxt, ASN1T_ValidationParms* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_ValidationParms (ASN1CTXT *pctxt, ASN1T_ValidationParms* pSrcValue, ASN1T_ValidationParms* pDstValue);

EXTERN void asn1Free_ValidationParms (ASN1CTXT *pctxt, ASN1T_ValidationParms* pvalue);

/**************************************************************/
/*                                                            */
/*  DomainParameters                                          */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_DomainParameters;

typedef struct EXTERN ASN1T_DomainParameters : public ASN1TPDU {
   struct {
      unsigned jPresent : 1;
      unsigned validationParmsPresent : 1;
   } m;
   ASN1INT p;
   ASN1INT g;
   ASN1INT q;
   ASN1INT j;
   ASN1T_ValidationParms validationParms;
   ASN1T_DomainParameters ();
   ASN1T_DomainParameters (ASN1C_DomainParameters& srcData);
   ~ASN1T_DomainParameters ();
} ASN1T_DomainParameters;

class EXTERN ASN1C_DomainParameters :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_DomainParameters& msgData;
   struct ElementID {
      enum {
         _unknown, p, g, q, j, validationParms
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_ValidationParms* mpValidationParmsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_DomainParameters (ASN1T_DomainParameters& data);
   ASN1C_DomainParameters (
      ASN1MessageBufferIF& msgBuf, ASN1T_DomainParameters& data);
   ASN1C_DomainParameters (ASN1C_DomainParameters& original);

   ~ASN1C_DomainParameters();
   // 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_DomainParameters& getCopy (ASN1T_DomainParameters* pDstData = 0);
   ASN1T_DomainParameters* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_DomainParameters (ASN1CTXT* pctxt,
   ASN1T_DomainParameters *pvalue, ASN1TagType tagging);

EXTERN int asn1D_DomainParameters (ASN1CTXT* pctxt,
   ASN1T_DomainParameters *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_DomainParameters
  (ASN1CTXT* pctxt, ASN1T_DomainParameters* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_DomainParameters (ASN1CTXT *pctxt, ASN1T_DomainParameters* pSrcValue, ASN1T_DomainParameters* pDstValue);

EXTERN void asn1Free_DomainParameters (ASN1CTXT *pctxt, ASN1T_DomainParameters* pvalue);

/**************************************************************/
/*                                                            */
/*  _pbeGost28147And3411_Type                                 */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__pbeGost28147And3411_Type_null_ 1
#define T__pbeGost28147And3411_Type_params 2

class EXTERN ASN1C__pbeGost28147And3411_Type;

typedef struct EXTERN ASN1T__pbeGost28147And3411_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_PBECryptoProGostParameters *params;
   } u;
   ASN1T__pbeGost28147And3411_Type () {}
   ASN1T__pbeGost28147And3411_Type (ASN1C__pbeGost28147And3411_Type& srcData);
   ~ASN1T__pbeGost28147And3411_Type ();
} ASN1T__pbeGost28147And3411_Type;

class EXTERN ASN1C__pbeGost28147And3411_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__pbeGost28147And3411_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_PBECryptoProGostParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__pbeGost28147And3411_Type (ASN1T__pbeGost28147And3411_Type& data);
   ASN1C__pbeGost28147And3411_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__pbeGost28147And3411_Type& data);
   ASN1C__pbeGost28147And3411_Type (ASN1C__pbeGost28147And3411_Type& original);

   ~ASN1C__pbeGost28147And3411_Type();
   // 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__pbeGost28147And3411_Type& getCopy (ASN1T__pbeGost28147And3411_Type* pDstData = 0);
   ASN1T__pbeGost28147And3411_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__pbeGost28147And3411_Type (ASN1CTXT* pctxt,
   ASN1T__pbeGost28147And3411_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__pbeGost28147And3411_Type (ASN1CTXT* pctxt,
   ASN1T__pbeGost28147And3411_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__pbeGost28147And3411_Type
  (ASN1CTXT* pctxt, ASN1T__pbeGost28147And3411_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__pbeGost28147And3411_Type (ASN1CTXT *pctxt, ASN1T__pbeGost28147And3411_Type* pSrcValue, ASN1T__pbeGost28147And3411_Type* pDstValue);

EXTERN void asn1Free__pbeGost28147And3411_Type (ASN1CTXT *pctxt, ASN1T__pbeGost28147And3411_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  AlgorithmIdentifier                                       */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_AlgorithmIdentifier;

typedef struct EXTERN ASN1T_AlgorithmIdentifier : public ASN1TPDU {
   struct {
      unsigned parametersPresent : 1;
   } m;
   ASN1TObjId algorithm;
   Asn1TObject parameters;
   ASN1T_AlgorithmIdentifier ();
   ASN1T_AlgorithmIdentifier (ASN1C_AlgorithmIdentifier& srcData);
   ~ASN1T_AlgorithmIdentifier ();
} ASN1T_AlgorithmIdentifier;

class EXTERN ASN1C_AlgorithmIdentifier :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_AlgorithmIdentifier& msgData;
   struct ElementID {
      enum {
         _unknown, algorithm, parameters
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   ASN1CXerOpenType* mpParametersC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_AlgorithmIdentifier (ASN1T_AlgorithmIdentifier& data);
   ASN1C_AlgorithmIdentifier (
      ASN1MessageBufferIF& msgBuf, ASN1T_AlgorithmIdentifier& data);
   ASN1C_AlgorithmIdentifier (ASN1C_AlgorithmIdentifier& original);

   ~ASN1C_AlgorithmIdentifier();
   // 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_AlgorithmIdentifier& getCopy (ASN1T_AlgorithmIdentifier* pDstData = 0);
   ASN1T_AlgorithmIdentifier* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_AlgorithmIdentifier (ASN1CTXT* pctxt,
   ASN1T_AlgorithmIdentifier *pvalue, ASN1TagType tagging);

EXTERN int asn1D_AlgorithmIdentifier (ASN1CTXT* pctxt,
   ASN1T_AlgorithmIdentifier *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_AlgorithmIdentifier
  (ASN1CTXT* pctxt, ASN1T_AlgorithmIdentifier* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN int asn1XETC_AlgorithmIdentifier (ASN1CTXT* pctxt,
    ASN1T_AlgorithmIdentifier *pvalue);

EXTERN int asn1XDTC_AlgorithmIdentifier (ASN1CtxtPtr& pctxt,
    ASN1T_AlgorithmIdentifier *pvalue);

EXTERN int asn1ETC_AlgorithmIdentifier (ASN1CTXT* pctxt,
   ASN1T_AlgorithmIdentifier *pvalue);

EXTERN int asn1DTC_AlgorithmIdentifier (ASN1CTXT* pctxt,
   ASN1T_AlgorithmIdentifier *pvalue);

EXTERN void asn1Copy_AlgorithmIdentifier (ASN1CTXT *pctxt, ASN1T_AlgorithmIdentifier* pSrcValue, ASN1T_AlgorithmIdentifier* pDstValue);

EXTERN void asn1Free_AlgorithmIdentifier (ASN1CTXT *pctxt, ASN1T_AlgorithmIdentifier* pvalue);

/**************************************************************/
/*                                                            */
/*  Dss_Sig_Value                                             */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Dss_Sig_Value;

typedef struct EXTERN ASN1T_Dss_Sig_Value : public ASN1TPDU {
   ASN1INT r;
   ASN1INT s;
   ASN1T_Dss_Sig_Value ();
   ASN1T_Dss_Sig_Value (ASN1C_Dss_Sig_Value& srcData);
} ASN1T_Dss_Sig_Value;

class EXTERN ASN1C_Dss_Sig_Value :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_Dss_Sig_Value& msgData;
   struct ElementID {
      enum {
         _unknown, r, s
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_Dss_Sig_Value (ASN1T_Dss_Sig_Value& data);
   ASN1C_Dss_Sig_Value (
      ASN1MessageBufferIF& msgBuf, ASN1T_Dss_Sig_Value& data);
   ASN1C_Dss_Sig_Value (ASN1C_Dss_Sig_Value& 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_Dss_Sig_Value& getCopy (ASN1T_Dss_Sig_Value* pDstData = 0);
   ASN1T_Dss_Sig_Value* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_Dss_Sig_Value (ASN1CTXT* pctxt,
   ASN1T_Dss_Sig_Value *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Dss_Sig_Value (ASN1CTXT* pctxt,
   ASN1T_Dss_Sig_Value *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Dss_Sig_Value
  (ASN1CTXT* pctxt, ASN1T_Dss_Sig_Value* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Dss_Sig_Value (ASN1CTXT *pctxt, ASN1T_Dss_Sig_Value* pSrcValue, ASN1T_Dss_Sig_Value* pDstValue);

/**************************************************************/
/*                                                            */
/*  SubjectPublicKeyInfo                                      */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_SubjectPublicKeyInfo;

typedef struct EXTERN ASN1T_SubjectPublicKeyInfo : public ASN1TPDU {
   ASN1T_AlgorithmIdentifier algorithm;
   ASN1TDynBitStr subjectPublicKey;
   ASN1T_SubjectPublicKeyInfo ();
   ASN1T_SubjectPublicKeyInfo (ASN1C_SubjectPublicKeyInfo& srcData);
   ~ASN1T_SubjectPublicKeyInfo ();
} ASN1T_SubjectPublicKeyInfo;

class EXTERN ASN1C_SubjectPublicKeyInfo :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_SubjectPublicKeyInfo& msgData;
   struct ElementID {
      enum {
         _unknown, algorithm, subjectPublicKey
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_AlgorithmIdentifier* mpAlgorithmC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_SubjectPublicKeyInfo (ASN1T_SubjectPublicKeyInfo& data);
   ASN1C_SubjectPublicKeyInfo (
      ASN1MessageBufferIF& msgBuf, ASN1T_SubjectPublicKeyInfo& data);
   ASN1C_SubjectPublicKeyInfo (ASN1C_SubjectPublicKeyInfo& original);

   ~ASN1C_SubjectPublicKeyInfo();
   // 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_SubjectPublicKeyInfo& getCopy (ASN1T_SubjectPublicKeyInfo* pDstData = 0);
   ASN1T_SubjectPublicKeyInfo* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_SubjectPublicKeyInfo (ASN1CTXT* pctxt,
   ASN1T_SubjectPublicKeyInfo *pvalue, ASN1TagType tagging);

EXTERN int asn1D_SubjectPublicKeyInfo (ASN1CTXT* pctxt,
   ASN1T_SubjectPublicKeyInfo *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_SubjectPublicKeyInfo
  (ASN1CTXT* pctxt, ASN1T_SubjectPublicKeyInfo* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_SubjectPublicKeyInfo (ASN1CTXT *pctxt, ASN1T_SubjectPublicKeyInfo* pSrcValue, ASN1T_SubjectPublicKeyInfo* pDstValue);

EXTERN void asn1Free_SubjectPublicKeyInfo (ASN1CTXT *pctxt, ASN1T_SubjectPublicKeyInfo* pvalue);

/**************************************************************/
/*                                                            */
/*  KeyBlockFirmwareFormat                                    */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_KeyBlockFirmwareFormat;

typedef struct EXTERN ASN1T_KeyBlockFirmwareFormat : public ASN1TPDU {
   ASN1TDynOctStr key;
   ASN1TDynOctStr iv;
   ASN1T_KeyBlockFirmwareFormat ();
   ASN1T_KeyBlockFirmwareFormat (ASN1C_KeyBlockFirmwareFormat& srcData);
   ~ASN1T_KeyBlockFirmwareFormat ();
} ASN1T_KeyBlockFirmwareFormat;

class EXTERN ASN1C_KeyBlockFirmwareFormat :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_KeyBlockFirmwareFormat& msgData;
   struct ElementID {
      enum {
         _unknown, key, iv
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_KeyBlockFirmwareFormat (ASN1T_KeyBlockFirmwareFormat& data);
   ASN1C_KeyBlockFirmwareFormat (
      ASN1MessageBufferIF& msgBuf, ASN1T_KeyBlockFirmwareFormat& data);
   ASN1C_KeyBlockFirmwareFormat (ASN1C_KeyBlockFirmwareFormat& 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_KeyBlockFirmwareFormat& getCopy (ASN1T_KeyBlockFirmwareFormat* pDstData = 0);
   ASN1T_KeyBlockFirmwareFormat* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_KeyBlockFirmwareFormat (ASN1CTXT* pctxt,
   ASN1T_KeyBlockFirmwareFormat *pvalue, ASN1TagType tagging);

EXTERN int asn1D_KeyBlockFirmwareFormat (ASN1CTXT* pctxt,
   ASN1T_KeyBlockFirmwareFormat *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_KeyBlockFirmwareFormat
  (ASN1CTXT* pctxt, ASN1T_KeyBlockFirmwareFormat* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_KeyBlockFirmwareFormat (ASN1CTXT *pctxt, ASN1T_KeyBlockFirmwareFormat* pSrcValue, ASN1T_KeyBlockFirmwareFormat* pDstValue);

EXTERN void asn1Free_KeyBlockFirmwareFormat (ASN1CTXT *pctxt, ASN1T_KeyBlockFirmwareFormat* pvalue);

/**************************************************************/
/*                                                            */
/*  KeyBlockAsn1EncodedFormat                                 */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_KeyBlockAsn1EncodedFormat;

typedef struct EXTERN ASN1T_KeyBlockAsn1EncodedFormat : public ASN1TPDU {
   ASN1TDynOctStr key;
   ASN1T_KeyBlockAsn1EncodedFormat ();
   ASN1T_KeyBlockAsn1EncodedFormat (ASN1C_KeyBlockAsn1EncodedFormat& srcData);
   ~ASN1T_KeyBlockAsn1EncodedFormat ();
} ASN1T_KeyBlockAsn1EncodedFormat;

class EXTERN ASN1C_KeyBlockAsn1EncodedFormat :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_KeyBlockAsn1EncodedFormat& msgData;
   struct ElementID {
      enum {
         _unknown, key
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   ASN1MemBuf mCurrElemValue;
   int mReqElemCnt;
public:
   ASN1C_KeyBlockAsn1EncodedFormat (ASN1T_KeyBlockAsn1EncodedFormat& data);
   ASN1C_KeyBlockAsn1EncodedFormat (
      ASN1MessageBufferIF& msgBuf, ASN1T_KeyBlockAsn1EncodedFormat& data);
   ASN1C_KeyBlockAsn1EncodedFormat (ASN1C_KeyBlockAsn1EncodedFormat& 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_KeyBlockAsn1EncodedFormat& getCopy (ASN1T_KeyBlockAsn1EncodedFormat* pDstData = 0);
   ASN1T_KeyBlockAsn1EncodedFormat* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E_KeyBlockAsn1EncodedFormat (ASN1CTXT* pctxt,
   ASN1T_KeyBlockAsn1EncodedFormat *pvalue, ASN1TagType tagging);

EXTERN int asn1D_KeyBlockAsn1EncodedFormat (ASN1CTXT* pctxt,
   ASN1T_KeyBlockAsn1EncodedFormat *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_KeyBlockAsn1EncodedFormat
  (ASN1CTXT* pctxt, ASN1T_KeyBlockAsn1EncodedFormat* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_KeyBlockAsn1EncodedFormat (ASN1CTXT *pctxt, ASN1T_KeyBlockAsn1EncodedFormat* pSrcValue, ASN1T_KeyBlockAsn1EncodedFormat* pDstValue);

EXTERN void asn1Free_KeyBlockAsn1EncodedFormat (ASN1CTXT *pctxt, ASN1T_KeyBlockAsn1EncodedFormat* pvalue);

/**************************************************************/
/*                                                            */
/*  _gost2012_256DH_PubKey_Type                               */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gost2012_256DH_PubKey_Type_null_ 1
#define T__gost2012_256DH_PubKey_Type_params 2

class EXTERN ASN1C__gost2012_256DH_PubKey_Type;

typedef struct EXTERN ASN1T__gost2012_256DH_PubKey_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3410_2012_PublicKeyParameters *params;
   } u;
   ASN1T__gost2012_256DH_PubKey_Type () {}
   ASN1T__gost2012_256DH_PubKey_Type (ASN1C__gost2012_256DH_PubKey_Type& srcData);
   ~ASN1T__gost2012_256DH_PubKey_Type ();
} ASN1T__gost2012_256DH_PubKey_Type;

class EXTERN ASN1C__gost2012_256DH_PubKey_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gost2012_256DH_PubKey_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_GostR3410_2012_PublicKeyParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__gost2012_256DH_PubKey_Type (ASN1T__gost2012_256DH_PubKey_Type& data);
   ASN1C__gost2012_256DH_PubKey_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gost2012_256DH_PubKey_Type& data);
   ASN1C__gost2012_256DH_PubKey_Type (ASN1C__gost2012_256DH_PubKey_Type& original);

   ~ASN1C__gost2012_256DH_PubKey_Type();
   // 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__gost2012_256DH_PubKey_Type& getCopy (ASN1T__gost2012_256DH_PubKey_Type* pDstData = 0);
   ASN1T__gost2012_256DH_PubKey_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gost2012_256DH_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_256DH_PubKey_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gost2012_256DH_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_256DH_PubKey_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gost2012_256DH_PubKey_Type
  (ASN1CTXT* pctxt, ASN1T__gost2012_256DH_PubKey_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gost2012_256DH_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_256DH_PubKey_Type* pSrcValue, ASN1T__gost2012_256DH_PubKey_Type* pDstValue);

EXTERN void asn1Free__gost2012_256DH_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_256DH_PubKey_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _gost2012_512DH_PubKey_Type                               */
/*                                                            */
/**************************************************************/

/* Choice tag constants */

#define T__gost2012_512DH_PubKey_Type_null_ 1
#define T__gost2012_512DH_PubKey_Type_params 2

class EXTERN ASN1C__gost2012_512DH_PubKey_Type;

typedef struct EXTERN ASN1T__gost2012_512DH_PubKey_Type : public ASN1TPDU {
   int t;
   union {
      /* t = 1 */
      /* t = 2 */
      ASN1T_GostR3410_2012_PublicKeyParameters *params;
   } u;
   ASN1T__gost2012_512DH_PubKey_Type () {}
   ASN1T__gost2012_512DH_PubKey_Type (ASN1C__gost2012_512DH_PubKey_Type& srcData);
   ~ASN1T__gost2012_512DH_PubKey_Type ();
} ASN1T__gost2012_512DH_PubKey_Type;

class EXTERN ASN1C__gost2012_512DH_PubKey_Type :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T__gost2012_512DH_PubKey_Type& msgData;
   struct ElementID {
      enum {
         _unknown, null_, params
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   class ASN1C_GostR3410_2012_PublicKeyParameters* mpParamsC;
   ASN1XERSAXDecodeHandler* mpCurrElem;
public:
   ASN1C__gost2012_512DH_PubKey_Type (ASN1T__gost2012_512DH_PubKey_Type& data);
   ASN1C__gost2012_512DH_PubKey_Type (
      ASN1MessageBufferIF& msgBuf, ASN1T__gost2012_512DH_PubKey_Type& data);
   ASN1C__gost2012_512DH_PubKey_Type (ASN1C__gost2012_512DH_PubKey_Type& original);

   ~ASN1C__gost2012_512DH_PubKey_Type();
   // 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__gost2012_512DH_PubKey_Type& getCopy (ASN1T__gost2012_512DH_PubKey_Type* pDstData = 0);
   ASN1T__gost2012_512DH_PubKey_Type* newCopy ();

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

   // SAX ContentHandler interface

   virtual void startElement 
      (const XMLCHAR* const uri, 
       const XMLCHAR* const localname, 
       const XMLCHAR* const qname, 
       const XMLCHAR* const* attrs);

   virtual void characters 
      (const XMLCHAR* const chars,
       const unsigned int length);

   virtual void endElement
      (const XMLCHAR* const uri,
       const XMLCHAR* const localname,
       const XMLCHAR* const qname);

   virtual void init (int level = 0);
} ;

EXTERN int asn1E__gost2012_512DH_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_512DH_PubKey_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__gost2012_512DH_PubKey_Type (ASN1CTXT* pctxt,
   ASN1T__gost2012_512DH_PubKey_Type *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE__gost2012_512DH_PubKey_Type
  (ASN1CTXT* pctxt, ASN1T__gost2012_512DH_PubKey_Type* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy__gost2012_512DH_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_512DH_PubKey_Type* pSrcValue, ASN1T__gost2012_512DH_PubKey_Type* pDstValue);

EXTERN void asn1Free__gost2012_512DH_PubKey_Type (ASN1CTXT *pctxt, ASN1T__gost2012_512DH_PubKey_Type* pvalue);

/* Value definitions */

extern EXTERN ASN1OBJID pkcs_1;
extern EXTERN ASN1OBJID rsaEncryption;
extern EXTERN ASN1OBJID md2WithRSAEncryption;
extern EXTERN ASN1OBJID md5WithRSAEncryption;
extern EXTERN ASN1OBJID sha1WithRSAEncryption;
extern EXTERN ASN1OBJID rsassa_pss;
extern EXTERN ASN1OBJID sha256WithRSAEncryption;
extern EXTERN ASN1OBJID sha384WithRSAEncryption;
extern EXTERN ASN1OBJID sha512WithRSAEncryption;
extern EXTERN ASN1OBJID sha224WithRSAEncryption;
extern EXTERN ASN1OBJID id_dsa_with_sha1;
extern EXTERN ASN1OBJID id_sha1;
extern EXTERN ASN1OBJID dhpublicnumber;
extern EXTERN ASN1OBJID id_dsa;

}
#endif
