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; }
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; }