SPEKE API v1 - Customizations and constraints to the DASH-IF specification
The DASH-IF CPIX specification, https://dashif.org/docs/DASH-IF-CPIX-v2-0.pdf
-
SPEKE follows the Encryptor Consumer workflow.
-
For encrypted content keys, SPEKE applies the following restrictions:
-
SPEKE doesn’t support digital signature verification (XMLDSIG) for request or response payloads.
-
SPEKE requires 2048 RSA-based certificates.
-
-
For rotating key workflows, SPEKE requires the
ContentKeyUsageRulefilter,KeyPeriodFilter. SPEKE ignores all otherContentKeyUsageRulesettings. -
SPEKE omits the
UpdateHistoryItemListfunctionality. If the list is present in the response, SPEKE ignores it. -
SPEKE supports key rotation. SPEKE uses only the `ContentKeyPeriod@index to track the key period.
-
To support MSS PlayReady, SPEKE uses a custom parameter under the
DRMSystemtag,SPEKE:ProtectionHeader. -
For HLS packaging, if the
URIExtXKeyis present in the response, then it must contain the full data to add in the URI parameter of theEXT-X-KEYtag of an HLS playlist, with no further signaling requirement. -
For HLS playlist, under the
DRMSystemtag, SPEKE provides the optional custom parametersspeke:KeyFormatandspeke:KeyFormatVersions, for the values of theKEYFORMATandKEYFORMATVERSIONSparameters of theEXT-X-KEYtag.The HLS initialization vector (IV) always follows segment number unless explicitly specified by the operator.
-
When requesting keys, the encryptor might use the optional
@explicitIVattribute on theContentKeyelement. The key provider can respond with an IV using@explicitIV, even if the attribute is not included in the request. -
The encryptor creates the key identifier (
KID), which stays the same for any given content ID and key period. The key provider includes theKIDin its response to the request document. -
The key provider might include a value for the
Speke-User-Agentresponse header, to identify itself for debugging purposes. -
SPEKE does not currently support multiple tracks or keys per content.
The SPEKE-compliant encryptor acts as a client and sends
POSToperations to the key provider endpoint. The encryptor might send a periodicheartbeatrequest to ensure that the connection between the encryptor and the key provider endpoint is healthy.