From 61db8164c725ccbb2d4d293855fcad001b21f0fc Mon Sep 17 00:00:00 2001 From: alcexhim Date: Sat, 25 Oct 2014 21:52:11 -0400 Subject: [PATCH] Begin to implement Abstract Syntax Notation (ASN) v1 and the related DER-encoded Security Certificate formats --- .../AbstractSyntax/DER/DERDataFormat.cs | 43 ++++++++++++++++ .../DER/DERCertificateDataFormat.cs | 50 +++++++++++++++++++ .../AbstractSyntaxObjectModel.cs | 20 ++++++++ .../SecurityCertificateObjectModel.cs | 28 +++++++++++ .../UniversalEditor.Essential.csproj | 4 ++ 5 files changed, 145 insertions(+) create mode 100644 CSharp/Plugins/UniversalEditor.Essential/DataFormats/AbstractSyntax/DER/DERDataFormat.cs create mode 100644 CSharp/Plugins/UniversalEditor.Essential/DataFormats/SecurityCertificate/DER/DERCertificateDataFormat.cs create mode 100644 CSharp/Plugins/UniversalEditor.Essential/ObjectModels/AbstractSyntax/AbstractSyntaxObjectModel.cs create mode 100644 CSharp/Plugins/UniversalEditor.Essential/ObjectModels/SecurityCertificate/SecurityCertificateObjectModel.cs diff --git a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/AbstractSyntax/DER/DERDataFormat.cs b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/AbstractSyntax/DER/DERDataFormat.cs new file mode 100644 index 00000000..f59f910c --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/AbstractSyntax/DER/DERDataFormat.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UniversalEditor.IO; +using UniversalEditor.ObjectModels.AbstractSyntax; + +namespace UniversalEditor.DataFormats.AbstractSyntax.DER +{ + public class DERDataFormat : DataFormat + { + private static DataFormatReference _dfr = null; + public override DataFormatReference MakeReference() + { + if (_dfr == null) + { + _dfr = base.MakeReference(); + _dfr.Capabilities.Add(typeof(AbstractSyntaxObjectModel), DataFormatCapabilities.All); + } + return _dfr; + } + + protected override void LoadInternal(ref ObjectModel objectModel) + { + AbstractSyntaxObjectModel asn = (objectModel as AbstractSyntaxObjectModel); + if (asn == null) throw new ObjectModelNotSupportedException(); + + Reader reader = base.Accessor.Reader; + while (!reader.EndOfStream) + { + byte identifier = reader.ReadByte(); + byte tagClass = (byte)identifier.GetBits(7, 2); + byte primitiveOrConstructed = (byte)identifier.GetBits(6, 1); + byte tagNumber = (byte)identifier.GetBits(0, 5); + } + } + + protected override void SaveInternal(ObjectModel objectModel) + { + throw new NotImplementedException(); + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/DataFormats/SecurityCertificate/DER/DERCertificateDataFormat.cs b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/SecurityCertificate/DER/DERCertificateDataFormat.cs new file mode 100644 index 00000000..f1cd382f --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/DataFormats/SecurityCertificate/DER/DERCertificateDataFormat.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using UniversalEditor.ObjectModels.AbstractSyntax; +using UniversalEditor.DataFormats.AbstractSyntax.DER; + +using UniversalEditor.IO; +using UniversalEditor.ObjectModels.SecurityCertificate; + +namespace UniversalEditor.DataFormats.SecurityCertificate.DER +{ + public class DERCertificateDataFormat : DERDataFormat + { + private static DataFormatReference _dfr = null; + public override DataFormatReference MakeReference() + { + if (_dfr == null) + { + _dfr = new DataFormatReference(GetType()); + _dfr.Capabilities.Add(typeof(SecurityCertificateObjectModel), DataFormatCapabilities.All); + _dfr.Filters.Add("Security certificate (Binary-encoded DER)", new byte?[][] { new byte?[] { (byte)0x30, (byte)0x82 } }, new string[] { "*.cer", "*.der", "*.p7b" }); + _dfr.Filters.Add("Security certificate (Base64-encoded DER)", new byte?[][] { new byte?[] { (byte)'-', (byte)'-', (byte)'-', (byte)'-', (byte)'-', (byte)'B', (byte)'E', (byte)'G', (byte)'I', (byte)'N', (byte)' ', (byte)'C', (byte)'E', (byte)'R', (byte)'T', (byte)'I', (byte)'F', (byte)'I', (byte)'C', (byte)'A', (byte)'T', (byte)'E', (byte)'-', (byte)'-', (byte)'-', (byte)'-', (byte)'-', (byte)'\r', (byte)'\n' } }, new string[] { "*.cer", "*.der", "*.p7b" }); + } + return _dfr; + } + + protected override void BeforeLoadInternal(Stack objectModels) + { + base.BeforeLoadInternal(objectModels); + objectModels.Push(new AbstractSyntaxObjectModel()); + } + protected override void AfterLoadInternal(Stack objectModels) + { + base.AfterLoadInternal(objectModels); + AbstractSyntaxObjectModel asn = (objectModels.Pop() as AbstractSyntaxObjectModel); + SecurityCertificateObjectModel cer = (objectModels.Pop() as SecurityCertificateObjectModel); + } + + protected override void BeforeSaveInternal(Stack objectModels) + { + base.BeforeSaveInternal(objectModels); + SecurityCertificateObjectModel cer = (objectModels.Pop() as SecurityCertificateObjectModel); + AbstractSyntaxObjectModel asn = new AbstractSyntaxObjectModel(); + + objectModels.Push(asn); + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/AbstractSyntax/AbstractSyntaxObjectModel.cs b/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/AbstractSyntax/AbstractSyntaxObjectModel.cs new file mode 100644 index 00000000..2dd8eba0 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/AbstractSyntax/AbstractSyntaxObjectModel.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.AbstractSyntax +{ + public class AbstractSyntaxObjectModel : ObjectModel + { + public override void Clear() + { + throw new NotImplementedException(); + } + + public override void CopyTo(ObjectModel where) + { + throw new NotImplementedException(); + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/SecurityCertificate/SecurityCertificateObjectModel.cs b/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/SecurityCertificate/SecurityCertificateObjectModel.cs new file mode 100644 index 00000000..a9c4fc6f --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Essential/ObjectModels/SecurityCertificate/SecurityCertificateObjectModel.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.SecurityCertificate +{ + public class SecurityCertificateObjectModel : ObjectModel + { + private static ObjectModelReference _omr = null; + public override ObjectModelReference MakeReference() + { + if (_omr == null) + { + _omr = base.MakeReference(); + _omr.Title = "Security certificate"; + _omr.Path = new string[] { "Security", "Certificate" }; + } + return _omr; + } + public override void Clear() + { + } + public override void CopyTo(ObjectModel where) + { + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj b/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj index 3e6a2c1a..2ba6b648 100644 --- a/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj +++ b/CSharp/Plugins/UniversalEditor.Essential/UniversalEditor.Essential.csproj @@ -44,6 +44,7 @@ + @@ -60,10 +61,12 @@ + + @@ -95,6 +98,7 @@ +