]> jfr.im git - yt-dlp.git/blame - yt_dlp/dependencies/Cryptodome.py
[ie/mlbtv] Fix extraction (#10296)
[yt-dlp.git] / yt_dlp / dependencies / Cryptodome.py
CommitLineData
98ac902c 1from ..compat.compat_utils import passthrough_module
768a0017 2
f6a765ce 3try:
4 import Cryptodome as _parent
5except ImportError:
6 try:
7 import Crypto as _parent
8 except (ImportError, SyntaxError): # Old Crypto gives SyntaxError in newer Python
98ac902c 9 _parent = passthrough_module(__name__, 'no_Cryptodome')
f6a765ce 10 __bool__ = lambda: False
11
98ac902c 12del passthrough_module
13
65f6e807 14__version__ = ''
15AES = PKCS1_v1_5 = Blowfish = PKCS1_OAEP = SHA1 = CMAC = RSA = None
16try:
17 if _parent.__name__ == 'Cryptodome':
18 from Cryptodome import __version__
5b28cef7 19 from Cryptodome.Cipher import AES, PKCS1_OAEP, Blowfish, PKCS1_v1_5
20 from Cryptodome.Hash import CMAC, SHA1
65f6e807 21 from Cryptodome.PublicKey import RSA
22 elif _parent.__name__ == 'Crypto':
23 from Crypto import __version__
5b28cef7 24 from Crypto.Cipher import AES, PKCS1_OAEP, Blowfish, PKCS1_v1_5 # noqa: F401
25 from Crypto.Hash import CMAC, SHA1 # noqa: F401
26 from Crypto.PublicKey import RSA # noqa: F401
65f6e807 27except ImportError:
28 __version__ = f'broken {__version__}'.strip()
f6a765ce 29
30
65f6e807 31_yt_dlp__identifier = _parent.__name__
32if AES and _yt_dlp__identifier == 'Crypto':
33 try:
34 # In pycrypto, mode defaults to ECB. See:
35 # https://www.pycryptodome.org/en/latest/src/vs_pycrypto.html#:~:text=not%20have%20ECB%20as%20default%20mode
36 AES.new(b'abcdefghijklmnop')
37 except TypeError:
38 _yt_dlp__identifier = 'pycrypto'