private int OnClientCertificate(Ssl ssl, out X509Certificate x509_cert, out CryptoKey key)
        {
            x509_cert = null;
            key       = null;

            var name_stack = ssl.CAList;
            var strIssuers = new string[name_stack.Count];
            var count      = 0;

            foreach (var name in name_stack)
            {
                strIssuers[count++] = name.OneLine;
            }

            if (OnLocalCertificate != null)
            {
                var cert = OnLocalCertificate(
                    this,
                    targetHost,
                    clientCertificates,
                    ssl.GetPeerCertificate(),
                    strIssuers
                    );
                if (cert != null && cert.HasPrivateKey)
                {
                    x509_cert = cert;
                    key       = cert.PrivateKey;
                    // Addref the cert and private key
                    x509_cert.AddRef();
                    key.AddRef();
                    // return success
                    return(1);
                }
            }

            return(0);
        }
示例#2
0
		public int InternalClientCertificateSelectionCallback(Ssl ssl, out X509Certificate x509_cert, out CryptoKey key)
		{
			int nRet = 0;
			x509_cert = null;
			key = null;

			Core.Stack<X509Name> name_stack = ssl.CAList;
			string[] strIssuers = new string[name_stack.Count];
			int count = 0;

			foreach (X509Name name in name_stack)
			{
				strIssuers[count++] = name.OneLine;
			}

			if (localCertificateSelectionCallback != null)
			{
				X509Certificate cert = localCertificateSelectionCallback(this, targetHost, clientCertificates, ssl.GetPeerCertificate(), strIssuers);
				if (cert != null && cert.HasPrivateKey)
				{
					x509_cert = cert;
					key = cert.PrivateKey;
					// Addref the cert and private key
					x509_cert.AddRef();
					key.AddRef();
					// return success
					nRet = 1;
				}
			}

			return nRet;
		}
示例#3
0
        public int InternalClientCertificateSelectionCallback(Ssl ssl, out X509Certificate x509_cert, out CryptoKey key)
        {
            int nRet = 0;

            x509_cert = null;
            key       = null;

            Core.Stack <X509Name> name_stack = ssl.CAList;
            string[] strIssuers = new string[name_stack.Count];
            int      count      = 0;

            foreach (X509Name name in name_stack)
            {
                strIssuers[count++] = name.OneLine;
            }

            if (localCertificateSelectionCallback != null)
            {
                X509Certificate cert = localCertificateSelectionCallback(this, targetHost, clientCertificates, ssl.GetPeerCertificate(), strIssuers);
                if (cert != null && cert.HasPrivateKey)
                {
                    x509_cert = cert;
                    key       = cert.PrivateKey;
                    // Addref the cert and private key
                    x509_cert.AddRef();
                    key.AddRef();
                    // return success
                    nRet = 1;
                }
            }

            return(nRet);
        }
示例#4
0
		private int OnClientCertificate(Ssl ssl, out X509Certificate x509_cert, out CryptoKey key)
		{
			x509_cert = null;
			key = null;

			var name_stack = ssl.CAList;
			var strIssuers = new string[name_stack.Count];
			var count = 0;

			foreach (var name in name_stack)
			{
				strIssuers[count++] = name.OneLine;
			}

			if (OnLocalCertificate != null)
			{
				var cert = OnLocalCertificate(
					           this, 
					           targetHost, 
					           clientCertificates, 
					           ssl.GetPeerCertificate(), 
					           strIssuers
				           );
				if (cert != null && cert.HasPrivateKey)
				{
					x509_cert = cert;
					key = cert.PrivateKey;
					// Addref the cert and private key
					x509_cert.AddRef();
					key.AddRef();
					// return success
					return 1;
				}
			}

			return 0;
		}