diff --git a/BurnOutSharp.ASN1/AbstractSyntaxNotationOne.cs b/BurnOutSharp.ASN1/AbstractSyntaxNotationOne.cs
new file mode 100644
index 00000000..e14eac95
--- /dev/null
+++ b/BurnOutSharp.ASN1/AbstractSyntaxNotationOne.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+
+namespace BurnOutSharp.ASN1
+{
+ ///
+ /// ASN.1 Parser
+ ///
+ public static class AbstractSyntaxNotationOne
+ {
+ ///
+ /// Parse a byte array into a DER-encoded ASN.1 structure
+ ///
+ /// Byte array representing the data
+ /// Current pointer into the data
+ ///
+ public static List Parse(byte[] data, int pointer)
+ {
+ // Create the output list to return
+ var topLevelValues = new List();
+
+ // Loop through the data and return all top-level values
+ while (pointer < data.Length)
+ {
+ var topLevelValue = new TypeLengthValue(data, ref pointer);
+ topLevelValues.Add(topLevelValue);
+ }
+
+ return topLevelValues;
+ }
+ }
+}
diff --git a/BurnOutSharp.ASN1/BurnOutSharp.ASN1.csproj b/BurnOutSharp.ASN1/BurnOutSharp.ASN1.csproj
new file mode 100644
index 00000000..3d3cba88
--- /dev/null
+++ b/BurnOutSharp.ASN1/BurnOutSharp.ASN1.csproj
@@ -0,0 +1,26 @@
+
+
+
+ netstandard2.0;net6.0
+ BurnOutSharp.ASN1
+ BurnOutSharp.ASN1
+ Matt Nadareski
+ BurnOutSharp
+ Copyright (c)2022 Matt Nadareski
+ https://github.com/mnadareski/BurnOutSharp
+ 2.5
+ 2.5
+ 2.5
+ true
+ true
+
+
+
+ true
+
+
+
+
+
+
+
diff --git a/BurnOutSharp.ASN1/Enums.cs b/BurnOutSharp.ASN1/Enums.cs
new file mode 100644
index 00000000..3612f8c6
--- /dev/null
+++ b/BurnOutSharp.ASN1/Enums.cs
@@ -0,0 +1,55 @@
+using System;
+
+namespace BurnOutSharp.ASN1
+{
+ ///
+ /// ASN.1 type indicators
+ ///
+ [Flags]
+ public enum ASN1Type : byte
+ {
+ #region Modifiers
+
+ 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
+
+ #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
+ }
+}
diff --git a/BurnOutSharp.Builder/ObjectIdentifier.ASN1.cs b/BurnOutSharp.ASN1/ObjectIdentifier.ASN1.cs
similarity index 96%
rename from BurnOutSharp.Builder/ObjectIdentifier.ASN1.cs
rename to BurnOutSharp.ASN1/ObjectIdentifier.ASN1.cs
index 0cf1a0aa..4db2a7cd 100644
--- a/BurnOutSharp.Builder/ObjectIdentifier.ASN1.cs
+++ b/BurnOutSharp.ASN1/ObjectIdentifier.ASN1.cs
@@ -1,4 +1,4 @@
-namespace BurnOutSharp.Builder
+namespace BurnOutSharp.ASN1
{
#pragma warning disable IDE0011
diff --git a/BurnOutSharp.Builder/ObjectIdentifier.ModifiedOIDIRI.cs b/BurnOutSharp.ASN1/ObjectIdentifier.ModifiedOIDIRI.cs
similarity index 99%
rename from BurnOutSharp.Builder/ObjectIdentifier.ModifiedOIDIRI.cs
rename to BurnOutSharp.ASN1/ObjectIdentifier.ModifiedOIDIRI.cs
index 4dc9a861..b6cf8cfe 100644
--- a/BurnOutSharp.Builder/ObjectIdentifier.ModifiedOIDIRI.cs
+++ b/BurnOutSharp.ASN1/ObjectIdentifier.ModifiedOIDIRI.cs
@@ -1,7 +1,7 @@
using System.Linq;
using System.Text;
-namespace BurnOutSharp.Builder
+namespace BurnOutSharp.ASN1
{
#pragma warning disable IDE0011
diff --git a/BurnOutSharp.Builder/ObjectIdentifier.OIDIRI.cs b/BurnOutSharp.ASN1/ObjectIdentifier.OIDIRI.cs
similarity index 99%
rename from BurnOutSharp.Builder/ObjectIdentifier.OIDIRI.cs
rename to BurnOutSharp.ASN1/ObjectIdentifier.OIDIRI.cs
index 069b6f54..c60c0606 100644
--- a/BurnOutSharp.Builder/ObjectIdentifier.OIDIRI.cs
+++ b/BurnOutSharp.ASN1/ObjectIdentifier.OIDIRI.cs
@@ -1,7 +1,7 @@
using System.Linq;
using System.Text;
-namespace BurnOutSharp.Builder
+namespace BurnOutSharp.ASN1
{
#pragma warning disable IDE0011
diff --git a/BurnOutSharp.Builder/ObjectIdentifier.cs b/BurnOutSharp.ASN1/ObjectIdentifier.cs
similarity index 98%
rename from BurnOutSharp.Builder/ObjectIdentifier.cs
rename to BurnOutSharp.ASN1/ObjectIdentifier.cs
index b037475c..353ca2e2 100644
--- a/BurnOutSharp.Builder/ObjectIdentifier.cs
+++ b/BurnOutSharp.ASN1/ObjectIdentifier.cs
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
-namespace BurnOutSharp.Builder
+namespace BurnOutSharp.ASN1
{
///
/// Methods related to Object Identifiers (OID)
diff --git a/BurnOutSharp.Builder/ObjectIdentifier.dot.cs b/BurnOutSharp.ASN1/ObjectIdentifier.dot.cs
similarity index 96%
rename from BurnOutSharp.Builder/ObjectIdentifier.dot.cs
rename to BurnOutSharp.ASN1/ObjectIdentifier.dot.cs
index ad345e5e..4e432120 100644
--- a/BurnOutSharp.Builder/ObjectIdentifier.dot.cs
+++ b/BurnOutSharp.ASN1/ObjectIdentifier.dot.cs
@@ -1,4 +1,4 @@
-namespace BurnOutSharp.Builder
+namespace BurnOutSharp.ASN1
{
#pragma warning disable IDE0011
diff --git a/BurnOutSharp.Builder/AbstractSyntaxNotationOne.cs b/BurnOutSharp.ASN1/TypeLengthValue.cs
similarity index 79%
rename from BurnOutSharp.Builder/AbstractSyntaxNotationOne.cs
rename to BurnOutSharp.ASN1/TypeLengthValue.cs
index 8f9e960f..10844c58 100644
--- a/BurnOutSharp.Builder/AbstractSyntaxNotationOne.cs
+++ b/BurnOutSharp.ASN1/TypeLengthValue.cs
@@ -5,90 +5,12 @@ using System.Numerics;
using System.Text;
using BurnOutSharp.Utilities;
-namespace BurnOutSharp.Builder
+namespace BurnOutSharp.ASN1
{
- ///
- /// ASN.1 type indicators
- ///
- [Flags]
- public enum ASN1Type : byte
- {
- #region Modifiers
-
- 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
-
- #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
- }
-
- ///
- /// ASN.1 Parser
- ///
- public class AbstractSyntaxNotationOne
- {
- ///
- /// Parse a byte array into a DER-encoded ASN.1 structure
- ///
- /// Byte array representing the data
- /// Current pointer into the data
- ///
- public static List Parse(byte[] data, int pointer)
- {
- // Create the output list to return
- var topLevelValues = new List();
-
- // Loop through the data and return all top-level values
- while (pointer < data.Length)
- {
- var topLevelValue = new ASN1TypeLengthValue(data, ref pointer);
- topLevelValues.Add(topLevelValue);
- }
-
- return topLevelValues;
- }
- }
-
///
/// ASN.1 type/length/value class that all types are based on
///
- public class ASN1TypeLengthValue
+ public class TypeLengthValue
{
///
/// The ASN.1 type
@@ -110,7 +32,7 @@ namespace BurnOutSharp.Builder
///
/// Byte array representing data to read
/// Index within the array to read at
- public ASN1TypeLengthValue(byte[] data, ref int index)
+ public TypeLengthValue(byte[] data, ref int index)
{
// Get the type and modifiers
this.Type = (ASN1Type)data[index++];
@@ -125,12 +47,12 @@ namespace BurnOutSharp.Builder
// Read the value
if (this.Type.HasFlag(ASN1Type.V_ASN1_CONSTRUCTED))
{
- var valueList = new List();
+ var valueList = new List();
int currentIndex = index;
while (index < currentIndex + (int)this.Length)
{
- valueList.Add(new ASN1TypeLengthValue(data, ref index));
+ valueList.Add(new TypeLengthValue(data, ref index));
}
this.Value = valueList.ToArray();
@@ -172,7 +94,7 @@ namespace BurnOutSharp.Builder
// If we have a constructed type
if (this.Type.HasFlag(ASN1Type.V_ASN1_CONSTRUCTED))
{
- var valueAsObjectArray = this.Value as ASN1TypeLengthValue[];
+ var valueAsObjectArray = this.Value as TypeLengthValue[];
if (valueAsObjectArray == null)
{
formatBuilder.Append(", Value: [INVALID DATA TYPE]");
diff --git a/BurnOutSharp.Wrappers/BurnOutSharp.Wrappers.csproj b/BurnOutSharp.Wrappers/BurnOutSharp.Wrappers.csproj
index b9240fa1..fd437ddb 100644
--- a/BurnOutSharp.Wrappers/BurnOutSharp.Wrappers.csproj
+++ b/BurnOutSharp.Wrappers/BurnOutSharp.Wrappers.csproj
@@ -24,6 +24,7 @@
+
diff --git a/BurnOutSharp.Wrappers/PortableExecutable.cs b/BurnOutSharp.Wrappers/PortableExecutable.cs
index 4ce69a44..b9f56be4 100644
--- a/BurnOutSharp.Wrappers/PortableExecutable.cs
+++ b/BurnOutSharp.Wrappers/PortableExecutable.cs
@@ -4,6 +4,7 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
+using BurnOutSharp.ASN1;
using BurnOutSharp.Utilities;
using static BurnOutSharp.Builder.Extensions;
@@ -1450,7 +1451,7 @@ namespace BurnOutSharp.Wrappers
{
Console.WriteLine(" Certificate Data [Formatted]");
Console.WriteLine(" -------------------------");
- var topLevelValues = Builder.AbstractSyntaxNotationOne.Parse(entry.Certificate, pointer: 0);
+ var topLevelValues = AbstractSyntaxNotationOne.Parse(entry.Certificate, pointer: 0);
if (topLevelValues == null)
{
Console.WriteLine(" INVALID DATA FOUND");
@@ -1458,7 +1459,7 @@ namespace BurnOutSharp.Wrappers
}
else
{
- foreach (Builder.ASN1TypeLengthValue tlv in topLevelValues)
+ foreach (TypeLengthValue tlv in topLevelValues)
{
string tlvString = tlv.Format(paddingLevel: 4);
Console.WriteLine(tlvString);
diff --git a/BurnOutSharp.sln b/BurnOutSharp.sln
index de3dd646..39541e9c 100644
--- a/BurnOutSharp.sln
+++ b/BurnOutSharp.sln
@@ -34,7 +34,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BurnOutSharp.Matching", "Bu
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "psxt001z", "psxt001z\psxt001z.csproj", "{D9574B47-0D6B-445A-97BF-272B5EF9AD3F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BurnOutSharp.Utilities", "BurnOutSharp.Utilities\BurnOutSharp.Utilities.csproj", "{3C1D1FE2-7E7C-4EC1-96B1-FE68B73282CD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BurnOutSharp.Utilities", "BurnOutSharp.Utilities\BurnOutSharp.Utilities.csproj", "{3C1D1FE2-7E7C-4EC1-96B1-FE68B73282CD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BurnOutSharp.ASN1", "BurnOutSharp.ASN1\BurnOutSharp.ASN1.csproj", "{D5407F3A-236C-45B5-BE3A-1505412DCB22}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -90,6 +92,10 @@ Global
{3C1D1FE2-7E7C-4EC1-96B1-FE68B73282CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3C1D1FE2-7E7C-4EC1-96B1-FE68B73282CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3C1D1FE2-7E7C-4EC1-96B1-FE68B73282CD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D5407F3A-236C-45B5-BE3A-1505412DCB22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D5407F3A-236C-45B5-BE3A-1505412DCB22}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D5407F3A-236C-45B5-BE3A-1505412DCB22}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D5407F3A-236C-45B5-BE3A-1505412DCB22}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/BurnOutSharp/BurnOutSharp.csproj b/BurnOutSharp/BurnOutSharp.csproj
index fce5bae6..744b106e 100644
--- a/BurnOutSharp/BurnOutSharp.csproj
+++ b/BurnOutSharp/BurnOutSharp.csproj
@@ -57,6 +57,14 @@
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all