/* * Automatically generated by asn1_compiler. Do not edit * * ASN.1 parser for x509 */ #include #include "x509.asn1.h" enum x509_actions { ACT_x509_extract_key_data = 0, ACT_x509_extract_name_segment = 1, ACT_x509_note_OID = 2, ACT_x509_note_issuer = 3, ACT_x509_note_not_after = 4, ACT_x509_note_not_before = 5, ACT_x509_note_params = 6, ACT_x509_note_serial = 7, ACT_x509_note_sig_algo = 8, ACT_x509_note_signature = 9, ACT_x509_note_subject = 10, ACT_x509_note_tbs_certificate = 11, ACT_x509_process_extension = 12, NR__x509_actions = 13 }; static const asn1_action_t x509_action_table[NR__x509_actions] = { [ 0] = x509_extract_key_data, [ 1] = x509_extract_name_segment, [ 2] = x509_note_OID, [ 3] = x509_note_issuer, [ 4] = x509_note_not_after, [ 5] = x509_note_not_before, [ 6] = x509_note_params, [ 7] = x509_note_serial, [ 8] = x509_note_sig_algo, [ 9] = x509_note_signature, [ 10] = x509_note_subject, [ 11] = x509_note_tbs_certificate, [ 12] = x509_process_extension, }; static const unsigned char x509_machine[] = { // Certificate [ 0] = ASN1_OP_MATCH, [ 1] = _tag(UNIV, CONS, SEQ), // TBSCertificate [ 2] = ASN1_OP_MATCH, [ 3] = _tag(UNIV, CONS, SEQ), [ 4] = ASN1_OP_MATCH_JUMP_OR_SKIP, // version [ 5] = _tagn(CONT, CONS, 0), [ 6] = _jump_target(70), // CertificateSerialNumber [ 7] = ASN1_OP_MATCH, [ 8] = _tag(UNIV, PRIM, INT), [ 9] = ASN1_OP_ACT, [ 10] = _action(ACT_x509_note_serial), // AlgorithmIdentifier [ 11] = ASN1_OP_MATCH_JUMP, [ 12] = _tag(UNIV, CONS, SEQ), [ 13] = _jump_target(74), // --> AlgorithmIdentifier [ 14] = ASN1_OP_ACT, [ 15] = _action(ACT_x509_note_sig_algo), // Name [ 16] = ASN1_OP_MATCH_JUMP, [ 17] = _tag(UNIV, CONS, SEQ), [ 18] = _jump_target(81), // --> Name [ 19] = ASN1_OP_ACT, [ 20] = _action(ACT_x509_note_issuer), // Validity [ 21] = ASN1_OP_MATCH, [ 22] = _tag(UNIV, CONS, SEQ), // Time [ 23] = ASN1_OP_MATCH_OR_SKIP, // utcTime [ 24] = _tag(UNIV, PRIM, UNITIM), [ 25] = ASN1_OP_COND_MATCH_OR_SKIP, // generalTime [ 26] = _tag(UNIV, PRIM, GENTIM), [ 27] = ASN1_OP_COND_FAIL, [ 28] = ASN1_OP_ACT, [ 29] = _action(ACT_x509_note_not_before), // Time [ 30] = ASN1_OP_MATCH_OR_SKIP, // utcTime [ 31] = _tag(UNIV, PRIM, UNITIM), [ 32] = ASN1_OP_COND_MATCH_OR_SKIP, // generalTime [ 33] = _tag(UNIV, PRIM, GENTIM), [ 34] = ASN1_OP_COND_FAIL, [ 35] = ASN1_OP_ACT, [ 36] = _action(ACT_x509_note_not_after), [ 37] = ASN1_OP_END_SEQ, // Name [ 38] = ASN1_OP_MATCH_JUMP, [ 39] = _tag(UNIV, CONS, SEQ), [ 40] = _jump_target(81), // --> Name [ 41] = ASN1_OP_ACT, [ 42] = _action(ACT_x509_note_subject), // SubjectPublicKeyInfo [ 43] = ASN1_OP_MATCH, [ 44] = _tag(UNIV, CONS, SEQ), // AlgorithmIdentifier [ 45] = ASN1_OP_MATCH_JUMP, [ 46] = _tag(UNIV, CONS, SEQ), [ 47] = _jump_target(74), // --> AlgorithmIdentifier [ 48] = ASN1_OP_MATCH_ACT, // subjectPublicKey [ 49] = _tag(UNIV, PRIM, BTS), [ 50] = _action(ACT_x509_extract_key_data), [ 51] = ASN1_OP_END_SEQ, // UniqueIdentifier [ 52] = ASN1_OP_MATCH_OR_SKIP, // issuerUniqueID [ 53] = _tagn(CONT, PRIM, 1), // UniqueIdentifier [ 54] = ASN1_OP_MATCH_OR_SKIP, // subjectUniqueID [ 55] = _tagn(CONT, PRIM, 2), [ 56] = ASN1_OP_MATCH_JUMP_OR_SKIP, // extensions [ 57] = _tagn(CONT, CONS, 3), [ 58] = _jump_target(96), [ 59] = ASN1_OP_END_SEQ, [ 60] = ASN1_OP_ACT, [ 61] = _action(ACT_x509_note_tbs_certificate), // AlgorithmIdentifier [ 62] = ASN1_OP_MATCH_JUMP, [ 63] = _tag(UNIV, CONS, SEQ), [ 64] = _jump_target(74), // --> AlgorithmIdentifier [ 65] = ASN1_OP_MATCH_ACT, // signature [ 66] = _tag(UNIV, PRIM, BTS), [ 67] = _action(ACT_x509_note_signature), [ 68] = ASN1_OP_END_SEQ, [ 69] = ASN1_OP_COMPLETE, // Version [ 70] = ASN1_OP_MATCH, [ 71] = _tag(UNIV, PRIM, INT), [ 72] = ASN1_OP_END_SEQ, [ 73] = ASN1_OP_RETURN, [ 74] = ASN1_OP_MATCH_ACT, // algorithm [ 75] = _tag(UNIV, PRIM, OID), [ 76] = _action(ACT_x509_note_OID), [ 77] = ASN1_OP_MATCH_ANY_ACT_OR_SKIP, // parameters [ 78] = _action(ACT_x509_note_params), [ 79] = ASN1_OP_END_SEQ, [ 80] = ASN1_OP_RETURN, // RelativeDistinguishedName [ 81] = ASN1_OP_MATCH, [ 82] = _tag(UNIV, CONS, SET), // AttributeValueAssertion [ 83] = ASN1_OP_MATCH, [ 84] = _tag(UNIV, CONS, SEQ), [ 85] = ASN1_OP_MATCH_ACT, // attributeType [ 86] = _tag(UNIV, PRIM, OID), [ 87] = _action(ACT_x509_note_OID), [ 88] = ASN1_OP_MATCH_ANY_ACT, // attributeValue [ 89] = _action(ACT_x509_extract_name_segment), [ 90] = ASN1_OP_END_SEQ, [ 91] = ASN1_OP_END_SET_OF, [ 92] = _jump_target(83), [ 93] = ASN1_OP_END_SEQ_OF, [ 94] = _jump_target(81), [ 95] = ASN1_OP_RETURN, // Extensions [ 96] = ASN1_OP_MATCH, [ 97] = _tag(UNIV, CONS, SEQ), // Extension [ 98] = ASN1_OP_MATCH, [ 99] = _tag(UNIV, CONS, SEQ), [ 100] = ASN1_OP_MATCH_ACT, // extnid [ 101] = _tag(UNIV, PRIM, OID), [ 102] = _action(ACT_x509_note_OID), [ 103] = ASN1_OP_MATCH_OR_SKIP, // critical [ 104] = _tag(UNIV, PRIM, BOOL), [ 105] = ASN1_OP_MATCH_ACT, // extnValue [ 106] = _tag(UNIV, PRIM, OTS), [ 107] = _action(ACT_x509_process_extension), [ 108] = ASN1_OP_END_SEQ, [ 109] = ASN1_OP_END_SEQ_OF, [ 110] = _jump_target(98), [ 111] = ASN1_OP_END_SEQ, [ 112] = ASN1_OP_RETURN, }; const struct asn1_decoder x509_decoder = { .machine = x509_machine, .machlen = sizeof(x509_machine), .actions = x509_action_table, };