Skip to content

Commit aea5844

Browse files
committed
Add support for disable-oldtls
If wolfSSL is build with `--disable-oldtls` then we need to support this. Otherwise link errors will occur.
1 parent 56188c2 commit aea5844

5 files changed

Lines changed: 64 additions & 9 deletions

File tree

tests/conftest.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import ssl
2727
import pytest
2828
import wolfssl
29-
29+
from wolfssl._ffi import lib as _lib
3030

3131
@pytest.fixture
3232
def tcp_socket():
@@ -44,8 +44,14 @@ def ssl_provider(request):
4444
return request.param
4545

4646

47+
tls_params = ["TLSv1.2", "TLSv1.3", "SSLv23"]
48+
49+
if _lib.OLDTLS_ENABLED:
50+
tls_params.append("TLSv1.1")
51+
52+
4753
@pytest.fixture(
48-
params=["TLSv1.1", "TLSv1.2", "TLSv1.3", "SSLv23"])
54+
params=tls_params)
4955
def ssl_context(ssl_provider, request):
5056
if request.param == "TLSv1.1":
5157
return ssl_provider.SSLContext(ssl_provider.PROTOCOL_TLSv1_1)

tests/test_methods.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
PROTOCOL_TLS, PROTOCOL_TLSv1, PROTOCOL_TLSv1_1,
2828
PROTOCOL_TLSv1_2, PROTOCOL_TLSv1_3)
2929
from wolfssl._ffi import ffi as _ffi
30+
from wolfssl._ffi import lib as _lib
3031

3132

3233
@pytest.fixture(
@@ -36,10 +37,19 @@ def unsupported_method(request):
3637
yield request.param
3738

3839

40+
tls_params = [PROTOCOL_SSLv23, PROTOCOL_TLSv1_2, PROTOCOL_TLSv1_3]
41+
tls_ids = ["SSLv23", "TLSv1_2", "TLSv1_3"]
42+
43+
if _lib.OLDTLS_ENABLED:
44+
tls_params.append(PROTOCOL_TLS)
45+
tls_params.append(PROTOCOL_TLSv1_1)
46+
tls_ids.append("TLS")
47+
tls_ids.append("TLSv1_1")
48+
49+
3950
@pytest.fixture(
40-
params=[PROTOCOL_SSLv23, PROTOCOL_TLS, PROTOCOL_TLSv1_1, PROTOCOL_TLSv1_2,
41-
PROTOCOL_TLSv1_3],
42-
ids=["SSLv23", "TLS", "TLSv1_1", "TLSv1_2", "TLSv1_3"])
51+
params=tls_params,
52+
ids=tls_ids)
4353
def supported_method(request):
4454
yield request.param
4555

wolfssl/_build_ffi.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ def make_flags(prefix, debug):
155155

156156
# tls 1.3
157157
flags.append("--enable-tls13")
158-
flags.append("--enable-sslv3")
159158

160159
# for urllib3 - requires SNI (tlsx), options (openssl compat), peer cert
161160
flags.append("--enable-tlsx")
@@ -212,6 +211,7 @@ def build_wolfssl(ref, debug=False):
212211

213212

214213
def make_optional_func_list(libwolfssl_path, funcs):
214+
sys.stderr.write("\nlibwolfssl Path: %s\n" % libwolfssl_path)
215215
if libwolfssl_path.endswith(".so"):
216216
libwolfssl = cdll.LoadLibrary(libwolfssl_path)
217217
defined = []
@@ -282,6 +282,13 @@ def generate_libwolfssl():
282282
generate_libwolfssl()
283283
get_libwolfssl()
284284

285+
# default values
286+
OLDTLS_ENABLED = 1
287+
288+
if featureDetection:
289+
OLDTLS_ENABLED = 0 if '#define NO_OLD_TLS' in optionsHeaderStr else 1
290+
291+
sys.stderr.write("\nOLDTLS: %d\n" % OLDTLS_ENABLED)
285292

286293
WolfFunction = namedtuple("WolfFunction", ["name", "native_sig", "ossl_sig"])
287294
# Depending on how wolfSSL was configured, the functions below may or may not be
@@ -302,6 +309,8 @@ def generate_libwolfssl():
302309
source = """
303310
#include <wolfssl/options.h>
304311
#include <wolfssl/ssl.h>
312+
313+
int OLDTLS_ENABLED = """ + str(OLDTLS_ENABLED) + """;
305314
"""
306315
ffi_source = source + openssl.source
307316

@@ -326,7 +335,9 @@ def generate_libwolfssl():
326335
*/
327336
typedef unsigned char byte;
328337
typedef unsigned int word32;
329-
338+
339+
extern int OLDTLS_ENABLED;
340+
330341
typedef ... WOLFSSL_CTX;
331342
typedef ... WOLFSSL;
332343
typedef ... WOLFSSL_X509;
@@ -360,9 +371,16 @@ def generate_libwolfssl():
360371
/**
361372
* SSL/TLS Method functions
362373
*/
374+
"""
375+
376+
if OLDTLS_ENABLED:
377+
sys.stderr.write("\nAdding OLDTLS\n")
378+
cdef += """
363379
WOLFSSL_METHOD* wolfTLSv1_1_server_method(void);
364380
WOLFSSL_METHOD* wolfTLSv1_1_client_method(void);
381+
"""
365382

383+
cdef += """
366384
WOLFSSL_METHOD* wolfTLSv1_2_server_method(void);
367385
WOLFSSL_METHOD* wolfTLSv1_2_client_method(void);
368386
@@ -373,7 +391,12 @@ def generate_libwolfssl():
373391
WOLFSSL_METHOD* wolfSSLv23_client_method(void);
374392
375393
WOLFSSL_METHOD* wolfSSLv23_method(void);
394+
"""
395+
if OLDTLS_ENABLED:
396+
cdef += """
376397
WOLFSSL_METHOD* wolfTLSv1_1_method(void);
398+
"""
399+
cdef += """
377400
WOLFSSL_METHOD* wolfTLSv1_2_method(void);
378401
379402
/**
@@ -501,7 +524,7 @@ def generate_libwolfssl():
501524
for func in optional_funcs:
502525
cdef += "{};".format(func.native_sig)
503526

504-
ffi_cdef = cdef + openssl.construct_cdef(optional_funcs)
527+
ffi_cdef = cdef + openssl.construct_cdef(optional_funcs, OLDTLS_ENABLED)
505528
ffi.cdef(ffi_cdef)
506529

507530
if __name__ == "__main__":

wolfssl/_methods.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ def __init__(self, protocol, server_side):
6565
raise ValueError("this protocol is not supported")
6666

6767
elif protocol == PROTOCOL_TLSv1_1:
68+
if not _lib.OLDTLS_ENABLED:
69+
raise ValueError("wolfSSL not built with old TLS support")
6870
self.native_object = \
6971
_lib.wolfTLSv1_1_server_method() if server_side else \
7072
_lib.wolfTLSv1_1_client_method()

wolfssl/_openssl.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#include <wolfssl/openssl/crypto.h>
3232
"""
3333

34-
def construct_cdef(optional_funcs):
34+
def construct_cdef(optional_funcs, OLDTLS_ENABLED):
3535
cdef = """
3636
/**
3737
* Constants
@@ -172,16 +172,30 @@ def construct_cdef(optional_funcs):
172172
/**
173173
* SSL/TLS Method functions
174174
*/
175+
"""
176+
177+
if OLDTLS_ENABLED:
178+
cdef += """
175179
SSL_METHOD* TLSv1_1_server_method(void);
176180
SSL_METHOD* TLSv1_1_client_method(void);
181+
"""
182+
183+
cdef += """
177184
SSL_METHOD* TLSv1_2_server_method(void);
178185
SSL_METHOD* TLSv1_2_client_method(void);
179186
SSL_METHOD* TLSv1_3_server_method(void);
180187
SSL_METHOD* TLSv1_3_client_method(void);
181188
SSL_METHOD* SSLv23_server_method(void);
182189
SSL_METHOD* SSLv23_client_method(void);
183190
SSL_METHOD* SSLv23_method(void);
191+
"""
192+
193+
if OLDTLS_ENABLED:
194+
cdef += """
184195
SSL_METHOD* TLSv1_1_method(void);
196+
"""
197+
198+
cdef += """
185199
SSL_METHOD* TLSv1_2_method(void);
186200
SSL_METHOD* TLSv1_3_method(void);
187201

0 commit comments

Comments
 (0)