
/*
 * Automatically generated by asn1_compiler.  Do not edit
 *
 * ASN.1 parser for authenticode_SpcIndirectDataContent
 */
#include "asn1_ber_bytecode.h"
#include "authenticode_SpcIndirectDataContent_asn1.h"

// clang-format off

enum authenticode_SpcIndirectDataContent_actions {
	ACT_lc_spc_attribute_type_OID = 0,
	ACT_lc_spc_digest_algorithm_OID = 1,
	ACT_lc_spc_file_digest = 2,
	ACT_lc_spc_pe_image_data = 3,
	NR__authenticode_SpcIndirectDataContent_actions = 4
};

static const asn1_action_t authenticode_SpcIndirectDataContent_action_table[NR__authenticode_SpcIndirectDataContent_actions] = {
	[   0] = lc_spc_attribute_type_OID,
	[   1] = lc_spc_digest_algorithm_OID,
	[   2] = lc_spc_file_digest,
	[   3] = lc_spc_pe_image_data,
};

static const asn1_action_enc_t authenticode_SpcIndirectDataContent_action_table_enc[NR__authenticode_SpcIndirectDataContent_actions] = {
	[   0] = lc_spc_attribute_type_OID_enc,
	[   1] = lc_spc_digest_algorithm_OID_enc,
	[   2] = lc_spc_file_digest_enc,
	[   3] = lc_spc_pe_image_data_enc,
};

static const unsigned char authenticode_SpcIndirectDataContent_machine[] = {
	// SpcIndirectDataContent
	[   0] = ASN1_OP_MATCH,
	[   1] = _tag(UNIV, CONS, SEQ),
	// SpcAttributeTypeAndOptionalValue
	[   2] =  ASN1_OP_MATCH,
	[   3] =  _tag(UNIV, CONS, SEQ),
	[   4] =   ASN1_OP_MATCH_ACT,		// type
	[   5] =   _tag(UNIV, PRIM, OID),
	[   6] =   _action(ACT_lc_spc_attribute_type_OID),
	[   7] =   ASN1_OP_MATCH_JUMP_OR_SKIP,		// value
	[   8] =   _tagn(CONT, CONS,  0),
	[   9] =   _jump_target(28),
	[  10] =  ASN1_OP_END_SEQ,
	// DigestInfo
	[  11] =  ASN1_OP_MATCH,
	[  12] =  _tag(UNIV, CONS, SEQ),
	// AlgorithmIdentifier
	[  13] =   ASN1_OP_MATCH,
	[  14] =   _tag(UNIV, CONS, SEQ),
	[  15] =    ASN1_OP_MATCH_ACT,		// algorithm
	[  16] =    _tag(UNIV, PRIM, OID),
	[  17] =    _action(ACT_lc_spc_digest_algorithm_OID),
	[  18] =    ASN1_OP_MATCH_JUMP_OR_SKIP,		// parameters
	[  19] =    _tagn(CONT, CONS,  0),
	[  20] =    _jump_target(32),
	[  21] =   ASN1_OP_END_SEQ,
	[  22] =   ASN1_OP_MATCH_ACT,		// digest
	[  23] =   _tag(UNIV, PRIM, OTS),
	[  24] =   _action(ACT_lc_spc_file_digest),
	[  25] =  ASN1_OP_END_SEQ,
	[  26] = ASN1_OP_END_SEQ,
	[  27] = ASN1_OP_COMPLETE,

	[  28] =  ASN1_OP_MATCH_ANY_ACT,		// value
	[  29] =  _action(ACT_lc_spc_pe_image_data),
	[  30] = ASN1_OP_END_SEQ,
	[  31] = ASN1_OP_RETURN,

	[  32] =  ASN1_OP_MATCH_ANY,		// parameters
	[  33] = ASN1_OP_END_SEQ,
	[  34] = ASN1_OP_RETURN,
};

const struct lc_asn1_decoder lc_authenticode_SpcIndirectDataContent_decoder = {
	.machine = authenticode_SpcIndirectDataContent_machine,
	.machlen = sizeof(authenticode_SpcIndirectDataContent_machine),
	.actions = authenticode_SpcIndirectDataContent_action_table,
};

const struct lc_asn1_encoder lc_authenticode_SpcIndirectDataContent_encoder = {
	.machine = authenticode_SpcIndirectDataContent_machine,
	.machlen = sizeof(authenticode_SpcIndirectDataContent_machine),
	.actions = authenticode_SpcIndirectDataContent_action_table_enc,
};

// clang-format on
