Imported Upstream version 5.0.0.42

Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-04-10 11:41:01 +00:00
parent 1190d13a04
commit 6bdd276d05
19939 changed files with 3099680 additions and 93811 deletions

View File

@@ -0,0 +1,321 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptography.X509Certificates.Tests", "tests\System.Security.Cryptography.X509Certificates.Tests.csproj", "{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}"
ProjectSection(ProjectDependencies) = postProject
{6F8576C2-6CD0-4DF3-8394-00B002D82E40} = {6F8576C2-6CD0-4DF3-8394-00B002D82E40}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptography.X509Certificates", "src\System.Security.Cryptography.X509Certificates.csproj", "{6F8576C2-6CD0-4DF3-8394-00B002D82E40}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU
DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU = ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\dir.props" />
<PropertyGroup>
<AssemblyVersion>4.2.0.0</AssemblyVersion>
<IsNETCoreApp>true</IsNETCoreApp>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
netcoreapp;
uap;
</BuildConfigurations>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
<ItemGroup>
<Project Include="System.Security.Cryptography.X509Certificates.csproj" />
<Project Include="System.Security.Cryptography.X509Certificates.csproj">
<TargetGroup>netcoreapp</TargetGroup>
</Project>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.Security.Cryptography.X509Certificates.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\System.Runtime\ref\System.Runtime.csproj" />
<ProjectReference Include="..\..\System.Runtime.InteropServices\ref\System.Runtime.InteropServices.csproj" />
<ProjectReference Include="..\..\System.Collections.NonGeneric\ref\System.Collections.NonGeneric.csproj" />
<ProjectReference Include="..\..\System.Security.Cryptography.Algorithms\ref\System.Security.Cryptography.Algorithms.csproj" />
<ProjectReference Include="..\..\System.Security.Cryptography.Encoding\ref\System.Security.Cryptography.Encoding.csproj" />
<ProjectReference Include="..\..\System.Security.Cryptography.Primitives\ref\System.Security.Cryptography.Primitives.csproj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
netcoreapp-Unix;
netcoreapp-Windows_NT;
net463-Windows_NT;
netcoreapp-Unix;
netcoreapp-Windows_NT;
</BuildConfigurations>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,71 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal static class CertificateExtensionsCommon
{
public static T GetPublicKey<T>(
this X509Certificate2 certificate,
Predicate<X509Certificate2> matchesConstraints = null)
where T : AsymmetricAlgorithm
{
if (certificate == null)
throw new ArgumentNullException(nameof(certificate));
string oidValue = GetExpectedOidValue<T>();
PublicKey publicKey = certificate.PublicKey;
Oid algorithmOid = publicKey.Oid;
if (oidValue != algorithmOid.Value)
return null;
if (matchesConstraints != null && !matchesConstraints(certificate))
return null;
byte[] rawEncodedKeyValue = publicKey.EncodedKeyValue.RawData;
byte[] rawEncodedParameters = publicKey.EncodedParameters.RawData;
return (T)(X509Pal.Instance.DecodePublicKey(algorithmOid, rawEncodedKeyValue, rawEncodedParameters, certificate.Pal));
}
public static T GetPrivateKey<T>(
this X509Certificate2 certificate,
Predicate<X509Certificate2> matchesConstraints = null)
where T : AsymmetricAlgorithm
{
if (certificate == null)
throw new ArgumentNullException(nameof(certificate));
string oidValue = GetExpectedOidValue<T>();
if (!certificate.HasPrivateKey || oidValue != certificate.PublicKey.Oid.Value)
return null;
if (matchesConstraints != null && !matchesConstraints(certificate))
return null;
if (typeof(T) == typeof(RSA))
return (T)(object)certificate.Pal.GetRSAPrivateKey();
if (typeof(T) == typeof(ECDsa))
return (T)(object)certificate.Pal.GetECDsaPrivateKey();
Debug.Fail("Expected GetExpectedOidValue() to have thrown before we got here.");
throw new NotSupportedException(SR.NotSupported_KeyAlgorithm);
}
private static string GetExpectedOidValue<T>() where T : AsymmetricAlgorithm
{
if (typeof(T) == typeof(RSA))
return Oids.RsaRsa;
if (typeof(T) == typeof(ECDsa))
return Oids.Ecc;
throw new NotSupportedException(SR.NotSupported_KeyAlgorithm);
}
}
}

View File

@@ -0,0 +1,42 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Text;
using System.Diagnostics;
using System.Globalization;
using System.Security.Cryptography;
namespace Internal.Cryptography
{
//
// Error codes for specific throw sites. Defined outside of Internal.Crytography.Pal.Native as some non-Pal code uses these.
// Since these error codes are publicly surfaced through the Exception class, these hresults are effectively managed exchange values despite
// their Win32 origin.
//
internal static class ErrorCode
{
public const int CERT_E_CHAINING = unchecked((int)0x800B010A);
public const int CERT_E_CRITICAL = unchecked((int)0x800B0105);
public const int CERT_E_EXPIRED = unchecked((int)0x800B0101);
public const int CERT_E_INVALID_NAME = unchecked((int)0x800B0114);
public const int CERT_E_INVALID_POLICY = unchecked((int)0x800B0113);
public const int CERT_E_UNTRUSTEDROOT = unchecked((int)0x800B0109);
public const int CERT_E_VALIDITYPERIODNESTING = unchecked((int)0x800B0102);
public const int CERT_E_WRONG_USAGE = unchecked((int)0x800B0110);
public const int CERTSRV_E_WEAK_SIGNATURE_OR_KEY = unchecked((int)0x80094016);
public const int CRYPT_E_NO_REVOCATION_CHECK = unchecked((int)0x80092012);
public const int CRYPT_E_NOT_FOUND = unchecked((int)0x80092004);
public const int CRYPT_E_REVOCATION_OFFLINE = unchecked((int)0x80092013);
public const int CRYPT_E_REVOKED = unchecked((int)0x80092010);
public const int CRYPT_E_SIGNER_NOT_FOUND = unchecked((int)0x8009100e);
public const int E_POINTER = unchecked((int)0x80004003);
public const int ERROR_INVALID_PARAMETER = 0x00000057;
public const int HRESULT_INVALID_HANDLE = unchecked((int)0x80070006);
public const int NTE_BAD_PUBLIC_KEY = unchecked((int)0x80090015);
public const int TRUST_E_BASIC_CONSTRAINTS = unchecked((int)0x80096019);
public const int TRUST_E_CERT_SIGNATURE = unchecked((int)0x80096004);
public const int TRUST_E_EXPLICIT_DISTRUST = unchecked((int)0x800B0111);
}
}

View File

@@ -0,0 +1,286 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Numerics;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal partial class FindPal
{
private const int NamedKeyUsageFlagsCount = 9;
private static readonly Dictionary<string, X509KeyUsageFlags> s_keyUsages =
new Dictionary<string, X509KeyUsageFlags>(NamedKeyUsageFlagsCount, StringComparer.OrdinalIgnoreCase)
{
{ "DigitalSignature", X509KeyUsageFlags.DigitalSignature },
{ "NonRepudiation", X509KeyUsageFlags.NonRepudiation },
{ "KeyEncipherment", X509KeyUsageFlags.KeyEncipherment },
{ "DataEncipherment", X509KeyUsageFlags.DataEncipherment },
{ "KeyAgreement", X509KeyUsageFlags.KeyAgreement },
{ "KeyCertSign", X509KeyUsageFlags.KeyCertSign },
{ "CrlSign", X509KeyUsageFlags.CrlSign },
{ "EncipherOnly", X509KeyUsageFlags.EncipherOnly },
{ "DecipherOnly", X509KeyUsageFlags.DecipherOnly },
};
#if DEBUG
static FindPal()
{
Debug.Assert(s_keyUsages.Count == NamedKeyUsageFlagsCount);
}
#endif
public static X509Certificate2Collection FindFromCollection(
X509Certificate2Collection coll,
X509FindType findType,
object findValue,
bool validOnly)
{
X509Certificate2Collection results = new X509Certificate2Collection();
using (IFindPal findPal = OpenPal(coll, results, validOnly))
{
switch (findType)
{
case X509FindType.FindByThumbprint:
{
byte[] thumbPrint = ConfirmedCast<string>(findValue).DecodeHexString();
findPal.FindByThumbprint(thumbPrint);
break;
}
case X509FindType.FindBySubjectName:
{
string subjectName = ConfirmedCast<string>(findValue);
findPal.FindBySubjectName(subjectName);
break;
}
case X509FindType.FindBySubjectDistinguishedName:
{
string subjectDistinguishedName = ConfirmedCast<string>(findValue);
findPal.FindBySubjectDistinguishedName(subjectDistinguishedName);
break;
}
case X509FindType.FindByIssuerName:
{
string issuerName = ConfirmedCast<string>(findValue);
findPal.FindByIssuerName(issuerName);
break;
}
case X509FindType.FindByIssuerDistinguishedName:
{
string issuerDistinguishedName = ConfirmedCast<string>(findValue);
findPal.FindByIssuerDistinguishedName(issuerDistinguishedName);
break;
}
case X509FindType.FindBySerialNumber:
{
string decimalOrHexString = ConfirmedCast<string>(findValue);
// FindBySerialNumber allows the input format to be either in
// hex or decimal. Since we can't know which one was intended,
// it compares against both interpretations and treats a match
// of either as a successful find.
// string is big-endian, BigInteger constructor requires little-endian.
byte[] hexBytes = decimalOrHexString.DecodeHexString();
Array.Reverse(hexBytes);
BigInteger hexValue = PositiveBigIntegerFromByteArray(hexBytes);
BigInteger decimalValue = LaxParseDecimalBigInteger(decimalOrHexString);
findPal.FindBySerialNumber(hexValue, decimalValue);
break;
}
case X509FindType.FindByTimeValid:
{
DateTime dateTime = ConfirmedCast<DateTime>(findValue);
findPal.FindByTimeValid(dateTime);
break;
}
case X509FindType.FindByTimeNotYetValid:
{
DateTime dateTime = ConfirmedCast<DateTime>(findValue);
findPal.FindByTimeNotYetValid(dateTime);
break;
}
case X509FindType.FindByTimeExpired:
{
DateTime dateTime = ConfirmedCast<DateTime>(findValue);
findPal.FindByTimeExpired(dateTime);
break;
}
case X509FindType.FindByTemplateName:
{
string expected = ConfirmedCast<string>(findValue);
findPal.FindByTemplateName(expected);
break;
}
case X509FindType.FindByApplicationPolicy:
{
string oidValue = ConfirmedOidValue(findPal, findValue, OidGroup.Policy);
findPal.FindByApplicationPolicy(oidValue);
break;
}
case X509FindType.FindByCertificatePolicy:
{
string oidValue = ConfirmedOidValue(findPal, findValue, OidGroup.Policy);
findPal.FindByCertificatePolicy(oidValue);
break;
}
case X509FindType.FindByExtension:
{
string oidValue = ConfirmedOidValue(findPal, findValue, OidGroup.ExtensionOrAttribute);
findPal.FindByExtension(oidValue);
break;
}
case X509FindType.FindByKeyUsage:
{
X509KeyUsageFlags keyUsage = ConfirmedX509KeyUsage(findValue);
findPal.FindByKeyUsage(keyUsage);
break;
}
case X509FindType.FindBySubjectKeyIdentifier:
{
byte[] keyIdentifier = ConfirmedCast<string>(findValue).DecodeHexString();
findPal.FindBySubjectKeyIdentifier(keyIdentifier);
break;
}
default:
throw new CryptographicException(SR.Cryptography_X509_InvalidFindType);
}
}
return results;
}
private static T ConfirmedCast<T>(object findValue)
{
Debug.Assert(findValue != null);
if (findValue.GetType() != typeof(T))
throw new CryptographicException(SR.Cryptography_X509_InvalidFindValue);
return (T)findValue;
}
private static string ConfirmedOidValue(IFindPal findPal, object findValue, OidGroup oidGroup)
{
string maybeOid = ConfirmedCast<string>(findValue);
if (maybeOid.Length == 0)
{
throw new ArgumentException(SR.Argument_InvalidOidValue);
}
return findPal.NormalizeOid(maybeOid, oidGroup);
}
private static X509KeyUsageFlags ConfirmedX509KeyUsage(object findValue)
{
if (findValue is X509KeyUsageFlags)
return (X509KeyUsageFlags)findValue;
if (findValue is int)
return (X509KeyUsageFlags)(int)findValue;
if (findValue is uint)
return (X509KeyUsageFlags)(uint)findValue;
string findValueString = findValue as string;
if (findValueString != null)
{
X509KeyUsageFlags usageFlags;
if (s_keyUsages.TryGetValue(findValueString, out usageFlags))
{
return usageFlags;
}
}
throw new CryptographicException(SR.Cryptography_X509_InvalidFindValue);
}
//
// verify the passed keyValue is valid as per X.208
//
// The first number must be 0, 1 or 2.
// Enforce all characters are digits and dots.
// Enforce that no dot starts or ends the Oid, and disallow double dots.
// Enforce there is at least one dot separator.
//
internal static void ValidateOidValue(string keyValue)
{
if (keyValue == null)
throw new ArgumentNullException(nameof(keyValue));
int len = keyValue.Length;
if (len < 2)
throw new ArgumentException(SR.Argument_InvalidOidValue);
// should not start with a dot. The first digit must be 0, 1 or 2.
char c = keyValue[0];
if (c != '0' && c != '1' && c != '2')
throw new ArgumentException(SR.Argument_InvalidOidValue);
if (keyValue[1] != '.' || keyValue[len - 1] == '.') // should not end in a dot
throw new ArgumentException(SR.Argument_InvalidOidValue);
// While characters 0 and 1 were both validated, start at character 1 to validate
// that there aren't two dots in a row.
for (int i = 1; i < len; i++)
{
// ensure every character is either a digit or a dot
if (char.IsDigit(keyValue[i]))
continue;
if (keyValue[i] != '.' || keyValue[i + 1] == '.') // disallow double dots
throw new ArgumentException(SR.Argument_InvalidOidValue);
}
}
internal static BigInteger PositiveBigIntegerFromByteArray(byte[] bytes)
{
// To prevent the big integer from misinterpreted as a negative number,
// add a "leading 0" to the byte array if it would considered negative.
//
// Since BigInteger(bytes[]) requires a little-endian byte array,
// the "leading 0" actually goes at the end of the array.
// An empty array is 0 (non-negative), so no over-allocation is required.
//
// If the last indexed value doesn't have the sign bit set (0x00-0x7F) then
// the number would be positive anyways, so no over-allocation is required.
if (bytes.Length == 0 || bytes[bytes.Length - 1] < 0x80)
{
return new BigInteger(bytes);
}
// Since the sign bit is set, put a new 0x00 on the end to move that bit from
// the sign bit to a data bit.
byte[] newBytes = new byte[bytes.Length + 1];
Buffer.BlockCopy(bytes, 0, newBytes, 0, bytes.Length);
return new BigInteger(newBytes);
}
private static BigInteger LaxParseDecimalBigInteger(string decimalString)
{
BigInteger ten = new BigInteger(10);
BigInteger accum = BigInteger.Zero;
foreach (char c in decimalString)
{
if (c >= '0' && c <= '9')
{
accum = BigInteger.Multiply(accum, ten);
accum = BigInteger.Add(accum, c - '0');
}
}
return accum;
}
}
}

View File

@@ -0,0 +1,154 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
namespace Internal.Cryptography
{
internal static class Helpers
{
public static byte[] CloneByteArray(this byte[] src)
{
if (src == null)
{
return null;
}
return (byte[])(src.Clone());
}
// Encode a byte array as an array of upper-case hex characters.
public static char[] ToHexArrayUpper(this byte[] bytes)
{
char[] chars = new char[bytes.Length * 2];
int i = 0;
foreach (byte b in bytes)
{
chars[i++] = NibbleToHex((byte)(b >> 4));
chars[i++] = NibbleToHex((byte)(b & 0xF));
}
return chars;
}
// Encode a byte array as an upper case hex string.
public static string ToHexStringUpper(this byte[] bytes)
{
return new string(ToHexArrayUpper(bytes));
}
// Decode a hex string-encoded byte array passed to various X509 crypto api.
// The parsing rules are overly forgiving but for compat reasons, they cannot be tightened.
public static byte[] DecodeHexString(this string s)
{
int whitespaceCount = 0;
for (int i = 0; i < s.Length; i++)
{
if (char.IsWhiteSpace(s[i]))
whitespaceCount++;
}
uint cbHex = (uint)(s.Length - whitespaceCount) / 2;
byte[] hex = new byte[cbHex];
byte accum = 0;
bool byteInProgress = false;
int index = 0;
for (int i = 0; i < s.Length; i++)
{
char c = s[i];
if (char.IsWhiteSpace(c))
{
continue;
}
accum <<= 4;
accum |= HexToByte(c);
byteInProgress = !byteInProgress;
// If we've flipped from 0 to 1, back to 0, we have a whole byte
// so add it to the buffer.
if (!byteInProgress)
{
Debug.Assert(index < cbHex, "index < cbHex");
hex[index] = accum;
index++;
}
}
// Desktop compat:
// The desktop algorithm removed all whitespace before the loop, then went up to length/2
// of what was left. This means that in the event of odd-length input the last char is
// ignored, no exception should be raised.
Debug.Assert(index == cbHex, "index == cbHex");
return hex;
}
private static byte HexToByte(char val)
{
if (val <= '9' && val >= '0')
return (byte)(val - '0');
else if (val >= 'a' && val <= 'f')
return (byte)((val - 'a') + 10);
else if (val >= 'A' && val <= 'F')
return (byte)((val - 'A') + 10);
else
return 0xFF;
}
private static char NibbleToHex(byte b)
{
Debug.Assert(b >= 0 && b <= 15);
return (char)(b >= 0 && b <= 9 ?
'0' + b :
'A' + (b - 10));
}
public static bool ContentsEqual(this byte[] a1, byte[] a2)
{
if (a1.Length != a2.Length)
return false;
for (int i = 0; i < a1.Length; i++)
{
if (a1[i] != a2[i])
return false;
}
return true;
}
//
// The following group of helpers emulates the non-public Calendar.IsValidDay() method used by X509Certificate.ToString(bool).
//
public static bool IsValidDay(this Calendar calendar, int year, int month, int day, int era)
{
return (calendar.IsValidMonth(year, month, era) && day >= 1 && day <= calendar.GetDaysInMonth(year, month, era));
}
private static bool IsValidMonth(this Calendar calendar, int year, int month, int era)
{
return (calendar.IsValidYear(year, era) && month >= 1 && month <= calendar.GetMonthsInYear(year, era));
}
private static bool IsValidYear(this Calendar calendar, int year, int era)
{
return (year >= calendar.GetYear(calendar.MinSupportedDateTime) && year <= calendar.GetYear(calendar.MaxSupportedDateTime));
}
internal static void DisposeAll(this IEnumerable<IDisposable> disposables)
{
foreach (IDisposable disposable in disposables)
{
disposable.Dispose();
}
}
}
}

View File

@@ -0,0 +1,41 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
namespace Internal.Cryptography
{
internal interface ICertificatePal : IDisposable
{
bool HasPrivateKey { get; }
IntPtr Handle { get; }
string Issuer { get; }
string Subject { get; }
byte[] Thumbprint { get; }
string KeyAlgorithm { get; }
byte[] KeyAlgorithmParameters { get; }
byte[] PublicKeyValue { get; }
byte[] SerialNumber { get; }
string SignatureAlgorithm { get; }
DateTime NotAfter { get; }
DateTime NotBefore { get; }
byte[] RawData { get; }
int Version { get; }
bool Archived { get; set; }
string FriendlyName { get; set; }
X500DistinguishedName SubjectName { get; }
X500DistinguishedName IssuerName { get; }
IEnumerable<X509Extension> Extensions { get; }
AsymmetricAlgorithm GetPrivateKey();
RSA GetRSAPrivateKey();
DSA GetDSAPrivateKey();
ECDsa GetECDsaPrivateKey();
string GetNameInfo(X509NameType nameType, bool forIssuer);
void AppendPrivateKeyInfo(StringBuilder sb);
}
}

View File

@@ -0,0 +1,23 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Win32.SafeHandles;
namespace Internal.Cryptography.Pal
{
internal interface IChainPal : IDisposable
{
/// <summary>
/// Does not throw on api error. Returns default(bool?) and sets "exception" instead.
/// </summary>
bool? Verify(X509VerificationFlags flags, out Exception exception);
X509ChainElement[] ChainElements { get; }
X509ChainStatus[] ChainStatus { get; }
SafeX509ChainHandle SafeHandle { get; }
}
}

View File

@@ -0,0 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.Win32.SafeHandles;
using System;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal interface IExportPal : IDisposable
{
byte[] Export(X509ContentType contentType, SafePasswordHandle password);
}
}

View File

@@ -0,0 +1,32 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Numerics;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal interface IFindPal : IDisposable
{
string NormalizeOid(string maybeOid, OidGroup expectedGroup);
void FindByThumbprint(byte[] thumbprint);
void FindBySubjectName(string subjectName);
void FindBySubjectDistinguishedName(string subjectDistinguishedName);
void FindByIssuerName(string issuerName);
void FindByIssuerDistinguishedName(string issuerDistinguishedName);
void FindBySerialNumber(BigInteger hexValue, BigInteger decimalValue);
void FindByTimeValid(DateTime dateTime);
void FindByTimeNotYetValid(DateTime dateTime);
void FindByTimeExpired(DateTime dateTime);
void FindByTemplateName(string templateName);
void FindByApplicationPolicy(string oidValue);
void FindByCertificatePolicy(string oidValue);
void FindByExtension(string oidValue);
void FindByKeyUsage(X509KeyUsageFlags keyUsage);
void FindBySubjectKeyIdentifier(byte[] keyIdentifier);
}
}

View File

@@ -0,0 +1,14 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal interface ILoaderPal : IDisposable
{
void MoveTo(X509Certificate2Collection collection);
}
}

View File

@@ -0,0 +1,18 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal interface IStorePal : IDisposable
{
void CloneTo(X509Certificate2Collection collection);
void Add(ICertificatePal cert);
void Remove(ICertificatePal cert);
SafeHandle SafeHandle { get; }
}
}

View File

@@ -0,0 +1,31 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal interface IX509Pal
{
AsymmetricAlgorithm DecodePublicKey(Oid oid, byte[] encodedKeyValue, byte[] encodedParameters, ICertificatePal certificatePal);
string X500DistinguishedNameDecode(byte[] encodedDistinguishedName, X500DistinguishedNameFlags flag);
byte[] X500DistinguishedNameEncode(string distinguishedName, X500DistinguishedNameFlags flag);
string X500DistinguishedNameFormat(byte[] encodedDistinguishedName, bool multiLine);
X509ContentType GetCertContentType(byte[] rawData);
X509ContentType GetCertContentType(string fileName);
byte[] EncodeX509KeyUsageExtension(X509KeyUsageFlags keyUsages);
void DecodeX509KeyUsageExtension(byte[] encoded, out X509KeyUsageFlags keyUsages);
bool SupportsLegacyBasicConstraintsExtension { get; }
byte[] EncodeX509BasicConstraints2Extension(bool certificateAuthority, bool hasPathLengthConstraint, int pathLengthConstraint);
void DecodeX509BasicConstraintsExtension(byte[] encoded, out bool certificateAuthority, out bool hasPathLengthConstraint, out int pathLengthConstraint);
void DecodeX509BasicConstraints2Extension(byte[] encoded, out bool certificateAuthority, out bool hasPathLengthConstraint, out int pathLengthConstraint);
byte[] EncodeX509EnhancedKeyUsageExtension(OidCollection usages);
void DecodeX509EnhancedKeyUsageExtension(byte[] encoded, out OidCollection usages);
byte[] EncodeX509SubjectKeyIdentifierExtension(byte[] subjectKeyIdentifier);
void DecodeX509SubjectKeyIdentifierExtension(byte[] encoded, out byte[] subjectKeyIdentifier);
byte[] ComputeCapiSha1OfPublicKey(PublicKey key);
}
}

View File

@@ -0,0 +1,39 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Text;
using System.Diagnostics;
using System.Globalization;
using System.Security.Cryptography;
namespace Internal.Cryptography
{
//
// Well-known oids
//
internal static class Oids
{
public const string BasicConstraints = "2.5.29.10";
public const string SubjectKeyIdentifier = "2.5.29.14";
public const string KeyUsage = "2.5.29.15";
public const string BasicConstraints2 = "2.5.29.19";
public const string CrlDistributionPoints = "2.5.29.31";
public const string CertPolicies = "2.5.29.32";
public const string AnyCertPolicy = "2.5.29.32.0";
public const string CertPolicyMappings = "2.5.29.33";
public const string CertPolicyConstraints = "2.5.29.36";
public const string EnhancedKeyUsage = "2.5.29.37";
public const string InhibitAnyPolicyExtension = "2.5.29.54";
public const string Ecc = "1.2.840.10045.2.1";
public const string RsaRsa = "1.2.840.113549.1.1.1";
public const string DsaDsa = "1.2.840.10040.4.1";
public const string EmailAddress = "1.2.840.113549.1.9.1";
public const string EnrollCertTypeExtension = "1.3.6.1.4.1.311.20.2";
public const string CertificateTemplate = "1.3.6.1.4.1.311.21.7";
public const string ApplicationCertPolicies = "1.3.6.1.4.1.311.21.10";
public const string AuthorityInformationAccess = "1.3.6.1.5.5.7.1.1";
public const string CertificateAuthorityIssuers = "1.3.6.1.5.5.7.48.2";
}
}

View File

@@ -0,0 +1,40 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using System.Diagnostics;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
namespace Internal.Cryptography.Pal
{
internal sealed class CertCollectionLoader : ILoaderPal
{
private List<ICertificatePal> _certs;
internal CertCollectionLoader(List<ICertificatePal> certs)
{
_certs = certs;
}
public void Dispose()
{
// If there're still certificates, dispose them.
_certs?.DisposeAll();
}
public void MoveTo(X509Certificate2Collection collection)
{
Debug.Assert(collection != null);
List<ICertificatePal> localCerts = Interlocked.Exchange(ref _certs, null);
Debug.Assert(localCerts != null);
foreach (ICertificatePal certPal in localCerts)
{
collection.Add(new X509Certificate2(certPal));
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More