Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Baulig <martin.baulig@xamarin.com>2015-10-14 00:02:37 +0300
committerMartin Baulig <martin.baulig@xamarin.com>2015-10-14 00:04:31 +0300
commita88f797cc325142f47750a033c116ad8cdf967c0 (patch)
treeeb1f8e519faed30659325488caa82d1bc047011e /mcs/class/System/System.Security.Cryptography.X509Certificates
parent47efc2461e9dc0df7b07a2d8c01aba439bb25599 (diff)
[System]: Add OSX509Certificates.TrustEvaluateSsl(X509Certificate2Collection,string) overload.
When switching to Mono.Net.Security.ChainValidationHelper, we will use X509Certificate2Collection instead of MSX.X509CertificateCollection; keep both version for the moment. (cherry picked from commit 1f004d8e7a8391785d4ae8fcb0270f9be9d522c8)
Diffstat (limited to 'mcs/class/System/System.Security.Cryptography.X509Certificates')
-rw-r--r--mcs/class/System/System.Security.Cryptography.X509Certificates/OSX509Certificates.cs39
1 files changed, 35 insertions, 4 deletions
diff --git a/mcs/class/System/System.Security.Cryptography.X509Certificates/OSX509Certificates.cs b/mcs/class/System/System.Security.Cryptography.X509Certificates/OSX509Certificates.cs
index 4dc4e0a1560..e35c2f7d7a3 100644
--- a/mcs/class/System/System.Security.Cryptography.X509Certificates/OSX509Certificates.cs
+++ b/mcs/class/System/System.Security.Cryptography.X509Certificates/OSX509Certificates.cs
@@ -30,6 +30,7 @@ using MSX = MonoSecurity::Mono.Security.X509;
#endif
using System;
+using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace System.Security.Cryptography.X509Certificates {
@@ -92,20 +93,50 @@ namespace System.Security.Cryptography.X509Certificates {
IntPtr.Zero);
}
}
+
+ static IList<byte[]> CreateArray (X509Certificate2Collection certificates)
+ {
+ var list = new List<byte[]> (certificates.Count);
+ for (int i = 0; i < certificates.Count; i++)
+ list.Add (certificates [i].RawData);
+ return list;
+ }
+ static IList<byte[]> CreateArray (MSX.X509CertificateCollection certificates)
+ {
+ var list = new List<byte[]> (certificates.Count);
+ for (int i = 0; i < certificates.Count; i++)
+ list.Add (certificates [i].RawData);
+ return list;
+ }
+
public static SecTrustResult TrustEvaluateSsl (MSX.X509CertificateCollection certificates, string host)
{
if (certificates == null)
return SecTrustResult.Deny;
try {
- return _TrustEvaluateSsl (certificates, host);
+ var certArray = CreateArray (certificates);
+ return _TrustEvaluateSsl (certArray, host);
} catch {
return SecTrustResult.Deny;
}
}
-
- static SecTrustResult _TrustEvaluateSsl (MSX.X509CertificateCollection certificates, string hostName)
+
+ public static SecTrustResult TrustEvaluateSsl (X509Certificate2Collection certificates, string host)
+ {
+ if (certificates == null)
+ return SecTrustResult.Deny;
+
+ try {
+ var certArray = CreateArray (certificates);
+ return _TrustEvaluateSsl (certArray, host);
+ } catch {
+ return SecTrustResult.Deny;
+ }
+ }
+
+ static SecTrustResult _TrustEvaluateSsl (IList<byte[]> certificates, string hostName)
{
int certCount = certificates.Count;
IntPtr [] cfDataPtrs = new IntPtr [certCount];
@@ -118,7 +149,7 @@ namespace System.Security.Cryptography.X509Certificates {
try {
for (int i = 0; i < certCount; i++)
- cfDataPtrs [i] = MakeCFData (certificates [i].RawData);
+ cfDataPtrs [i] = MakeCFData (certificates [i]);
for (int i = 0; i < certCount; i++){
secCerts [i] = SecCertificateCreateWithData (IntPtr.Zero, cfDataPtrs [i]);