From d7ade2efc444e1031c10038ee82e48bc54a6f9d5 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 24 Sep 2025 09:31:40 -0400 Subject: [PATCH] Add ASN.1 models --- SabreTools.Models/ASN1/ASN1Type.cs | 58 +++++++++++++++++++++++ SabreTools.Models/ASN1/TypeLengthValue.cs | 23 +++++++++ 2 files changed, 81 insertions(+) create mode 100644 SabreTools.Models/ASN1/ASN1Type.cs create mode 100644 SabreTools.Models/ASN1/TypeLengthValue.cs diff --git a/SabreTools.Models/ASN1/ASN1Type.cs b/SabreTools.Models/ASN1/ASN1Type.cs new file mode 100644 index 0000000..762b666 --- /dev/null +++ b/SabreTools.Models/ASN1/ASN1Type.cs @@ -0,0 +1,58 @@ +using System; + +namespace SabreTools.Models.ASN1 +{ + /// + /// ASN.1 type indicators + /// + [Flags] + public enum ASN1Type : byte + { + #region Types + + V_ASN1_EOC = 0x00, + V_ASN1_BOOLEAN = 0x01, + V_ASN1_INTEGER = 0x02, + V_ASN1_BIT_STRING = 0x03, + V_ASN1_OCTET_STRING = 0x04, + V_ASN1_NULL = 0x05, + V_ASN1_OBJECT = 0x06, + V_ASN1_OBJECT_DESCRIPTOR = 0x07, + V_ASN1_EXTERNAL = 0x08, + V_ASN1_REAL = 0x09, + V_ASN1_ENUMERATED = 0x0A, + V_ASN1_UTF8STRING = 0x0C, + V_ASN1_SEQUENCE = 0x10, + V_ASN1_SET = 0x11, + V_ASN1_NUMERICSTRING = 0x12, + V_ASN1_PRINTABLESTRING = 0x13, + V_ASN1_T61STRING = 0x14, + V_ASN1_TELETEXSTRING = 0x14, + V_ASN1_VIDEOTEXSTRING = 0x15, + V_ASN1_IA5STRING = 0x16, + V_ASN1_UTCTIME = 0x17, + V_ASN1_GENERALIZEDTIME = 0x18, + V_ASN1_GRAPHICSTRING = 0x19, + V_ASN1_ISO64STRING = 0x1A, + V_ASN1_VISIBLESTRING = 0x1A, + V_ASN1_GENERALSTRING = 0x1B, + V_ASN1_UNIVERSALSTRING = 0x1C, + V_ASN1_BMPSTRING = 0x1E, + + #endregion + + #region Modifiers + + // Commented out because it is the default + // and can interfere with V_ASN1_EOC + // V_ASN1_UNIVERSAL = 0x00, + + V_ASN1_PRIMITIVE_TAG = 0x1F, + V_ASN1_CONSTRUCTED = 0x20, + V_ASN1_APPLICATION = 0x40, + V_ASN1_CONTEXT_SPECIFIC = 0x80, + V_ASN1_PRIVATE = 0xC0, + + #endregion + } +} diff --git a/SabreTools.Models/ASN1/TypeLengthValue.cs b/SabreTools.Models/ASN1/TypeLengthValue.cs new file mode 100644 index 0000000..29c188b --- /dev/null +++ b/SabreTools.Models/ASN1/TypeLengthValue.cs @@ -0,0 +1,23 @@ +namespace SabreTools.Models.ASN1 +{ + /// + /// ASN.1 type/length/value class that all types are based on + /// + public class TypeLengthValue + { + /// + /// The ASN.1 type + /// + public ASN1Type Type { get; set; } + + /// + /// Length of the value + /// + public ulong Length { get; set; } + + /// + /// Generic value associated with + /// + public object? Value { get; set; } + } +}