diff --git a/unshackle/core/cdm/custom_remote_cdm.py b/unshackle/core/cdm/custom_remote_cdm.py index ab48e0e0..0cd13dcd 100644 --- a/unshackle/core/cdm/custom_remote_cdm.py +++ b/unshackle/core/cdm/custom_remote_cdm.py @@ -641,7 +641,14 @@ class CustomRemoteCDM: key_type = key_obj.get(key_fields.get("type", "type"), "CONTENT") if kid and key: - keys.append({"kid": str(kid), "key": str(key), "type": str(key_type)}) + keys.append( + { + "kid": str(kid), + "key": str(key), + "type": str(key_type), + "permissions": key_obj.get("permissions", []), + } + ) elif isinstance(keys_data, str): keys = self.apply_transform(keys_data, "parse_key_string") @@ -779,8 +786,6 @@ class CustomRemoteCDM: InvalidSession: If session ID is invalid requests.RequestException: If API request fails """ - _ = license_type, privacy_mode - if session_id not in self._sessions: raise CustomRemoteCDMExceptions.InvalidSession(f"Invalid session ID: {session_id.hex()}") @@ -818,6 +823,8 @@ class CustomRemoteCDM: base_params = { "scheme": self.device_name, "init_data": init_data, + "license_type": license_type, + "privacy_mode": privacy_mode, } if self.service_name: @@ -1028,7 +1035,25 @@ class CustomRemoteCDM: raise CustomRemoteCDMExceptions.InvalidSession(f"Invalid session ID: {session_id.hex()}") key_dicts = self._sessions[session_id]["keys"] - keys = [Key(kid=k["kid"], key=k["key"], type_=k["type"]) for k in key_dicts] + keys = [] + for k in key_dicts: + kid_val = k["kid"] + if isinstance(kid_val, str): + clean_kid = kid_val.replace("-", "") + kid_obj = UUID(hex=clean_kid) if len(clean_kid) == 32 else UUID(hex=clean_kid.ljust(32, "0")) + else: + kid_obj = kid_val + + key_bytes = bytes.fromhex(k["key"].replace(":", "")) if isinstance(k["key"], str) else k["key"] + + keys.append( + Key( + type_=k.get("type", "CONTENT"), + kid=kid_obj, + key=key_bytes, + permissions=k.get("permissions", []), + ) + ) if type_: keys = [key for key in keys if key.type == type_]