|
@ -45,9 +45,29 @@ def load_openssl(): |
|
|
if libcrypto_path: |
|
|
if libcrypto_path: |
|
|
break |
|
|
break |
|
|
else: |
|
|
else: |
|
|
|
|
|
# We may get here when find_library fails because, for example, |
|
|
|
|
|
# the user does not have sufficient privileges to access those |
|
|
|
|
|
# tools underlying find_library on linux. |
|
|
|
|
|
|
|
|
import glob |
|
|
import glob |
|
|
for libcrypto_path in glob.glob('/usr/lib/libcrypto.*'): |
|
|
import sys |
|
|
pass |
|
|
|
|
|
|
|
|
patterns = ['/usr/lib/libcrypto.*'] |
|
|
|
|
|
|
|
|
|
|
|
# Some linux distros may store so in alternative locations |
|
|
|
|
|
if sys.maxsize > 2 ** 32: |
|
|
|
|
|
# Python is 64-bit |
|
|
|
|
|
patterns.extend(['/usr/lib64/libcrypto.*']) |
|
|
|
|
|
else: |
|
|
|
|
|
# Python is 32-bit |
|
|
|
|
|
patterns.extend(['/usr/lib32/libcrypto.*']) |
|
|
|
|
|
|
|
|
|
|
|
for pat in patterns: |
|
|
|
|
|
files = glob.glob(pat) |
|
|
|
|
|
if files: |
|
|
|
|
|
libcrypto_path = files[0] |
|
|
|
|
|
break |
|
|
|
|
|
|
|
|
if libcrypto_path is None: |
|
|
if libcrypto_path is None: |
|
|
raise Exception('libcrypto(OpenSSL) not found') |
|
|
raise Exception('libcrypto(OpenSSL) not found') |
|
|
logging.info('loading libcrypto from %s', libcrypto_path) |
|
|
logging.info('loading libcrypto from %s', libcrypto_path) |
|
@ -83,9 +103,9 @@ def load_cipher(cipher_name): |
|
|
|
|
|
|
|
|
class CtypesCrypto(object): |
|
|
class CtypesCrypto(object): |
|
|
def __init__(self, cipher_name, key, iv, op): |
|
|
def __init__(self, cipher_name, key, iv, op): |
|
|
|
|
|
self._ctx = None |
|
|
if not loaded: |
|
|
if not loaded: |
|
|
load_openssl() |
|
|
load_openssl() |
|
|
self._ctx = None |
|
|
|
|
|
cipher = libcrypto.EVP_get_cipherbyname(cipher_name) |
|
|
cipher = libcrypto.EVP_get_cipherbyname(cipher_name) |
|
|
if not cipher: |
|
|
if not cipher: |
|
|
cipher = load_cipher(cipher_name) |
|
|
cipher = load_cipher(cipher_name) |
|
|