SPEKE, Secure Packager and Encoder Key Exchange, is an AWS protocol that Axinom Key Service also supports. Find both SPEKE 1.0 and 2.0 request and response samples here.

SPEKE

Axinom Key Service supports an AWS protocol for key acquisition called SPEKE (Secure Packager and Encoder Key Exchange).

The integration endpoint is /Speke of the Key Acquisition API (or /SpekeV2 for the SPEKE 2.0).

See also:

Functionality

The Client requests one or more content keys. The Key Service generates the necessary keys using the Key Seed model and returns the keys with additional DRM-specific metadata where needed.

ClientKey_ServiceKey_Acquisition_APIAWS MediaPackager/ MediaConvertCPIX (Template)CPIX (with Keys)
Figure 1. SPEKE - Request/Response

KeyID Override

AWS when it requests encryption keys from a Key Service, generates the related KeyID automatically. It is important for the downstream DRM processes to know the KeyID, but AWS does not report the assigned KeyID. Axinom offers two workarounds for this issue.

It is possible to override the KeyID assigned by AWS by supplying a flag: /Speke?overrideKeyIds=true. The new KeyID is generated using a deterministic algorithm described in SPEKE Override Functionality.

Note
KeyID overriding functionality is currently available with the SPEKE 1.0 endpoint. For SPEKE 2.0 Axinom is working on the implemenation, it will be published soon.

An alternative solution can be a proxy which sits between AWS and the Key Service and can report the KeyID. Read Extracting keyId from SPEKE requests for guidelines. This approach works with both SPEKE 1.0 and SPEKE 2.0.

Authorization

This endpoint requires an authorization header - the same as described under the Key Service Management API.

Request/Response Format

The original SPEKE version is 1.0. Since March 2021, AWS also supports the version 2.0.

SPEKE 2.0 brings the following evolutions compared to SPEKE v1.0:

  • Support for multiple content keys

  • All tags from the SPEKE XML namespace are deprecated in favor of equivalent tags in the CPIX XML namespace

  • SPEKE:ProtectionHeader is deprecated and replaced by CPIX:DRMSystem.SmoothStreamingProtectionHeaderData

  • CPIX:URIExtXKey, SPEKE:KeyFormat and SPEKE:KeyFormatVersions are deprecated and replaced by CPIX:DRMSystem.HLSSignalingData

  • CPIX@id is replaced by CPIX@contentId

  • New mandatory CPIX attributes: CPIX@version, ContentKey@commonEncryptionScheme

  • New optional CPIX element: DRMSystem.ContentProtectionData

  • Cross-versioning mechanism between SPEKE and CPIX

  • HTTP headers evolution: new X-Speke-Version header, Speke-User-Agent header renamed to X-Speke-User-Agent

  • Heartbeat API deprecation

Axinom Key Service supports both versions: 1.0 and 2.0, there are two separate endpoints. Below, you can find request/response samples for both versions.

In both cases, the Client creates a CPIX document in the format which it desires to get, just without the values for the keys, and sends this document to the Key Service. The Key Service generates the specified keys, adds this information to the document, and returns the CPIX document to the Client.

SPEKE 2.0

For SPEKE 2.0 to work, you need to add the following HTTP Header to your request:

X-Speke-Version: 2.0

SPEKE 2.0 Request Sample

SPEKE 2.0 Request Sample
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cenc"/>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cenc"/>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"/>
			<cpix:HLSSignalingData playlist="master"/>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"/>
			<cpix:HLSSignalingData playlist="master"/>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:PSSH/>
			<cpix:ContentProtectionData/>
			<cpix:HLSSignalingData playlist="media"/>
			<cpix:HLSSignalingData playlist="master"/>
			<cpix:SmoothStreamingProtectionHeaderData/>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:PSSH/>
			<cpix:ContentProtectionData/>
			<cpix:HLSSignalingData playlist="media"/>
			<cpix:HLSSignalingData playlist="master"/>
			<cpix:SmoothStreamingProtectionHeaderData/>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:PSSH/>
			<cpix:ContentProtectionData/>
			<cpix:HLSSignalingData playlist="media"/>
			<cpix:HLSSignalingData playlist="master"/>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:PSSH/>
			<cpix:ContentProtectionData/>
			<cpix:HLSSignalingData playlist="media"/>
			<cpix:HLSSignalingData playlist="master"/>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>

The table below describes some important elements of the SPEKE 2.0 request XML.

Element Description

ContentKeyList

The list of the Key IDs for which the Keys shall be generated. Each key ID is a GUID.

DRMSystemList

Requested DRM types, for which the PSSH Boxes will be delivered. The IDs are as defined by DASH-IF. Axinom Key Service supports FairPlay, PlayReady, and Widevine (listed in the example above in this order).

ContentKeyUsageRuleList

Content key usage rules for each key. It’s a pass-through which will only be returned to the Client.

SPEKE 2.0 Response Sample

SPEKE 2.0 Response Sample
<?xml version="1.0" encoding="utf-8"?>
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey kid="98ee5596-cd3e-a20d-163a-e382420c6eff" explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" commonEncryptionScheme="cenc">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>nFLKuNE4LJ1+eXVGiSiTvA==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
		<cpix:ContentKey kid="53abdba2-f210-43cb-bc90-f18f9a890a02" explicitIV="L6jzdXrXAFbCJGBuMrrKrA==" commonEncryptionScheme="cenc">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5UUASLfS3ajx0cAUw+rzmQ==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<cpix:DRMSystem systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2" kid="98ee5596-cd3e-a20d-163a-e382420c6eff">
			<cpix:HLSSignalingData playlist="master">I0VYVC1YLVNFU1NJT04tS0VZOk1FVEhPRD1TQU1QTEUtQUVTLFVSST0ic2tkOi8vOThlZTU1OTYtY2QzZS1hMjBkLTE2M2EtZTM4MjQyMGM2ZWZmOjM4NThGNjIyMzBBQzNDOTE1RjMwMEM2NjQzMTJDNjNGIixLRVlGT1JNQVQ9ImNvbS5hcHBsZS5zdHJlYW1pbmdrZXlkZWxpdmVyeSIsS0VZRk9STUFUVkVSU0lPTlM9IjEi</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="media">I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUyxVUkk9InNrZDovLzk4ZWU1NTk2LWNkM2UtYTIwZC0xNjNhLWUzODI0MjBjNmVmZjozODU4RjYyMjMwQUMzQzkxNUYzMDBDNjY0MzEyQzYzRiIsS0VZRk9STUFUPSJjb20uYXBwbGUuc3RyZWFtaW5na2V5ZGVsaXZlcnkiLEtFWUZPUk1BVFZFUlNJT05TPSIxIg==</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2" kid="53abdba2-f210-43cb-bc90-f18f9a890a02">
			<cpix:HLSSignalingData playlist="master">I0VYVC1YLVNFU1NJT04tS0VZOk1FVEhPRD1TQU1QTEUtQUVTLFVSST0ic2tkOi8vNTNhYmRiYTItZjIxMC00M2NiLWJjOTAtZjE4ZjlhODkwYTAyOjJGQThGMzc1N0FENzAwNTZDMjI0NjA2RTMyQkFDQUFDIixLRVlGT1JNQVQ9ImNvbS5hcHBsZS5zdHJlYW1pbmdrZXlkZWxpdmVyeSIsS0VZRk9STUFUVkVSU0lPTlM9IjEi</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="media">I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUyxVUkk9InNrZDovLzUzYWJkYmEyLWYyMTAtNDNjYi1iYzkwLWYxOGY5YTg5MGEwMjoyRkE4RjM3NTdBRDcwMDU2QzIyNDYwNkUzMkJBQ0FBQyIsS0VZRk9STUFUPSJjb20uYXBwbGUuc3RyZWFtaW5na2V5ZGVsaXZlcnkiLEtFWUZPUk1BVFZFUlNJT05TPSIxIg==</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem systemId="9a04f079-9840-4286-ab92-e65be0885f95" kid="98ee5596-cd3e-a20d-163a-e382420c6eff">
			<cpix:PSSH />			<cpix:ContentProtectionData>PHBzc2ggeG1sbnM9InVybjptcGVnOmNlbmM6MjAxMyI+QUFBQjVIQnpjMmdBQUFBQW1nVHdlWmhBUW9hcmt1WmI0SWhmbFFBQUFjVEVBUUFBQVFBQkFMb0JQQUJYQUZJQVRRQklBRVVBUVFCRUFFVUFVZ0FnQUhnQWJRQnNBRzRBY3dBOUFDSUFhQUIwQUhRQWNBQTZBQzhBTHdCekFHTUFhQUJsQUcwQVlRQnpBQzRBYlFCcEFHTUFjZ0J2QUhNQWJ3Qm1BSFFBTGdCakFHOEFiUUF2QUVRQVVnQk5BQzhBTWdBd0FEQUFOd0F2QURBQU13QXZBRkFBYkFCaEFIa0FVZ0JsQUdFQVpBQjVBRWdBWlFCaEFHUUFaUUJ5QUNJQUlBQjJBR1VBY2dCekFHa0Fid0J1QUQwQUlnQTBBQzRBTUFBdUFEQUFMZ0F3QUNJQVBnQThBRVFBUVFCVUFFRUFQZ0E4QUZBQVVnQlBBRlFBUlFCREFGUUFTUUJPQUVZQVR3QStBRHdBU3dCRkFGa0FUQUJGQUU0QVBnQXhBRFlBUEFBdkFFc0FSUUJaQUV3QVJRQk9BRDRBUEFCQkFFd0FSd0JKQUVRQVBnQkJBRVVBVXdCREFGUUFVZ0E4QUM4QVFRQk1BRWNBU1FCRUFENEFQQUF2QUZBQVVnQlBBRlFBUlFCREFGUUFTUUJPQUVZQVR3QStBRHdBU3dCSkFFUUFQZ0JzQUd3QVdBQjFBRzBBUkFBM0FFNEFSQUJoQUVrQVZ3QlBBSFVBVHdCREFGRUFad0I0QUhVQUx3QjNBRDBBUFFBOEFDOEFTd0JKQUVRQVBnQThBQzhBUkFCQkFGUUFRUUErQUR3QUx3QlhBRklBVFFCSUFFVUFRUUJFQUVVQVVnQStBQT09PC9wc3NoPjxwcm8geG1sbnM9InVybjptaWNyb3NvZnQ6cGxheXJlYWR5Ij54QUVBQUFFQUFRQzZBVHdBVndCU0FFMEFTQUJGQUVFQVJBQkZBRklBSUFCNEFHMEFiQUJ1QUhNQVBRQWlBR2dBZEFCMEFIQUFPZ0F2QUM4QWN3QmpBR2dBWlFCdEFHRUFjd0F1QUcwQWFRQmpBSElBYndCekFHOEFaZ0IwQUM0QVl3QnZBRzBBTHdCRUFGSUFUUUF2QURJQU1BQXdBRGNBTHdBd0FETUFMd0JRQUd3QVlRQjVBRklBWlFCaEFHUUFlUUJJQUdVQVlRQmtBR1VBY2dBaUFDQUFkZ0JsQUhJQWN3QnBBRzhBYmdBOUFDSUFOQUF1QURBQUxnQXdBQzRBTUFBaUFENEFQQUJFQUVFQVZBQkJBRDRBUEFCUUFGSUFUd0JVQUVVQVF3QlVBRWtBVGdCR0FFOEFQZ0E4QUVzQVJRQlpBRXdBUlFCT0FENEFNUUEyQUR3QUx3QkxBRVVBV1FCTUFFVUFUZ0ErQUR3QVFRQk1BRWNBU1FCRUFENEFRUUJGQUZNQVF3QlVBRklBUEFBdkFFRUFUQUJIQUVrQVJBQStBRHdBTHdCUUFGSUFUd0JVQUVVQVF3QlVBRWtBVGdCR0FFOEFQZ0E4QUVzQVNRQkVBRDRBYkFCc0FGZ0FkUUJ0QUVRQU53Qk9BRVFBWVFCSkFGY0FUd0IxQUU4QVF3QlJBR2NBZUFCMUFDOEFkd0E5QUQwQVBBQXZBRXNBU1FCRUFENEFQQUF2QUVRQVFRQlVBRUVBUGdBOEFDOEFWd0JTQUUwQVNBQkZBRUVBUkFCRkFGSUFQZ0E9PC9wcm8+</cpix:ContentProtectionData>
			<cpix:HLSSignalingData playlist="master" />
			<cpix:HLSSignalingData playlist="media" />
			<cpix:SmoothStreamingProtectionHeaderData />
		</cpix:DRMSystem>
		<cpix:DRMSystem systemId="9a04f079-9840-4286-ab92-e65be0885f95" kid="53abdba2-f210-43cb-bc90-f18f9a890a02">
			<cpix:PSSH />			<cpix:ContentProtectionData>PHBzc2ggeG1sbnM9InVybjptcGVnOmNlbmM6MjAxMyI+QUFBQjVIQnpjMmdBQUFBQW1nVHdlWmhBUW9hcmt1WmI0SWhmbFFBQUFjVEVBUUFBQVFBQkFMb0JQQUJYQUZJQVRRQklBRVVBUVFCRUFFVUFVZ0FnQUhnQWJRQnNBRzRBY3dBOUFDSUFhQUIwQUhRQWNBQTZBQzhBTHdCekFHTUFhQUJsQUcwQVlRQnpBQzRBYlFCcEFHTUFjZ0J2QUhNQWJ3Qm1BSFFBTGdCakFHOEFiUUF2QUVRQVVnQk5BQzhBTWdBd0FEQUFOd0F2QURBQU13QXZBRkFBYkFCaEFIa0FVZ0JsQUdFQVpBQjVBRWdBWlFCaEFHUUFaUUJ5QUNJQUlBQjJBR1VBY2dCekFHa0Fid0J1QUQwQUlnQTBBQzRBTUFBdUFEQUFMZ0F3QUNJQVBnQThBRVFBUVFCVUFFRUFQZ0E4QUZBQVVnQlBBRlFBUlFCREFGUUFTUUJPQUVZQVR3QStBRHdBU3dCRkFGa0FUQUJGQUU0QVBnQXhBRFlBUEFBdkFFc0FSUUJaQUV3QVJRQk9BRDRBUEFCQkFFd0FSd0JKQUVRQVBnQkJBRVVBVXdCREFGUUFVZ0E4QUM4QVFRQk1BRWNBU1FCRUFENEFQQUF2QUZBQVVnQlBBRlFBUlFCREFGUUFTUUJPQUVZQVR3QStBRHdBU3dCSkFFUUFQZ0J2QUhRQWRRQnlBRlVBZUFCRUFIa0FlUUF3QUU4QU9BQnJBRkFBUndCUUFHMEFid0JyQUVzQVFRQm5BRDBBUFFBOEFDOEFTd0JKQUVRQVBnQThBQzhBUkFCQkFGUUFRUUErQUR3QUx3QlhBRklBVFFCSUFFVUFRUUJFQUVVQVVnQStBQT09PC9wc3NoPjxwcm8geG1sbnM9InVybjptaWNyb3NvZnQ6cGxheXJlYWR5Ij54QUVBQUFFQUFRQzZBVHdBVndCU0FFMEFTQUJGQUVFQVJBQkZBRklBSUFCNEFHMEFiQUJ1QUhNQVBRQWlBR2dBZEFCMEFIQUFPZ0F2QUM4QWN3QmpBR2dBWlFCdEFHRUFjd0F1QUcwQWFRQmpBSElBYndCekFHOEFaZ0IwQUM0QVl3QnZBRzBBTHdCRUFGSUFUUUF2QURJQU1BQXdBRGNBTHdBd0FETUFMd0JRQUd3QVlRQjVBRklBWlFCaEFHUUFlUUJJQUdVQVlRQmtBR1VBY2dBaUFDQUFkZ0JsQUhJQWN3QnBBRzhBYmdBOUFDSUFOQUF1QURBQUxnQXdBQzRBTUFBaUFENEFQQUJFQUVFQVZBQkJBRDRBUEFCUUFGSUFUd0JVQUVVQVF3QlVBRWtBVGdCR0FFOEFQZ0E4QUVzQVJRQlpBRXdBUlFCT0FENEFNUUEyQUR3QUx3QkxBRVVBV1FCTUFFVUFUZ0ErQUR3QVFRQk1BRWNBU1FCRUFENEFRUUJGQUZNQVF3QlVBRklBUEFBdkFFRUFUQUJIQUVrQVJBQStBRHdBTHdCUUFGSUFUd0JVQUVVQVF3QlVBRWtBVGdCR0FFOEFQZ0E4QUVzQVNRQkVBRDRBYndCMEFIVUFjZ0JWQUhnQVJBQjVBSGtBTUFCUEFEZ0Fhd0JRQUVjQVVBQnRBRzhBYXdCTEFFRUFad0E5QUQwQVBBQXZBRXNBU1FCRUFENEFQQUF2QUVRQVFRQlVBRUVBUGdBOEFDOEFWd0JTQUUwQVNBQkZBRUVBUkFCRkFGSUFQZ0E9PC9wcm8+</cpix:ContentProtectionData>
			<cpix:HLSSignalingData playlist="master" />
			<cpix:HLSSignalingData playlist="media" />
			<cpix:SmoothStreamingProtectionHeaderData />
		</cpix:DRMSystem>
		<cpix:DRMSystem systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" kid="98ee5596-cd3e-a20d-163a-e382420c6eff">
			<cpix:PSSH />
			<cpix:ContentProtectionData>PHBzc2ggeG1sbnM9InVybjptcGVnOmNlbmM6MjAxMyI+QUFBQU9IQnpjMmdBQUFBQTdlK0xxWG5XU3M2anlDZmMxUjBoN1FBQUFCZ1NFSmp1VlpiTlBxSU5GanJqZ2tJTWJ2OUk0OXlWbXdZPTwvcHNzaD4=</cpix:ContentProtectionData>
			<cpix:HLSSignalingData playlist="master">I0VYVC1YLVNFU1NJT04tS0VZOk1FVEhPRD1TQU1QTEUtQUVTLUNUUixVUkk9ImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsQUFBQU9IQnpjMmdBQUFBQTdlK0xxWG5XU3M2anlDZmMxUjBoN1FBQUFCZ1NFSmp1VlpiTlBxSU5GanJqZ2tJTWJ2OUk0OXlWbXdZPSIsS0VZSUQ9MHg5OEVFNTU5NkNEM0VBMjBEMTYzQUUzODI0MjBDNkVGRixLRVlGT1JNQVQ9InVybjp1dWlkOmVkZWY4YmE5LTc5ZDYtNGFjZS1hM2M4LTI3ZGNkNTFkMjFlZCIsS0VZRk9STUFUVkVSU0lPTlM9IjEi</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="media">I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUy1DVFIsVVJJPSJkYXRhOnRleHQvcGxhaW47YmFzZTY0LEFBQUFPSEJ6YzJnQUFBQUE3ZStMcVhuV1NzNmp5Q2ZjMVIwaDdRQUFBQmdTRUpqdVZaYk5QcUlORmpyamdrSU1idjlJNDl5Vm13WT0iLEtFWUlEPTB4OThFRTU1OTZDRDNFQTIwRDE2M0FFMzgyNDIwQzZFRkYsS0VZRk9STUFUPSJ1cm46dXVpZDplZGVmOGJhOS03OWQ2LTRhY2UtYTNjOC0yN2RjZDUxZDIxZWQiLEtFWUZPUk1BVFZFUlNJT05TPSIxIg==</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" kid="53abdba2-f210-43cb-bc90-f18f9a890a02">
			<cpix:PSSH />
			<cpix:ContentProtectionData>PHBzc2ggeG1sbnM9InVybjptcGVnOmNlbmM6MjAxMyI+QUFBQU9IQnpjMmdBQUFBQTdlK0xxWG5XU3M2anlDZmMxUjBoN1FBQUFCZ1NFRk9yMjZMeUVFUEx2SkR4ajVxSkNnSkk0OXlWbXdZPTwvcHNzaD4=</cpix:ContentProtectionData>
			<cpix:HLSSignalingData playlist="master">I0VYVC1YLVNFU1NJT04tS0VZOk1FVEhPRD1TQU1QTEUtQUVTLUNUUixVUkk9ImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsQUFBQU9IQnpjMmdBQUFBQTdlK0xxWG5XU3M2anlDZmMxUjBoN1FBQUFCZ1NFRk9yMjZMeUVFUEx2SkR4ajVxSkNnSkk0OXlWbXdZPSIsS0VZSUQ9MHg1M0FCREJBMkYyMTA0M0NCQkM5MEYxOEY5QTg5MEEwMixLRVlGT1JNQVQ9InVybjp1dWlkOmVkZWY4YmE5LTc5ZDYtNGFjZS1hM2M4LTI3ZGNkNTFkMjFlZCIsS0VZRk9STUFUVkVSU0lPTlM9IjEi</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="media">I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUy1DVFIsVVJJPSJkYXRhOnRleHQvcGxhaW47YmFzZTY0LEFBQUFPSEJ6YzJnQUFBQUE3ZStMcVhuV1NzNmp5Q2ZjMVIwaDdRQUFBQmdTRUZPcjI2THlFRVBMdkpEeGo1cUpDZ0pJNDl5Vm13WT0iLEtFWUlEPTB4NTNBQkRCQTJGMjEwNDNDQkJDOTBGMThGOUE4OTBBMDIsS0VZRk9STUFUPSJ1cm46dXVpZDplZGVmOGJhOS03OWQ2LTRhY2UtYTNjOC0yN2RjZDUxZDIxZWQiLEtFWUZPUk1BVFZFUlNJT05TPSIxIg==</cpix:HLSSignalingData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>

The table below explains some important elements of the SPEKE 2.0 response XML.

Element Description

ContentKeyList

A generated Key and an initialization vector (IV) for each Key ID.

DRMSystemList

Additional protection data for each requested DRM system and each key.

ContentKeyUsageRuleList

Content key usage rules, the same as in the request.

SPEKE 1.0

SPEKE 1.0 Request Sample

SPEKE 1.0 Request Sample
<?xml version="1.0"?>
<cpix:CPIX xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" id="test_ch1">
	<cpix:ContentKeyList>
		<cpix:ContentKey kid="af1ed63c-5784-460b-9e51-309dd47b7d9c"/>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<cpix:DRMSystem systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2" kid="af1ed63c-5784-460b-9e51-309dd47b7d9c"/>
		<cpix:DRMSystem systemId="9a04f079-9840-4286-ab92-e65be0885f95" kid="af1ed63c-5784-460b-9e51-309dd47b7d9c"/>
		<cpix:DRMSystem systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" kid="af1ed63c-5784-460b-9e51-309dd47b7d9c"/>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_19d21813-874e-4804-8a56-1952722abeb5" index="213"/>
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="af1ed63c-5784-460b-9e51-309dd47b7d9c">
			<cpix:KeyPeriodFilter periodId="keyPeriod_19d21813-874e-4804-8a56-1952722abeb5"/>
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>

The table below explains some important elements of the SPEKE 1.0 request XML.

Element Description

ContentKeyList

The list containing a single Key ID for which the Key shall be generated. Key ID is a GUID.

DRMSystemList

Requested DRM types, for which the PSSH Boxes will be delivered. The IDs are as defined by DASH-IF. Axinom Key Service supports FairPlay, PlayReady, and Widevine (listed in the example above in this order).

ContentKeyPeriodList

A list of the ContentKeyPeriod elements.

ContentKeyUsageRuleList

Content key usage rules for the key. It’s a pass-through which will only be returned to the Client.

SPEKE 1.0 Response Sample

SPEKE 1.0 Response Sample
<?xml version="1.0" encoding="utf-8"?>
<cpix:CPIX
  xmlns:cpix="urn:dashif:org:cpix"
  xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke" id="test_ch1">
  <cpix:ContentKeyList>
    <cpix:ContentKey kid="af1ed63c-5784-460b-9e51-309dd47b7d9c" explicitIV="0sgFwyYt3dcIw/IEWRj8xg==">
      <cpix:Data>
        <pskc:Secret>
          <pskc:PlainValue>BKp/7CmIS+8AuBPS3136Hw==</pskc:PlainValue>
        </pskc:Secret>
      </cpix:Data>
    </cpix:ContentKey>
  </cpix:ContentKeyList>
  <cpix:DRMSystemList>
    <cpix:DRMSystem systemId="9a04f079-9840-4286-ab92-e65be0885f95" kid="af1ed63c-5784-460b-9e51-309dd47b7d9c" />
    <cpix:DRMSystem systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" kid="af1ed63c-5784-460b-9e51-309dd47b7d9c" />
    <cpix:DRMSystem systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2" kid="af1ed63c-5784-460b-9e51-309dd47b7d9c" />
  </cpix:DRMSystemList>
  <cpix:ContentKeyPeriodList>
    <cpix:ContentKeyPeriod id="keyPeriod_19d21813-874e-4804-8a56-1952722abeb5" index="213" />
  </cpix:ContentKeyPeriodList>
  <cpix:ContentKeyUsageRuleList>
    <cpix:ContentKeyUsageRule kid="af1ed63c-5784-460b-9e51-309dd47b7d9c">
      <cpix:KeyPeriodFilter periodId="keyPeriod_19d21813-874e-4804-8a56-1952722abeb5" />
    </cpix:ContentKeyUsageRule>
  </cpix:ContentKeyUsageRuleList>
</cpix:CPIX>

The table below explains some important elements of the SPEKE 1.0 response XML.

Element Description

ContentKeyList

A generated Key and an initialization vector (IV).

DRMSystemList

Additional protection data for each requested DRM system and each key.

ContentKeyPeriodList

A list of the ContentKeyPeriod elements.

ContentKeyUsageRuleList

Content key usage rules, the same as in the request.

Revision History

The table below lists the document versions and any changes to them.

Version Date Description

1.0

November 27, 2020

  • Initial version.

2.0

April, 2021

  • Added SPEKE 2.0 support.

2.1

May 20, 2021

  • Comments in code replaced by tables.

3.0

September 23, 2021

  • KeyID override