From 2ff02eb15a7a4c10750b4e1b81e071618bb9f9f1 Mon Sep 17 00:00:00 2001 From: Fling Date: Fri, 2 Jan 2026 23:23:13 +0100 Subject: [PATCH] Optionally add custom data as a string in get_license_challenge --- pyplayready/cdm.py | 6 ++++-- pyplayready/system/builder.py | 12 +++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pyplayready/cdm.py b/pyplayready/cdm.py index eda1b8a..adb533c 100644 --- a/pyplayready/cdm.py +++ b/pyplayready/cdm.py @@ -94,7 +94,8 @@ class Cdm: self, session_id: bytes, wrm_header: Union[WRMHeader, str], - rev_lists: Optional[List[UUID]]=None # default: RevocationList.SupportedListIds + rev_lists: Optional[List[UUID]] = None, # default: RevocationList.SupportedListIds + custom_data: Optional[str] = None ) -> str: session = self.__sessions.get(session_id) if not session: @@ -126,7 +127,8 @@ class Cdm: client_data=self._get_cipher_data(session), signing_key=self.signing_key, client_info=self.client_version, - revocation_lists=rev_lists + revocation_lists=rev_lists, + custom_data=custom_data ) soap_message = SoapMessage.create(acquire_license_message) diff --git a/pyplayready/system/builder.py b/pyplayready/system/builder.py index 47802a5..0b5d9f8 100644 --- a/pyplayready/system/builder.py +++ b/pyplayready/system/builder.py @@ -71,7 +71,8 @@ class XmlBuilder: wrmserver_data: bytes, client_data: bytes, client_info: Optional[str] = None, - revocation_lists: Optional[List[UUID]] = None + revocation_lists: Optional[List[UUID]] = None, + custom_data: Optional[str] = None ) -> ET.Element: LA = ET.SubElement(parent, "LA", { "xmlns": "http://schemas.microsoft.com/DRM/2007/03/protocols", @@ -91,6 +92,10 @@ class XmlBuilder: if revocation_lists is not None: XmlBuilder._RevocationLists(LA, revocation_lists) + if custom_data is not None: + CustomData = ET.SubElement(LA, "CustomData") + CustomData.text = html.escape(custom_data) + LicenseNonce = ET.SubElement(LA, "LicenseNonce") LicenseNonce.text = base64.b64encode(get_random_bytes(16)).decode() @@ -161,7 +166,8 @@ class XmlBuilder: client_data: bytes, signing_key: ECCKey, client_info: Optional[str] = None, - revocation_lists: Optional[List[UUID]] = None + revocation_lists: Optional[List[UUID]] = None, + custom_data: Optional[str] = None ) -> ET.Element: AcquireLicense = ET.Element("AcquireLicense", { "xmlns": "http://schemas.microsoft.com/DRM/2007/03/protocols" @@ -171,7 +177,7 @@ class XmlBuilder: "xmlns": "http://schemas.microsoft.com/DRM/2007/03/protocols/messages" }) - LA = XmlBuilder._LicenseAcquisition(Challenge, wrmheader, protocol_version, wrmserver_data, client_data, client_info, revocation_lists) + LA = XmlBuilder._LicenseAcquisition(Challenge, wrmheader, protocol_version, wrmserver_data, client_data, client_info, revocation_lists, custom_data) Signature = ET.SubElement(Challenge, "Signature", { "xmlns": "http://www.w3.org/2000/09/xmldsig#"