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

// clang-format off

enum x509_akid_actions {
	ACT_lc_x509_akid_note_OID = 0,
	ACT_lc_x509_akid_note_kid = 1,
	ACT_lc_x509_akid_note_name = 2,
	ACT_lc_x509_akid_note_serial = 3,
	ACT_lc_x509_extract_name_segment = 4,
	NR__x509_akid_actions = 5
};

static const asn1_action_t x509_akid_action_table[NR__x509_akid_actions] = {
	[   0] = lc_x509_akid_note_OID,
	[   1] = lc_x509_akid_note_kid,
	[   2] = lc_x509_akid_note_name,
	[   3] = lc_x509_akid_note_serial,
	[   4] = lc_x509_extract_name_segment,
};

static const asn1_action_enc_t x509_akid_action_table_enc[NR__x509_akid_actions] = {
	[   0] = lc_x509_akid_note_OID_enc,
	[   1] = lc_x509_akid_note_kid_enc,
	[   2] = lc_x509_akid_note_name_enc,
	[   3] = lc_x509_akid_note_serial_enc,
	[   4] = lc_x509_extract_name_segment_enc,
};

static const unsigned char x509_akid_machine[] = {
	// AuthorityKeyIdentifier
	[   0] = ASN1_OP_MATCH,
	[   1] = _tag(UNIV, CONS, SEQ),
	// KeyIdentifier
	[   2] =  ASN1_OP_MATCH_ACT_OR_SKIP,		// keyIdentifier
	[   3] =  _tagn(CONT, PRIM,  0),
	[   4] =  _action(ACT_lc_x509_akid_note_kid),
	// GeneralNames
	[   5] =  ASN1_OP_MATCH_JUMP_OR_SKIP,		// authorityCertIssuer
	[   6] =  _tagn(CONT, CONS,  1),
	[   7] =  _jump_target(13),		// --> GeneralNames
	// CertificateSerialNumber
	[   8] =  ASN1_OP_MATCH_ACT_OR_SKIP,		// authorityCertSerialNumber
	[   9] =  _tagn(CONT, PRIM,  2),
	[  10] =  _action(ACT_lc_x509_akid_note_serial),
	[  11] = ASN1_OP_END_SEQ,
	[  12] = ASN1_OP_COMPLETE,

	// GeneralName
	// OtherName
	[  13] =  ASN1_OP_MATCH_JUMP_OR_SKIP,		// otherName
	[  14] =  _tagn(CONT, CONS,  0),
	[  15] =  _jump_target(39),		// --> OtherName
	[  16] =  ASN1_OP_COND_MATCH_OR_SKIP,		// rfc822Name
	[  17] =  _tagn(CONT, PRIM,  1),
	[  18] =  ASN1_OP_COND_MATCH_OR_SKIP,		// dNSName
	[  19] =  _tagn(CONT, PRIM,  2),
	[  20] =  ASN1_OP_COND_MATCH_JUMP_OR_SKIP,		// x400Address
	[  21] =  _tagn(CONT, CONS,  3),
	[  22] =  _jump_target(47),
	[  23] =  ASN1_OP_COND_MATCH_JUMP_OR_SKIP,		// directoryName
	[  24] =  _tagn(CONT, CONS,  4),
	[  25] =  _jump_target(50),
	// EDIPartyName
	[  26] =  ASN1_OP_COND_MATCH_JUMP_OR_SKIP,		// ediPartyName
	[  27] =  _tagn(CONT, CONS,  5),
	[  28] =  _jump_target(70),		// --> EDIPartyName
	[  29] =  ASN1_OP_COND_MATCH_OR_SKIP,		// uniformResourceIdentifier
	[  30] =  _tagn(CONT, PRIM,  6),
	[  31] =  ASN1_OP_COND_MATCH_OR_SKIP,		// iPAddress
	[  32] =  _tagn(CONT, PRIM,  7),
	[  33] =  ASN1_OP_COND_MATCH_OR_SKIP,		// registeredID
	[  34] =  _tagn(CONT, PRIM,  8),
	[  35] =  ASN1_OP_COND_FAIL,
	[  36] = ASN1_OP_END_SEQ_OF,
	[  37] = _jump_target(13),
	[  38] = ASN1_OP_RETURN,

	[  39] =  ASN1_OP_MATCH,		// type-id
	[  40] =  _tag(UNIV, PRIM, OID),
	[  41] =  ASN1_OP_MATCH,		// value
	[  42] =  _tagn(CONT, CONS,  0),
	[  43] =   ASN1_OP_MATCH_ANY,		// value
	[  44] =  ASN1_OP_END_SEQ,
	[  45] = ASN1_OP_END_SEQ,
	[  46] = ASN1_OP_RETURN,

	[  47] =  ASN1_OP_MATCH_ANY,		// x400Address
	[  48] = ASN1_OP_END_SEQ,
	[  49] = ASN1_OP_RETURN,

	// Name
	[  50] =  ASN1_OP_MATCH,
	[  51] =  _tag(UNIV, CONS, SEQ),
	// RelativeDistinguishedName
	[  52] =   ASN1_OP_MATCH,
	[  53] =   _tag(UNIV, CONS, SET),
	// AttributeValueAssertion
	[  54] =    ASN1_OP_MATCH,
	[  55] =    _tag(UNIV, CONS, SEQ),
	[  56] =     ASN1_OP_MATCH_ACT,		// attributeType
	[  57] =     _tag(UNIV, PRIM, OID),
	[  58] =     _action(ACT_lc_x509_akid_note_OID),
	[  59] =     ASN1_OP_MATCH_ANY_ACT,		// attributeValue
	[  60] =     _action(ACT_lc_x509_extract_name_segment),
	[  61] =    ASN1_OP_END_SEQ,
	[  62] =   ASN1_OP_END_SET_OF,
	[  63] =   _jump_target(54),
	[  64] =  ASN1_OP_END_SEQ_OF,
	[  65] =  _jump_target(52),
	[  66] =  ASN1_OP_ACT,
	[  67] =  _action(ACT_lc_x509_akid_note_name),
	[  68] = ASN1_OP_END_SEQ,
	[  69] = ASN1_OP_RETURN,

	[  70] =  ASN1_OP_MATCH_JUMP_OR_SKIP,		// nameAssigner
	[  71] =  _tagn(CONT, CONS,  0),
	[  72] =  _jump_target(79),
	[  73] =  ASN1_OP_MATCH,		// partyName
	[  74] =  _tagn(CONT, CONS,  1),
	[  75] =   ASN1_OP_MATCH_ANY,		// partyName
	[  76] =  ASN1_OP_END_SEQ,
	[  77] = ASN1_OP_END_SEQ,
	[  78] = ASN1_OP_RETURN,

	[  79] =  ASN1_OP_MATCH_ANY,		// nameAssigner
	[  80] = ASN1_OP_END_SEQ,
	[  81] = ASN1_OP_RETURN,
};

const struct lc_asn1_decoder lc_x509_akid_decoder = {
	.machine = x509_akid_machine,
	.machlen = sizeof(x509_akid_machine),
	.actions = x509_akid_action_table,
};

const struct lc_asn1_encoder lc_x509_akid_encoder = {
	.machine = x509_akid_machine,
	.machlen = sizeof(x509_akid_machine),
	.actions = x509_akid_action_table_enc,
};

// clang-format on
