cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

asn1_ber_bytecode.h (2576B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* ASN.1 BER/DER/CER parsing state machine internal definitions
      3 *
      4 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
      5 * Written by David Howells (dhowells@redhat.com)
      6 */
      7
      8#ifndef _LINUX_ASN1_BER_BYTECODE_H
      9#define _LINUX_ASN1_BER_BYTECODE_H
     10
     11#ifdef __KERNEL__
     12#include <linux/types.h>
     13#endif
     14#include <linux/asn1.h>
     15
     16typedef int (*asn1_action_t)(void *context,
     17			     size_t hdrlen, /* In case of ANY type */
     18			     unsigned char tag, /* In case of ANY type */
     19			     const void *value, size_t vlen);
     20
     21struct asn1_decoder {
     22	const unsigned char *machine;
     23	size_t machlen;
     24	const asn1_action_t *actions;
     25};
     26
     27enum asn1_opcode {
     28	/* The tag-matching ops come first and the odd-numbered slots
     29	 * are for OR_SKIP ops.
     30	 */
     31#define ASN1_OP_MATCH__SKIP		  0x01
     32#define ASN1_OP_MATCH__ACT		  0x02
     33#define ASN1_OP_MATCH__JUMP		  0x04
     34#define ASN1_OP_MATCH__ANY		  0x08
     35#define ASN1_OP_MATCH__COND		  0x10
     36
     37	ASN1_OP_MATCH			= 0x00,
     38	ASN1_OP_MATCH_OR_SKIP		= 0x01,
     39	ASN1_OP_MATCH_ACT		= 0x02,
     40	ASN1_OP_MATCH_ACT_OR_SKIP	= 0x03,
     41	ASN1_OP_MATCH_JUMP		= 0x04,
     42	ASN1_OP_MATCH_JUMP_OR_SKIP	= 0x05,
     43	ASN1_OP_MATCH_ANY		= 0x08,
     44	ASN1_OP_MATCH_ANY_OR_SKIP	= 0x09,
     45	ASN1_OP_MATCH_ANY_ACT		= 0x0a,
     46	ASN1_OP_MATCH_ANY_ACT_OR_SKIP	= 0x0b,
     47	/* Everything before here matches unconditionally */
     48
     49	ASN1_OP_COND_MATCH_OR_SKIP	= 0x11,
     50	ASN1_OP_COND_MATCH_ACT_OR_SKIP	= 0x13,
     51	ASN1_OP_COND_MATCH_JUMP_OR_SKIP	= 0x15,
     52	ASN1_OP_COND_MATCH_ANY		= 0x18,
     53	ASN1_OP_COND_MATCH_ANY_OR_SKIP	= 0x19,
     54	ASN1_OP_COND_MATCH_ANY_ACT	= 0x1a,
     55	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 0x1b,
     56
     57	/* Everything before here will want a tag from the data */
     58#define ASN1_OP__MATCHES_TAG ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP
     59
     60	/* These are here to help fill up space */
     61	ASN1_OP_COND_FAIL		= 0x1c,
     62	ASN1_OP_COMPLETE		= 0x1d,
     63	ASN1_OP_ACT			= 0x1e,
     64	ASN1_OP_MAYBE_ACT		= 0x1f,
     65
     66	/* The following eight have bit 0 -> SET, 1 -> OF, 2 -> ACT */
     67	ASN1_OP_END_SEQ			= 0x20,
     68	ASN1_OP_END_SET			= 0x21,
     69	ASN1_OP_END_SEQ_OF		= 0x22,
     70	ASN1_OP_END_SET_OF		= 0x23,
     71	ASN1_OP_END_SEQ_ACT		= 0x24,
     72	ASN1_OP_END_SET_ACT		= 0x25,
     73	ASN1_OP_END_SEQ_OF_ACT		= 0x26,
     74	ASN1_OP_END_SET_OF_ACT		= 0x27,
     75#define ASN1_OP_END__SET		  0x01
     76#define ASN1_OP_END__OF			  0x02
     77#define ASN1_OP_END__ACT		  0x04
     78
     79	ASN1_OP_RETURN			= 0x28,
     80
     81	ASN1_OP__NR
     82};
     83
     84#define _tag(CLASS, CP, TAG) ((ASN1_##CLASS << 6) | (ASN1_##CP << 5) | ASN1_##TAG)
     85#define _tagn(CLASS, CP, TAG) ((ASN1_##CLASS << 6) | (ASN1_##CP << 5) | TAG)
     86#define _jump_target(N) (N)
     87#define _action(N) (N)
     88
     89#endif /* _LINUX_ASN1_BER_BYTECODE_H */