Skip to content

Commit e594b61

Browse files
committed
wrap native wolfSSL_ERR_error_string(), fix do_handshake SSLError exception
1 parent 1d588a8 commit e594b61

3 files changed

Lines changed: 13 additions & 2 deletions

File tree

src/wolfssl/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,17 @@ def do_handshake(self, block=False): # pylint: disable=unused-argument
650650
elif err == _SSL_ERROR_WANT_WRITE:
651651
raise SSLWantWriteError()
652652
else:
653-
raise SSLError("do_handshake failed with error %d" % err)
653+
eBuf = _ffi.new("char[80]")
654+
eStr = _ffi.string(_lib.wolfSSL_ERR_error_string(err, eBuf))
655+
656+
if 'ASN no signer error to confirm' in eStr or err is -188:
657+
# Some Python ssl consumers explicitly check error message
658+
# for 'certificate verify failed'
659+
raise SSLError("do_handshake failed with error %d, "
660+
"certificate verify failed" % err)
661+
662+
raise SSLError("do_handshake failed with error %d: %s" %
663+
(err, eStr))
654664

655665
def _real_connect(self, addr, connect_ex):
656666
if self.server_side:

src/wolfssl/_build_ffi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
from distutils.util import get_platform
2626
from cffi import FFI
27-
from wolfssl.__about__ import __wolfssl_version__ as version
2827
from wolfssl._build_wolfssl import wolfssl_inc_path, wolfssl_lib_path
2928

3029
ffi = FFI()
@@ -95,6 +94,7 @@
9594
9695
int wolfSSL_set_fd(void*, int);
9796
int wolfSSL_get_error(void*, int);
97+
char* wolfSSL_ERR_error_string(int, char*);
9898
int wolfSSL_negotiate(void*);
9999
int wolfSSL_connect(void*);
100100
int wolfSSL_accept(void*);

src/wolfssl/_build_wolfssl.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import subprocess
2424
from contextlib import contextmanager
2525
from distutils.util import get_platform
26+
from wolfssl.__about__ import __wolfssl_version__ as version
2627

2728

2829
def local_path(path):

0 commit comments

Comments
 (0)