diff options
author | Martin Baulig <martin.baulig@xamarin.com> | 2015-10-14 00:02:37 +0300 |
---|---|---|
committer | Martin Baulig <martin.baulig@xamarin.com> | 2015-10-14 00:04:31 +0300 |
commit | a88f797cc325142f47750a033c116ad8cdf967c0 (patch) | |
tree | eb1f8e519faed30659325488caa82d1bc047011e /mcs/class/System/System.Security.Cryptography.X509Certificates | |
parent | 47efc2461e9dc0df7b07a2d8c01aba439bb25599 (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.cs | 39 |
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]); |