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

#include <stdio.h>
#include <stdlib.h>
#include "asn1BerCppTypes.h"
#include "asn1XerCppTypes.h"
#include "rtTable.h"
#include "Cryptographic-Gost-Useful-Definitions.h"
namespace asn1data {

/**************************************************************/
/*                                                            */
/*  Gost28147_89_UZ                                           */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost28147_89_UZ;

typedef struct EXTERN ASN1T_Gost28147_89_UZ {
   ASN1UINT numocts;
   ASN1OCTET data[64];
   // ctors
   ASN1T_Gost28147_89_UZ () : numocts(0) {}
   ASN1T_Gost28147_89_UZ (ASN1UINT _numocts, const ASN1OCTET* _data) :
      numocts (_numocts) {
      memcpy (data, _data, ASN1MIN (numocts, sizeof(data)));
   }
   ASN1T_Gost28147_89_UZ (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
   }
   ASN1T_Gost28147_89_UZ (ASN1C_Gost28147_89_UZ& srcData);
   // assignment operators
   ASN1T_Gost28147_89_UZ& operator= (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
      return *this;
   }
} ASN1T_Gost28147_89_UZ;

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

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

EXTERN int asn1E_Gost28147_89_UZ (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_UZ *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_UZ (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_UZ *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_UZ
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_UZ* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_UZ (ASN1CTXT *pctxt, ASN1T_Gost28147_89_UZ* pSrcValue, ASN1T_Gost28147_89_UZ* pDstValue);

/**************************************************************/
/*                                                            */
/*  Gost28147_89_IV                                           */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost28147_89_IV;

typedef struct EXTERN ASN1T_Gost28147_89_IV {
   ASN1UINT numocts;
   ASN1OCTET data[8];
   // ctors
   ASN1T_Gost28147_89_IV () : numocts(0) {}
   ASN1T_Gost28147_89_IV (ASN1UINT _numocts, const ASN1OCTET* _data) :
      numocts (_numocts) {
      memcpy (data, _data, ASN1MIN (numocts, sizeof(data)));
   }
   ASN1T_Gost28147_89_IV (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
   }
   ASN1T_Gost28147_89_IV (ASN1C_Gost28147_89_IV& srcData);
   // assignment operators
   ASN1T_Gost28147_89_IV& operator= (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
      return *this;
   }
} ASN1T_Gost28147_89_IV;

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

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

EXTERN int asn1E_Gost28147_89_IV (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_IV *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_IV (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_IV *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_IV
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_IV* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_IV (ASN1CTXT *pctxt, ASN1T_Gost28147_89_IV* pSrcValue, ASN1T_Gost28147_89_IV* pDstValue);

/**************************************************************/
/*                                                            */
/*  Gost28147_89_Key                                          */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost28147_89_Key;

typedef struct EXTERN ASN1T_Gost28147_89_Key {
   ASN1UINT numocts;
   ASN1OCTET data[32];
   // ctors
   ASN1T_Gost28147_89_Key () : numocts(0) {}
   ASN1T_Gost28147_89_Key (ASN1UINT _numocts, const ASN1OCTET* _data) :
      numocts (_numocts) {
      memcpy (data, _data, ASN1MIN (numocts, sizeof(data)));
   }
   ASN1T_Gost28147_89_Key (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
   }
   ASN1T_Gost28147_89_Key (ASN1C_Gost28147_89_Key& srcData);
   // assignment operators
   ASN1T_Gost28147_89_Key& operator= (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
      return *this;
   }
} ASN1T_Gost28147_89_Key;

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

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

EXTERN int asn1E_Gost28147_89_Key (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_Key *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_Key (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_Key *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_Key
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_Key* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_Key (ASN1CTXT *pctxt, ASN1T_Gost28147_89_Key* pSrcValue, ASN1T_Gost28147_89_Key* pDstValue);

/**************************************************************/
/*                                                            */
/*  Gost28147_89_MAC                                          */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost28147_89_MAC;

typedef struct EXTERN ASN1T_Gost28147_89_MAC {
   ASN1UINT numocts;
   ASN1OCTET data[4];
   // ctors
   ASN1T_Gost28147_89_MAC () : numocts(0) {}
   ASN1T_Gost28147_89_MAC (ASN1UINT _numocts, const ASN1OCTET* _data) :
      numocts (_numocts) {
      memcpy (data, _data, ASN1MIN (numocts, sizeof(data)));
   }
   ASN1T_Gost28147_89_MAC (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
   }
   ASN1T_Gost28147_89_MAC (ASN1C_Gost28147_89_MAC& srcData);
   // assignment operators
   ASN1T_Gost28147_89_MAC& operator= (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
      return *this;
   }
} ASN1T_Gost28147_89_MAC;

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

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

EXTERN int asn1E_Gost28147_89_MAC (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_MAC *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_MAC (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_MAC *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_MAC
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_MAC* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_MAC (ASN1CTXT *pctxt, ASN1T_Gost28147_89_MAC* pSrcValue, ASN1T_Gost28147_89_MAC* pDstValue);

/**************************************************************/
/*                                                            */
/*  Gost28147_89_ParamSet                                     */
/*                                                            */
/**************************************************************/

typedef ASN1TObjId ASN1T_Gost28147_89_ParamSet;

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

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

EXTERN int asn1E_Gost28147_89_ParamSet (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_ParamSet *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_ParamSet (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_ParamSet *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_ParamSet
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_ParamSet* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_ParamSet (ASN1CTXT *pctxt, ASN1T_Gost28147_89_ParamSet* pSrcValue, ASN1T_Gost28147_89_ParamSet* pDstValue);

/**************************************************************/
/*                                                            */
/*  Gost28147_89_EncryptedKey                                 */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost28147_89_EncryptedKey;

typedef struct EXTERN ASN1T_Gost28147_89_EncryptedKey : public ASN1TPDU {
   struct {
      unsigned maskKeyPresent : 1;
   } m;
   ASN1T_Gost28147_89_Key encryptedKey;
   ASN1T_Gost28147_89_Key maskKey;
   ASN1T_Gost28147_89_MAC macKey;
   ASN1T_Gost28147_89_EncryptedKey ();
   ASN1T_Gost28147_89_EncryptedKey (ASN1C_Gost28147_89_EncryptedKey& srcData);
} ASN1T_Gost28147_89_EncryptedKey;

class EXTERN ASN1C_Gost28147_89_EncryptedKey :
   public ASN1CType, public ASN1XERSAXDecodeHandler
{
protected:
   ASN1T_Gost28147_89_EncryptedKey& msgData;
   struct ElementID {
      enum {
         _unknown, encryptedKey, maskKey, macKey
      } ;
   } ;
   int getElementID 
      (const XMLCHAR* const uri, const XMLCHAR* const localname,
       const XMLCHAR* const qname);

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

   inline ASN1C_Gost28147_89_EncryptedKey& operator= (ASN1C_Gost28147_89_EncryptedKey& 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_Gost28147_89_EncryptedKey (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_EncryptedKey *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_EncryptedKey (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_EncryptedKey *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_EncryptedKey
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_EncryptedKey* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_EncryptedKey (ASN1CTXT *pctxt, ASN1T_Gost28147_89_EncryptedKey* pSrcValue, ASN1T_Gost28147_89_EncryptedKey* pDstValue);

/**************************************************************/
/*                                                            */
/*  Gost28147_89_BlobParameters                               */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost28147_89_BlobParameters;

typedef struct EXTERN ASN1T_Gost28147_89_BlobParameters : public ASN1TPDU {
   ASN1T_Gost28147_89_ParamSet encryptionParamSet;
   ASN1TSeqExt extElem1;
   ASN1T_Gost28147_89_BlobParameters ();
   ASN1T_Gost28147_89_BlobParameters (ASN1C_Gost28147_89_BlobParameters& srcData);
   ~ASN1T_Gost28147_89_BlobParameters ();
} ASN1T_Gost28147_89_BlobParameters;

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

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

   inline ASN1C_Gost28147_89_BlobParameters& operator= (ASN1C_Gost28147_89_BlobParameters& 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_Gost28147_89_BlobParameters (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_BlobParameters *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_BlobParameters (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_BlobParameters *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_BlobParameters
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_BlobParameters* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_BlobParameters (ASN1CTXT *pctxt, ASN1T_Gost28147_89_BlobParameters* pSrcValue, ASN1T_Gost28147_89_BlobParameters* pDstValue);

EXTERN void asn1Free_Gost28147_89_BlobParameters (ASN1CTXT *pctxt, ASN1T_Gost28147_89_BlobParameters* pvalue);

/**************************************************************/
/*                                                            */
/*  Gost28147_89_Parameters                                   */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost28147_89_Parameters;

typedef struct EXTERN ASN1T_Gost28147_89_Parameters : public ASN1TPDU {
   ASN1T_Gost28147_89_IV iv;
   ASN1T_Gost28147_89_ParamSet encryptionParamSet;
   ASN1T_Gost28147_89_Parameters ();
   ASN1T_Gost28147_89_Parameters (ASN1C_Gost28147_89_Parameters& srcData);
} ASN1T_Gost28147_89_Parameters;

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

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

   inline ASN1C_Gost28147_89_Parameters& operator= (ASN1C_Gost28147_89_Parameters& 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_Gost28147_89_Parameters (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_Parameters *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost28147_89_Parameters (ASN1CTXT* pctxt,
   ASN1T_Gost28147_89_Parameters *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost28147_89_Parameters
  (ASN1CTXT* pctxt, ASN1T_Gost28147_89_Parameters* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost28147_89_Parameters (ASN1CTXT *pctxt, ASN1T_Gost28147_89_Parameters* pSrcValue, ASN1T_Gost28147_89_Parameters* pDstValue);

/**************************************************************/
/*                                                            */
/*  Gost3412_15_Encryption_Parameters                         */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_Gost3412_15_Encryption_Parameters;

typedef struct EXTERN ASN1T_Gost3412_15_Encryption_Parameters : public ASN1TPDU {
   ASN1TDynOctStr ukm;
   ASN1T_Gost3412_15_Encryption_Parameters ();
   ASN1T_Gost3412_15_Encryption_Parameters (ASN1C_Gost3412_15_Encryption_Parameters& srcData);
   ~ASN1T_Gost3412_15_Encryption_Parameters ();
} ASN1T_Gost3412_15_Encryption_Parameters;

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

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

   inline ASN1C_Gost3412_15_Encryption_Parameters& operator= (ASN1C_Gost3412_15_Encryption_Parameters& 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_Gost3412_15_Encryption_Parameters (ASN1CTXT* pctxt,
   ASN1T_Gost3412_15_Encryption_Parameters *pvalue, ASN1TagType tagging);

EXTERN int asn1D_Gost3412_15_Encryption_Parameters (ASN1CTXT* pctxt,
   ASN1T_Gost3412_15_Encryption_Parameters *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XE_Gost3412_15_Encryption_Parameters
  (ASN1CTXT* pctxt, ASN1T_Gost3412_15_Encryption_Parameters* pvalue,
   ASN1ConstCharPtr elemName, ASN1ConstCharPtr attributes);

EXTERN void asn1Copy_Gost3412_15_Encryption_Parameters (ASN1CTXT *pctxt, ASN1T_Gost3412_15_Encryption_Parameters* pSrcValue, ASN1T_Gost3412_15_Encryption_Parameters* pDstValue);

EXTERN void asn1Free_Gost3412_15_Encryption_Parameters (ASN1CTXT *pctxt, ASN1T_Gost3412_15_Encryption_Parameters* pvalue);

/* Value definitions */

extern EXTERN ASN1OBJID id_Gost28147_89;
extern EXTERN ASN1OBJID id_Gost28147_89_MAC;
extern EXTERN ASN1OBJID id_Gost28147_89_TestParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_CryptoPro_A_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_CryptoPro_B_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_CryptoPro_C_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_CryptoPro_D_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_CryptoPro_RIC_1_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_TC26_A_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_TC26_B_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_TC26_C_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_TC26_D_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_TC26_E_ParamSet;
extern EXTERN ASN1OBJID id_Gost28147_89_TC26_F_ParamSet;
extern EXTERN ASN1OBJID id_tc26_gost_28147_paramSetISO;
extern EXTERN ASN1OBJID id_tc26_cipher_gost_3412_2015_M;
extern EXTERN ASN1OBJID id_tc26_cipher_gost_3412_2015_M_ctr_acpkm;
extern EXTERN ASN1OBJID id_tc26_cipher_gost_3412_2015_M_ctr_acpkm_omac;
extern EXTERN ASN1OBJID id_tc26_cipher_gost_3412_2015_K;
extern EXTERN ASN1OBJID id_tc26_cipher_gost_3412_2015_K_ctr_acpkm;
extern EXTERN ASN1OBJID id_tc26_cipher_gost_3412_2015_K_ctr_acpkm_omac;
extern EXTERN ASN1OBJID id_tc26_wrap_gost_3412_2015_M;
extern EXTERN ASN1OBJID id_tc26_wrap_gost_3412_2015_M_kexp15;
extern EXTERN ASN1OBJID id_tc26_wrap_gost_3412_2015_K;
extern EXTERN ASN1OBJID id_tc26_wrap_gost_3412_2015_K_kexp15;

}
#endif
