[Mono.Security]: Add new internal 'MonoTlsProvider' APIs.
authorMartin Baulig <martin.baulig@xamarin.com>
Thu, 7 Apr 2016 19:07:22 +0000 (21:07 +0200)
committerMartin Baulig <martin.baulig@xamarin.com>
Thu, 7 Apr 2016 19:14:46 +0000 (21:14 +0200)
(cherry picked from commit c02a885bd62631c4ff5cde5443f1b1e0cdccc237)

mcs/class/Mono.Security/Mono.Security.Interface/MonoTlsProvider.cs
mcs/class/System/System.Security.Cryptography.X509Certificates/X509Helper2.cs

index 59b148c48c633a14c1dae94a1608242405aafd39..089d8447a78993d3a4015cf4ad40b6a47cb6f6ed 100644 (file)
@@ -124,6 +124,26 @@ namespace Mono.Security.Interface
 
 #endregion
 
+#region Native Certificate Implementation
+
+               internal virtual bool HasNativeCertificates {
+                       get { return false; }
+               }
+
+               internal virtual X509Certificate2Impl GetNativeCertificate (
+                       byte[] data, string password, X509KeyStorageFlags flags)
+               {
+                       throw new InvalidOperationException ();
+               }
+
+               internal virtual X509Certificate2Impl GetNativeCertificate (
+                       X509Certificate certificate)
+               {
+                       throw new InvalidOperationException ();
+               }
+
+#endregion
+
 #region Certificate Validation
 
                /*
index 544f67c1f4d5d52520afa18f336d3dbba126243c..25d9fdf0d4a955eb917cc7a5c73c25555163c0e6 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
+
 #if SECURITY_DEP
+#if MONO_SECURITY_ALIAS
+extern alias MonoSecurity;
+#endif
+#if MONO_X509_ALIAS
+extern alias PrebuiltSystem;
+#endif
+
+#if MONO_SECURITY_ALIAS
+using MonoSecurity::Mono.Security.Interface;
+#else
+using Mono.Security.Interface;
+#endif
+
 namespace System.Security.Cryptography.X509Certificates
 {
        internal static class X509Helper2
@@ -37,13 +51,24 @@ namespace System.Security.Cryptography.X509Certificates
 
                internal static X509Certificate2Impl Import (byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags)
                {
-                       var impl = new X509Certificate2ImplMono ();
-                       impl.Import (rawData, password, keyStorageFlags);
-                       return impl;
+                       var provider = MonoTlsProviderFactory.GetProvider ();
+                       if (provider.HasNativeCertificates) {
+                               var impl = provider.GetNativeCertificate (rawData, password, keyStorageFlags);
+                               return (X509Certificate2Impl)(object)impl;
+                       } else {
+                               var impl = new X509Certificate2ImplMono ();
+                               impl.Import (rawData, password, keyStorageFlags);
+                               return impl;
+                       }
                }
 
                internal static X509Certificate2Impl Import (X509Certificate cert)
                {
+                       var provider = MonoTlsProviderFactory.GetProvider ();
+                       if (provider.HasNativeCertificates) {
+                               var impl = provider.GetNativeCertificate (cert);
+                               return (X509Certificate2Impl)(object)impl;
+                       }
                        var impl2 = cert.Impl as X509Certificate2Impl;
                        if (impl2 != null)
                                return (X509Certificate2Impl)impl2.Clone ();