import importlib from ..compat import functools from ..compat.compat_utils import EnhancedModule, passthrough_module EnhancedModule(__name__) try: import Cryptodome as _parent except ImportError: try: import Crypto as _parent except (ImportError, SyntaxError): # Old Crypto gives SyntaxError in newer Python _parent = EnhancedModule('Cryptodome') __bool__ = lambda: False @functools.cache def __getattr__(name): try: submodule = importlib.import_module(f'.{name}', _parent.__name__) except ImportError: return getattr(_parent, name) return passthrough_module(f'{__name__}.{name}', submodule) @property @functools.cache def _yt_dlp__identifier(): if _parent.__name__ == 'Crypto': from Crypto.Cipher import AES 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: return 'pycrypto' return _parent.__name__