package model.asn1; /** * Represents the class (UNIVERSAL, APPLICATION, PRIVATE, CONTEXT-SPECIFIC) of an ASN.1 tag. See X.680$8.1. * The purpose of UNIVERSAL, APPLICATION, PRIVATE, and CONTEXT_SPECIFIC can be found in X.680 spec. * For example, UNIVERSAL means tags specified in the core ASN.1 spec. * This class also represents the value to the two highest bits of DER-encoded tag values. */ public enum TagClass { UNIVERSAL(Values.UNIVERSAL), APPLICATION(Values.APPLICATION), PRIVATE(Values.PRIVATE), CONTEXT_SPECIFIC(Values.CONTENT_SPECIFIC); private final Byte val; /** * EFFECT: Constructs the tag class with the given DER tag byte value. * REQUIRES: The Byte value must have low 6bits cleared. */ TagClass(Byte val) { this.val = val; } public Byte getVal() { return val; } /** * The constants of high-two-bit values for Tag DER encoding. */ public static final class Values { // 0b00000000 public static final Byte UNIVERSAL = 0x0; // 0b01000000 public static final Byte APPLICATION = 0x40; // 0b11000000 public static final Byte PRIVATE = -64; // 0b10000000 public static final Byte CONTENT_SPECIFIC = -128; } }