| /* |
| * Automatically generated by asn1_compiler. Do not edit |
| * |
| * ASN.1 parser for pkcs7 |
| */ |
| #include <linux/asn1_ber_bytecode.h> |
| #include "pkcs7.asn1.h" |
| |
| enum pkcs7_actions { |
| ACT_pkcs7_check_content_type = 0, |
| ACT_pkcs7_extract_cert = 1, |
| ACT_pkcs7_note_OID = 2, |
| ACT_pkcs7_note_certificate_list = 3, |
| ACT_pkcs7_note_content = 4, |
| ACT_pkcs7_note_data = 5, |
| ACT_pkcs7_note_signed_info = 6, |
| ACT_pkcs7_note_signeddata_version = 7, |
| ACT_pkcs7_note_signerinfo_version = 8, |
| ACT_pkcs7_sig_note_authenticated_attr = 9, |
| ACT_pkcs7_sig_note_digest_algo = 10, |
| ACT_pkcs7_sig_note_issuer = 11, |
| ACT_pkcs7_sig_note_pkey_algo = 12, |
| ACT_pkcs7_sig_note_serial = 13, |
| ACT_pkcs7_sig_note_set_of_authattrs = 14, |
| ACT_pkcs7_sig_note_signature = 15, |
| ACT_pkcs7_sig_note_skid = 16, |
| NR__pkcs7_actions = 17 |
| }; |
| |
| static const asn1_action_t pkcs7_action_table[NR__pkcs7_actions] = { |
| [ 0] = pkcs7_check_content_type, |
| [ 1] = pkcs7_extract_cert, |
| [ 2] = pkcs7_note_OID, |
| [ 3] = pkcs7_note_certificate_list, |
| [ 4] = pkcs7_note_content, |
| [ 5] = pkcs7_note_data, |
| [ 6] = pkcs7_note_signed_info, |
| [ 7] = pkcs7_note_signeddata_version, |
| [ 8] = pkcs7_note_signerinfo_version, |
| [ 9] = pkcs7_sig_note_authenticated_attr, |
| [ 10] = pkcs7_sig_note_digest_algo, |
| [ 11] = pkcs7_sig_note_issuer, |
| [ 12] = pkcs7_sig_note_pkey_algo, |
| [ 13] = pkcs7_sig_note_serial, |
| [ 14] = pkcs7_sig_note_set_of_authattrs, |
| [ 15] = pkcs7_sig_note_signature, |
| [ 16] = pkcs7_sig_note_skid, |
| }; |
| |
| static const unsigned char pkcs7_machine[] = { |
| // PKCS7ContentInfo |
| [ 0] = ASN1_OP_MATCH, |
| [ 1] = _tag(UNIV, CONS, SEQ), |
| // ContentType |
| [ 2] = ASN1_OP_MATCH_ACT, |
| [ 3] = _tag(UNIV, PRIM, OID), |
| [ 4] = _action(ACT_pkcs7_note_OID), |
| [ 5] = ASN1_OP_ACT, |
| [ 6] = _action(ACT_pkcs7_check_content_type), |
| [ 7] = ASN1_OP_MATCH_JUMP_OR_SKIP, // content |
| [ 8] = _tagn(CONT, CONS, 0), |
| [ 9] = _jump_target(12), |
| [ 10] = ASN1_OP_END_SEQ, |
| [ 11] = ASN1_OP_COMPLETE, |
| |
| // SignedData |
| [ 12] = ASN1_OP_MATCH, |
| [ 13] = _tag(UNIV, CONS, SEQ), |
| [ 14] = ASN1_OP_MATCH_ACT, // version |
| [ 15] = _tag(UNIV, PRIM, INT), |
| [ 16] = _action(ACT_pkcs7_note_signeddata_version), |
| // DigestAlgorithmIdentifiers |
| [ 17] = ASN1_OP_MATCH_JUMP_OR_SKIP, // daSet |
| [ 18] = _tag(UNIV, CONS, SET), |
| [ 19] = _jump_target(61), |
| [ 20] = ASN1_OP_COND_MATCH_JUMP_OR_SKIP, // daSequence |
| [ 21] = _tag(UNIV, CONS, SEQ), |
| [ 22] = _jump_target(67), |
| [ 23] = ASN1_OP_COND_FAIL, |
| // ContentInfo |
| [ 24] = ASN1_OP_MATCH, |
| [ 25] = _tag(UNIV, CONS, SEQ), |
| // ContentType |
| [ 26] = ASN1_OP_MATCH_ACT, |
| [ 27] = _tag(UNIV, PRIM, OID), |
| [ 28] = _action(ACT_pkcs7_note_OID), |
| [ 29] = ASN1_OP_ACT, |
| [ 30] = _action(ACT_pkcs7_note_OID), |
| [ 31] = ASN1_OP_MATCH_JUMP_OR_SKIP, // content |
| [ 32] = _tagn(CONT, CONS, 0), |
| [ 33] = _jump_target(73), |
| [ 34] = ASN1_OP_END_SEQ, |
| [ 35] = ASN1_OP_ACT, |
| [ 36] = _action(ACT_pkcs7_note_content), |
| // ExtendedCertificatesAndCertificates |
| [ 37] = ASN1_OP_MATCH_JUMP_OR_SKIP, // certSet |
| [ 38] = _tagn(CONT, CONS, 0), |
| [ 39] = _jump_target(77), // --> ExtendedCertificatesAndCertificates |
| // Certificates |
| [ 40] = ASN1_OP_COND_MATCH_JUMP_OR_SKIP, // certSequence |
| [ 41] = _tagn(CONT, CONS, 2), |
| [ 42] = _jump_target(85), // --> Certificates |
| [ 43] = ASN1_OP_ACT, |
| [ 44] = _action(ACT_pkcs7_note_certificate_list), |
| // CertificateRevocationLists |
| [ 45] = ASN1_OP_MATCH_JUMP_OR_SKIP, // crlSet |
| [ 46] = _tagn(CONT, CONS, 1), |
| [ 47] = _jump_target(90), // --> CertificateRevocationLists |
| // CRLSequence |
| [ 48] = ASN1_OP_COND_MATCH_JUMP_OR_SKIP, // crlSequence |
| [ 49] = _tagn(CONT, CONS, 3), |
| [ 50] = _jump_target(96), // --> CRLSequence |
| // SignerInfos |
| [ 51] = ASN1_OP_MATCH_JUMP_OR_SKIP, // siSet |
| [ 52] = _tag(UNIV, CONS, SET), |
| [ 53] = _jump_target(102), |
| [ 54] = ASN1_OP_COND_MATCH_JUMP_OR_SKIP, // siSequence |
| [ 55] = _tag(UNIV, CONS, SEQ), |
| [ 56] = _jump_target(108), |
| [ 57] = ASN1_OP_COND_FAIL, |
| [ 58] = ASN1_OP_END_SEQ, |
| [ 59] = ASN1_OP_END_SEQ, |
| [ 60] = ASN1_OP_RETURN, |
| |
| // DigestAlgorithmIdentifier |
| [ 61] = ASN1_OP_MATCH_JUMP, |
| [ 62] = _tag(UNIV, CONS, SEQ), |
| [ 63] = _jump_target(114), // --> DigestAlgorithmIdentifier |
| [ 64] = ASN1_OP_END_SET_OF, |
| [ 65] = _jump_target(61), |
| [ 66] = ASN1_OP_RETURN, |
| |
| // DigestAlgorithmIdentifier |
| [ 67] = ASN1_OP_MATCH_JUMP, |
| [ 68] = _tag(UNIV, CONS, SEQ), |
| [ 69] = _jump_target(114), // --> DigestAlgorithmIdentifier |
| [ 70] = ASN1_OP_END_SEQ_OF, |
| [ 71] = _jump_target(67), |
| [ 72] = ASN1_OP_RETURN, |
| |
| // Data |
| [ 73] = ASN1_OP_MATCH_ANY_ACT, |
| [ 74] = _action(ACT_pkcs7_note_data), |
| [ 75] = ASN1_OP_END_SEQ, |
| [ 76] = ASN1_OP_RETURN, |
| |
| // ExtendedCertificateOrCertificate |
| // Certificate |
| [ 77] = ASN1_OP_MATCH_ANY_ACT_OR_SKIP, |
| [ 78] = _action(ACT_pkcs7_extract_cert), |
| // ExtendedCertificate |
| // Certificate |
| [ 79] = ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP, |
| [ 80] = _action(ACT_pkcs7_extract_cert), |
| [ 81] = ASN1_OP_COND_FAIL, |
| [ 82] = ASN1_OP_END_SET_OF, |
| [ 83] = _jump_target(77), |
| [ 84] = ASN1_OP_RETURN, |
| |
| // Certificate |
| [ 85] = ASN1_OP_MATCH_ANY_ACT, |
| [ 86] = _action(ACT_pkcs7_extract_cert), |
| [ 87] = ASN1_OP_END_SEQ_OF, |
| [ 88] = _jump_target(85), |
| [ 89] = ASN1_OP_RETURN, |
| |
| // CertificateList |
| [ 90] = ASN1_OP_MATCH_JUMP, |
| [ 91] = _tag(UNIV, CONS, SEQ), |
| [ 92] = _jump_target(120), // --> CertificateList |
| [ 93] = ASN1_OP_END_SET_OF, |
| [ 94] = _jump_target(90), |
| [ 95] = ASN1_OP_RETURN, |
| |
| // CertificateList |
| [ 96] = ASN1_OP_MATCH_JUMP, |
| [ 97] = _tag(UNIV, CONS, SEQ), |
| [ 98] = _jump_target(120), // --> CertificateList |
| [ 99] = ASN1_OP_END_SEQ_OF, |
| [ 100] = _jump_target(96), |
| [ 101] = ASN1_OP_RETURN, |
| |
| // SignerInfo |
| [ 102] = ASN1_OP_MATCH_JUMP, |
| [ 103] = _tag(UNIV, CONS, SEQ), |
| [ 104] = _jump_target(125), // --> SignerInfo |
| [ 105] = ASN1_OP_END_SET_OF, |
| [ 106] = _jump_target(102), |
| [ 107] = ASN1_OP_RETURN, |
| |
| // SignerInfo |
| [ 108] = ASN1_OP_MATCH_JUMP, |
| [ 109] = _tag(UNIV, CONS, SEQ), |
| [ 110] = _jump_target(125), // --> SignerInfo |
| [ 111] = ASN1_OP_END_SEQ_OF, |
| [ 112] = _jump_target(108), |
| [ 113] = ASN1_OP_RETURN, |
| |
| [ 114] = ASN1_OP_MATCH_ACT, // algorithm |
| [ 115] = _tag(UNIV, PRIM, OID), |
| [ 116] = _action(ACT_pkcs7_note_OID), |
| [ 117] = ASN1_OP_MATCH_ANY_OR_SKIP, // parameters |
| [ 118] = ASN1_OP_END_SEQ, |
| [ 119] = ASN1_OP_RETURN, |
| |
| // Certificate |
| [ 120] = ASN1_OP_MATCH_ANY_ACT, |
| [ 121] = _action(ACT_pkcs7_extract_cert), |
| [ 122] = ASN1_OP_END_SEQ_OF, |
| [ 123] = _jump_target(120), |
| [ 124] = ASN1_OP_RETURN, |
| |
| [ 125] = ASN1_OP_MATCH_ACT, // version |
| [ 126] = _tag(UNIV, PRIM, INT), |
| [ 127] = _action(ACT_pkcs7_note_signerinfo_version), |
| // SignerIdentifier |
| // IssuerAndSerialNumber |
| [ 128] = ASN1_OP_MATCH_JUMP_OR_SKIP, // issuerAndSerialNumber |
| [ 129] = _tag(UNIV, CONS, SEQ), |
| [ 130] = _jump_target(169), // --> IssuerAndSerialNumber |
| // SubjectKeyIdentifier |
| [ 131] = ASN1_OP_COND_MATCH_ACT_OR_SKIP, // subjectKeyIdentifier |
| [ 132] = _tagn(CONT, PRIM, 0), |
| [ 133] = _action(ACT_pkcs7_sig_note_skid), |
| [ 134] = ASN1_OP_COND_FAIL, |
| // DigestAlgorithmIdentifier |
| [ 135] = ASN1_OP_MATCH_JUMP, |
| [ 136] = _tag(UNIV, CONS, SEQ), |
| [ 137] = _jump_target(114), // --> DigestAlgorithmIdentifier |
| [ 138] = ASN1_OP_ACT, |
| [ 139] = _action(ACT_pkcs7_sig_note_digest_algo), |
| // SetOfAuthenticatedAttribute |
| [ 140] = ASN1_OP_MATCH_JUMP_OR_SKIP, // aaSet |
| [ 141] = _tagn(CONT, CONS, 0), |
| [ 142] = _jump_target(192), // --> SetOfAuthenticatedAttribute |
| [ 143] = ASN1_OP_MAYBE_ACT, |
| [ 144] = _action(ACT_pkcs7_sig_note_set_of_authattrs), |
| [ 145] = ASN1_OP_COND_MATCH_JUMP_OR_SKIP, // aaSequence |
| [ 146] = _tagn(CONT, CONS, 2), |
| [ 147] = _jump_target(198), |
| // DigestEncryptionAlgorithmIdentifier |
| [ 148] = ASN1_OP_MATCH, |
| [ 149] = _tag(UNIV, CONS, SEQ), |
| [ 150] = ASN1_OP_MATCH_ACT, // algorithm |
| [ 151] = _tag(UNIV, PRIM, OID), |
| [ 152] = _action(ACT_pkcs7_note_OID), |
| [ 153] = ASN1_OP_MATCH_ANY_OR_SKIP, // parameters |
| [ 154] = ASN1_OP_END_SEQ, |
| [ 155] = ASN1_OP_ACT, |
| [ 156] = _action(ACT_pkcs7_sig_note_pkey_algo), |
| // EncryptedDigest |
| [ 157] = ASN1_OP_MATCH_ACT, |
| [ 158] = _tag(UNIV, PRIM, OTS), |
| [ 159] = _action(ACT_pkcs7_sig_note_signature), |
| [ 160] = ASN1_OP_MATCH_JUMP_OR_SKIP, // uaSet |
| [ 161] = _tagn(CONT, CONS, 1), |
| [ 162] = _jump_target(207), |
| [ 163] = ASN1_OP_COND_MATCH_JUMP_OR_SKIP, // uaSequence |
| [ 164] = _tagn(CONT, CONS, 3), |
| [ 165] = _jump_target(213), |
| [ 166] = ASN1_OP_END_SEQ_ACT, |
| [ 167] = _action(ACT_pkcs7_note_signed_info), |
| [ 168] = ASN1_OP_RETURN, |
| |
| // Name |
| [ 169] = ASN1_OP_MATCH, |
| [ 170] = _tag(UNIV, CONS, SEQ), |
| // RelativeDistinguishedName |
| [ 171] = ASN1_OP_MATCH, |
| [ 172] = _tag(UNIV, CONS, SET), |
| // AttributeValueAssertion |
| [ 173] = ASN1_OP_MATCH, |
| [ 174] = _tag(UNIV, CONS, SEQ), |
| [ 175] = ASN1_OP_MATCH_ACT, // attributeType |
| [ 176] = _tag(UNIV, PRIM, OID), |
| [ 177] = _action(ACT_pkcs7_note_OID), |
| [ 178] = ASN1_OP_MATCH_ANY, // attributeValue |
| [ 179] = ASN1_OP_END_SEQ, |
| [ 180] = ASN1_OP_END_SET_OF, |
| [ 181] = _jump_target(173), |
| [ 182] = ASN1_OP_END_SEQ_OF, |
| [ 183] = _jump_target(171), |
| [ 184] = ASN1_OP_ACT, |
| [ 185] = _action(ACT_pkcs7_sig_note_issuer), |
| // CertificateSerialNumber |
| [ 186] = ASN1_OP_MATCH, |
| [ 187] = _tag(UNIV, PRIM, INT), |
| [ 188] = ASN1_OP_ACT, |
| [ 189] = _action(ACT_pkcs7_sig_note_serial), |
| [ 190] = ASN1_OP_END_SEQ, |
| [ 191] = ASN1_OP_RETURN, |
| |
| // AuthenticatedAttribute |
| [ 192] = ASN1_OP_MATCH_JUMP, |
| [ 193] = _tag(UNIV, CONS, SEQ), |
| [ 194] = _jump_target(219), // --> AuthenticatedAttribute |
| [ 195] = ASN1_OP_END_SET_OF, |
| [ 196] = _jump_target(192), |
| [ 197] = ASN1_OP_RETURN, |
| |
| [ 198] = ASN1_OP_MATCH, // aaSequence |
| [ 199] = _tag(UNIV, CONS, SEQ), |
| // AuthenticatedAttribute |
| [ 200] = ASN1_OP_MATCH_JUMP, |
| [ 201] = _tag(UNIV, CONS, SEQ), |
| [ 202] = _jump_target(219), // --> AuthenticatedAttribute |
| [ 203] = ASN1_OP_END_SEQ_OF, |
| [ 204] = _jump_target(200), |
| [ 205] = ASN1_OP_END_SEQ, |
| [ 206] = ASN1_OP_RETURN, |
| |
| // UnauthenticatedAttribute |
| [ 207] = ASN1_OP_MATCH_JUMP, |
| [ 208] = _tag(UNIV, CONS, SEQ), |
| [ 209] = _jump_target(230), // --> UnauthenticatedAttribute |
| [ 210] = ASN1_OP_END_SET_OF, |
| [ 211] = _jump_target(207), |
| [ 212] = ASN1_OP_RETURN, |
| |
| // UnauthenticatedAttribute |
| [ 213] = ASN1_OP_MATCH_JUMP, |
| [ 214] = _tag(UNIV, CONS, SEQ), |
| [ 215] = _jump_target(230), // --> UnauthenticatedAttribute |
| [ 216] = ASN1_OP_END_SEQ_OF, |
| [ 217] = _jump_target(213), |
| [ 218] = ASN1_OP_RETURN, |
| |
| [ 219] = ASN1_OP_MATCH_ACT, // type |
| [ 220] = _tag(UNIV, PRIM, OID), |
| [ 221] = _action(ACT_pkcs7_note_OID), |
| [ 222] = ASN1_OP_MATCH, // values |
| [ 223] = _tag(UNIV, CONS, SET), |
| [ 224] = ASN1_OP_MATCH_ANY_ACT, |
| [ 225] = _action(ACT_pkcs7_sig_note_authenticated_attr), |
| [ 226] = ASN1_OP_END_SET_OF, |
| [ 227] = _jump_target(224), |
| [ 228] = ASN1_OP_END_SEQ, |
| [ 229] = ASN1_OP_RETURN, |
| |
| [ 230] = ASN1_OP_MATCH, // type |
| [ 231] = _tag(UNIV, PRIM, OID), |
| [ 232] = ASN1_OP_MATCH, // values |
| [ 233] = _tag(UNIV, CONS, SET), |
| [ 234] = ASN1_OP_MATCH_ANY, |
| [ 235] = ASN1_OP_END_SET_OF, |
| [ 236] = _jump_target(234), |
| [ 237] = ASN1_OP_END_SEQ, |
| [ 238] = ASN1_OP_RETURN, |
| }; |
| |
| const struct asn1_decoder pkcs7_decoder = { |
| .machine = pkcs7_machine, |
| .machlen = sizeof(pkcs7_machine), |
| .actions = pkcs7_action_table, |
| }; |