]> jfr.im git - yt-dlp.git/blob - yt_dlp/dependencies/Cryptodome.py
[compat_utils] Simplify `EnhancedModule`
[yt-dlp.git] / yt_dlp / dependencies / Cryptodome.py
1 import types
2
3 from ..compat import functools
4 from ..compat.compat_utils import passthrough_module
5
6 try:
7 import Cryptodome as _parent
8 except ImportError:
9 try:
10 import Crypto as _parent
11 except (ImportError, SyntaxError): # Old Crypto gives SyntaxError in newer Python
12 _parent = types.ModuleType('no_Cryptodome')
13 __bool__ = lambda: False
14
15 passthrough_module(__name__, _parent, (..., '__version__'))
16 del passthrough_module
17
18
19 @property
20 @functools.cache
21 def _yt_dlp__identifier():
22 if _parent.__name__ == 'Crypto':
23 from Crypto.Cipher import AES
24 try:
25 # In pycrypto, mode defaults to ECB. See:
26 # https://www.pycryptodome.org/en/latest/src/vs_pycrypto.html#:~:text=not%20have%20ECB%20as%20default%20mode
27 AES.new(b'abcdefghijklmnop')
28 except TypeError:
29 return 'pycrypto'
30 return _parent.__name__