Moved chain building and validation from Mono.Security to System
[mono.git] / mcs / class / Mono.Security / Mono.Security.Protocol.Tls / SslClientStream.cs
index d157c7d72d63fe8cd269fc4e14be29ae676cb31e..67add4f0e8aaaff67d1a61b6978b82b3a0cb2af4 100644 (file)
@@ -40,7 +40,33 @@ namespace Mono.Security.Protocol.Tls
        public delegate bool CertificateValidationCallback(
                X509Certificate certificate, 
                int[]                   certificateErrors);
-       public delegate bool CertificateValidationCallback2 (Mono.Security.X509.X509CertificateCollection collection);
+
+       public class ValidationResult {
+               bool trusted;
+               bool user_denied;
+               int error_code;
+
+               public ValidationResult (bool trusted, bool user_denied, int error_code)
+               {
+                       this.trusted = trusted;
+                       this.user_denied = user_denied;
+                       this.error_code = error_code;
+               }
+
+               public bool Trusted {
+                       get { return trusted; }
+               }
+
+               public bool UserDenied {
+                       get { return user_denied; }
+               }
+
+               public int ErrorCode {
+                       get { return error_code; }
+               }
+       }
+
+       public delegate ValidationResult CertificateValidationCallback2 (Mono.Security.X509.X509CertificateCollection collection);
 
        public delegate X509Certificate CertificateSelectionCallback(
                X509CertificateCollection       clientCertificates, 
@@ -380,12 +406,12 @@ namespace Mono.Security.Protocol.Tls
                        get { return ServerCertValidation2 != null; }
                }
 
-               internal override bool OnRemoteCertificateValidation2 (Mono.Security.X509.X509CertificateCollection collection)
+               internal override ValidationResult OnRemoteCertificateValidation2 (Mono.Security.X509.X509CertificateCollection collection)
                {
                        CertificateValidationCallback2 cb = ServerCertValidation2;
                        if (cb != null)
                                return cb (collection);
-                       return false;
+                       return null;
                }
 
                internal override bool OnRemoteCertificateValidation(X509Certificate certificate, int[] errors)
@@ -405,7 +431,7 @@ namespace Mono.Security.Protocol.Tls
                        return base.RaiseRemoteCertificateValidation(certificate, certificateErrors);
                }
 
-               internal virtual bool RaiseServerCertificateValidation2 (Mono.Security.X509.X509CertificateCollection collection)
+               internal virtual ValidationResult RaiseServerCertificateValidation2 (Mono.Security.X509.X509CertificateCollection collection)
                {
                        return base.RaiseRemoteCertificateValidation2 (collection);
                }