diff --git a/test/test_cookies.py b/test/test_cookies.py index 6c25464d1b..ddfc6a5a5a 100644 --- a/test/test_cookies.py +++ b/test/test_cookies.py @@ -95,14 +95,14 @@ def test_chrome_cookie_decryptor_linux_v10(self): with MonkeyPatch(cookies, {'_get_linux_keyring_password': lambda *args, **kwargs: b''}): encrypted_value = b'v10\xccW%\xcd\xe6\xe6\x9fM" \xa7\xb0\xca\xe4\x07\xd6' value = 'USD' - decryptor = LinuxChromeCookieDecryptor('Chrome', Logger(), 23) + decryptor = LinuxChromeCookieDecryptor('Chrome', Logger()) self.assertEqual(decryptor.decrypt(encrypted_value), value) def test_chrome_cookie_decryptor_linux_v11(self): with MonkeyPatch(cookies, {'_get_linux_keyring_password': lambda *args, **kwargs: b''}): encrypted_value = b'v11#\x81\x10>`w\x8f)\xc0\xb2\xc1\r\xf4\x1al\xdd\x93\xfd\xf8\xf8N\xf2\xa9\x83\xf1\xe9o\x0elVQd' value = 'tz=Europe.London' - decryptor = LinuxChromeCookieDecryptor('Chrome', Logger(), 23) + decryptor = LinuxChromeCookieDecryptor('Chrome', Logger()) self.assertEqual(decryptor.decrypt(encrypted_value), value) def test_chrome_cookie_decryptor_windows_v10(self): @@ -111,7 +111,7 @@ def test_chrome_cookie_decryptor_windows_v10(self): }): encrypted_value = b'v10T\xb8\xf3\xb8\x01\xa7TtcV\xfc\x88\xb8\xb8\xef\x05\xb5\xfd\x18\xc90\x009\xab\xb1\x893\x85)\x87\xe1\xa9-\xa3\xad=' value = '32101439' - decryptor = WindowsChromeCookieDecryptor('', Logger(), 23) + decryptor = WindowsChromeCookieDecryptor('', Logger()) self.assertEqual(decryptor.decrypt(encrypted_value), value) def test_chrome_cookie_decryptor_windows_v10_meta24(self): @@ -120,14 +120,14 @@ def test_chrome_cookie_decryptor_windows_v10_meta24(self): }): encrypted_value = b'v10dN\xe1\xacy\x84^\xe1I\xact\x03r\xfb\xe2\xce{^\x0e<(\xb0y\xeb\x01\xfb@"\x9e\x8c\xa53~\xdb*\x8f\xac\x8b\xe3\xfd3\x06\xe5\x93\x19OyOG\xb2\xfb\x1d$\xc0\xda\x13j\x9e\xfe\xc5\xa3\xa8\xfe\xd9' value = '1234' - decryptor = WindowsChromeCookieDecryptor('', Logger(), 24) + decryptor = WindowsChromeCookieDecryptor('', Logger(), meta_version=24) self.assertEqual(decryptor.decrypt(encrypted_value), value) def test_chrome_cookie_decryptor_mac_v10(self): with MonkeyPatch(cookies, {'_get_mac_keyring_password': lambda *args, **kwargs: b'6eIDUdtKAacvlHwBVwvg/Q=='}): encrypted_value = b'v10\xb3\xbe\xad\xa1[\x9fC\xa1\x98\xe0\x9a\x01\xd9\xcf\xbfc' value = '2021-06-01-22' - decryptor = MacChromeCookieDecryptor('', Logger(), 23) + decryptor = MacChromeCookieDecryptor('', Logger()) self.assertEqual(decryptor.decrypt(encrypted_value), value) def test_safari_cookie_parsing(self): diff --git a/yt_dlp/cookies.py b/yt_dlp/cookies.py index 1861b6b2da..247fd98b26 100644 --- a/yt_dlp/cookies.py +++ b/yt_dlp/cookies.py @@ -308,7 +308,9 @@ def _extract_chrome_cookies(browser_name, profile, keyring, logger): cursor = _open_database_copy(cookie_database_path, tmpdir) meta_version = int(cursor.execute('SELECT value FROM meta WHERE key = "version"').fetchone()[0]) - decryptor = get_cookie_decryptor(config['browser_dir'], config['keyring_name'], logger, meta_version, keyring=keyring) + decryptor = get_cookie_decryptor( + config['browser_dir'], config['keyring_name'], logger, + keyring=keyring, meta_version=meta_version) cursor.connection.text_factory = bytes column_names = _get_column_names(cursor, 'cookies') @@ -407,16 +409,16 @@ def decrypt(self, encrypted_value): raise NotImplementedError('Must be implemented by sub classes') -def get_cookie_decryptor(browser_root, browser_keyring_name, logger, meta_version, *, keyring=None): +def get_cookie_decryptor(browser_root, browser_keyring_name, logger, *, keyring=None, meta_version=None): if sys.platform == 'darwin': - return MacChromeCookieDecryptor(browser_keyring_name, logger, meta_version) + return MacChromeCookieDecryptor(browser_keyring_name, logger, meta_version=meta_version) elif sys.platform in ('win32', 'cygwin'): - return WindowsChromeCookieDecryptor(browser_root, logger, meta_version) - return LinuxChromeCookieDecryptor(browser_keyring_name, logger, meta_version, keyring=keyring) + return WindowsChromeCookieDecryptor(browser_root, logger, meta_version=meta_version) + return LinuxChromeCookieDecryptor(browser_keyring_name, logger, keyring=keyring, meta_version=meta_version) class LinuxChromeCookieDecryptor(ChromeCookieDecryptor): - def __init__(self, browser_keyring_name, logger, meta_version, *, keyring=None): + def __init__(self, browser_keyring_name, logger, *, keyring=None, meta_version=0): self._logger = logger self._v10_key = self.derive_key(b'peanuts') self._empty_key = self.derive_key(b'') @@ -461,7 +463,7 @@ def decrypt(self, encrypted_value): return None return _decrypt_aes_cbc_multi( ciphertext, (self._v11_key, self._empty_key), self._logger, - prepended_sig=self._meta_version >= 24) + hash_prefix=self._meta_version >= 24) else: self._logger.warning(f'unknown cookie version: "{version}"', only_once=True) @@ -470,7 +472,7 @@ def decrypt(self, encrypted_value): class MacChromeCookieDecryptor(ChromeCookieDecryptor): - def __init__(self, browser_keyring_name, logger, meta_version): + def __init__(self, browser_keyring_name, logger, meta_version=0): self._logger = logger password = _get_mac_keyring_password(browser_keyring_name, logger) self._v10_key = None if password is None else self.derive_key(password) @@ -494,7 +496,7 @@ def decrypt(self, encrypted_value): return None return _decrypt_aes_cbc_multi( - ciphertext, (self._v10_key,), self._logger, prepended_sig=self._meta_version >= 24) + ciphertext, (self._v10_key,), self._logger, hash_prefix=self._meta_version >= 24) else: self._cookie_counts['other'] += 1 @@ -504,11 +506,11 @@ def decrypt(self, encrypted_value): class WindowsChromeCookieDecryptor(ChromeCookieDecryptor): - def __init__(self, browser_root, logger, meta_verion): + def __init__(self, browser_root, logger, meta_version=0): self._logger = logger self._v10_key = _get_windows_v10_key(browser_root, logger) self._cookie_counts = {'v10': 0, 'other': 0} - self._meta_version = meta_verion + self._meta_version = meta_version def decrypt(self, encrypted_value): version = encrypted_value[:3] @@ -534,7 +536,7 @@ def decrypt(self, encrypted_value): return _decrypt_aes_gcm( ciphertext, self._v10_key, nonce, authentication_tag, self._logger, - prepended_sig=self._meta_version >= 24) + hash_prefix=self._meta_version >= 24) else: self._cookie_counts['other'] += 1 @@ -1020,11 +1022,11 @@ def pbkdf2_sha1(password, salt, iterations, key_length): return hashlib.pbkdf2_hmac('sha1', password, salt, iterations, key_length) -def _decrypt_aes_cbc_multi(ciphertext, keys, logger, initialization_vector=b' ' * 16, prepended_sig=False): +def _decrypt_aes_cbc_multi(ciphertext, keys, logger, initialization_vector=b' ' * 16, hash_prefix=False): for key in keys: plaintext = unpad_pkcs7(aes_cbc_decrypt_bytes(ciphertext, key, initialization_vector)) try: - if prepended_sig: + if hash_prefix: return plaintext[32:].decode() return plaintext.decode() except UnicodeDecodeError: @@ -1033,7 +1035,7 @@ def _decrypt_aes_cbc_multi(ciphertext, keys, logger, initialization_vector=b' ' return None -def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, logger, prepended_sig=False): +def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, logger, hash_prefix=False): try: plaintext = aes_gcm_decrypt_and_verify_bytes(ciphertext, key, authentication_tag, nonce) except ValueError: @@ -1041,7 +1043,7 @@ def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, logger, prepend return None try: - if prepended_sig: + if hash_prefix: return plaintext[32:].decode() return plaintext.decode() except UnicodeDecodeError: