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