From 7916b8e7f4924254657bb23cc4290f2c6b1fc33f Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 8 Jun 2022 21:25:46 +0200 Subject: [PATCH] Automatic switch to internal backend on missing PyCA module --- RNS/Cryptography/Provider.py | 37 ++++++++++++++++++++++++++++++++++-- RNS/Cryptography/__init__.py | 1 + 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/RNS/Cryptography/Provider.py b/RNS/Cryptography/Provider.py index 4c4e9dc..80a3f9e 100644 --- a/RNS/Cryptography/Provider.py +++ b/RNS/Cryptography/Provider.py @@ -1,5 +1,38 @@ +import importlib + +PROVIDER_NONE = 0x00 PROVIDER_INTERNAL = 0x01 PROVIDER_PYCA = 0x02 -PROVIDER = PROVIDER_PYCA -# PROVIDER = PROVIDER_INTERNAL \ No newline at end of file +PROVIDER = PROVIDER_NONE + +pyca_v = None +use_pyca = False + +try: + if importlib.util.find_spec('cryptography') != None: + import cryptography + pyca_v = cryptography.__version__ + v = pyca_v.split(".") + + if int(v[0]) == 2: + if int(v[1]) >= 8: + use_pyca = True + elif int(v[0]) >= 3: + use_pyca = True + +except Exception as e: + pass + +if use_pyca: + PROVIDER = PROVIDER_PYCA +else: + PROVIDER = PROVIDER_INTERNAL + +def backend(): + if PROVIDER == PROVIDER_NONE: + return "none" + elif PROVIDER == PROVIDER_INTERNAL: + return "internal" + elif PROVIDER == PROVIDER_PYCA: + return "openssl, PyCA "+str(pyca_v) \ No newline at end of file diff --git a/RNS/Cryptography/__init__.py b/RNS/Cryptography/__init__.py index df48444..78c04df 100644 --- a/RNS/Cryptography/__init__.py +++ b/RNS/Cryptography/__init__.py @@ -6,6 +6,7 @@ from .Hashes import sha512 from .HKDF import hkdf from .PKCS7 import PKCS7 from .Fernet import Fernet +from .Provider import backend import RNS.Cryptography.Provider as cp