Import _sha in python hashlib

Ok, today I tested the hashlib module in python, but then I found something that I still can not understand.

Inside this python module there is an import that I cannot execute. I just:

def __get_builtin_constructor(name):
    if name in ('SHA1', 'sha1'):
        import _sha
        return _sha.new

I tried to import the _sha module from the python shell, but it seems that it cannot be reached this way. At first we assume that this is a C-module, but I'm not sure.

So tell me guys, do you know where this module is? How to import them?

+3
source share
2 answers

Actually, the _sha module is provided by shamodule.c and _md5 is provided by md5module.c and md5.c, and both will be built only when your Python is not compiled with OpenSSL by default.

Details can be found in setup.pythe Python source archive.

    if COMPILED_WITH_PYDEBUG or not have_usable_openssl:
        # The _sha module implements the SHA1 hash algorithm.
        exts.append( Extension('_sha', ['shamodule.c']) )
        # The _md5 module implements the RSA Data Security, Inc. MD5
        # Message-Digest Algorithm, described in RFC 1321.  The
        # necessary files md5.c and md5.h are included here.
        exts.append( Extension('_md5',
                        sources = ['md5module.c', 'md5.c'],
                        depends = ['md5.h']) )

Python Openssl, OpenSSL.

, , Python OpenSSL , pydebug .

Python Source:

./configure --with-pydebug
make

:

>>> import _sha
[38571 refs]
>>> _sha.__file__
'/home/senthil/python/release27-maint/build/lib.linux-i686-2.7-pydebug/_sha.so'
[38573 refs]
+8

, python, sha _haslib _sha ( C). hashlib.py python 2.6:

import _haslib:
    .....
except ImportError:
    # We don't have the _hashlib OpenSSL module?
    # use the built in legacy interfaces via a wrapper function
    new = __py_new

    # lookup the C function to use directly for the named constructors
    md5 = __get_builtin_constructor('md5')
    sha1 = __get_builtin_constructor('sha1')
    sha224 = __get_builtin_constructor('sha224')
    sha256 = __get_builtin_constructor('sha256')
    sha384 = __get_builtin_constructor('sha384')
    sha512 = __get_builtin_constructor('sha512')
+5

Source: https://habr.com/ru/post/1783330/


All Articles