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

#include <stdio.h>
#include <stdlib.h>
#include "asn1BerCppTypes.h"
#include "rtTable.h"
#include "ASN1CSeqOfList.h"
#include "PKIX1Explicit88.h"
#include "CryptographicMessageSyntax.h"
#include "PKCS-8.h"
namespace asn1data {

/**************************************************************/
/*                                                            */
/*  KeyBag                                                    */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_KeyBag;

typedef ASN1T_PrivateKeyInfo ASN1T_KeyBag;

class EXTERN ASN1C_KeyBag :
   public ASN1C_PrivateKeyInfo
{
protected:
public:
   ASN1C_KeyBag (ASN1T_KeyBag& data);
   ASN1C_KeyBag (
      ASN1MessageBufferIF& msgBuf, ASN1T_KeyBag& data);
   ASN1C_KeyBag (ASN1C_KeyBag& 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_KeyBag& getCopy (ASN1T_KeyBag* pDstData = 0);
   ASN1T_KeyBag* newCopy ();

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

EXTERN int asn1E_KeyBag (ASN1CTXT* pctxt,
   ASN1T_KeyBag *pvalue, ASN1TagType tagging);

EXTERN int asn1D_KeyBag (ASN1CTXT* pctxt,
   ASN1T_KeyBag *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_KeyBag (ASN1CTXT *pctxt, ASN1T_KeyBag* pSrcValue, ASN1T_KeyBag* pDstValue);

EXTERN void asn1Free_KeyBag (ASN1CTXT *pctxt, ASN1T_KeyBag* pvalue);

/**************************************************************/
/*                                                            */
/*  PKCS8ShroudedKeyBag                                       */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PKCS8ShroudedKeyBag;

typedef ASN1T_EncryptedPrivateKeyInfo ASN1T_PKCS8ShroudedKeyBag;

class EXTERN ASN1C_PKCS8ShroudedKeyBag :
   public ASN1C_EncryptedPrivateKeyInfo
{
protected:
public:
   ASN1C_PKCS8ShroudedKeyBag (ASN1T_PKCS8ShroudedKeyBag& data);
   ASN1C_PKCS8ShroudedKeyBag (
      ASN1MessageBufferIF& msgBuf, ASN1T_PKCS8ShroudedKeyBag& data);
   ASN1C_PKCS8ShroudedKeyBag (ASN1C_PKCS8ShroudedKeyBag& 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_PKCS8ShroudedKeyBag& getCopy (ASN1T_PKCS8ShroudedKeyBag* pDstData = 0);
   ASN1T_PKCS8ShroudedKeyBag* newCopy ();

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

EXTERN int asn1E_PKCS8ShroudedKeyBag (ASN1CTXT* pctxt,
   ASN1T_PKCS8ShroudedKeyBag *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PKCS8ShroudedKeyBag (ASN1CTXT* pctxt,
   ASN1T_PKCS8ShroudedKeyBag *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PKCS8ShroudedKeyBag (ASN1CTXT *pctxt, ASN1T_PKCS8ShroudedKeyBag* pSrcValue, ASN1T_PKCS8ShroudedKeyBag* pDstValue);

EXTERN void asn1Free_PKCS8ShroudedKeyBag (ASN1CTXT *pctxt, ASN1T_PKCS8ShroudedKeyBag* pvalue);

/**************************************************************/
/*                                                            */
/*  _x509Certificate_Type                                     */
/*                                                            */
/**************************************************************/

typedef ASN1TDynOctStr ASN1T__x509Certificate_Type;

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

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

EXTERN int asn1E__x509Certificate_Type (ASN1CTXT* pctxt,
   ASN1T__x509Certificate_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__x509Certificate_Type (ASN1CTXT* pctxt,
   ASN1T__x509Certificate_Type *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy__x509Certificate_Type (ASN1CTXT *pctxt, ASN1T__x509Certificate_Type* pSrcValue, ASN1T__x509Certificate_Type* pDstValue);

EXTERN void asn1Free__x509Certificate_Type (ASN1CTXT *pctxt, ASN1T__x509Certificate_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _x509CRL_Type                                             */
/*                                                            */
/**************************************************************/

typedef ASN1TDynOctStr ASN1T__x509CRL_Type;

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

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

EXTERN int asn1E__x509CRL_Type (ASN1CTXT* pctxt,
   ASN1T__x509CRL_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__x509CRL_Type (ASN1CTXT* pctxt,
   ASN1T__x509CRL_Type *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy__x509CRL_Type (ASN1CTXT *pctxt, ASN1T__x509CRL_Type* pSrcValue, ASN1T__x509CRL_Type* pDstValue);

EXTERN void asn1Free__x509CRL_Type (ASN1CTXT *pctxt, ASN1T__x509CRL_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _providerName_Type                                        */
/*                                                            */
/**************************************************************/

typedef ASN1BMPString ASN1T__providerName_Type;

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

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

EXTERN int asn1E__providerName_Type (ASN1CTXT* pctxt,
   ASN1T__providerName_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__providerName_Type (ASN1CTXT* pctxt,
   ASN1T__providerName_Type *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy__providerName_Type (ASN1CTXT *pctxt, ASN1T__providerName_Type* pSrcValue, ASN1T__providerName_Type* pDstValue);

/**************************************************************/
/*                                                            */
/*  _pkcs12EnhKeyUsage_Type                                   */
/*                                                            */
/**************************************************************/

typedef ASN1TDynOctStr ASN1T__pkcs12EnhKeyUsage_Type;

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

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

EXTERN int asn1E__pkcs12EnhKeyUsage_Type (ASN1CTXT* pctxt,
   ASN1T__pkcs12EnhKeyUsage_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__pkcs12EnhKeyUsage_Type (ASN1CTXT* pctxt,
   ASN1T__pkcs12EnhKeyUsage_Type *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy__pkcs12EnhKeyUsage_Type (ASN1CTXT *pctxt, ASN1T__pkcs12EnhKeyUsage_Type* pSrcValue, ASN1T__pkcs12EnhKeyUsage_Type* pDstValue);

EXTERN void asn1Free__pkcs12EnhKeyUsage_Type (ASN1CTXT *pctxt, ASN1T__pkcs12EnhKeyUsage_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _pkcs12CertDescription_Type                               */
/*                                                            */
/**************************************************************/

typedef ASN1TDynOctStr ASN1T__pkcs12CertDescription_Type;

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

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

EXTERN int asn1E__pkcs12CertDescription_Type (ASN1CTXT* pctxt,
   ASN1T__pkcs12CertDescription_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__pkcs12CertDescription_Type (ASN1CTXT* pctxt,
   ASN1T__pkcs12CertDescription_Type *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy__pkcs12CertDescription_Type (ASN1CTXT *pctxt, ASN1T__pkcs12CertDescription_Type* pSrcValue, ASN1T__pkcs12CertDescription_Type* pDstValue);

EXTERN void asn1Free__pkcs12CertDescription_Type (ASN1CTXT *pctxt, ASN1T__pkcs12CertDescription_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  _pkcs12KeyIdentifier_Type                                 */
/*                                                            */
/**************************************************************/

typedef ASN1TDynOctStr ASN1T__pkcs12KeyIdentifier_Type;

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

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

EXTERN int asn1E__pkcs12KeyIdentifier_Type (ASN1CTXT* pctxt,
   ASN1T__pkcs12KeyIdentifier_Type *pvalue, ASN1TagType tagging);

EXTERN int asn1D__pkcs12KeyIdentifier_Type (ASN1CTXT* pctxt,
   ASN1T__pkcs12KeyIdentifier_Type *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy__pkcs12KeyIdentifier_Type (ASN1CTXT *pctxt, ASN1T__pkcs12KeyIdentifier_Type* pSrcValue, ASN1T__pkcs12KeyIdentifier_Type* pDstValue);

EXTERN void asn1Free__pkcs12KeyIdentifier_Type (ASN1CTXT *pctxt, ASN1T__pkcs12KeyIdentifier_Type* pvalue);

/**************************************************************/
/*                                                            */
/*  PFX_version                                               */
/*                                                            */
/**************************************************************/

struct EXTERN PFX_version {
   enum Root {
      pfx_v3 = 3
   } ;
} ;

typedef ASN1UINT ASN1T_PFX_version;

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

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

EXTERN int asn1E_PFX_version (ASN1CTXT* pctxt,
   ASN1T_PFX_version *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PFX_version (ASN1CTXT* pctxt,
   ASN1T_PFX_version *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PFX_version (ASN1CTXT *pctxt, ASN1T_PFX_version* pSrcValue, ASN1T_PFX_version* pDstValue);

/**************************************************************/
/*                                                            */
/*  PbeParams                                                 */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PbeParams;

typedef struct EXTERN ASN1T_PbeParams : public ASN1TPDU {
   ASN1TDynOctStr salt;
   ASN1INT iterations;
   ASN1T_PbeParams ();
   ASN1T_PbeParams (ASN1C_PbeParams& srcData);
   ~ASN1T_PbeParams ();
} ASN1T_PbeParams;

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

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

EXTERN int asn1E_PbeParams (ASN1CTXT* pctxt,
   ASN1T_PbeParams *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PbeParams (ASN1CTXT* pctxt,
   ASN1T_PbeParams *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PbeParams (ASN1CTXT *pctxt, ASN1T_PbeParams* pSrcValue, ASN1T_PbeParams* pDstValue);

EXTERN void asn1Free_PbeParams (ASN1CTXT *pctxt, ASN1T_PbeParams* pvalue);

/**************************************************************/
/*                                                            */
/*  MacData                                                   */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_MacData;

typedef struct EXTERN ASN1T_MacData : public ASN1TPDU {
   ASN1T_DigestInfo mac;
   ASN1TDynOctStr macSalt;
   ASN1INT iterations;
   ASN1T_MacData ();
   ASN1T_MacData (ASN1C_MacData& srcData);
   ~ASN1T_MacData ();
} ASN1T_MacData;

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

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

EXTERN int asn1E_MacData (ASN1CTXT* pctxt,
   ASN1T_MacData *pvalue, ASN1TagType tagging);

EXTERN int asn1D_MacData (ASN1CTXT* pctxt,
   ASN1T_MacData *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_MacData (ASN1CTXT *pctxt, ASN1T_MacData* pSrcValue, ASN1T_MacData* pDstValue);

EXTERN void asn1Free_MacData (ASN1CTXT *pctxt, ASN1T_MacData* pvalue);

/**************************************************************/
/*                                                            */
/*  PFX                                                       */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PFX;

typedef struct EXTERN ASN1T_PFX : public ASN1TPDU {
   struct {
      unsigned macDataPresent : 1;
   } m;
   ASN1T_PFX_version version;
   ASN1T_ContentInfo authSafe;
   ASN1T_MacData macData;
   ASN1T_PFX ();
   ASN1T_PFX (ASN1C_PFX& srcData);
   ~ASN1T_PFX ();
} ASN1T_PFX;

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

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

EXTERN int asn1E_PFX (ASN1CTXT* pctxt,
   ASN1T_PFX *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PFX (ASN1CTXT* pctxt,
   ASN1T_PFX *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PFX (ASN1CTXT *pctxt, ASN1T_PFX* pSrcValue, ASN1T_PFX* pDstValue);

EXTERN void asn1Free_PFX (ASN1CTXT *pctxt, ASN1T_PFX* pvalue);

/**************************************************************/
/*                                                            */
/*  AuthenticatedSafe                                         */
/*                                                            */
/**************************************************************/

/* List of ASN1T_ContentInfo */
typedef struct EXTERN ASN1T_AuthenticatedSafe : public ASN1TPDUSeqOfList {
   ~ASN1T_AuthenticatedSafe();
} ASN1T_AuthenticatedSafe;

class EXTERN ASN1C_AuthenticatedSafe :
   public ASN1CSeqOfList
{
protected:
   ASN1T_AuthenticatedSafe& msgData;
public:
   ASN1C_AuthenticatedSafe (ASN1T_AuthenticatedSafe& data);
   ASN1C_AuthenticatedSafe (
      ASN1MessageBufferIF& msgBuf, ASN1T_AuthenticatedSafe& data);
   ASN1C_AuthenticatedSafe (ASN1C_AuthenticatedSafe& 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_AuthenticatedSafe& getCopy (ASN1T_AuthenticatedSafe* pDstData = 0);
   ASN1T_AuthenticatedSafe* newCopy ();

   ASN1C_AuthenticatedSafe& operator= (ASN1C_AuthenticatedSafe& srcData);
   void Append (ASN1T_ContentInfo * elem) {
      append ((void*)elem);
   }
} ;

EXTERN int asn1E_AuthenticatedSafe (ASN1CTXT* pctxt,
   ASN1T_AuthenticatedSafe *pvalue, ASN1TagType tagging);

EXTERN int asn1D_AuthenticatedSafe (ASN1CTXT* pctxt,
   ASN1T_AuthenticatedSafe *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_AuthenticatedSafe (ASN1CTXT *pctxt, ASN1T_AuthenticatedSafe* pSrcValue, ASN1T_AuthenticatedSafe* pDstValue);

EXTERN void asn1Free_AuthenticatedSafe (ASN1CTXT *pctxt, ASN1T_AuthenticatedSafe* pvalue);

/**************************************************************/
/*                                                            */
/*  CertBag                                                   */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_CertBag;

typedef struct EXTERN ASN1T_CertBag : public ASN1TPDU {
   ASN1TObjId certId;
   Asn1TObject certValue;
   ASN1T_CertBag ();
   ASN1T_CertBag (ASN1C_CertBag& srcData);
   ~ASN1T_CertBag ();
} ASN1T_CertBag;

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

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

EXTERN int asn1E_CertBag (ASN1CTXT* pctxt,
   ASN1T_CertBag *pvalue, ASN1TagType tagging);

EXTERN int asn1D_CertBag (ASN1CTXT* pctxt,
   ASN1T_CertBag *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XETC_CertBag (ASN1CTXT* pctxt,
    ASN1T_CertBag *pvalue);

EXTERN int asn1XDTC_CertBag (ASN1CtxtPtr& pctxt,
    ASN1T_CertBag *pvalue);

EXTERN int asn1ETC_CertBag (ASN1CTXT* pctxt,
   ASN1T_CertBag *pvalue);

EXTERN int asn1DTC_CertBag (ASN1CTXT* pctxt,
   ASN1T_CertBag *pvalue);

EXTERN void asn1Copy_CertBag (ASN1CTXT *pctxt, ASN1T_CertBag* pSrcValue, ASN1T_CertBag* pDstValue);

EXTERN void asn1Free_CertBag (ASN1CTXT *pctxt, ASN1T_CertBag* pvalue);

/**************************************************************/
/*                                                            */
/*  CRLBag                                                    */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_CRLBag;

typedef struct EXTERN ASN1T_CRLBag : public ASN1TPDU {
   ASN1TObjId crlId;
   Asn1TObject crlValue;
   ASN1T_CRLBag ();
   ASN1T_CRLBag (ASN1C_CRLBag& srcData);
   ~ASN1T_CRLBag ();
} ASN1T_CRLBag;

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

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

EXTERN int asn1E_CRLBag (ASN1CTXT* pctxt,
   ASN1T_CRLBag *pvalue, ASN1TagType tagging);

EXTERN int asn1D_CRLBag (ASN1CTXT* pctxt,
   ASN1T_CRLBag *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XETC_CRLBag (ASN1CTXT* pctxt,
    ASN1T_CRLBag *pvalue);

EXTERN int asn1XDTC_CRLBag (ASN1CtxtPtr& pctxt,
    ASN1T_CRLBag *pvalue);

EXTERN int asn1ETC_CRLBag (ASN1CTXT* pctxt,
   ASN1T_CRLBag *pvalue);

EXTERN int asn1DTC_CRLBag (ASN1CTXT* pctxt,
   ASN1T_CRLBag *pvalue);

EXTERN void asn1Copy_CRLBag (ASN1CTXT *pctxt, ASN1T_CRLBag* pSrcValue, ASN1T_CRLBag* pDstValue);

EXTERN void asn1Free_CRLBag (ASN1CTXT *pctxt, ASN1T_CRLBag* pvalue);

/**************************************************************/
/*                                                            */
/*  SecretBag                                                 */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_SecretBag;

typedef struct EXTERN ASN1T_SecretBag : public ASN1TPDU {
   ASN1TObjId secretTypeId;
   Asn1TObject secretValue;
   ASN1T_SecretBag ();
   ASN1T_SecretBag (ASN1C_SecretBag& srcData);
   ~ASN1T_SecretBag ();
} ASN1T_SecretBag;

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

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

EXTERN int asn1E_SecretBag (ASN1CTXT* pctxt,
   ASN1T_SecretBag *pvalue, ASN1TagType tagging);

EXTERN int asn1D_SecretBag (ASN1CTXT* pctxt,
   ASN1T_SecretBag *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XETC_SecretBag (ASN1CTXT* pctxt,
    ASN1T_SecretBag *pvalue);

EXTERN int asn1XDTC_SecretBag (ASN1CtxtPtr& pctxt,
    ASN1T_SecretBag *pvalue);

EXTERN int asn1ETC_SecretBag (ASN1CTXT* pctxt,
   ASN1T_SecretBag *pvalue);

EXTERN int asn1DTC_SecretBag (ASN1CTXT* pctxt,
   ASN1T_SecretBag *pvalue);

EXTERN void asn1Copy_SecretBag (ASN1CTXT *pctxt, ASN1T_SecretBag* pSrcValue, ASN1T_SecretBag* pDstValue);

EXTERN void asn1Free_SecretBag (ASN1CTXT *pctxt, ASN1T_SecretBag* pvalue);

/**************************************************************/
/*                                                            */
/*  PKCS12Attribute_attrValues                                */
/*                                                            */
/**************************************************************/

/* List of Asn1TObject */
typedef struct EXTERN ASN1T_PKCS12Attribute_attrValues : public ASN1TPDUSeqOfList {
   ~ASN1T_PKCS12Attribute_attrValues();
} ASN1T_PKCS12Attribute_attrValues;

class EXTERN ASN1C_PKCS12Attribute_attrValues :
   public ASN1CSeqOfList
{
protected:
   ASN1T_PKCS12Attribute_attrValues& msgData;
public:
   ASN1C_PKCS12Attribute_attrValues (ASN1T_PKCS12Attribute_attrValues& data);
   ASN1C_PKCS12Attribute_attrValues (
      ASN1MessageBufferIF& msgBuf, ASN1T_PKCS12Attribute_attrValues& data);
   ASN1C_PKCS12Attribute_attrValues (ASN1C_PKCS12Attribute_attrValues& 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_PKCS12Attribute_attrValues& getCopy (ASN1T_PKCS12Attribute_attrValues* pDstData = 0);
   ASN1T_PKCS12Attribute_attrValues* newCopy ();

   ASN1C_PKCS12Attribute_attrValues& operator= (ASN1C_PKCS12Attribute_attrValues& srcData);
   void Append (Asn1TObject * elem) {
      append ((void*)elem);
   }
} ;

EXTERN int asn1E_PKCS12Attribute_attrValues (ASN1CTXT* pctxt,
   ASN1T_PKCS12Attribute_attrValues *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PKCS12Attribute_attrValues (ASN1CTXT* pctxt,
   ASN1T_PKCS12Attribute_attrValues *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_PKCS12Attribute_attrValues (ASN1CTXT *pctxt, ASN1T_PKCS12Attribute_attrValues* pSrcValue, ASN1T_PKCS12Attribute_attrValues* pDstValue);

EXTERN void asn1Free_PKCS12Attribute_attrValues (ASN1CTXT *pctxt, ASN1T_PKCS12Attribute_attrValues* pvalue);

/**************************************************************/
/*                                                            */
/*  PKCS12Attribute                                           */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_PKCS12Attribute;

typedef struct EXTERN ASN1T_PKCS12Attribute : public ASN1TPDU {
   ASN1TObjId attrId;
   ASN1T_PKCS12Attribute_attrValues attrValues;
   ASN1T_PKCS12Attribute ();
   ASN1T_PKCS12Attribute (ASN1C_PKCS12Attribute& srcData);
   ~ASN1T_PKCS12Attribute ();
} ASN1T_PKCS12Attribute;

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

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

EXTERN int asn1E_PKCS12Attribute (ASN1CTXT* pctxt,
   ASN1T_PKCS12Attribute *pvalue, ASN1TagType tagging);

EXTERN int asn1D_PKCS12Attribute (ASN1CTXT* pctxt,
   ASN1T_PKCS12Attribute *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XETC_PKCS12Attribute (ASN1CTXT* pctxt,
    ASN1T_PKCS12Attribute *pvalue);

EXTERN int asn1XDTC_PKCS12Attribute (ASN1CtxtPtr& pctxt,
    ASN1T_PKCS12Attribute *pvalue);

EXTERN int asn1ETC_PKCS12Attribute (ASN1CTXT* pctxt,
   ASN1T_PKCS12Attribute *pvalue);

EXTERN int asn1DTC_PKCS12Attribute (ASN1CTXT* pctxt,
   ASN1T_PKCS12Attribute *pvalue);

EXTERN void asn1Copy_PKCS12Attribute (ASN1CTXT *pctxt, ASN1T_PKCS12Attribute* pSrcValue, ASN1T_PKCS12Attribute* pDstValue);

EXTERN void asn1Free_PKCS12Attribute (ASN1CTXT *pctxt, ASN1T_PKCS12Attribute* pvalue);

/**************************************************************/
/*                                                            */
/*  _SetOfPKCS12Attribute                                     */
/*                                                            */
/**************************************************************/

/* List of ASN1T_PKCS12Attribute */
typedef struct EXTERN ASN1T__SetOfPKCS12Attribute : public ASN1TPDUSeqOfList {
   ~ASN1T__SetOfPKCS12Attribute();
} ASN1T__SetOfPKCS12Attribute;

class EXTERN ASN1C__SetOfPKCS12Attribute :
   public ASN1CSeqOfList
{
protected:
   ASN1T__SetOfPKCS12Attribute& msgData;
public:
   ASN1C__SetOfPKCS12Attribute (ASN1T__SetOfPKCS12Attribute& data);
   ASN1C__SetOfPKCS12Attribute (
      ASN1MessageBufferIF& msgBuf, ASN1T__SetOfPKCS12Attribute& data);
   ASN1C__SetOfPKCS12Attribute (ASN1C__SetOfPKCS12Attribute& 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__SetOfPKCS12Attribute& getCopy (ASN1T__SetOfPKCS12Attribute* pDstData = 0);
   ASN1T__SetOfPKCS12Attribute* newCopy ();

   ASN1C__SetOfPKCS12Attribute& operator= (ASN1C__SetOfPKCS12Attribute& srcData);
   void Append (ASN1T_PKCS12Attribute * elem) {
      append ((void*)elem);
   }
} ;

EXTERN int asn1E__SetOfPKCS12Attribute (ASN1CTXT* pctxt,
   ASN1T__SetOfPKCS12Attribute *pvalue, ASN1TagType tagging);

EXTERN int asn1D__SetOfPKCS12Attribute (ASN1CTXT* pctxt,
   ASN1T__SetOfPKCS12Attribute *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy__SetOfPKCS12Attribute (ASN1CTXT *pctxt, ASN1T__SetOfPKCS12Attribute* pSrcValue, ASN1T__SetOfPKCS12Attribute* pDstValue);

EXTERN void asn1Free__SetOfPKCS12Attribute (ASN1CTXT *pctxt, ASN1T__SetOfPKCS12Attribute* pvalue);

/**************************************************************/
/*                                                            */
/*  SafeBag                                                   */
/*                                                            */
/**************************************************************/

class EXTERN ASN1C_SafeBag;

typedef struct EXTERN ASN1T_SafeBag : public ASN1TPDU {
   struct {
      unsigned bagAttributesPresent : 1;
   } m;
   ASN1TObjId bagId;
   Asn1TObject bagValue;
   ASN1T__SetOfPKCS12Attribute bagAttributes;
   ASN1T_SafeBag ();
   ASN1T_SafeBag (ASN1C_SafeBag& srcData);
   ~ASN1T_SafeBag ();
} ASN1T_SafeBag;

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

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

EXTERN int asn1E_SafeBag (ASN1CTXT* pctxt,
   ASN1T_SafeBag *pvalue, ASN1TagType tagging);

EXTERN int asn1D_SafeBag (ASN1CTXT* pctxt,
   ASN1T_SafeBag *pvalue, ASN1TagType tagging, int length);

EXTERN int asn1XETC_SafeBag (ASN1CTXT* pctxt,
    ASN1T_SafeBag *pvalue);

EXTERN int asn1XDTC_SafeBag (ASN1CtxtPtr& pctxt,
    ASN1T_SafeBag *pvalue);

EXTERN int asn1ETC_SafeBag (ASN1CTXT* pctxt,
   ASN1T_SafeBag *pvalue);

EXTERN int asn1DTC_SafeBag (ASN1CTXT* pctxt,
   ASN1T_SafeBag *pvalue);

EXTERN void asn1Copy_SafeBag (ASN1CTXT *pctxt, ASN1T_SafeBag* pSrcValue, ASN1T_SafeBag* pDstValue);

EXTERN void asn1Free_SafeBag (ASN1CTXT *pctxt, ASN1T_SafeBag* pvalue);

/**************************************************************/
/*                                                            */
/*  SafeContents                                              */
/*                                                            */
/**************************************************************/

/* List of ASN1T_SafeBag */
typedef struct EXTERN ASN1T_SafeContents : public ASN1TPDUSeqOfList {
   ~ASN1T_SafeContents();
} ASN1T_SafeContents;

class EXTERN ASN1C_SafeContents :
   public ASN1CSeqOfList
{
protected:
   ASN1T_SafeContents& msgData;
public:
   ASN1C_SafeContents (ASN1T_SafeContents& data);
   ASN1C_SafeContents (
      ASN1MessageBufferIF& msgBuf, ASN1T_SafeContents& data);
   ASN1C_SafeContents (ASN1C_SafeContents& 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_SafeContents& getCopy (ASN1T_SafeContents* pDstData = 0);
   ASN1T_SafeContents* newCopy ();

   ASN1C_SafeContents& operator= (ASN1C_SafeContents& srcData);
   void Append (ASN1T_SafeBag * elem) {
      append ((void*)elem);
   }
} ;

EXTERN int asn1E_SafeContents (ASN1CTXT* pctxt,
   ASN1T_SafeContents *pvalue, ASN1TagType tagging);

EXTERN int asn1D_SafeContents (ASN1CTXT* pctxt,
   ASN1T_SafeContents *pvalue, ASN1TagType tagging, int length);

EXTERN void asn1Copy_SafeContents (ASN1CTXT *pctxt, ASN1T_SafeContents* pSrcValue, ASN1T_SafeContents* pDstValue);

EXTERN void asn1Free_SafeContents (ASN1CTXT *pctxt, ASN1T_SafeContents* pvalue);

/* Value definitions */

#define ASN1V_pkcs_12_ub_providerName ASN1V_pkcs_9_ub_pkcs9String
extern EXTERN ASN1OBJID rsadsi;
extern EXTERN ASN1OBJID pkcs;
extern EXTERN ASN1OBJID pkcs_12;
extern EXTERN ASN1OBJID pkcs_12PbeIds;
extern EXTERN ASN1OBJID pbeWithSHAAnd128BitRC4;
extern EXTERN ASN1OBJID pbeWithSHAAnd40BitRC4;
extern EXTERN ASN1OBJID pbeWithSHAAnd3_KeyTripleDES_CBC;
extern EXTERN ASN1OBJID pbeWithSHAAnd2_KeyTripleDES_CBC;
extern EXTERN ASN1OBJID pbeWithSHAAnd128BitRC2_CBC;
extern EXTERN ASN1OBJID pbewithSHAAnd40BitRC2_CBC;
extern EXTERN ASN1OBJID pbewithGR3411_94AndG28147_89_CryptoPro_A_ParamSet;
extern EXTERN ASN1OBJID bagtypes;
extern EXTERN ASN1OBJID keyBagType;
extern EXTERN ASN1OBJID pkcs8ShroudedKeyBagType;
extern EXTERN ASN1OBJID certBagType;
extern EXTERN ASN1OBJID crlBagType;
extern EXTERN ASN1OBJID secretBagType;
extern EXTERN ASN1OBJID safeContentsBagType;
extern EXTERN ASN1OBJID x509CertificateType;
extern EXTERN ASN1OBJID pkcs_12_microsoft_ids;
extern EXTERN ASN1OBJID pkcs_12_key_provider_name_attr;
extern EXTERN ASN1OBJID pkcs_12_local_machine_keyset;
extern EXTERN ASN1OBJID pkcs_12_extended_attributes;
extern EXTERN ASN1OBJID pkcs_12_protected_password_secret_bag_type_id;
extern EXTERN ASN1OBJID cert_enhkey_usage_prop_id;
extern EXTERN ASN1OBJID cert_description_prop_id;
extern EXTERN ASN1OBJID cert_key_identifier_prop_id;

}
#endif
