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

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

/**************************************************************/
/*                                                            */
/*  GostR3411_94_Digest                                       */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_GostR3411_94_Digest;

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

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

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

EXTERN int asn1E_GostR3411_94_Digest (ASN1CTXT* pctxt,
   ASN1T_GostR3411_94_Digest *pvalue, ASN1TagType tagging);

EXTERN int asn1D_GostR3411_94_Digest (ASN1CTXT* pctxt,
   ASN1T_GostR3411_94_Digest *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_GostR3411_94_Digest (ASN1CTXT *pctxt, ASN1T_GostR3411_94_Digest* pSrcValue, ASN1T_GostR3411_94_Digest* pDstValue);

/**************************************************************/
/*                                                            */
/*  GostR3411_94_DigestParameters                             */
/*                                                            */
/**************************************************************/

typedef ASN1TObjId ASN1T_GostR3411_94_DigestParameters;

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

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

EXTERN int asn1E_GostR3411_94_DigestParameters (ASN1CTXT* pctxt,
   ASN1T_GostR3411_94_DigestParameters *pvalue, ASN1TagType tagging);

EXTERN int asn1D_GostR3411_94_DigestParameters (ASN1CTXT* pctxt,
   ASN1T_GostR3411_94_DigestParameters *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_GostR3411_94_DigestParameters (ASN1CTXT *pctxt, ASN1T_GostR3411_94_DigestParameters* pSrcValue, ASN1T_GostR3411_94_DigestParameters* pDstValue);

/* Value definitions */

extern EXTERN ASN1OBJID id_GostR3411_94;
extern EXTERN ASN1OBJID id_hmac_GostR3411_94;
extern EXTERN ASN1OBJID id_GostR3411_94_TestParamSet;
extern EXTERN ASN1OBJID id_GostR3411_94_CryptoProParamSet;

}
#endif
