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.22911.2
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptography.Encoding.Tests", "tests\System.Security.Cryptography.Encoding.Tests.csproj", "{0581E9FA-D639-4B88-96D8-D092760F90B0}"
ProjectSection(ProjectDependencies) = postProject
@@ -9,133 +8,43 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptograph
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptography.Encoding", "src\System.Security.Cryptography.Encoding.csproj", "{AA81E343-5E54-40B0-9381-C459419BE780}"
ProjectSection(ProjectDependencies) = postProject
{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD} = {81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Security.Cryptography.Encoding", "ref\System.Security.Cryptography.Encoding.csproj", "{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD}"
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
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-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-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-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
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnet463-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = net463-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Unixnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Unix-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Unix|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.DebugNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.ReleaseNETCoreAppnetcoreapp-Windows_NTnetcoreapp-Windows_NT|AnyCPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.Debug|Any CPU.ActiveCfg = netstandard-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
{0581E9FA-D639-4B88-96D8-D092760F90B0}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.Debug|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.Debug|Any CPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.Release|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{AA81E343-5E54-40B0-9381-C459419BE780}.Release|Any CPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD}.Debug|Any CPU.ActiveCfg = netcoreapp-Debug|Any CPU
{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD}.Debug|Any CPU.Build.0 = netcoreapp-Debug|Any CPU
{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD}.Release|Any CPU.ActiveCfg = netcoreapp-Release|Any CPU
{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD}.Release|Any CPU.Build.0 = netcoreapp-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{0581E9FA-D639-4B88-96D8-D092760F90B0} = {1A2F9F4A-A032-433E-B914-ADD5992BB178}
{AA81E343-5E54-40B0-9381-C459419BE780} = {E107E9C1-E893-4E87-987E-04EF0DCEAEFD}
{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD} = {2E666815-2EDB-464B-9DF6-380BF4789AD4}
EndGlobalSection
EndGlobal

View File

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

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>{81B846C6-3CE3-4D7D-8A30-54ECEC63F6DD}</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

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

View File

@@ -0,0 +1,217 @@
// 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.Security.Cryptography;
using System.Text;
namespace Internal.Cryptography
{
internal abstract partial class AsnFormatter
{
private static readonly AsnFormatter s_instance = new AppleAsnFormatter();
// -----------------------------
// ---- PAL layer ends here ----
// -----------------------------
}
internal class AppleAsnFormatter : AsnFormatter
{
protected override string FormatNative(Oid oid, byte[] rawData, bool multiLine)
{
if (oid == null || string.IsNullOrEmpty(oid.Value))
{
return EncodeHexString(rawData, true);
}
switch (oid.Value)
{
case "2.5.29.17":
return FormatSubjectAlternativeName(rawData);
}
return null;
}
private const string CommaSpace = ", ";
internal enum GeneralNameType
{
OtherName = 0,
Rfc822Name = 1,
// RFC 822: Standard for the format of ARPA Internet Text Messages.
// That means "email", and an RFC 822 Name: "Email address"
Email = Rfc822Name,
DnsName = 2,
X400Address = 3,
DirectoryName = 4,
EdiPartyName = 5,
UniformResourceIdentifier = 6,
IPAddress = 7,
RegisteredId = 8,
}
private string FormatSubjectAlternativeName(byte[] rawData)
{
// Because SubjectAlternativeName is a commonly parsed structure, we'll
// specifically format this one. And we'll match the OpenSSL format, which
// includes not localizing any of the values (or respecting the multiLine boolean)
//
// The intent here is to be functionally equivalent to OpenSSL GENERAL_NAME_print.
// The end size of this string is hard to predict.
// * dNSName values have a tag that takes four characters to represent ("DNS:")
// and then their payload is ASCII encoded (so one byte -> one char), so they
// work out to be about equal (in chars) to their DER encoded length (in bytes).
// * iPAddress values have a tag that takes 11 characters ("IP Address:") and then
// grow from 4 bytes to up to 15 characters for IPv4, or 16 bytes to 47 characters
// for IPv6
//
// So use a List<string> and just Concat them all when we're done, and we reduce the
// number of times we copy the header values (vs pointers to the header values).
List<string> segments = new List<string>();
try
{
// SubjectAltName ::= GeneralNames
//
// GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
//
// GeneralName ::= CHOICE {
// otherName [0] OtherName,
// rfc822Name [1] IA5String,
// dNSName [2] IA5String,
// x400Address [3] ORAddress,
// directoryName [4] Name,
// ediPartyName [5] EDIPartyName,
// uniformResourceIdentifier [6] IA5String,
// iPAddress [7] OCTET STRING,
// registeredID [8] OBJECT IDENTIFIER }
//
// OtherName::= SEQUENCE {
// type - id OBJECT IDENTIFIER,
// value[0] EXPLICIT ANY DEFINED BY type - id }
DerSequenceReader altNameReader = new DerSequenceReader(rawData);
while (altNameReader.HasData)
{
if (segments.Count != 0)
{
segments.Add(CommaSpace);
}
byte tag = altNameReader.PeekTag();
if ((tag & DerSequenceReader.ContextSpecificTagFlag) == 0)
{
// All GeneralName values need the ContextSpecific flag.
return null;
}
GeneralNameType nameType = (GeneralNameType)(tag & DerSequenceReader.TagNumberMask);
bool needsConstructedFlag = false;
switch (nameType)
{
case GeneralNameType.OtherName:
case GeneralNameType.X400Address:
case GeneralNameType.DirectoryName:
case GeneralNameType.EdiPartyName:
needsConstructedFlag = true;
break;
}
if (needsConstructedFlag &&
(tag & DerSequenceReader.ConstructedFlag) == 0)
{
// All of the SEQUENCE types require the constructed bit,
// or OpenSSL will have refused to print it.
return null;
}
switch (nameType)
{
case GeneralNameType.OtherName:
segments.Add("othername:<unsupported>");
altNameReader.SkipValue();
break;
case GeneralNameType.Rfc822Name:
segments.Add("email:");
segments.Add(altNameReader.ReadIA5String());
break;
case GeneralNameType.DnsName:
segments.Add("DNS:");
segments.Add(altNameReader.ReadIA5String());
break;
case GeneralNameType.X400Address:
segments.Add("X400Name:<unsupported>");
altNameReader.SkipValue();
break;
case GeneralNameType.DirectoryName:
// OpenSSL supports printing one of these, but the logic lives in X509Certificates,
// and it isn't very common. So we'll skip this one until someone asks for it.
segments.Add("DirName:<unsupported>");
altNameReader.SkipValue();
break;
case GeneralNameType.EdiPartyName:
segments.Add("EdiPartyName:<unsupported>");
altNameReader.SkipValue();
break;
case GeneralNameType.UniformResourceIdentifier:
segments.Add("URI:");
segments.Add(altNameReader.ReadIA5String());
break;
case GeneralNameType.IPAddress:
segments.Add("IP Address");
byte[] ipAddressBytes = altNameReader.ReadOctetString();
if (ipAddressBytes.Length == 4)
{
// Add the colon and dotted-decimal representation of IPv4.
segments.Add(
$":{ipAddressBytes[0]}.{ipAddressBytes[1]}.{ipAddressBytes[2]}.{ipAddressBytes[3]}");
}
else if (ipAddressBytes.Length == 16)
{
// Print the IP Address value as colon separated UInt16 hex values without leading zeroes.
// 20 01 0D B8 AC 10 FE 01 00 00 00 00 00 00 00 00
//
// IP Address:2001:DB8:AC10:FE01:0:0:0:0
for (int i = 0; i < ipAddressBytes.Length; i += 2)
{
segments.Add($":{ipAddressBytes[i] << 8 | ipAddressBytes[i + 1]:X}");
}
}
else
{
segments.Add(":<invalid>");
}
break;
case GeneralNameType.RegisteredId:
segments.Add("Registered ID:");
segments.Add(altNameReader.ReadOidAsString());
break;
default:
// A new extension to GeneralName could legitimately hit this,
// but it's correct to say that until we know what that is that
// the pretty-print has failed, and we should fall back to hex.
//
// But it could also simply be poorly encoded user data.
return null;
}
}
return string.Concat(segments);
}
catch (CryptographicException)
{
return null;
}
}
}
}

View File

@@ -0,0 +1,67 @@
// 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.Linq;
using System.Security.Cryptography;
namespace Internal.Cryptography
{
internal static partial class OidLookup
{
private static bool ShouldUseCache(OidGroup oidGroup)
{
return true;
}
private static string NativeOidToFriendlyName(string oid, OidGroup oidGroup, bool fallBackToAllGroups)
{
string friendlyName;
if (s_extraOidToFriendlyName.TryGetValue(oid, out friendlyName))
{
return friendlyName;
}
return null;
}
private static string NativeFriendlyNameToOid(string friendlyName, OidGroup oidGroup, bool fallBackToAllGroups)
{
string oid;
if (s_extraFriendlyNameToOid.TryGetValue(friendlyName, out oid))
{
return oid;
}
return null;
}
// -----------------------------
// ---- PAL layer ends here ----
// -----------------------------
// There are places inside the framework where Oid.FromFriendlyName is called
// (to pass in an OID group restriction for Windows) and an exception is not tolerated.
//
// The main place for this is X509Extension's internal ctor.
//
// These Name/OID pairs are not "universal", in that either Windows localizes it or Windows
// and OpenSSL produce different answers. Since the answers originally came from OpenSSL
// on macOS, this preserves the OpenSSL names.
private static readonly Dictionary<string, string> s_extraFriendlyNameToOid =
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "X509v3 Subject Key Identifier", "2.5.29.14" },
{ "X509v3 Key Usage", "2.5.29.15" },
{ "X509v3 Basic Constraints", "2.5.29.19" },
{ "X509v3 Extended Key Usage", "2.5.29.37" },
};
private static readonly Dictionary<string, string> s_extraOidToFriendlyName =
s_extraFriendlyNameToOid.ToDictionary(kvp => kvp.Value, kvp => kvp.Key);
}
}

View File

@@ -1,64 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -141,7 +82,10 @@
<data name="Argument_InvalidValue" xml:space="preserve">
<value>Value was invalid.</value>
</data>
<data name="Cryptography_Der_Invalid_Encoding" xml:space="preserve">
<value>ASN1 corrupted data.</value>
</data>
<data name="ObjectDisposed_Generic" xml:space="preserve">
<value>Cannot access a disposed object.</value>
</data>
</root>
</root>

View File

@@ -5,16 +5,16 @@
<ProjectGuid>{AA81E343-5E54-40B0-9381-C459419BE780}</ProjectGuid>
<AssemblyName>System.Security.Cryptography.Encoding</AssemblyName>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<IsPartialFacadeAssembly Condition="'$(TargetGroup)' == 'net463'">true</IsPartialFacadeAssembly>
<ResourcesSourceOutputDirectory Condition="'$(TargetGroup)' == 'net463'">None</ResourcesSourceOutputDirectory>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='net463-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='net463-Windows_NT-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netcoreapp-Unix-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netcoreapp-Unix-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netcoreapp-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netcoreapp-Windows_NT-Release|AnyCPU'" />
<ItemGroup Condition="'$(TargetGroup)' == 'netcoreapp'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-OSX-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-OSX-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Unix-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Unix-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Windows_NT-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Windows_NT-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="Internal\Cryptography\AsnFormatter.cs" />
<Compile Include="Internal\Cryptography\Helpers.cs" />
<Compile Include="Internal\Cryptography\OidLookup.cs" />
@@ -27,7 +27,7 @@
<Compile Include="System\Security\Cryptography\OidEnumerator.cs" />
<Compile Include="System\Security\Cryptography\OidGroup.cs" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetsWindows)' == 'true' And '$(TargetGroup)' == 'netcoreapp'">
<ItemGroup Condition=" '$(TargetsWindows)' == 'true'">
<Compile Include="Internal\Cryptography\AsnFormatter.Windows.cs" />
<Compile Include="Internal\Cryptography\CngAsnFormatter.cs" />
<Compile Include="Internal\Cryptography\OidLookup.Windows.cs" />
@@ -50,7 +50,7 @@
<Link>Common\Interop\Windows\Interop.Libraries.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup Condition=" '$(TargetsUnix)' == 'true' ">
<ItemGroup Condition=" '$(TargetsUnix)' == 'true' AND '$(TargetsOSX)' != 'true' ">
<Compile Include="Internal\Cryptography\AsnFormatter.Unix.cs" />
<Compile Include="Internal\Cryptography\OidLookup.Unix.cs" />
<Compile Include="Internal\Cryptography\OpenSslAsnFormatter.cs" />
@@ -88,9 +88,12 @@
<Link>Common\Microsoft\Win32\SafeHandles\X509ExtensionSafeHandles.Unix.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup Condition="'$(TargetGroup)' == 'net463'">
<TargetingPackReference Include="mscorlib" />
<TargetingPackReference Include="System" />
<ItemGroup Condition=" '$(TargetsOSX)' == 'true' ">
<Compile Include="$(CommonPath)\System\Security\Cryptography\DerSequenceReader.cs">
<Link>Common\System\Security\Cryptography\DerSequenceReader.cs</Link>
</Compile>
<Compile Include="Internal\Cryptography\AsnFormatter.OSX.cs" />
<Compile Include="Internal\Cryptography\OidLookup.OSX.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Collections" />
@@ -104,5 +107,9 @@
<Reference Include="System.Runtime.InteropServices" />
<Reference Include="System.Security.Cryptography.Primitives" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetsOSX)' == 'true' ">
<Reference Include="System.Runtime.Numerics" />
<Reference Include="System.Threading" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project>

View File

@@ -4,6 +4,7 @@
using System.IO;
using System.Text;
using Test.Cryptography;
using Xunit;
namespace System.Security.Cryptography.Encoding.Tests
@@ -66,5 +67,65 @@ namespace System.Security.Cryptography.Encoding.Tests
Assert.Equal(new[] { "example.org", "sub.example.org", "*.sub.example.org" }, output);
}
[Fact]
[PlatformSpecific(TestPlatforms.AnyUnix)]
public static void TestSubjectAlternativeName_Unix()
{
byte[] sanExtension = (
"3081D3A027060A2B0601040182371402" +
"03A0190C177375626A65637475706E31" +
"406578616D706C652E6F726781157361" +
"6E656D61696C31406578616D706C652E" +
"6F72678218646E73312E7375626A6563" +
"742E6578616D706C652E6F7267A30630" +
"0441027573A500863168747470733A2F" +
"2F7777772E6578616D706C652E6F7267" +
"2F706174682F746F2F612F7265736F75" +
"72636523616E63686F7287047F000001" +
"871020010DB8AC10FE01000000000000" +
"0000870F20010DB8AC10FE0100000000" +
"0000008704FFFFFFFF8704020F636488" +
"052901020203").HexToByteArray();
AsnEncodedData asnData = new AsnEncodedData(
new Oid("2.5.29.17"),
sanExtension);
string s = asnData.Format(false);
string expected = string.Join(
", ",
// Choice[0]: OtherName
"othername:<unsupported>",
// Choice[1]: Rfc822Name (EmailAddress)
"email:sanemail1@example.org",
// Choice[2]: DnsName
"DNS:dns1.subject.example.org",
// Choice[3]: X400Name
"X400Name:<unsupported>",
// Skip Choice[4]: DirName
// (Supported by OpenSSL, but not by our Apple version)
// Choice[5]: EdiName
"EdiPartyName:<unsupported>",
// Choice[6]: URI
"URI:https://www.example.org/path/to/a/resource#anchor",
// Choice[7]: IPAddress (IPv4)
"IP Address:127.0.0.1",
// Choice[7]: IPAddress (IPv6)
"IP Address:2001:DB8:AC10:FE01:0:0:0:0",
// Choice[7]: IPAddress (unknown type)
"IP Address:<invalid>",
// Choice[7]: IPAddress (IPv4, longer string)
"IP Address:255.255.255.255",
// Choice[7]: IPAddress (IPv4, medium string)
// Note that between this, 127.0.0.1, and 255.255.255.255 all fields
// had both length-1 and length-3 (and some had length-2)
"IP Address:2.15.99.100",
// Choice[8]: RegisteredID
"Registered ID:1.1.1.2.2.3");
Assert.Equal(expected, s);
}
}
}

View File

@@ -2,8 +2,6 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
netstandard1.3-Unix;
netstandard1.3-Windows_NT;
netstandard-Unix;
netstandard-Windows_NT;
</BuildConfigurations>

View File

@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Xunit;
namespace System.Security.Cryptography.Encoding.Tests
@@ -16,11 +17,9 @@ namespace System.Security.Cryptography.Encoding.Tests
Assert.Equal("", oid.Value);
Assert.Null(oid.FriendlyName);
#if netstandard17
oid = new Oid();
Assert.Null(oid.Value);
Assert.Null(oid.FriendlyName);
#endif
}
[Theory]
@@ -181,7 +180,7 @@ namespace System.Security.Cryptography.Encoding.Tests
[Theory]
[MemberData(nameof(ValidOidFriendlyNameHashAlgorithmPairs))]
[PlatformSpecific(TestPlatforms.Windows)]
[PlatformSpecific(TestPlatforms.Windows)] // Uses P/Invokes to get the Oid lookup table
public static void LookupOidByValue_Method_WrongGroup(string oidValue, string friendlyName)
{
// Oid group is implemented strictly - no fallback to OidGroup.All as with many other parts of Crypto.
@@ -237,7 +236,7 @@ namespace System.Security.Cryptography.Encoding.Tests
[Theory]
[MemberData(nameof(ValidOidFriendlyNameHashAlgorithmPairs))]
[PlatformSpecific(TestPlatforms.Windows)]
[PlatformSpecific(TestPlatforms.Windows)] // Uses P/Invokes to get the Oid lookup table
public static void LookupOidByFriendlyName_Method_WrongGroup(string oidValue, string friendlyName)
{
// Oid group is implemented strictly - no fallback to OidGroup.All as with many other parts of Crypto.
@@ -259,27 +258,67 @@ namespace System.Security.Cryptography.Encoding.Tests
}
[Fact]
[PlatformSpecific(TestPlatforms.AnyUnix)]
[PlatformSpecific(TestPlatforms.AnyUnix)] // Uses P/Invokes to search Oid in the lookup table
public static void LookupOidByValue_Method_UnixOnly()
{
// This needs to be an OID not in the static lookup table. The purpose is to verify the
// NativeOidToFriendlyName fallback for Unix. For Windows this is accomplished by
// using FromOidValue with an OidGroup other than OidGroup.All.
Oid oid = Oid.FromOidValue(ObsoleteSmime3desWrap_Oid, OidGroup.All);
Oid oid;
try
{
oid = Oid.FromOidValue(ObsoleteSmime3desWrap_Oid, OidGroup.All);
}
catch (CryptographicException)
{
bool isMac = RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
Assert.True(isMac, "Exception is only raised on macOS");
if (isMac)
{
return;
}
else
{
throw;
}
}
Assert.Equal(ObsoleteSmime3desWrap_Oid, oid.Value);
Assert.Equal(ObsoleteSmime3desWrap_Name, oid.FriendlyName);
}
[Fact]
[PlatformSpecific(TestPlatforms.AnyUnix)]
[PlatformSpecific(TestPlatforms.AnyUnix)] // Uses P/Invokes to search Oid in the lookup table
public static void LookupOidByFriendlyName_Method_UnixOnly()
{
// This needs to be a name not in the static lookup table. The purpose is to verify the
// NativeFriendlyNameToOid fallback for Unix. For Windows this is accomplished by
// using FromOidValue with an OidGroup other than OidGroup.All.
Oid oid = Oid.FromFriendlyName(ObsoleteSmime3desWrap_Name, OidGroup.All);
Oid oid;
try
{
oid = Oid.FromFriendlyName(ObsoleteSmime3desWrap_Name, OidGroup.All);
}
catch (CryptographicException)
{
bool isMac = RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
Assert.True(isMac, "Exception is only raised on macOS");
if (isMac)
{
return;
}
else
{
throw;
}
}
Assert.Equal(ObsoleteSmime3desWrap_Oid, oid.Value);
Assert.Equal(ObsoleteSmime3desWrap_Name, oid.FriendlyName);

View File

@@ -1,64 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -120,6 +61,9 @@
<data name="Argument_InvalidOidValue" xml:space="preserve">
<value>The OID value was invalid.</value>
</data>
<data name="Cryptography_Der_Invalid_Encoding" xml:space="preserve">
<value>ASN1 corrupted data.</value>
</data>
<data name="Cryptography_Invalid_IA5String" xml:space="preserve">
<value>The string contains a character not in the 7 bit ASCII character set.</value>
</data>

View File

@@ -1,24 +0,0 @@
<?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" />
<ItemGroup>
<Project Include="System.Security.Cryptography.Encoding.Tests.csproj">
<OSGroup>Unix</OSGroup>
</Project>
<Project Include="System.Security.Cryptography.Encoding.Tests.csproj">
<OSGroup>Windows_NT</OSGroup>
<TestTFMs>netcoreapp;net463</TestTFMs>
</Project>
<Project Include="System.Security.Cryptography.Encoding.Tests.csproj">
<TargetGroup>netstandard1.3</TargetGroup>
<OSGroup>Unix</OSGroup>
<TestTFMs>netcoreapp1.0</TestTFMs>
</Project>
<Project Include="System.Security.Cryptography.Encoding.Tests.csproj">
<TargetGroup>netstandard1.3</TargetGroup>
<OSGroup>Windows_NT</OSGroup>
<TestTFMs>netcoreapp1.0</TestTFMs>
</Project>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>

View File

@@ -4,19 +4,15 @@
<PropertyGroup>
<ProjectGuid>{0581E9FA-D639-4B88-96D8-D092760F90B0}</ProjectGuid>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DefineConstants Condition="'$(TargetGroup)'==''">$(DefineConstants);netstandard17</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Unix-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Unix-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.3-Unix-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.3-Unix-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.3-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.3-Windows_NT-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="AsnEncodedData.cs" />
<Compile Include="AsnEncodedDataCollectionTests.cs" />
<Compile Include="Base64TransformsTests.cs" />
<Compile Include="DerEncoderTests.cs" />
<Compile Include="DerSequenceReaderTests.cs" />
<Compile Include="Oid.cs" />
@@ -31,8 +27,5 @@
<Link>CommonTest\System\Security\Cryptography\ByteUtils.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup Condition="'$(TargetGroup)'=='netstandard'">
<Compile Include="Base64TransformsTests.cs" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project>