SPEKE API v2 - Customizations and constraints to the DASH-IF specification
The DASH Industry Forum CPIX 2.3 specification
CPIX Profile
-
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.
-
-
SPEKE leverages only a subset of CPIX functionalities:
-
SPEKE omits the
UpdateHistoryItemListfunctionality. If the list is present in the response, SPEKE ignores it. -
SPEKE omits the root/leaf key functionality. If the
ContentKey@dependsOnKeyattribute is present in the response, SPEKE ignores it. -
SPEKE omits the
BitrateFilterelement and theVideoFilter@wcgattribute. If these elements or attributes are present in the CPIX payload, SPEKE ignores it.
-
-
Only the elements or attributes referenced as 'Supported' on the Standard Payload Components page or the Encryption contract page can be used in CPIX documents exchanged with SPEKE v2.
-
When included in a CPIX request by the encryptor, all elements and attributes shall carry a valid value in the key provider CPIX response. If not, the encryptor shall stop and throw an error.
-
SPEKE supports key rotation with
KeyPeriodFilterelements. SPEKE uses only theContentKeyPeriod@indexto track the key period. -
For HLS signaling, multiple
DRMSystem.HLSSignalingDataelements must be used: one with aDRMSystem.HLSSignalingData@playlistattribute value of ‘media’, and another one with aDRMSystem.HLSSignalingData@playlistattribute value of ‘master’. -
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 encryptor shall include a value for the
CPIX@contentIdattribute. When receiving an empty value for this attribute, the key provider shall return an error with description 'Missing CPIX@contentId'.CPIX@contentIdvalue cannot be overriden by the key provider.CPIX@idvalue, if not null, shall be ignored by the key provider. -
The encryptor shall include a value for the
CPIX@versionattribute. When receiving an empty value for this attribute, the key provider shall return an error with description 'Missing CPIX@version'. When receiving a request with an unsupported version, the error description returned by the key provider shall be 'Unsupported CPIX@version'.CPIX@versionvalue cannot be overriden by the key provider. -
The encryptor shall include a value for the
ContentKey@commonEncryptionSchemeattribute for each requested key. When receiving an empty value for this attribute, the key provider shall return an error with description 'Missing ContentKey@commonEncryptionScheme for KIDid'.A unique CPIX document cannot mix multiple values for different
ContentKey@commonEncryptionSchemeattributes. When receiving such a combination, the key provider shall return an error with description 'Non compliant ContentKey@commonEncryptionScheme combination'.Not all
ContentKey@commonEncryptionSchemevalues are compatible with all DRM technologies. When receiving such a combination, the key provider shall return an error with description 'ContentKey@commonEncryptionScheme non compatible with DRMSystemid'.ContentKey@commonEncryptionSchemevalue cannot be overriden by the key provider. -
When receiving different values for
DRMSystem@PSSHandDRMSystem.ContentProtectionDatainnerXML<pssh>element in the CPIX response body, the encryptor shall stop and throw an error.
API for CPIX
-
The key provider shall include a value for the
X-Speke-User-AgentHTTP response header. -
A SPEKE-compliant encryptor acts as a client and sends POST operations to the key provider endpoint.
-
The encryptor shall include a value for the
X-Speke-VersionHTTP request header, with the SPEKE version used with the request, formulated as MajorVersion.MinorVersion, like '2.0' for SPEKE v2.0. If the key provider doesn’t support the SPEKE version used by the encryptor for the current request, the key provider shall return an error with description 'Unsupported SPEKE version' and not try to process the CPIX document on a best effort basis.The
X-Speke-Versionheader value defined by the encryptor cannot be modified by the key provider in the response to the request. -
When receiving errors in the response body, the encryptor shall throw an error and not retry the request with a SPEKE v1.0 versioning.
If the key provider doesn’t return an error but fails to return a CPIX document that includes the mandatory information, the encryptor should stop and throw an error.
The following table summarizes the standard messages that must be returned by the key provider in the body of the message. The HTTP response code in error cases shall be a 4XX or a 5XX, never a 200. The 422 error code can be used for all errors related to SPEKE/CPIX.
| Error case | Error message |
|---|---|
|
CPIX@contentId is not defined |
Missing CPIX@contentId |
|
CPIX@version is not defined |
Missing CPIX@version |
|
CPIX@version is not supported |
Unsupported CPIX@version |
|
ContentKey@commonEncryptionScheme is not defined |
Missing ContentKey@commonEncryptionScheme for KID |
|
Multiple ContentKey@commonEncryptionScheme values used in a single CPIX document |
Non compliant ContentKey@commonEncryptionScheme combination |
|
ContentKey@commonEncryptionScheme is not compatible with DRM technology |
ContentKey@commonEncryptionScheme non compatible with DRMSystem |
|
X-Speke-Version header value is not a supported SPEKE version |
Unsupported SPEKE version |
|
The encryption contract is malformed |
Malformed encryption contract |
|
The encryption contract contradicts DRM security levels constraints |
Requested CPIX encryption contract not supported |
|
The encryption contract doesn’t include any VideoFilter or AudioFilter element |
Missing CPIX encryption contract |