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

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

/**************************************************************/
/*                                                            */
/*  GostR3410_2012_256_PublicKey                              */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_GostR3410_2012_256_PublicKey;

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

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

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

EXTERN int asn1E_GostR3410_2012_256_PublicKey (ASN1CTXT* pctxt,
   ASN1T_GostR3410_2012_256_PublicKey *pvalue, ASN1TagType tagging);

EXTERN int asn1D_GostR3410_2012_256_PublicKey (ASN1CTXT* pctxt,
   ASN1T_GostR3410_2012_256_PublicKey *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_GostR3410_2012_256_PublicKey (ASN1CTXT *pctxt, ASN1T_GostR3410_2012_256_PublicKey* pSrcValue, ASN1T_GostR3410_2012_256_PublicKey* pDstValue);

/**************************************************************/
/*                                                            */
/*  GostR3410_2012_512_PublicKey                              */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_GostR3410_2012_512_PublicKey;

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

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

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

EXTERN int asn1E_GostR3410_2012_512_PublicKey (ASN1CTXT* pctxt,
   ASN1T_GostR3410_2012_512_PublicKey *pvalue, ASN1TagType tagging);

EXTERN int asn1D_GostR3410_2012_512_PublicKey (ASN1CTXT* pctxt,
   ASN1T_GostR3410_2012_512_PublicKey *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_GostR3410_2012_512_PublicKey (ASN1CTXT *pctxt, ASN1T_GostR3410_2012_512_PublicKey* pSrcValue, ASN1T_GostR3410_2012_512_PublicKey* pDstValue);

/**************************************************************/
/*                                                            */
/*  GostR3410_PublicKey                                       */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_GostR3410_PublicKey;

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

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

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

EXTERN int asn1E_GostR3410_PublicKey (ASN1CTXT* pctxt,
   ASN1T_GostR3410_PublicKey *pvalue, ASN1TagType tagging);

EXTERN int asn1D_GostR3410_PublicKey (ASN1CTXT* pctxt,
   ASN1T_GostR3410_PublicKey *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_GostR3410_PublicKey (ASN1CTXT *pctxt, ASN1T_GostR3410_PublicKey* pSrcValue, ASN1T_GostR3410_PublicKey* pDstValue);

/**************************************************************/
/*                                                            */
/*  GostR3410_2012_PublicKeyParameters                        */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_GostR3410_2012_PublicKeyParameters;

typedef struct EXTERN ASN1T_GostR3410_2012_PublicKeyParameters : public ASN1TPDU {
   struct {
      unsigned digestParamSetPresent : 1;
      unsigned encryptionParamSetPresent : 1;
   } m;
   ASN1TObjId publicKeyParamSet;
   ASN1TObjId digestParamSet;
   ASN1TObjId encryptionParamSet;
   ASN1T_GostR3410_2012_PublicKeyParameters ();
   ASN1T_GostR3410_2012_PublicKeyParameters (ASN1C_GostR3410_2012_PublicKeyParameters& srcData);
} ASN1T_GostR3410_2012_PublicKeyParameters;

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

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

EXTERN int asn1E_GostR3410_2012_PublicKeyParameters (ASN1CTXT* pctxt,
   ASN1T_GostR3410_2012_PublicKeyParameters *pvalue, ASN1TagType tagging);

EXTERN int asn1D_GostR3410_2012_PublicKeyParameters (ASN1CTXT* pctxt,
   ASN1T_GostR3410_2012_PublicKeyParameters *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_GostR3410_2012_PublicKeyParameters (ASN1CTXT *pctxt, ASN1T_GostR3410_2012_PublicKeyParameters* pSrcValue, ASN1T_GostR3410_2012_PublicKeyParameters* pDstValue);

/* Value definitions */

extern EXTERN ASN1OBJID id_tc26_gost3410_2012_256;
extern EXTERN ASN1OBJID id_tc26_gost3410_2012_512;
extern EXTERN ASN1OBJID id_tc26_signwithdigest_gost3410_2012_256;
extern EXTERN ASN1OBJID id_tc26_signwithdigest_gost3410_2012_512;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_256_paramSetTest;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_256_paramSetA;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_256_paramSetB;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_256_paramSetC;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_256_paramSetD;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_512_paramSetTest;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_512_paramSetA;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_512_paramSetB;
extern EXTERN ASN1OBJID id_tc26_gost_3410_2012_512_paramSetC;

}
#endif
