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

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

/**************************************************************/
/*                                                            */
/*  CertificateAndCrlMatchingTechnique                        */
/*                                                            */
/**************************************************************/

struct EXTERN CertificateAndCrlMatchingTechnique {
   enum Root {
      mtMicrosoftMatchingTechnique = 0,
      mtRfc3280MatchingTechnique = 1
   } ;
} ;

typedef ASN1UINT ASN1T_CertificateAndCrlMatchingTechnique;

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

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

EXTERN int asn1E_CertificateAndCrlMatchingTechnique (ASN1CTXT* pctxt,
   ASN1T_CertificateAndCrlMatchingTechnique *pvalue, ASN1TagType tagging);

EXTERN int asn1D_CertificateAndCrlMatchingTechnique (ASN1CTXT* pctxt,
   ASN1T_CertificateAndCrlMatchingTechnique *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_CertificateAndCrlMatchingTechnique (ASN1CTXT *pctxt, ASN1T_CertificateAndCrlMatchingTechnique* pSrcValue, ASN1T_CertificateAndCrlMatchingTechnique* pDstValue);

/**************************************************************/
/*                                                            */
/*  RestrictedCSPKeyLicenseArea                               */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_RestrictedCSPKeyLicenseArea;

typedef struct EXTERN ASN1T_RestrictedCSPKeyLicenseArea {
   ASN1UINT  numbits;
   ASN1OCTET data[2];
   // ctors
   ASN1T_RestrictedCSPKeyLicenseArea () : numbits(0) {}
   ASN1T_RestrictedCSPKeyLicenseArea (ASN1UINT _numbits, const ASN1OCTET* _data) :
      numbits(_numbits) {
      memcpy (data, _data, sizeof(data));
   }
   ASN1T_RestrictedCSPKeyLicenseArea (ASN1C_RestrictedCSPKeyLicenseArea& srcData);
} ASN1T_RestrictedCSPKeyLicenseArea;

class EXTERN ASN1C_RestrictedCSPKeyLicenseArea :
   public ASN1CBitStr
{
protected:
   ASN1T_RestrictedCSPKeyLicenseArea& msgData;
public:
   // named bits
   enum { licenseIssuer = 0, licenseCAKeyId = 1, licenseCSP = 2, licenseTLSClntOnly = 3, licenseWinLogon = 4, licenseEFS = 5, licenseIPsec = 6, licenseCAdES = 7, licenseExport = 8 };

   ASN1C_RestrictedCSPKeyLicenseArea (ASN1T_RestrictedCSPKeyLicenseArea& data);
   ASN1C_RestrictedCSPKeyLicenseArea (
      ASN1MessageBufferIF& msgBuf, ASN1T_RestrictedCSPKeyLicenseArea& data);
   ASN1C_RestrictedCSPKeyLicenseArea (ASN1C_RestrictedCSPKeyLicenseArea& 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_RestrictedCSPKeyLicenseArea& getCopy (ASN1T_RestrictedCSPKeyLicenseArea* pDstData = 0);
   ASN1T_RestrictedCSPKeyLicenseArea* newCopy ();

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

EXTERN int asn1E_RestrictedCSPKeyLicenseArea (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicenseArea *pvalue, ASN1TagType tagging);

EXTERN int asn1D_RestrictedCSPKeyLicenseArea (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicenseArea *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_RestrictedCSPKeyLicenseArea (ASN1CTXT *pctxt, ASN1T_RestrictedCSPKeyLicenseArea* pSrcValue, ASN1T_RestrictedCSPKeyLicenseArea* pDstValue);

/**************************************************************/
/*                                                            */
/*  RestrictedCSPKeyLicense_hash                              */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_RestrictedCSPKeyLicense_hash;

typedef struct EXTERN ASN1T_RestrictedCSPKeyLicense_hash {
   ASN1UINT numocts;
   ASN1OCTET data[12];
   // ctors
   ASN1T_RestrictedCSPKeyLicense_hash () : numocts(0) {}
   ASN1T_RestrictedCSPKeyLicense_hash (ASN1UINT _numocts, const ASN1OCTET* _data) :
      numocts (_numocts) {
      memcpy (data, _data, ASN1MIN (numocts, sizeof(data)));
   }
   ASN1T_RestrictedCSPKeyLicense_hash (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
   }
   ASN1T_RestrictedCSPKeyLicense_hash (ASN1C_RestrictedCSPKeyLicense_hash& srcData);
   // assignment operators
   ASN1T_RestrictedCSPKeyLicense_hash& 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_RestrictedCSPKeyLicense_hash;

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

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

EXTERN int asn1E_RestrictedCSPKeyLicense_hash (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicense_hash *pvalue, ASN1TagType tagging);

EXTERN int asn1D_RestrictedCSPKeyLicense_hash (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicense_hash *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_RestrictedCSPKeyLicense_hash (ASN1CTXT *pctxt, ASN1T_RestrictedCSPKeyLicense_hash* pSrcValue, ASN1T_RestrictedCSPKeyLicense_hash* pDstValue);

/**************************************************************/
/*                                                            */
/*  PBECryptoProGostParameters_salt                           */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PBECryptoProGostParameters_salt;

typedef struct EXTERN ASN1T_PBECryptoProGostParameters_salt {
   ASN1UINT numocts;
   ASN1OCTET data[16];
   // ctors
   ASN1T_PBECryptoProGostParameters_salt () : numocts(0) {}
   ASN1T_PBECryptoProGostParameters_salt (ASN1UINT _numocts, const ASN1OCTET* _data) :
      numocts (_numocts) {
      memcpy (data, _data, ASN1MIN (numocts, sizeof(data)));
   }
   ASN1T_PBECryptoProGostParameters_salt (const char* cstring) {
      if (strlen(cstring) > 0) {
         numocts = ASN1MIN ((strlen(cstring)+1), sizeof(data));
         strncpy ((char*)data, cstring, sizeof(data));
      }
      else numocts = 0;
   }
   ASN1T_PBECryptoProGostParameters_salt (ASN1C_PBECryptoProGostParameters_salt& srcData);
   // assignment operators
   ASN1T_PBECryptoProGostParameters_salt& 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_PBECryptoProGostParameters_salt;

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

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

EXTERN int asn1E_PBECryptoProGostParameters_salt (ASN1CTXT* pctxt,
   ASN1T_PBECryptoProGostParameters_salt *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PBECryptoProGostParameters_salt (ASN1CTXT* pctxt,
   ASN1T_PBECryptoProGostParameters_salt *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PBECryptoProGostParameters_salt (ASN1CTXT *pctxt, ASN1T_PBECryptoProGostParameters_salt* pSrcValue, ASN1T_PBECryptoProGostParameters_salt* pDstValue);

/**************************************************************/
/*                                                            */
/*  PBECryptoProGostParameters_iv                             */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PBECryptoProGostParameters_iv;

typedef struct EXTERN ASN1T_PBECryptoProGostParameters_iv {
   ASN1UINT numocts;
   ASN1OCTET data[8];
   // ctors
   ASN1T_PBECryptoProGostParameters_iv () : numocts(0) {}
   ASN1T_PBECryptoProGostParameters_iv (ASN1UINT _numocts, const ASN1OCTET* _data) :
      numocts (_numocts) {
      memcpy (data, _data, ASN1MIN (numocts, sizeof(data)));
   }
   ASN1T_PBECryptoProGostParameters_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_PBECryptoProGostParameters_iv (ASN1C_PBECryptoProGostParameters_iv& srcData);
   // assignment operators
   ASN1T_PBECryptoProGostParameters_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_PBECryptoProGostParameters_iv;

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

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

EXTERN int asn1E_PBECryptoProGostParameters_iv (ASN1CTXT* pctxt,
   ASN1T_PBECryptoProGostParameters_iv *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PBECryptoProGostParameters_iv (ASN1CTXT* pctxt,
   ASN1T_PBECryptoProGostParameters_iv *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PBECryptoProGostParameters_iv (ASN1CTXT *pctxt, ASN1T_PBECryptoProGostParameters_iv* pSrcValue, ASN1T_PBECryptoProGostParameters_iv* pDstValue);

/**************************************************************/
/*                                                            */
/*  CProLicenseSignature                                      */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_CProLicenseSignature;

typedef struct EXTERN ASN1T_CProLicenseSignature : public ASN1TPDU {
   ASN1INT keyId;
   ASN1TDynOctStr signature;
   ASN1T_CProLicenseSignature ();
   ASN1T_CProLicenseSignature (ASN1C_CProLicenseSignature& srcData);
   ~ASN1T_CProLicenseSignature ();
} ASN1T_CProLicenseSignature;

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

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

EXTERN int asn1E_CProLicenseSignature (ASN1CTXT* pctxt,
   ASN1T_CProLicenseSignature *pvalue, ASN1TagType tagging);

EXTERN int asn1D_CProLicenseSignature (ASN1CTXT* pctxt,
   ASN1T_CProLicenseSignature *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_CProLicenseSignature (ASN1CTXT *pctxt, ASN1T_CProLicenseSignature* pSrcValue, ASN1T_CProLicenseSignature* pDstValue);

EXTERN void asn1Free_CProLicenseSignature (ASN1CTXT *pctxt, ASN1T_CProLicenseSignature* pvalue);

/**************************************************************/
/*                                                            */
/*  RestrictedCSPKeyLicense_tbh                               */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_RestrictedCSPKeyLicense_tbh;

typedef struct EXTERN ASN1T_RestrictedCSPKeyLicense_tbh : public ASN1TPDU {
   struct {
      unsigned licenseSignaturePresent : 1;
   } m;
   ASN1IA5String licenseUri;
   ASN1UTF8String licenseText;
   ASN1TDynBitStr licenseArea;
   ASN1INT idHashConstant;
   ASN1T_CProLicenseSignature licenseSignature;
   ASN1TSeqExt extElem1;
   ASN1T_RestrictedCSPKeyLicense_tbh ();
   ASN1T_RestrictedCSPKeyLicense_tbh (ASN1C_RestrictedCSPKeyLicense_tbh& srcData);
   ~ASN1T_RestrictedCSPKeyLicense_tbh ();
} ASN1T_RestrictedCSPKeyLicense_tbh;

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

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

EXTERN int asn1E_RestrictedCSPKeyLicense_tbh (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicense_tbh *pvalue, ASN1TagType tagging);

EXTERN int asn1D_RestrictedCSPKeyLicense_tbh (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicense_tbh *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_RestrictedCSPKeyLicense_tbh (ASN1CTXT *pctxt, ASN1T_RestrictedCSPKeyLicense_tbh* pSrcValue, ASN1T_RestrictedCSPKeyLicense_tbh* pDstValue);

EXTERN void asn1Free_RestrictedCSPKeyLicense_tbh (ASN1CTXT *pctxt, ASN1T_RestrictedCSPKeyLicense_tbh* pvalue);

/**************************************************************/
/*                                                            */
/*  RestrictedCSPKeyLicense                                   */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_RestrictedCSPKeyLicense;

typedef struct EXTERN ASN1T_RestrictedCSPKeyLicense : public ASN1TPDU {
   ASN1T_RestrictedCSPKeyLicense_tbh tbh;
   ASN1T_RestrictedCSPKeyLicense_hash hash;
   ASN1T_RestrictedCSPKeyLicense ();
   ASN1T_RestrictedCSPKeyLicense (ASN1C_RestrictedCSPKeyLicense& srcData);
   ~ASN1T_RestrictedCSPKeyLicense ();
} ASN1T_RestrictedCSPKeyLicense;

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

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

EXTERN int asn1E_RestrictedCSPKeyLicense (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicense *pvalue, ASN1TagType tagging);

EXTERN int asn1D_RestrictedCSPKeyLicense (ASN1CTXT* pctxt,
   ASN1T_RestrictedCSPKeyLicense *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_RestrictedCSPKeyLicense (ASN1CTXT *pctxt, ASN1T_RestrictedCSPKeyLicense* pSrcValue, ASN1T_RestrictedCSPKeyLicense* pDstValue);

EXTERN void asn1Free_RestrictedCSPKeyLicense (ASN1CTXT *pctxt, ASN1T_RestrictedCSPKeyLicense* pvalue);

/**************************************************************/
/*                                                            */
/*  PBECryptoProGostParameters                                */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PBECryptoProGostParameters;

typedef struct EXTERN ASN1T_PBECryptoProGostParameters : public ASN1TPDU {
   ASN1T_PBECryptoProGostParameters_salt salt;
   ASN1INT iterationCount;
   ASN1T_PBECryptoProGostParameters_iv iv;
   ASN1T_PBECryptoProGostParameters ();
   ASN1T_PBECryptoProGostParameters (ASN1C_PBECryptoProGostParameters& srcData);
} ASN1T_PBECryptoProGostParameters;

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

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

EXTERN int asn1E_PBECryptoProGostParameters (ASN1CTXT* pctxt,
   ASN1T_PBECryptoProGostParameters *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PBECryptoProGostParameters (ASN1CTXT* pctxt,
   ASN1T_PBECryptoProGostParameters *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PBECryptoProGostParameters (ASN1CTXT *pctxt, ASN1T_PBECryptoProGostParameters* pSrcValue, ASN1T_PBECryptoProGostParameters* pDstValue);

/* Value definitions */

extern EXTERN ASN1OBJID id_CryptoPro;
extern EXTERN ASN1OBJID id_CryptoPro_algorithms;
extern EXTERN ASN1OBJID id_CryptoPro_modules;
extern EXTERN ASN1OBJID id_CryptoPro_hashes;
extern EXTERN ASN1OBJID id_CryptoPro_encrypts;
extern EXTERN ASN1OBJID id_CryptoPro_signs;
extern EXTERN ASN1OBJID id_CryptoPro_exchanges;
extern EXTERN ASN1OBJID id_CryptoPro_extensions;
extern EXTERN ASN1OBJID id_CryptoPro_ecc_signs;
extern EXTERN ASN1OBJID id_CryptoPro_ecc_exchanges;
extern EXTERN ASN1OBJID id_CryptoPro_private_keys;
extern EXTERN ASN1OBJID id_CryptoPro_policyIds;
extern EXTERN ASN1OBJID id_CryptoPro_policyQt;
extern EXTERN ASN1OBJID id_CryptoPro_container_auth;
extern EXTERN ASN1OBJID id_CryptoPro_pkixcmp_infos;
extern EXTERN ASN1OBJID id_CryptoPro_audit_service_types;
extern EXTERN ASN1OBJID id_CryptoPro_audit_record_types;
extern EXTERN ASN1OBJID id_CryptoPro_attributes;
extern EXTERN ASN1OBJID id_CryptoPro_name_service_types;
extern EXTERN ASN1OBJID id_CryptoPro_misc;
extern EXTERN ASN1OBJID id_CryptoPro_ocsp_extensions;
extern EXTERN ASN1OBJID id_CryptoPro_certificate_and_crl_extensions;
extern EXTERN ASN1OBJID id_CryptoPro_cc2;
extern EXTERN ASN1OBJID id_CryptoPro_extensions_certificate_and_crl_matching_technique;
extern EXTERN ASN1OBJID id_CryptoPro_ce_restrictedCSPKeyLicense;
extern EXTERN ASN1OBJID cryptographic_Gost_Useful_Definitions;
extern EXTERN ASN1OBJID gostR3411_94_DigestSyntax;
extern EXTERN ASN1OBJID gostR3411_94_ParamSetSyntax;
extern EXTERN ASN1OBJID gostR3410_2001_PKISyntax;
extern EXTERN ASN1OBJID gostR3410_2001_SignatureSyntax;
extern EXTERN ASN1OBJID gostR3410_2001_ParamSetSyntax;
extern EXTERN ASN1OBJID gost28147_89_EncryptionSyntax;
extern EXTERN ASN1OBJID gost28147_89_ParamSetSyntax;
extern EXTERN ASN1OBJID gost_CryptoPro_ExtendedKeyUsage;
extern EXTERN ASN1OBJID gost_CryptoPro_PrivateKey;
extern EXTERN ASN1OBJID gost_CryptoPro_PKIXCMP;
extern EXTERN ASN1OBJID gost_CryptoPro_TLS;
extern EXTERN ASN1OBJID gost_CryptoPro_Policy;
extern EXTERN ASN1OBJID gost_CryptoPro_Constants;
extern EXTERN ASN1OBJID cryptoPro_CA;
extern EXTERN ASN1OBJID gost_xmldsig;
extern EXTERN ASN1OBJID cryptoPro_Attributes;
extern EXTERN ASN1OBJID cryptoPro_FKC_Container;
extern EXTERN ASN1OBJID gost_Qualified_Certificate;
extern EXTERN ASN1OBJID id_pbeWithGost28147_89_CryptoPro_A_ParamSetAndGostR3411_94_CryptoProParamSet;

}
#endif
