Skip to content

Commit

Permalink
Kerb add net writer (#39)
Browse files Browse the repository at this point in the history
* Reorganized classes and namespaces

Added asn1 debugger

* Gigantic overhaul of ASN.1 decoding library

Began replacement of custom decoder with .NET Core's soon to be builtin library.

* Replaced Asn1Element with proper decoder everywhere

MessageParser is now a smarter about how it tries to detect and parse tickets
Added a new KerberosIdentity so restrictions and validation modes can be more easily recovered
Split negotiate into negotiate+ntlm+negoex classes to simply logic and add a bit more consistency

* Organizational and formatting clean up
  • Loading branch information
SteveSyfuhs committed Jun 30, 2019
1 parent 1490d9d commit 5372aee
Show file tree
Hide file tree
Showing 260 changed files with 19,946 additions and 2,695 deletions.
2 changes: 2 additions & 0 deletions KerbDump/Form1.cs
Expand Up @@ -222,6 +222,8 @@ private async Task<string> Decode(string ticket, KeyTable key)
{
var validator = new KerberosValidator(key) { ValidateAfterDecrypt = ValidationActions.Pac };

validator.Logger.Enabled = false;

var ticketBytes = Convert.FromBase64String(ticket);

var decrypted = await validator.Validate(ticketBytes);
Expand Down
10 changes: 10 additions & 0 deletions KerbDump/KerbDump.csproj
Expand Up @@ -31,6 +31,16 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug net452|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug net452\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
Expand Down
3 changes: 2 additions & 1 deletion KerbDump/KerberosIgnoreResolver.cs
@@ -1,4 +1,5 @@
using Kerberos.NET.Entities;
using Kerberos.NET.Asn1;
using Kerberos.NET.Entities;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
Expand Down
15 changes: 15 additions & 0 deletions KerbDump/Program.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
Expand All @@ -14,9 +15,23 @@ static class Program
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

private static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
Debug.WriteLine(args.LoadedAssembly);
}

private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Debug.WriteLine(args.Name);

return null;
}
}
}
76 changes: 13 additions & 63 deletions Kerberos.NET.sln
@@ -1,81 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2036
# Visual Studio Version 16
VisualStudioVersion = 16.0.29006.145
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1DDDDD38-ED6B-407F-B811-5EB571EB016E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kerberos.NET", "Kerberos.NET\Kerberos.NET.csproj", "{3066D890-0544-4E13-95FD-1DDCC72FEDA1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbCrypto", "Samples\KerbCrypto\KerbCrypto.csproj", "{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerberosMiddlewareEndToEndSample", "Samples\KerberosMiddlewareEndToEndSample\KerberosMiddlewareEndToEndSample.csproj", "{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerberosMiddlewareSample", "Samples\KerberosMiddlewareSample\KerberosMiddlewareSample.csproj", "{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerberosWebSample", "Samples\KerberosWebSample\KerberosWebSample.csproj", "{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbTester", "Samples\KerbTester\KerbTester.csproj", "{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NETStandard", "NETStandard", "{023740C7-6F2C-4E3F-9281-FE905D21B0D6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kerberos.NET", "Kerberos.NET\Kerberos.NET.csproj", "{31D4DECE-BE86-4134-8DE7-8B38C5133124}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.Kerberos.NET", "Tests\Tests.Kerberos.NET\Tests.Kerberos.NET.csproj", "{D552077A-7808-417D-9D63-6745023CD7BB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbDump", "KerbDump\KerbDump.csproj", "{40C6E020-912C-46E2-B395-67C4EFE8A1C6}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.Kerberos.NET", "Tests\Tests.Kerberos.NET\Tests.Kerberos.NET.csproj", "{0E4F4471-C2E4-4870-A541-11D14A76AC84}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Release|Any CPU.Build.0 = Release|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Release|Any CPU.Build.0 = Release|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Release|Any CPU.Build.0 = Release|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Release|Any CPU.Build.0 = Release|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Release|Any CPU.Build.0 = Release|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Debug|Any CPU.Build.0 = Debug|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Release|Any CPU.ActiveCfg = Release|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Release|Any CPU.Build.0 = Release|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Release|Any CPU.Build.0 = Release|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Release|Any CPU.Build.0 = Release|Any CPU
{3066D890-0544-4E13-95FD-1DDCC72FEDA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3066D890-0544-4E13-95FD-1DDCC72FEDA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3066D890-0544-4E13-95FD-1DDCC72FEDA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3066D890-0544-4E13-95FD-1DDCC72FEDA1}.Release|Any CPU.Build.0 = Release|Any CPU
{0E4F4471-C2E4-4870-A541-11D14A76AC84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E4F4471-C2E4-4870-A541-11D14A76AC84}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E4F4471-C2E4-4870-A541-11D14A76AC84}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0E4F4471-C2E4-4870-A541-11D14A76AC84}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{31D4DECE-BE86-4134-8DE7-8B38C5133124} = {023740C7-6F2C-4E3F-9281-FE905D21B0D6}
{D552077A-7808-417D-9D63-6745023CD7BB} = {023740C7-6F2C-4E3F-9281-FE905D21B0D6}
{40C6E020-912C-46E2-B395-67C4EFE8A1C6} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {634F40C0-E826-4E8E-A8A6-C6DC3F68458F}
SolutionGuid = {17150968-CFF9-4183-989D-C93E19033096}
EndGlobalSection
EndGlobal
98 changes: 98 additions & 0 deletions Kerberos.NET.sln.old
@@ -0,0 +1,98 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29006.145
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1DDDDD38-ED6B-407F-B811-5EB571EB016E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbCrypto", "Samples\KerbCrypto\KerbCrypto.csproj", "{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerberosMiddlewareEndToEndSample", "Samples\KerberosMiddlewareEndToEndSample\KerberosMiddlewareEndToEndSample.csproj", "{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerberosMiddlewareSample", "Samples\KerberosMiddlewareSample\KerberosMiddlewareSample.csproj", "{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerberosWebSample", "Samples\KerberosWebSample\KerberosWebSample.csproj", "{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbTester", "Samples\KerbTester\KerbTester.csproj", "{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{023740C7-6F2C-4E3F-9281-FE905D21B0D6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kerberos.NET", "Kerberos.NET\Kerberos.NET.csproj", "{31D4DECE-BE86-4134-8DE7-8B38C5133124}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.Kerberos.NET", "Tests\Tests.Kerberos.NET\Tests.Kerberos.NET.csproj", "{D552077A-7808-417D-9D63-6745023CD7BB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KerbDump", "KerbDump\KerbDump.csproj", "{40C6E020-912C-46E2-B395-67C4EFE8A1C6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug net452|Any CPU = Debug net452|Any CPU
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Debug net452|Any CPU.ActiveCfg = Debug net452|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Debug net452|Any CPU.Build.0 = Debug net452|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB}.Release|Any CPU.Build.0 = Release|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Debug net452|Any CPU.ActiveCfg = Debug net452|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Debug net452|Any CPU.Build.0 = Debug net452|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27}.Release|Any CPU.Build.0 = Release|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Debug net452|Any CPU.ActiveCfg = Debug net452|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Debug net452|Any CPU.Build.0 = Debug net452|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D}.Release|Any CPU.Build.0 = Release|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Debug net452|Any CPU.ActiveCfg = Debug net452|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Debug net452|Any CPU.Build.0 = Debug net452|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC}.Release|Any CPU.Build.0 = Release|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Debug net452|Any CPU.ActiveCfg = Debug net452|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Debug net452|Any CPU.Build.0 = Debug net452|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA}.Release|Any CPU.Build.0 = Release|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Debug net452|Any CPU.ActiveCfg = Debug net452|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Debug net452|Any CPU.Build.0 = Debug net452|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Debug|Any CPU.Build.0 = Debug|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Release|Any CPU.ActiveCfg = Release|Any CPU
{31D4DECE-BE86-4134-8DE7-8B38C5133124}.Release|Any CPU.Build.0 = Release|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Debug net452|Any CPU.ActiveCfg = Debug|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Debug net452|Any CPU.Build.0 = Debug|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D552077A-7808-417D-9D63-6745023CD7BB}.Release|Any CPU.Build.0 = Release|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Debug net452|Any CPU.ActiveCfg = Debug net452|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Debug net452|Any CPU.Build.0 = Debug net452|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40C6E020-912C-46E2-B395-67C4EFE8A1C6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4EC4E499-0A09-4311-8C34-C5DF29B7D6CB} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{7D82FBAB-2A77-46D9-BB2D-5E5723C63B27} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{DFDE9D6E-4BD4-443F-9C56-1CCB628DCF1D} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{69B134F6-7CAD-4FF5-94E1-EBF7F21FDCAC} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{7715F4FC-FAD8-4E50-92AB-EF98CF55DFAA} = {1DDDDD38-ED6B-407F-B811-5EB571EB016E}
{31D4DECE-BE86-4134-8DE7-8B38C5133124} = {023740C7-6F2C-4E3F-9281-FE905D21B0D6}
{D552077A-7808-417D-9D63-6745023CD7BB} = {023740C7-6F2C-4E3F-9281-FE905D21B0D6}
{40C6E020-912C-46E2-B395-67C4EFE8A1C6} = {023740C7-6F2C-4E3F-9281-FE905D21B0D6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {634F40C0-E826-4E8E-A8A6-C6DC3F68458F}
EndGlobalSection
EndGlobal
37 changes: 37 additions & 0 deletions Kerberos.NET/Asn1/AsnXml.targets
@@ -0,0 +1,37 @@
<Project>
<PropertyGroup>
<AsnXml />
</PropertyGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)asn.xsd">
<Link>Asn1\asn.xsd</Link>
</None>
</ItemGroup>

<!-- MSBuild for .NET Core doesn't support XslTransform at this time -->
<Target Name="CompileAsn" BeforeTargets="CoreCompile"
Inputs="@(AsnXml);$(MSBuildThisFileDirectory)asn.xslt"
Outputs="%(Identity).cs">

<MakeDir Directories="$(IntermediateOutputPath)asnxml" />

<XslTransformation
XslInputPath="$(MSBuildThisFileDirectory)asn.xslt"
XmlInputPaths="@(AsnXml)"
OutputPaths="@(AsnXml -> '$(IntermediateOutputPath)asnxml\%(filename).cs')" />

<Exec Condition="'$(OS)'=='Windows_NT'"
IgnoreExitCode="true"
StandardOutputImportance="Low"
Command="$(SystemRoot)\System32\fc.exe /a @(AsnXml -> '$(IntermediateOutputPath)asnxml\%(filename).cs') @(AsnXml -> '%(RelativeDir)%(filename).generated.cs')">
<Output TaskParameter="ExitCode" ItemName="_AsnXmlDiffCode" />
</Exec>

<Copy
Condition="'@(_AsnXmlDiffCode)' != '0'"
SourceFiles="@(AsnXml -> '$(IntermediateOutputPath)asnxml\%(filename).cs')"
DestinationFiles="@(AsnXml -> '%(RelativeDir)%(filename).generated.cs')" />

<Warning Condition="'@(_AsnXmlDiffCode)' != '0'" Text="AsnXml regenerated files, be sure to check them in: @(AsnXml -> '%(RelativeDir)%(filename).generated.cs')" />
</Target>
</Project>
57 changes: 57 additions & 0 deletions Kerberos.NET/Asn1/BitOperation.cs
@@ -0,0 +1,57 @@
using Kerberos.NET.Crypto;
using System;

namespace Kerberos.NET.Asn1
{
internal static class BitOperation
{
public static ReadOnlySpan<byte> AsReadOnly(this Enum val)
{
var bytes = new byte[4];

var longVal = (object)val;

Endian.ConvertToBigEndian((int)((long)longVal), bytes, 0);

return new ReadOnlySpan<byte>(bytes);
}

public static int AsInt(this ReadOnlyMemory<byte> val)
{
var bytes = val.Span;

int num = 0;

for (int i = 0; i < bytes.Length; i++)
{
num = (num << 8) | bytes[i];
}

return num;
}

public static long AsLong(this byte[] val)
{
return AsLong((ReadOnlyMemory<byte>)val);
}

public static long AsLong(this ReadOnlyMemory<byte> val, bool littleEndian = false)
{
var bytes = val.Span.ToArray();

if (littleEndian)
{
Array.Reverse(bytes);
}

long num = 0;

for (int i = 0; i < bytes.Length; i++)
{
num = (num << 8) | bytes[i];
}

return num;
}
}
}

0 comments on commit 5372aee

Please sign in to comment.