]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/dependencies/Cryptodome.py
[dependencies] Simplify `Cryptodome`
[yt-dlp.git] / yt_dlp / dependencies / Cryptodome.py
index 2adc513740af195891a90b5fbcf10ba8ad7af284..a50bce4d4f4e948adcb4808ba764ea02cbf0d681 100644 (file)
@@ -1,8 +1,5 @@
 import types
 
-from ..compat import functools
-from ..compat.compat_utils import passthrough_module
-
 try:
     import Cryptodome as _parent
 except ImportError:
         _parent = types.ModuleType('no_Cryptodome')
         __bool__ = lambda: False
 
-passthrough_module(__name__, _parent, (..., '__version__'))
-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
+        from Cryptodome.Cipher import PKCS1_v1_5
+        from Cryptodome.Cipher import Blowfish
+        from Cryptodome.Cipher import PKCS1_OAEP
+        from Cryptodome.Hash import SHA1
+        from Cryptodome.Hash import CMAC
+        from Cryptodome.PublicKey import RSA
+    elif _parent.__name__ == 'Crypto':
+        from Crypto import __version__
+        from Crypto.Cipher import AES
+        from Crypto.Cipher import PKCS1_v1_5
+        from Crypto.Cipher import Blowfish
+        from Crypto.Cipher import PKCS1_OAEP
+        from Crypto.Hash import SHA1
+        from Crypto.Hash import CMAC
+        from Crypto.PublicKey import RSA
+except ImportError:
+    __version__ = f'broken {__version__}'.strip()
 
 
-@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__
+_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'