from ..compat.compat_utils import passthrough_module try: import Cryptodome as _parent except ImportError: try: import Crypto as _parent except (ImportError, SyntaxError): # Old Crypto gives SyntaxError in newer Python _parent = passthrough_module(__name__, 'no_Cryptodome') __bool__ = lambda: False del passthrough_module __version__ = '' AES = PKCS1_v1_5 = Blowfish = PKCS1_OAEP = SHA1 = CMAC = RSA = None try: if _parent.__name__ == 'Cryptodome': from Cryptodome import __version__ from Cryptodome.Cipher import AES, PKCS1_OAEP, Blowfish, PKCS1_v1_5 from Cryptodome.Hash import CMAC, SHA1 from Cryptodome.PublicKey import RSA elif _parent.__name__ == 'Crypto': from Crypto import __version__ from Crypto.Cipher import AES, PKCS1_OAEP, Blowfish, PKCS1_v1_5 # noqa: F401 from Crypto.Hash import CMAC, SHA1 # noqa: F401 from Crypto.PublicKey import RSA # noqa: F401 except (ImportError, OSError): __version__ = f'broken {__version__}'.strip() _yt_dlp__identifier = _parent.__name__ if AES and _yt_dlp__identifier == 'Crypto': try: # In pycrypto, mode defaults to ECB. See: # https://www.pycryptodome.org/en/latest/src/vs_pycrypto.html#:~:text=not%20have%20ECB%20as%20default%20mode AES.new(b'abcdefghijklmnop') except TypeError: _yt_dlp__identifier = 'pycrypto'