Imported Upstream version 5.2.0.175

Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-06-07 13:16:24 +00:00
parent 4bdbaf4a88
commit 966bba02bb
8776 changed files with 346420 additions and 149650 deletions

View File

@@ -1,7 +1,6 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
VisualStudioVersion = 14.0.25420.1
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
@@ -9,313 +8,43 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptograph
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptography.X509Certificates", "src\System.Security.Cryptography.X509Certificates.csproj", "{6F8576C2-6CD0-4DF3-8394-00B002D82E40}"
ProjectSection(ProjectDependencies) = postProject
{B37248D0-B191-4971-AD50-01CFEDF1E09B} = {B37248D0-B191-4971-AD50-01CFEDF1E09B}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptography.X509Certificates", "ref\System.Security.Cryptography.X509Certificates.csproj", "{B37248D0-B191-4971-AD50-01CFEDF1E09B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{1A2F9F4A-A032-433E-B914-ADD5992BB178}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E107E9C1-E893-4E87-987E-04EF0DCEAEFD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{2E666815-2EDB-464B-9DF6-380BF4789AD4}"
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
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
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
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.Debug|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.Debug|Any CPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.Release|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E}.Release|Any CPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.Debug|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.Debug|Any CPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.Release|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{6F8576C2-6CD0-4DF3-8394-00B002D82E40}.Release|Any CPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{B37248D0-B191-4971-AD50-01CFEDF1E09B}.Debug|Any CPU.ActiveCfg = netcoreapp-Debug|Any CPU
{B37248D0-B191-4971-AD50-01CFEDF1E09B}.Debug|Any CPU.Build.0 = netcoreapp-Debug|Any CPU
{B37248D0-B191-4971-AD50-01CFEDF1E09B}.Release|Any CPU.ActiveCfg = netcoreapp-Release|Any CPU
{B37248D0-B191-4971-AD50-01CFEDF1E09B}.Release|Any CPU.Build.0 = netcoreapp-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A28B0064-EFB2-4B77-B97C-DECF5DAB074E} = {1A2F9F4A-A032-433E-B914-ADD5992BB178}
{6F8576C2-6CD0-4DF3-8394-00B002D82E40} = {E107E9C1-E893-4E87-987E-04EF0DCEAEFD}
{B37248D0-B191-4971-AD50-01CFEDF1E09B} = {2E666815-2EDB-464B-9DF6-380BF4789AD4}
EndGlobalSection
EndGlobal

View File

@@ -4,5 +4,6 @@
<PropertyGroup>
<AssemblyVersion>4.2.0.0</AssemblyVersion>
<IsNETCoreApp>true</IsNETCoreApp>
<IsUAP>true</IsUAP>
</PropertyGroup>
</Project>

View File

@@ -1,11 +0,0 @@
<?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

@@ -18,6 +18,11 @@ namespace Microsoft.Win32.SafeHandles
namespace System.Security.Cryptography.X509Certificates
{
public static partial class DSACertificateExtensions
{
public static System.Security.Cryptography.DSA GetDSAPrivateKey(this System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) { throw null; }
public static System.Security.Cryptography.DSA GetDSAPublicKey(this System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) { throw null; }
}
public static partial class ECDsaCertificateExtensions
{
public static System.Security.Cryptography.ECDsa GetECDsaPrivateKey(this System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) { throw null; }

View File

@@ -1,6 +1,9 @@
<?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>
<ProjectGuid>{B37248D0-B191-4971-AD50-01CFEDF1E09B}</ProjectGuid>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />

View File

@@ -0,0 +1 @@
Total Issues: 0

View File

@@ -2,11 +2,10 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
netcoreapp-OSX;
netcoreapp-Unix;
netcoreapp-Windows_NT;
net463-Windows_NT;
netcoreapp-Unix;
netcoreapp-Windows_NT;
uap-Windows_NT;
</BuildConfigurations>
</PropertyGroup>
</Project>
</Project>

View File

@@ -55,6 +55,9 @@ namespace Internal.Cryptography.Pal
if (typeof(T) == typeof(ECDsa))
return (T)(object)certificate.Pal.GetECDsaPrivateKey();
if (typeof(T) == typeof(DSA))
return (T)(object)certificate.Pal.GetDSAPrivateKey();
Debug.Fail("Expected GetExpectedOidValue() to have thrown before we got here.");
throw new NotSupportedException(SR.NotSupported_KeyAlgorithm);
}
@@ -65,6 +68,8 @@ namespace Internal.Cryptography.Pal
return Oids.RsaRsa;
if (typeof(T) == typeof(ECDsa))
return Oids.Ecc;
if (typeof(T) == typeof(DSA))
return Oids.DsaDsa;
throw new NotSupportedException(SR.NotSupported_KeyAlgorithm);
}
}

View File

@@ -31,7 +31,6 @@ namespace Internal.Cryptography
X500DistinguishedName SubjectName { get; }
X500DistinguishedName IssuerName { get; }
IEnumerable<X509Extension> Extensions { get; }
AsymmetricAlgorithm GetPrivateKey();
RSA GetRSAPrivateKey();
DSA GetDSAPrivateKey();
ECDsa GetECDsaPrivateKey();

View File

@@ -15,8 +15,13 @@ namespace Internal.Cryptography
//
internal static class Oids
{
public const string CommonName = "2.5.4.3";
public const string Organization = "2.5.4.10";
public const string OrganizationalUnit = "2.5.4.11";
public const string BasicConstraints = "2.5.29.10";
public const string SubjectKeyIdentifier = "2.5.29.14";
public const string SubjectAltName = "2.5.29.17";
public const string IssuerAltName = "2.5.29.18";
public const string KeyUsage = "2.5.29.15";
public const string BasicConstraints2 = "2.5.29.19";
public const string CrlDistributionPoints = "2.5.29.31";
@@ -31,6 +36,7 @@ namespace Internal.Cryptography
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 UserPrincipalName = "1.3.6.1.4.1.311.20.2.3";
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";

View File

@@ -0,0 +1,64 @@
// 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.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal sealed partial class FindPal
{
internal static IFindPal OpenPal(X509Certificate2Collection findFrom, X509Certificate2Collection copyTo, bool validOnly)
{
return new AppleCertificateFinder(findFrom, copyTo, validOnly);
}
private sealed class AppleCertificateFinder : ManagedCertificateFinder
{
public AppleCertificateFinder(X509Certificate2Collection findFrom, X509Certificate2Collection copyTo, bool validOnly)
: base(findFrom, copyTo, validOnly)
{
}
protected override string DerStringToManagedString(byte[] anyString)
{
DerSequenceReader reader = DerSequenceReader.CreateForPayload(anyString);
var tag = (DerSequenceReader.DerTag)reader.PeekTag();
string value = null;
switch (tag)
{
case DerSequenceReader.DerTag.BMPString:
value = reader.ReadBMPString();
break;
case DerSequenceReader.DerTag.IA5String:
value = reader.ReadIA5String();
break;
case DerSequenceReader.DerTag.PrintableString:
value = reader.ReadPrintableString();
break;
case DerSequenceReader.DerTag.UTF8String:
value = reader.ReadUtf8String();
break;
// Ignore anything we don't know how to read.
}
return value;
}
protected override byte[] GetSubjectPublicKeyInfo(X509Certificate2 cert)
{
AppleCertificatePal pal = (AppleCertificatePal)cert.Pal;
return pal.SubjectPublicKeyInfo;
}
protected override X509Certificate2 CloneCertificate(X509Certificate2 cert)
{
return new X509Certificate2(cert.Handle);
}
}
}
}

View File

@@ -0,0 +1,98 @@
// 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.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Security.Cryptography.Apple;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Win32.SafeHandles;
namespace Internal.Cryptography.Pal
{
internal sealed partial class StorePal
{
private sealed class AppleKeychainStore : IStorePal
{
private SafeKeychainHandle _keychainHandle;
private readonly bool _readonly;
internal AppleKeychainStore(SafeKeychainHandle keychainHandle, OpenFlags openFlags)
{
Debug.Assert(keychainHandle != null && !keychainHandle.IsInvalid);
_keychainHandle = keychainHandle;
_readonly = (openFlags & (OpenFlags.ReadWrite | OpenFlags.MaxAllowed)) == 0;
}
public void Dispose()
{
_keychainHandle?.Dispose();
_keychainHandle = null;
}
public void CloneTo(X509Certificate2Collection collection)
{
HashSet<X509Certificate2> dedupedCerts = new HashSet<X509Certificate2>();
using (SafeCFArrayHandle identities = Interop.AppleCrypto.KeychainEnumerateIdentities(_keychainHandle))
{
ReadCollection(identities, dedupedCerts);
}
using (SafeCFArrayHandle certs = Interop.AppleCrypto.KeychainEnumerateCerts(_keychainHandle))
{
ReadCollection(certs, dedupedCerts);
}
foreach (X509Certificate2 cert in dedupedCerts)
{
collection.Add(cert);
}
}
public void Add(ICertificatePal cert)
{
if (_readonly)
throw new CryptographicException(SR.Cryptography_X509_StoreReadOnly);
AppleCertificatePal applePal = (AppleCertificatePal)cert;
var handle = (SafeKeychainItemHandle)applePal.IdentityHandle ?? applePal.CertificateHandle;
Interop.AppleCrypto.X509StoreAddCertificate(handle, _keychainHandle);
}
public void Remove(ICertificatePal cert)
{
if (_readonly)
throw new CryptographicException(SR.Cryptography_X509_StoreReadOnly);
AppleCertificatePal applePal = (AppleCertificatePal)cert;
Interop.AppleCrypto.X509StoreRemoveCertificate(applePal.CertificateHandle, _keychainHandle);
}
public SafeHandle SafeHandle => _keychainHandle;
public static AppleKeychainStore OpenDefaultKeychain(OpenFlags openFlags)
{
return new AppleKeychainStore(Interop.AppleCrypto.SecKeychainCopyDefault(), openFlags);
}
public static AppleKeychainStore OpenSystemSharedKeychain(OpenFlags openFlags)
{
const string SharedSystemKeychainPath = "/Library/Keychains/System.keychain";
return OpenKeychain(SharedSystemKeychainPath, openFlags);
}
private static AppleKeychainStore OpenKeychain(string keychainPath, OpenFlags openFlags)
{
return new AppleKeychainStore(Interop.AppleCrypto.SecKeychainOpen(keychainPath), openFlags);
}
}
}
}

View File

@@ -0,0 +1,85 @@
// 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.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Win32.SafeHandles;
namespace Internal.Cryptography.Pal
{
internal sealed partial class StorePal
{
private sealed class AppleTrustStore : IStorePal
{
private readonly StoreName _storeName;
private readonly StoreLocation _location;
private AppleTrustStore(StoreName storeName, StoreLocation location)
{
Debug.Assert(storeName == StoreName.Root || storeName == StoreName.Disallowed);
_storeName = storeName;
_location = location;
}
public void Dispose()
{
// Nothing to do.
}
public void CloneTo(X509Certificate2Collection collection)
{
HashSet<X509Certificate2> dedupedCerts = new HashSet<X509Certificate2>();
if (_storeName == StoreName.Root)
{
using (SafeCFArrayHandle certs = Interop.AppleCrypto.StoreEnumerateRoot(_location))
{
ReadCollection(certs, dedupedCerts);
}
}
else if (_storeName == StoreName.Disallowed)
{
using (SafeCFArrayHandle certs = Interop.AppleCrypto.StoreEnumerateDisallowed(_location))
{
ReadCollection(certs, dedupedCerts);
}
}
else
{
Debug.Fail($"No handler for trust store {_storeName}");
}
foreach (X509Certificate2 cert in dedupedCerts)
{
collection.Add(cert);
}
}
public void Add(ICertificatePal cert)
{
throw new CryptographicException(SR.Cryptography_X509_StoreReadOnly);
}
public void Remove(ICertificatePal cert)
{
throw new CryptographicException(SR.Cryptography_X509_StoreReadOnly);
}
public SafeHandle SafeHandle => null;
internal static AppleTrustStore OpenStore(StoreName storeName, StoreLocation location, OpenFlags openFlags)
{
if ((openFlags & OpenFlags.ReadWrite) == OpenFlags.ReadWrite)
throw new CryptographicException(SR.Security_AccessDenied);
return new AppleTrustStore(storeName, location);
}
}
}
}

View File

@@ -0,0 +1,119 @@
// 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.Diagnostics;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Win32.SafeHandles;
namespace Internal.Cryptography.Pal
{
internal sealed partial class StorePal
{
private sealed class AppleCertificateExporter : IExportPal
{
private X509Certificate2Collection _certs;
private ICertificatePal _singleCertPal;
public AppleCertificateExporter(ICertificatePal cert)
{
_singleCertPal = cert;
}
public AppleCertificateExporter(X509Certificate2Collection certs)
{
_certs = certs;
}
public void Dispose()
{
// Don't dispose any of the resources, they're still owned by the caller.
_singleCertPal = null;
_certs = null;
}
public byte[] Export(X509ContentType contentType, SafePasswordHandle password)
{
Debug.Assert(password != null);
switch (contentType)
{
case X509ContentType.Cert:
return ExportX509Der();
case X509ContentType.Pkcs12:
return ExportPkcs12(password);
case X509ContentType.Pkcs7:
return ExportPkcs7();
case X509ContentType.SerializedCert:
case X509ContentType.SerializedStore:
throw new PlatformNotSupportedException(SR.Cryptography_Unix_X509_SerializedExport);
default:
throw new CryptographicException(SR.Cryptography_X509_InvalidContentType);
}
}
private byte[] ExportX509Der()
{
if (_singleCertPal != null)
{
return _singleCertPal.RawData;
}
// Windows/Desktop compatibility: Exporting a collection (or store) as
// X509ContentType.Cert returns the equivalent of FirstOrDefault(),
// so anything past _certs[0] is ignored, and an empty collection is
// null (not an Exception)
if (_certs.Count == 0)
{
return null;
}
return _certs[0].RawData;
}
private byte[] ExportPkcs12(SafePasswordHandle password)
{
IntPtr[] certHandles;
if (_singleCertPal != null)
{
certHandles = new[] { _singleCertPal.Handle };
}
else
{
certHandles = new IntPtr[_certs.Count];
for (int i = 0; i < _certs.Count; i++)
{
certHandles[i] = _certs[i].Handle;
}
}
return Interop.AppleCrypto.X509ExportPfx(certHandles, password);
}
private byte[] ExportPkcs7()
{
IntPtr[] certHandles;
if (_singleCertPal != null)
{
certHandles = new[] { ((AppleCertificatePal)_singleCertPal).CertificateHandle.DangerousGetHandle() };
}
else
{
certHandles = new IntPtr[_certs.Count];
for (int i = 0; i < _certs.Count; i++)
{
AppleCertificatePal pal = (AppleCertificatePal)_certs[i].Pal;
certHandles[i] = pal.CertificateHandle.DangerousGetHandle();
}
}
return Interop.AppleCrypto.X509ExportPkcs7(certHandles);
}
}
}
}

View File

@@ -0,0 +1,60 @@
// 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.Apple;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Win32.SafeHandles;
namespace Internal.Cryptography.Pal
{
internal sealed partial class StorePal
{
private sealed class AppleCertLoader : ILoaderPal
{
private readonly SafeCFArrayHandle _collectionHandle;
private readonly SafeTemporaryKeychainHandle _tmpKeychain;
public AppleCertLoader(SafeCFArrayHandle collectionHandle, SafeTemporaryKeychainHandle tmpKeychain)
{
_collectionHandle = collectionHandle;
_tmpKeychain = tmpKeychain;
}
public void Dispose()
{
_collectionHandle.Dispose();
_tmpKeychain?.Dispose();
}
public void MoveTo(X509Certificate2Collection collection)
{
long longCount = Interop.CoreFoundation.CFArrayGetCount(_collectionHandle);
if (longCount > int.MaxValue)
throw new CryptographicException();
int count = (int)longCount;
// Apple returns things in the opposite order from Windows, so read backwards.
for (int i = count - 1; i >= 0; i--)
{
IntPtr handle = Interop.CoreFoundation.CFArrayGetValueAtIndex(_collectionHandle, i);
if (handle != IntPtr.Zero)
{
ICertificatePal certPal = CertificatePal.FromHandle(handle, throwOnFail: false);
if (certPal != null)
{
X509Certificate2 cert = new X509Certificate2(certPal);
collection.Add(cert);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,172 @@
// 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.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.Apple;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Win32.SafeHandles;
namespace Internal.Cryptography.Pal
{
internal sealed partial class StorePal
{
public static IStorePal FromHandle(IntPtr storeHandle)
{
if (storeHandle == IntPtr.Zero)
throw new ArgumentNullException(nameof(storeHandle));
var keychainHandle = new SafeKeychainHandle(storeHandle);
Interop.CoreFoundation.CFRetain(storeHandle);
return new AppleKeychainStore(keychainHandle, OpenFlags.MaxAllowed);
}
public static ILoaderPal FromBlob(byte[] rawData, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
{
Debug.Assert(password != null);
X509ContentType contentType = X509Certificate2.GetCertContentType(rawData);
SafeKeychainHandle keychain;
bool exportable = true;
if (contentType == X509ContentType.Pkcs12)
{
if ((keyStorageFlags & X509KeyStorageFlags.EphemeralKeySet) == X509KeyStorageFlags.EphemeralKeySet)
{
throw new PlatformNotSupportedException(SR.Cryptography_X509_NoEphemeralPfx);
}
exportable = (keyStorageFlags & X509KeyStorageFlags.Exportable) == X509KeyStorageFlags.Exportable;
bool persist =
(keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == X509KeyStorageFlags.PersistKeySet;
keychain = persist
? Interop.AppleCrypto.SecKeychainCopyDefault()
: Interop.AppleCrypto.CreateTemporaryKeychain();
}
else
{
keychain = SafeTemporaryKeychainHandle.InvalidHandle;
password = SafePasswordHandle.InvalidHandle;
}
// Only dispose tmpKeychain on the exception path, otherwise it's managed by AppleCertLoader.
try
{
SafeCFArrayHandle certs = Interop.AppleCrypto.X509ImportCollection(
rawData,
contentType,
password,
keychain,
exportable);
// If the default keychain was used, null will be passed to the loader.
return new AppleCertLoader(certs, keychain as SafeTemporaryKeychainHandle);
}
catch
{
keychain.Dispose();
throw;
}
}
public static ILoaderPal FromFile(string fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
{
Debug.Assert(password != null);
byte[] fileBytes = File.ReadAllBytes(fileName);
return FromBlob(fileBytes, password, keyStorageFlags);
}
public static IExportPal FromCertificate(ICertificatePal cert)
{
return new AppleCertificateExporter(cert);
}
public static IExportPal LinkFromCertificateCollection(X509Certificate2Collection certificates)
{
return new AppleCertificateExporter(certificates);
}
public static IStorePal FromSystemStore(string storeName, StoreLocation storeLocation, OpenFlags openFlags)
{
StringComparer ordinalIgnoreCase = StringComparer.OrdinalIgnoreCase;
switch (storeLocation)
{
case StoreLocation.CurrentUser:
if (ordinalIgnoreCase.Equals("My", storeName))
return AppleKeychainStore.OpenDefaultKeychain(openFlags);
if (ordinalIgnoreCase.Equals("Root", storeName))
return AppleTrustStore.OpenStore(StoreName.Root, storeLocation, openFlags);
if (ordinalIgnoreCase.Equals("Disallowed", storeName))
return AppleTrustStore.OpenStore(StoreName.Disallowed, storeLocation, openFlags);
break;
case StoreLocation.LocalMachine:
if (ordinalIgnoreCase.Equals("My", storeName))
return AppleKeychainStore.OpenSystemSharedKeychain(openFlags);
if (ordinalIgnoreCase.Equals("Root", storeName))
return AppleTrustStore.OpenStore(StoreName.Root, storeLocation, openFlags);
if (ordinalIgnoreCase.Equals("Disallowed", storeName))
return AppleTrustStore.OpenStore(StoreName.Disallowed, storeLocation, openFlags);
break;
}
if ((openFlags & OpenFlags.OpenExistingOnly) == OpenFlags.OpenExistingOnly)
throw new CryptographicException(SR.Cryptography_X509_StoreNotFound);
throw new PlatformNotSupportedException(
SR.Format(
SR.Cryptography_X509_StoreCannotCreate,
storeName,
storeLocation));
}
private static void ReadCollection(SafeCFArrayHandle matches, HashSet<X509Certificate2> collection)
{
if (matches.IsInvalid)
{
return;
}
long count = Interop.CoreFoundation.CFArrayGetCount(matches);
for (int i = 0; i < count; i++)
{
IntPtr handle = Interop.CoreFoundation.CFArrayGetValueAtIndex(matches, i);
SafeSecCertificateHandle certHandle;
SafeSecIdentityHandle identityHandle;
if (Interop.AppleCrypto.X509DemuxAndRetainHandle(handle, out certHandle, out identityHandle))
{
X509Certificate2 cert;
if (certHandle.IsInvalid)
{
certHandle.Dispose();
cert = new X509Certificate2(new AppleCertificatePal(identityHandle));
}
else
{
identityHandle.Dispose();
cert = new X509Certificate2(new AppleCertificatePal(certHandle));
}
if (!collection.Add(cert))
{
cert.Dispose();
}
}
}
}
}
}

View File

@@ -0,0 +1,131 @@
// 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.Apple;
using System.Security.Cryptography.X509Certificates;
namespace Internal.Cryptography.Pal
{
internal sealed partial class X509Pal
{
public static IX509Pal Instance = new AppleX509Pal();
private X509Pal()
{
}
private partial class AppleX509Pal : ManagedX509ExtensionProcessor, IX509Pal
{
public AsymmetricAlgorithm DecodePublicKey(Oid oid, byte[] encodedKeyValue, byte[] encodedParameters,
ICertificatePal certificatePal)
{
AppleCertificatePal applePal = certificatePal as AppleCertificatePal;
if (applePal != null)
{
SafeSecKeyRefHandle key = Interop.AppleCrypto.X509GetPublicKey(applePal.CertificateHandle);
switch (oid.Value)
{
case Oids.RsaRsa:
return new RSAImplementation.RSASecurityTransforms(key);
case Oids.DsaDsa:
return new DSAImplementation.DSASecurityTransforms(key);
case Oids.Ecc:
return new ECDsaImplementation.ECDsaSecurityTransforms(key);
}
key.Dispose();
}
else
{
switch (oid.Value)
{
case Oids.RsaRsa:
return DecodeRsaPublicKey(encodedKeyValue);
case Oids.DsaDsa:
return DecodeDsaPublicKey(encodedKeyValue, encodedParameters);
}
}
throw new NotSupportedException(SR.NotSupported_KeyAlgorithm);
}
private static AsymmetricAlgorithm DecodeRsaPublicKey(byte[] encodedKeyValue)
{
DerSequenceReader reader = new DerSequenceReader(encodedKeyValue);
RSAParameters rsaParameters = new RSAParameters();
reader.ReadPkcs1PublicBlob(ref rsaParameters);
RSA rsa = RSA.Create();
try
{
rsa.ImportParameters(rsaParameters);
return rsa;
}
catch (Exception)
{
rsa.Dispose();
throw;
}
}
private static AsymmetricAlgorithm DecodeDsaPublicKey(byte[] encodedKeyValue, byte[] encodedParameters)
{
DSAParameters dsaParameters = new DSAParameters();
DerSequenceReader parameterReader = new DerSequenceReader(encodedParameters);
parameterReader.ReadSubjectPublicKeyInfo(encodedKeyValue, ref dsaParameters);
DSA dsa = DSA.Create();
try
{
dsa.ImportParameters(dsaParameters);
return dsa;
}
catch (Exception)
{
dsa.Dispose();
throw;
}
}
public string X500DistinguishedNameDecode(byte[] encodedDistinguishedName, X500DistinguishedNameFlags flag)
{
return X500NameEncoder.X500DistinguishedNameDecode(encodedDistinguishedName, true, flag);
}
public byte[] X500DistinguishedNameEncode(string distinguishedName, X500DistinguishedNameFlags flag)
{
return X500NameEncoder.X500DistinguishedNameEncode(distinguishedName, flag);
}
public string X500DistinguishedNameFormat(byte[] encodedDistinguishedName, bool multiLine)
{
return X500NameEncoder.X500DistinguishedNameDecode(
encodedDistinguishedName,
true,
multiLine ? X500DistinguishedNameFlags.UseNewLines : X500DistinguishedNameFlags.None,
multiLine);
}
public X509ContentType GetCertContentType(byte[] rawData)
{
if (rawData == null || rawData.Length == 0)
{
return X509ContentType.Unknown;
}
return Interop.AppleCrypto.X509GetContentType(rawData, rawData.Length);
}
public X509ContentType GetCertContentType(string fileName)
{
return GetCertContentType(System.IO.File.ReadAllBytes(fileName));
}
}
}
}

View File

@@ -0,0 +1,132 @@
// 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 ChainVerifier
{
public static bool Verify(X509ChainElement[] chainElements, X509VerificationFlags flags)
{
bool isEndEntity = true;
foreach (X509ChainElement element in chainElements)
{
if (HasUnsuppressedError(flags, element, isEndEntity))
{
return false;
}
isEndEntity = false;
}
return true;
}
private static bool HasUnsuppressedError(X509VerificationFlags flags, X509ChainElement element, bool isEndEntity)
{
foreach (X509ChainStatus status in element.ChainElementStatus)
{
if (status.Status == X509ChainStatusFlags.NoError)
{
return false;
}
Debug.Assert(
(status.Status & (status.Status - 1)) == 0,
$"Only one bit should be set in status.Status ({status})");
// The Windows certificate store API only checks the time error for a "peer trust" certificate,
// but we don't have a concept for that in Unix. If we did, we'd need to do that logic that here.
// Note also that that logic is skipped if CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG is set.
X509VerificationFlags? suppressionFlag;
if (status.Status == X509ChainStatusFlags.RevocationStatusUnknown)
{
if (isEndEntity)
{
suppressionFlag = X509VerificationFlags.IgnoreEndRevocationUnknown;
}
else if (IsSelfSigned(element.Certificate))
{
suppressionFlag = X509VerificationFlags.IgnoreRootRevocationUnknown;
}
else
{
suppressionFlag = X509VerificationFlags.IgnoreCertificateAuthorityRevocationUnknown;
}
}
else
{
suppressionFlag = GetSuppressionFlag(status.Status);
}
// If an error was found, and we do NOT have the suppression flag for it enabled,
// we have an unsuppressed error, so return true. (If there's no suppression for a given code,
// we (by definition) don't have that flag set.
if (!suppressionFlag.HasValue ||
(flags & suppressionFlag) == 0)
{
return true;
}
}
return false;
}
private static bool IsSelfSigned(X509Certificate2 cert)
{
return cert.SubjectName.RawData.ContentsEqual(cert.IssuerName.RawData);
}
private static X509VerificationFlags? GetSuppressionFlag(X509ChainStatusFlags status)
{
switch (status)
{
case X509ChainStatusFlags.UntrustedRoot:
case X509ChainStatusFlags.PartialChain:
return X509VerificationFlags.AllowUnknownCertificateAuthority;
case X509ChainStatusFlags.NotValidForUsage:
case X509ChainStatusFlags.CtlNotValidForUsage:
return X509VerificationFlags.IgnoreWrongUsage;
case X509ChainStatusFlags.NotTimeValid:
return X509VerificationFlags.IgnoreNotTimeValid;
case X509ChainStatusFlags.CtlNotTimeValid:
return X509VerificationFlags.IgnoreCtlNotTimeValid;
case X509ChainStatusFlags.InvalidNameConstraints:
case X509ChainStatusFlags.HasNotSupportedNameConstraint:
case X509ChainStatusFlags.HasNotDefinedNameConstraint:
case X509ChainStatusFlags.HasNotPermittedNameConstraint:
case X509ChainStatusFlags.HasExcludedNameConstraint:
return X509VerificationFlags.IgnoreInvalidName;
case X509ChainStatusFlags.InvalidPolicyConstraints:
case X509ChainStatusFlags.NoIssuanceChainPolicy:
return X509VerificationFlags.IgnoreInvalidPolicy;
case X509ChainStatusFlags.InvalidBasicConstraints:
return X509VerificationFlags.IgnoreInvalidBasicConstraints;
case X509ChainStatusFlags.HasNotSupportedCriticalExtension:
// This field would be mapped in by AllFlags, but we don't have a name for it currently.
return (X509VerificationFlags)0x00002000;
case X509ChainStatusFlags.NotTimeNested:
return X509VerificationFlags.IgnoreNotTimeNested;
}
return null;
}
}
}

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