

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# API SPEKE v2
<a name="the-speke-api-v2"></a>

Essa é a API REST para Secure Packager and Encoder Key Exchange (SPEKE) v2. Use esta especificação para fornecer a proteção de direitos autorais de DRM aos clientes que usam criptografia. Para estar em conformidade com o SPEKE, seu provedor de chaves de DRM deve expor a API REST descrita nesta especificação. O criptografador faz chamadas de API ao seu provedor de chaves.

**nota**  
Os exemplos de código nesta especificação são apenas para fins de ilustração. Você não pode executar os exemplos porque eles não fazem parte de uma implementação completa do SPEKE.

O SPEKE usa a definição de estrutura de dados do DASH Industry Forum Content Protection Information Exchange Format (DASH-IF-CPIX) para troca de chaves, com algumas restrições. DASH-IF-CPIXdefine um esquema para fornecer uma troca extensível de vários DRM da plataforma DRM para o criptografador. Isso permite a criptografia de conteúdo para todos os formatos adaptáveis de empacotamento de taxa de bits no momento da compactação de conteúdo e empacotamento. Os formatos adaptáveis de empacotamento de taxa de bits incluem HLS, DASH e MSS.

A partir da versão 2.0, o SPEKE está alinhado a uma versão específica do CPIX:

No lado do SPEKE, isso é imposto por meio do uso do `X-Speke-Version` cabeçalho HTTP e, no lado do CPIX, pelo uso do atributo `CPIX@version`. A falta desses elementos nas solicitações é típica dos fluxos de trabalho legados do SPEKE v1. Nos fluxos de trabalho do SPEKE v2, espera-se que o provedor de chaves processe documentos CPIX somente se ele suportar os dois parâmetros da versão.

Para obter informações detalhadas sobre o formato de troca, consulte a [especificação CPIX 2.3](https://dashif.org/docs/CPIX2.3/Cpix.html) do DASH Industry Forum.

No geral, o SPEKE v2 traz as seguintes evoluções em comparação com o SPEKE v1:
+ Todas as tags do namespace SPEKE XML estão obsoletas em favor das tags equivalentes no namespace CPIX XML
+  `SPEKE:ProtectionHeader` está obsoleto e foi substituído por `CPIX:DRMSystem.SmoothStreamingProtectionHeaderData` 
+  `CPIX:URIExtXKey`, `SPEKE:KeyFormat` e `SPEKE:KeyFormatVersions` estão obsoletos e foram substituídos por `CPIX:DRMSystem.HLSSignalingData` 
+  `CPIX@id` é substituído por `CPIX@contentId` 
+ Novos atributos obrigatórios do CPIX: `CPIX@version`, `ContentKey@commonEncryptionScheme` 
+ Novo elemento CPIX opcional: `DRMSystem.ContentProtectionData` 
+ Suporte para várias chaves de conteúdo
+ Mecanismo de versionamento cruzado entre SPEKE e CPIX
+ Evolução dos cabeçalhos HTTP: novo cabeçalho `X-Speke-Version`, cabeçalho `Speke-User-Agent` renomeado para `X-Speke-User-Agent` 
+ Defasagem da API Heartbeat

Como a especificação SPEKE v1 permanece inalterada, as implementações existentes não precisam mudar para continuar oferecendo suporte aos fluxos de trabalho do SPEKE v1.

**Topics**
+ [

# API SPEKE v2: Personalizações e restrições para a especificação do DASH-IF
](speke-constraints-v2.md)
+ [

# API SPEKE v2: Componentes de carga útil padrão
](standard-payload-components-v2.md)
+ [

# API SPEKE v2: Contrato de criptografia
](encryption-contract-v2.md)
+ [

# API SPEKE v2: Exemplos de chamadas de método de fluxo de trabalho em tempo real
](live-workflow-methods-v2.md)
+ [

# API SPEKE v2: Exemplos de chamadas de método de fluxo de trabalho de VOD
](vod-workflow-method-v2.md)
+ [

# API SPEKE v2: Criptografia de chave de conteúdo
](content-key-encryption-v2.md)
+ [

# SPEKE API v2: Substituindo o identificador de chave
](kid-override-v2.md)

# API SPEKE v2: Personalizações e restrições para a especificação do DASH-IF
<a name="speke-constraints-v2"></a>

A [especificação CPIX 2.3](https://dashif.org/docs/CPIX2.3/Cpix.html) do DASH Industry Forum oferece suporte a vários casos de uso e topologias. A especificação API SPEKE v2.0 define tanto um perfil CPIX como uma API para CPIX. Para atingir esses dois objetivos, ela segue a especificação CPIX com as seguintes personalizações e restrições:

**Perfil do CPIX**
+ O SPEKE segue o fluxo de trabalho de criptografador e consumidor.
+ Para chaves de conteúdo criptografadas, o SPEKE aplica as seguintes restrições:
  + O SPEKE não oferece suporte à verificação de assinatura digital (XMLDSIG) para cargas de solicitação ou resposta.
  + O SPEKE exige 2048 certificados baseados em RSA.
+ O SPEKE aproveita apenas um subconjunto das funcionalidades do CPIX:
  + O SPEKE omite a funcionalidade `UpdateHistoryItemList`. Se a lista estiver presente na resposta, o SPEKE vai ignorá-la.
  + O SPEKE omite a funcionalidade root/leaf principal. Se o atributo `ContentKey@dependsOnKey` estiver presente na resposta, o SPEKE vai ignorá-la.
  + O SPEKE omite o elemento `BitrateFilter` e o atributo `VideoFilter@wcg`. Se esses elementos ou atributos estiverem presentes na carga útil do CPIX, o SPEKE a ignorará.
+ Somente os elementos ou atributos referenciados como “Suportados” na [página Componentes de Carga Útil Padrão](standard-payload-components-v2.md) ou [na página do contrato de criptografia](encryption-contract-v2.md) podem ser usados em documentos CPIX trocados com o SPEKE v2.
+ Quando incluídos em uma solicitação CPIX pelo criptografador, todos os elementos e atributos devem conter um valor válido na resposta CPIX do provedor de chaves. Caso contrário, o criptografador deve parar e gerar um erro.
+ O SPEKE suporta a rotação de chaves com `KeyPeriodFilter` elementos. O SPEKE usa apenas o `ContentKeyPeriod@index` para rastrear o período chave.
+ Para a sinalização HLS, vários `DRMSystem.HLSSignalingData` elementos devem ser usados: um com um valor de `DRMSystem.HLSSignalingData@playlist` atributo de 'media' e outro com um valor de `DRMSystem.HLSSignalingData@playlist` atributo de 'master'.
+ Ao solicitar chaves, o criptografador pode usar o atributo opcional `@explicitIV` no elemento `ContentKey`. O provedor de chaves pode responder com um IV usando `@explicitIV`, mesmo se o atributo não estiver incluído na solicitação.
+ O criptografador cria o identificador de chaves (`KID`), que permanece o mesmo para qualquer período de chave e ID de conteúdo. O provedor de chaves inclui o servidor `KID` na resposta ao documento da solicitação.
+ O criptografador deve incluir um valor para o atributo `CPIX@contentId`. Ao receber um valor vazio para esse atributo, o provedor da chave deve retornar um erro com a descrição “CPIX@contentId ausente”. O valor `CPIX@contentId` não pode ser substituído pelo provedor da chave.

   O valor `CPIX@id`, se não for nulo, deve ser ignorado pelo provedor da chave.
+ O criptografador deve incluir um valor para o atributo `CPIX@version`. Ao receber um valor vazio para esse atributo, o provedor da chave deve retornar um erro com a descrição “CPIX@version ausente”. Ao receber uma solicitação com uma versão não compatível, a descrição do erro retornada pelo provedor da chave deve ser “CPIX@version não compatível”.

   O valor `CPIX@version` não pode ser substituído pelo provedor da chave.
+ O criptografador deve incluir um valor para o atributo `ContentKey@commonEncryptionScheme` para cada chave solicitada. Ao receber um valor vazio para esse atributo, o provedor da chave retornará um erro com a descrição “Missing ContentKey @ commonEncryptionScheme for KID`id`”.

  Um documento CPIX exclusivo não pode misturar vários valores para atributos `ContentKey@commonEncryptionScheme` diferentes. Ao receber essa combinação, o provedor da chave deve retornar um erro com a descrição “Não compatível ContentKey @ commonEncryptionScheme combinação”.

  Nem todos os valores `ContentKey@commonEncryptionScheme` são compatíveis com todas as tecnologias DRM. Ao receber essa combinação, o provedor da chave retornará um erro com a descrição 'ContentKey@ commonEncryptionScheme não compatível com DRMSystem `id`'.

   O valor `ContentKey@commonEncryptionScheme` não pode ser substituído pelo provedor da chave.
+ Ao receber valores diferentes para `DRMSystem@PSSH` e elemento `DRMSystem.ContentProtectionData` innerXML `<pssh>` no corpo da resposta CPIX, o criptografador deve parar e gerar um erro.

**API para CPIX**
+ O provedor da chave deve incluir um valor para o cabeçalho da resposta `X-Speke-User-Agent` HTTP.
+ O criptografador em conformidade com o SPEKE atua como um cliente e envia operações ao endpoint do provedor de chaves.
+ O criptografador deve incluir um valor para o cabeçalho da solicitação `X-Speke-Version` HTTP, com a versão SPEKE usada com a solicitação, formulada como. MajorVersion MinorVersion, como '2.0' para SPEKE v2.0. Se o provedor da chave não for compatível com a versão SPEKE usada pelo criptografador para a solicitação atual, ele retornará um erro com a descrição “Versão SPEKE não compatível” e não tentará processar o documento CPIX da melhor maneira possível.

  O valor do cabeçalho `X-Speke-Version` definido pelo criptografador não pode ser modificado pelo provedor da chave na resposta à solicitação.
+ Ao receber erros no corpo da resposta, o criptografador deve gerar um erro e não repetir a solicitação com um versionamento do SPEKE v1.0.

  Se o provedor da chave não retornar um erro, mas falhar em retornar um documento CPIX que inclua as informações obrigatórias, o criptografador deverá parar e gerar um erro.

A tabela a seguir resume as mensagens padrão que devem ser retornadas pelo provedor da chave no corpo da mensagem. O código de resposta HTTP em casos de erro deve ser 4XX ou 5XX, nunca 200. O código de erro 422 pode ser usado para todos os erros relacionados ao SPEKE/CPIX.


| Caso de erro | Mensagem de erro | 
| --- | --- | 
|  CPIX@contentId não está definido  |  CPIX@contentId ausente  | 
|  CPIX@version não está definido  |  CPIX@version ausente  | 
|  CPIX@version não é suportado  |  CPIX@version não compatível  | 
|  ContentKey@ não commonEncryptionScheme está definido  |  Falta ContentKey @ commonEncryptionScheme para KID `id` (onde `id` é igual ao valor ContentKey @kid)  | 
|  Vários commonEncryptionScheme valores ContentKey @ usados em um único documento CPIX  |  Combinação ContentKey @ commonEncryptionScheme não compatível  | 
|  ContentKey@ não commonEncryptionScheme é compatível com a tecnologia DRM  |  ContentKey@ commonEncryptionScheme não compatível com DRMSystem `id` (onde é `id` igual ao valor DRMSystem @systemId)  | 
|  X-Speke-Version o valor do cabeçalho não é uma versão compatível do SPEKE  |  Versão de SPEKE não compatível  | 
|  O contrato de criptografia está malformado  |  Contrato de criptografia malformado  | 
|  O contrato de criptografia contradiz as restrições dos níveis de segurança do DRM  |  O contrato de criptografia CPIX solicitado não é compatível  | 
|  O contrato de criptografia não inclui VideoFilter nenhum AudioFilter elemento  |  Contrato de criptografia CPIX ausente  | 

# API SPEKE v2: Componentes de carga útil padrão
<a name="standard-payload-components-v2"></a>

Por meio de uma única solicitação SPEKE, o criptografador pode solicitar várias chaves de conteúdo, juntamente com a sinalização de manifestação necessária para vários formatos de empacotamento, de acordo com o contrato de criptografia definido para um determinado conteúdo.

Para cobrir todos esses aspectos, um documento CPIX padrão é composto por três seções de lista obrigatórias, além de uma seção de lista opcional para rotação de chaves de conteúdo em tempo real.

**<cpix:CPIX><cpix: ContentKeyList > seção e elemento de nível superior**  
Esta é uma seção obrigatória, relevante para streaming ao vivo e VOD, definindo as diferentes chaves de conteúdo que precisam ser usadas pelo criptografador. O elemento `<cpix:ContentKeyList>` pode conter um ou vários elementos `<cpix:ContentKey>` secundários, cada um deles descrevendo uma chave de conteúdo distinta.

De acordo com a especificação CPIX, os valores possíveis do atributo `ContentKey@commonEncryptionScheme` são definidos na especificação Criptografia comum em arquivos de formato de mídia base ISO (ISO/IEC 23001-7:2016):
+ 'cenc': amostra completa do modo AES-CTR e criptografia de subamostra NAL de vídeo
+ 'cbc1': amostra completa do modo AES-CBC e criptografia de subamostra NAL de vídeo
+ 'cens': criptografia parcial de padrão NAL de vídeo no modo AES-CTR
+ 'cbcs': criptografia parcial de padrão NAL de vídeo no modo AES-CBC

O exemplo a seguir mostra um documento CPIX com uma única chave de conteúdo não criptografada:

```
<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="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	...
</cpix:CPIX>
```

Por padrão, as chaves de conteúdo não são criptografadas, como no exemplo abaixo. Mas a criptografia das chaves de conteúdo pode ser solicitada pelo criptografador por meio da inclusão do elemento<cpix : >. DeliveryDataList Consulte a seção Criptografia de chave de conteúdo para obter mais detalhes.


| Elemento suportado pelo SPEKE | Atributos obrigatórios | Atributos opcionais | Elementos secundários obrigatórios | Elementos secundários opcionais | 
| --- | --- | --- | --- | --- | 
|  <cpix:CPIX>  |  contentId, version, xmlns:cpix, xmlns:pskc  |  name, xmlns:enc  |  um <cpix: ContentKeyList >, um<cpix : List>, um <cpix: DRMSystem > ContentKeyUsageRuleList  |  um <cpix: DeliveryDataList >, um <cpix : >ContentKeyPeriodList  | 
|  <clix : >ContentKeyList  |  -  |  id  |  pelo menos um <cpix : >ContentKey  |  -  | 
|  <clix : >ContentKey  |  criança commonEncryptionScheme, Dados  |  id, Algorithm, explicitIV  |  um <pskc:Secret>  |  -  | 
|  <pskc:Secret>  |  PlainValue or EncryptedValue  |  ValueMAC  |  -  |  <enc: EncryptionMethod >, <enc : >CipherData  | 

**<cpix : Lista>seção DRMSystem**  
Esta é uma seção obrigatória, relevante para streaming ao vivo e VOD, definindo os diferentes sistemas DRM que precisam ser aproveitados junto com as chaves de conteúdo.

O exemplo a seguir mostra uma lista de sistemas DRM com uma única especificação de sistema PlayReady DRM:

```
<cpix:DRMSystemList>
	<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
		<cpix:HLSSignalingData playlist="media">HicXmbZ2m[...]4==</cpix:HLSSignalingData>
		<cpix:HLSSignalingData playlist="master">HicXmbZ2m[...]jEi</cpix:HLSSignalingData>
		<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
		<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
		<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
	</cpix:DRMSystem>
</cpix:DRMSystemList>
```

Para obter uma lista completa do sistema DRMIDs, consulte a [seção Proteção de conteúdo do repositório de identificadores](https://dashif.org/identifiers/content_protection/) DASH-IF.


| Elemento suportado pelo SPEKE | Atributos obrigatórios | Atributos opcionais | Elementos secundários obrigatórios | Elementos secundários opcionais | 
| --- | --- | --- | --- | --- | 
|  <cpix : Lista>DRMSystem  |  -  |  id  |  pelo menos um <cpix : >DRMSystem  |  -  | 
|  <clix : >DRMSystem  |  kid, systemId  |  id, name, PSSH  |  -  |  ContentProtectionData, SmoothStreamingProtectionHeaderData, dois <cpix: HLSSignaling Data> elementos com valor de atributo de playlist diferente  | 

 `DRMSystem@PSSH` é obrigatório se o encapsulamento ISO-BMFF for aplicado a segmentos de mídia. O elemento `DRMSystem.ContentProtectionData` innerXML `<pssh>` é utilizado pelo criptografador somente para fins de sinalização de manifesto.

Se `DRMSystem@PSSH` estiver presente e `DRMSystem.ContentProtectionData` contiver um `<pssh>` elemento innerXML, ambos os valores devem ser idênticos.

Se a sinalização `DRMSystem` deve ser transmitida em manifestos HLS, ambos os elementos `<cpix:HLSSignalingData playlist="media">` e `<cpix:HLSSignalingData playlist="master">` devem ser incluídos na solicitação e na resposta do CPIX.

**<cpix : >seção ContentKeyPeriodList**  
Essa é uma seção opcional, relevante somente para transmissão em tempo real, que define os períodos criptográficos aplicados ao conteúdo.

O elemento `<cpix:ContentKeyPeriodList>` pode conter um ou vários elementos `<cpix:ContentKeyPeriod>` secundários, cada um deles descrevendo uma chave de conteúdo distinta. Usar UUIDs como parte do valor do atributo id é uma abordagem comumente usada.

```
<cpix:ContentKeyPeriodList>
	<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
</cpix:ContentKeyPeriodList>
```


| Elemento suportado pelo SPEKE | Atributos obrigatórios | Atributos opcionais | Elementos secundários obrigatórios | Elementos secundários opcionais | 
| --- | --- | --- | --- | --- | 
|  <clix : >ContentKeyPeriodList  |  -  |  id  |  pelo menos um <cpix : >ContentKeyPeriod  |  -  | 
|  <clix : >ContentKeyPeriod  |  id, index  |  -  |  -  |  -  | 

Se forem usados períodos criptográficos, as chaves de criptografia também precisarão ser anexadas a um dos períodos criptográficos no documento CPIX, conforme mostrado na seção abaixo.

**<cpix : >seção ContentKeyUsageRuleList**  
Esta é uma seção obrigatória, relevante para streaming ao vivo e VOD, que define como as diferentes chaves de conteúdo protegerão as faixas dentro do streamset e durante os períodos criptográficos.

O elemento <cpix: ContentKeyUsageRuleList > pode conter um ou vários elementos secundários <cpix: ContentKeyUsageRule >, cada um deles descrevendo as faixas às quais uma determinada chave de conteúdo é aplicada pelo criptografador, potencialmente durante um período criptográfico específico. É necessário que pelo menos um elemento <cpix: AudioFilter > ou um <cpix: VideoFilter > esteja presente em um elemento<cpix : >. ContentKeyUsageRule

O exemplo a seguir mostra uma lista simples com apenas uma regra aplicando uma única chave de conteúdo a todas as faixas de áudio e vídeo durante um período criptográfico específico.

```
<cpix:ContentKeyUsageRuleList>
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="ALL">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```


| Elemento suportado pelo SPEKE | Atributos obrigatórios | Atributos opcionais | Elementos secundários obrigatórios | Elementos secundários opcionais | 
| --- | --- | --- | --- | --- | 
|  <clix : >ContentKeyUsageRuleList  |  -  |  id  |  pelo menos um <cpix : >ContentKeyUsageRule  |  -  | 
|  <clix : >ContentKeyUsageRule  |  criança, intendedTrackType  |  -  |  pelo menos um <cpix: AudioFilter > ou um <cpix : >(\$1) VideoFilter  |  <clix : >KeyPeriodFilter  | 
|  <clix : >KeyPeriodFilter  |  periodId  |  -  |  -  |  -  | 
|  <clix : >AudioFilter  |  -  |  minChannels, maxChannels  |  -  |  -  | 
|  <clix : >VideoFilter  |  -  |  minPixels, maxPixels, hdr, minFps, maxFps  |  -  |  -  | 

 *(\$1) Para obter uma explicação detalhada sobre o uso de uma ou várias chaves de conteúdo para proteger uma ou várias faixas em um streamset, consulte a seção Documentação do [Contrato de Criptografia](encryption-contract-v2.md)*. 

# API SPEKE v2: Contrato de criptografia
<a name="encryption-contract-v2"></a>

O contrato de criptografia define quais chaves de conteúdo estão protegendo quais faixas dentro de um determinado streamset, com base nas características das faixas.

O uso de várias chaves de conteúdo para faixas diferentes em um streamset, apesar de ser uma prática recomendada do setor, não é obrigatório, mas recomendado: pelo menos duas chaves de conteúdo diferentes, uma para faixas de áudio e outra para faixas de vídeo. É possível usar uma única chave de conteúdo para criptografar várias faixas, mas isso precisa ser explicitamente sinalizado no documento CPIX enviado pelo criptografador ao provedor da chave. De um modo geral, o criptografador sempre descreve com precisão quantas chaves de conteúdo são necessárias e como elas são usadas para criptografar as várias faixas de mídia.

**Princípios**  
O contrato de criptografia está localizado na `<cpix:ContentKeyUsageRuleList>` seção do documento CPIX. Nesta seção, cada chave de conteúdo definida na `<cpix:ContentKeyList>` seção corresponde a um `<cpix:ContentKeyUsageRule>` elemento específico, que deve incluir:
+ um `ContentKeyUsageRule@intendedTrackType` atributo que pode referenciar um ou mais subcomponentes, separados pelo sinal '\$1' se vários subcomponentes forem usados. O valor de `ContentKeyUsageRule@intendedTrackType` deve ser exclusivo em um contrato de criptografia e não pode ser usado em múltiplos elementos `ContentKeyUsageRule`.
+ Um ou mais elementos `<cpix:AudioFilter>` ou elemento `<cpix:VideoFilter>` secundário, dependendo do valor do `ContentKeyUsageRule@intendedTrackType` atributo.

As regras que regem esse relacionamento são as seguintes:
+ Quando todas as faixas de áudio e vídeo do streamset precisarem ser protegidas com uma chave de conteúdo exclusiva, a string `'ALL'` deve ser usada como valor do atributo `ContentKeyUsageRule@intendedTrackType`. O exemplo 1 mostra esse caso de uso. Nesta situação, elementos `<cpix:AudioFilter />` e `<cpix:VideoFilter />` secundários sem nenhum atributo devem ser incluídos. Qualquer outra combinação de `<cpix:AudioFilter>` and/or `<cpix:VideoFilter>` elementos é inválida nesse contexto específico.
+ Para todos os outros casos de uso, o valor do atributo `ContentKeyUsageRule@intendedTrackType` pode ser definido livremente, e o número de elementos `<cpix:AudioFilter />` e `<cpix:VideoFilter />` secundários devem corresponder ao número de subcomponentes agregados por meio do sinal “\$1”. Os exemplos 2/3/4/5/6/7/9/10 ilustram esse requisito, quando um único subcomponente está presente no valor do atributo `ContentKeyUsageRule@intendedTrackType`. O exemplo 8 ilustra isso quando vários subcomponentes são usados: `ContentKeyUsageRule@intendedTrackType="SD+HD"` é descrito por dois elementos `<cpix:VideoFilter>` secundários distintos com valores de atributos diferentes e `ContentKeyUsageRule@intendedTrackType="HDR+HFR+UHD"` é descrito por três elementos `<cpix:VideoFilter>` secundários distintos com valores de atributos diferentes.

**Filtros**  
O CPIX define vários elementos e atributos de filtragem, mas o SPEKE suporta apenas um subconjunto deles. A tabela a seguir resume essas diferenças:


| Tipo de filtro CPIX | Suporte geral do SPEKE | Atributos de filtro suportados pelo SPEKE | Atributos de filtro não suportados pelo SPEKE | 
| --- | --- | --- | --- | 
|  <clix : >VideoFilter  |  Sim  |  minPixels, maxPixels, hdr, minFPS, maxFPS (atributos opcionais)  |  wcg  | 
|  <clix : >AudioFilter  |  Sim  |  minChannels, maxChannels (atributos opcionais)  |  | 
|  <clix : >KeyPeriodFilter  |  Sim  |  periodId (atributo obrigatório)  |  | 
|  <clix : >BitrateFilter  |  Não  |  N/D  |  N/D  | 
|  <clix : >LabelFilter  |  Não  |  N/D  |  N/D  | 

De acordo com a especificação CPIX para VideoFilter, [minPixels, maxPixels] é um intervalo com tudo incluído em ambas as dimensões, enquanto (minFPS, maxFPS] é inclusivo somente para a dimensão maxFPS. Pois AudioFilter, [minChannels, maxChannels] é um intervalo inclusivo em ambas as dimensões.

**Situações problemáticas**  
Há situações em que as informações fornecidas no contrato de criptografia podem ser parciais, ambíguas ou errôneas. Nesses casos, é importante que o criptografador e o provedor da chave se comportem adequadamente e garantam a proteção adequada do conteúdo. A tabela a seguir apresenta o comportamento recomendado nessas situações:


| Nessa situação | O criptografador should/shall ... | O principal fornecedor should/shall ... | 
| --- | --- | --- | 
|  Nenhuma regra se aplica a uma ou mais faixas no streamset (veja o exemplo 3 abaixo)  |  O criptografador deve examinar sua configuração (externa à carga útil do CPIX) e verificar se as faixas em questão não exigem criptografia. Se não corresponder à expectativa, o criptografador deve gerar um erro e interromper o processamento.  |   *Não relevante: o provedor da chave não tem conhecimento da estrutura do streamset.*   | 
|  Várias regras se sobrepõem e sugerem várias chaves de conteúdo para criptografar uma faixa específica  |  O criptografador deve aplicar a última avaliação ContentKeyUsageRule bem-sucedida na ordem do documento.  |   *Não relevante: o provedor da chave não tem conhecimento da estrutura do streamset.*   | 
|  O contrato de criptografia muda em um único ciclo SPEKE request/response   |  O criptografador deve levantar uma exceção e interromper o processamento, pois o provedor da chave não é responsável pela definição do contrato de criptografia.  |  Para evitar que essa situação ocorra em primeiro lugar, o provedor da chave não deve modificar um contrato de criptografia recebido na carga útil CPIX da solicitação SPEKE.  | 
|  Contrato de criptografia malformado: exceção de restrição de intendedTrackType/Filters cardinalidade, filtros ou atributos não suportados  |  O criptografador deve gerar uma exceção, interromper o processamento e não enviar a solicitação SPEKE ao provedor da chave, pois isso provavelmente resultaria em proteção de conteúdo incorreta ou deixaria alguns rastros desprotegidos.  |  O provedor da chave deve gerar uma exceção e retornar um erro de “contrato de criptografia malformado”.  | 
|  Contrato de criptografia bem-formado, mas que viole as restrições dos níveis de segurança do DRM: por exemplo, uma única chave de conteúdo sendo solicitada para proteger as faixas de áudio e as faixas de vídeo UHD  |  Se o criptografador tiver conhecimento das restrições dos níveis de segurança do DRM, ele deve gerar uma exceção, interromper o processamento e não enviar a solicitação SPEKE ao provedor da chave, pois isso provavelmente resultaria em proteção de conteúdo incorreta.  |  O provedor da chave deve gerar uma exceção e retornar um erro de “contrato requisitado de criptografia CPIX não compatível”.  | 
|  Contrato de criptografia ausente  |  O criptografador não deve enviar documentos CPIX que não contenham nenhum VideoFilter elemento ou. AudioFilter   |  O provedor da chave deve gerar uma exceção e retornar um erro de “contrato de criptografia CPIX ausente”.  | 

**Exemplos de contratos de criptografia**  
 *Exemplo 1: uma chave de conteúdo para todas as faixas de áudio e vídeo* 

```
<cpix:ContentKeyUsageRuleList>
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="ALL">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 2: uma chave de conteúdo para todas as faixas de vídeo, uma chave de conteúdo para todas as faixas de áudio* 

```
<cpix:ContentKeyUsageRuleList>
    <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
        <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
        <cpix:VideoFilter />
    </cpix:ContentKeyUsageRule>
    <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
        <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
        <cpix:AudioFilter />
    </cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 3: uma chave de conteúdo para todas as faixas de vídeo e faixas de áudio não criptografadas* 

```
<cpix:ContentKeyUsageRuleList>
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 4: várias chaves de conteúdo para diferentes faixas de vídeo (SD/HD), uma chave de conteúdo para todas as faixas de áudio* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD video tracks (more than 1024x576) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 5: várias teclas de conteúdo para diferentes faixas de vídeo (SD/HD/UHD), uma chave de conteúdo para todas as faixas de áudio* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" maxPixels="2073600" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD video tracks (more than 1920x1080) -->
	<cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="2073601" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 6: várias teclas de conteúdo para diferentes faixas de vídeo (SD/HD/UHD1/UHD2), uma chave de conteúdo para todas as faixas de áudio* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" maxPixels="2073600" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="2073601" maxPixels="8847360" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD2 video tracks (more than 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="8847361" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 7: várias teclas de conteúdo para diferentes faixas de vídeo (SD/HD1/HD2/UHD1/UHD2), uma chave de conteúdo para todas as faixas de áudio* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD1 video tracks (more than 1024x576, up to 1280x720) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD1">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" maxPixels="921600" />
	</cpix:ContentKeyUsageRule>
        <!-- Rule for HD2 video tracks (more than 1280x720, up to 1920x1080) -->
          <cpix:ContentKeyUsageRule kid="cda406d8-9d87-4f76-92da-31110e756176" intendedTrackType="HD2">
            <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
            <cpix:VideoFilter minPixels="921601" maxPixels="2073600" />
          </cpix:ContentKeyUsageRule>
	<!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="2073601" maxPixels="8847360" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD2 video tracks (more than 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="8847361" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 8: várias chaves de conteúdo para diferentes faixas de vídeo (baseadas em múltiplos tipos de atributos), uma chave de conteúdo para todas as faixas de áudio* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD and HD video tracks-->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD+HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="442368" maxFps="30" hdr="false"/>
		<cpix:VideoFilter minPixels="442369" maxPixels="2073600" maxFps="30" hdr="false"/>
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HDR, HFR and UHD video tracks-->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HDR+HFR+UHD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter hdr="true" />
		<cpix:VideoFilter minFps="30" />
		<cpix:VideoFilter minPixels="20736001" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks-->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 9: uma chave de conteúdo para todas as faixas de vídeo, várias chaves de conteúdo para faixas de áudio estéreo e multicanal* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for video tracks-->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for stereo audio tracks-->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter maxChannels="2"/>
	</cpix:ContentKeyUsageRule>
	<!-- Rule for multichannel audio tracks-->
	<cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<AudioFilter minChannels="3"/>
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *Exemplo 10: uma chave de conteúdo para todas as faixas de vídeo, várias chaves de conteúdo para estéreo e dois tipos de faixas de áudio multicanal* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for video tracks-->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for stereo audio tracks-->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter maxChannels="2"/>
	</cpix:ContentKeyUsageRule>
	<!-- Rule for multichannel audio tracks (3 to 6 channels)-->
	<cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO_3_6">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter minChannels="3" maxChannels="6"/>
	</cpix:ContentKeyUsageRule>
  <!-- Rule for multichannel audio tracks (7 channels and more)-->
	<cpix:ContentKeyUsageRule kid="81eb3761-55ff-4d22-a31d-94f01bbfd8ba" intendedTrackType="MULTICHANNEL_AUDIO_7">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter minChannels="7"/>
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

# API SPEKE v2: Exemplos de chamadas de método de fluxo de trabalho em tempo real
<a name="live-workflow-methods-v2"></a>

 *Exemplo de sintaxe de solicitação* 

O seguinte URL é um exemplo e não indica um formato fixo:

```
POST https://speke-compatible-server/speke/v2.0/copyProtection
```

 *Corpo da solicitação* 

Um documento CPIX.

 *Cabeçalhos de solicitação* 


| Nome | Tipo | Ocorre | Description | 
| --- | --- | --- | --- | 
|   `AWS Authorization`   |  String  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Security-Token`   |  String  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Date`   |  String  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  Versão da API SPEKE usada com a solicitação, formulada como. MajorVersion MinorVersion, como '2.0' para SPEKE v2.0  | 

 *Cabeçalhos de resposta* 


| Nome | Tipo | Ocorre | Description | 
| --- | --- | --- | --- | 
|   `X-Speke-User-Agent`   |  String  |  1..1  |  String que identifica o provedor de chaves  | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  Versão da API SPEKE usada com a solicitação, formulada como. MajorVersion MinorVersion, como '2.0' para SPEKE v2.0  | 

 *Resposta de solicitação* 


| CÓDIGO HTTP | Nome da carga | Ocorre | Description | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  Resposta da carga DASH-CPIX:  | 
|   `4XX (Client error)`   |  Mensagem de erro do cliente  |  1..1  |  Descrição do erro do cliente  | 
|   `5XX (Server error)`   |  Mensagem de erro do servidor  |  1..1  |  Descrição de erro do servidor  | 

**nota**  
Os exemplos nesta seção não incluem a criptografia de chaves de conteúdo. Para obter informações sobre como adicionar criptografia de chaves de conteúdo, consulte [Criptografia de chaves de conteúdo](content-key-encryption-v2.md).

 *Exemplo de carga de solicitação em tempo real com chaves em branco* 

O exemplo a seguir mostra uma carga útil típica de solicitação ao vivo do criptografador para o provedor da chave DRM, com uma chave de conteúdo para todas as faixas de vídeo e uma chave de conteúdo para todas as faixas de áudio:

```
<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="cbcs"></cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

 *Exemplo de carga de resposta em tempo real com chaves em branco* 

O exemplo a seguir mostra uma carga útil de resposta típica do provedor de chaves DRM (os valores retornados foram encurtados com [...] para facilitar a leitura):

```
<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="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>h3toSFIlyAYpfXVQ795m6x==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">aHR0cHM6L[...]WZm</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">Y29tLmFwc[...]XJ5</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">trBAnbMcj[...]u44</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">mn626PjyR[...]2fi</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">lTznjvtzL[...]GfJ</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">XgzdzQH7p[...]zeX</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>TdgRnuJsZ[...]wDw</cpix:ContentProtectionData>
			<cpix:PSSH>mYZbjpWdS[...]D==</cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">HicXmbZ2m[...]4==</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">GVzdCIfa2[...]Eta</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
			<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">BptGzwis2[...]Iej</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">3c9SXdVa0[...]MBH</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>HotJCMQyc[...]GpU</cpix:ContentProtectionData>
			<cpix:PSSH>S6UD43ybN[...]f==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>VBFUv2or0[...]JeP</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

# API SPEKE v2: Exemplos de chamadas de método de fluxo de trabalho de VOD
<a name="vod-workflow-method-v2"></a>

 *Exemplo de sintaxe de solicitação* 

O seguinte URL é um exemplo e não indica um formato fixo.

```
POST https://speke-compatible-server/speke/v2.0/copyProtection
```

 *Corpo da solicitação* 

Um documento CPIX.

 *Cabeçalhos de solicitação* 


| Nome | Tipo | Ocorre | Description | 
| --- | --- | --- | --- | 
|   `AWS Authorization`   |  String  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Security-Token`   |  String  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Date`   |  String  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  Versão da API SPEKE usada com a solicitação, formulada como. MajorVersion MinorVersion, como '2.0' para SPEKE v2.0  | 

 *Cabeçalhos de resposta* 


| Nome | Tipo | Ocorre | Description | 
| --- | --- | --- | --- | 
|   `X-Speke-User-Agent`   |  String  |  1..1  |  String que identifica o provedor de chaves  | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  Versão da API SPEKE usada com a solicitação, formulada como. MajorVersion MinorVersion, como '2.0' para SPEKE v2.0  | 

 *Resposta de solicitação* 


| CÓDIGO HTTP | Nome da carga | Ocorre | Description | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  Resposta da carga DASH-CPIX:  | 
|   `4XX (Client error)`   |  Mensagem de erro do cliente  |  1..1  |  Descrição do erro do cliente  | 
|   `5XX (Server error)`   |  Mensagem de erro do servidor  |  1..1  |  Descrição de erro do servidor  | 

**nota**  
Os exemplos nesta seção não incluem a criptografia de chaves de conteúdo. Para obter informações sobre como adicionar criptografia de chaves de conteúdo, consulte [Criptografia de chaves de conteúdo](content-key-encryption-v2.md).

 *Exemplo de carga de solicitação de VOD com chaves em branco* 

O exemplo a seguir mostra uma carga útil típica de solicitação VOD do criptografador para o provedor da chave DRM, com uma chave de conteúdo para todas as faixas de vídeo e uma chave de conteúdo para todas as faixas de áudio:

```
<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="cbcs"></cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</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>
```

 *Exemplo de carga de resposta de VOD com chaves em branco* 

O exemplo a seguir mostra uma carga útil de resposta típica do provedor de chaves DRM (os valores retornados foram encurtados com [...] para facilitar a leitura):

```
<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="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>h3toSFIlyAYpfXVQ795m6x==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">aHR0cHM6L[...]WZm</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">Y29tLmFwc[...]XJ5</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">trBAnbMcj[...]u44</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">mn626PjyR[...]2fi</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">lTznjvtzL[...]GfJ</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">XgzdzQH7p[...]zeX</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>TdgRnuJsZ[...]wDw</cpix:ContentProtectionData>
			<cpix:PSSH>mYZbjpWdS[...]D==</cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">HicXmbZ2m[...]4==</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">GVzdCIfa2[...]Eta</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
			<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">BptGzwis2[...]Iej</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">3c9SXdVa0[...]MBH</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>HotJCMQyc[...]GpU</cpix:ContentProtectionData>
			<cpix:PSSH>S6UD43ybN[...]f==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>VBFUv2or0[...]JeP</cpix:SmoothStreamingProtectionHeaderData>
		</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>
```

# API SPEKE v2: Criptografia de chave de conteúdo
<a name="content-key-encryption-v2"></a>

Também é possível adicionar a criptografia de chaves de conteúdo à sua implementação do SPEKE. A criptografia da chave de conteúdo garante end-to-end proteção total ao criptografar as chaves de conteúdo para trânsito, além de criptografar o próprio conteúdo. Se não a implementar no seu provedor de chaves, dependerá apenas da criptografia de camada de transporte e da forte autenticação para segurança.

Para usar a criptografia de chave de conteúdo para criptografadores executados na Nuvem AWS, os clientes importam certificados para o AWS Certificate Manager e, em seguida, usam o certificado resultante ARNs para suas atividades de criptografia. O criptografador usa o certificado ARNs e o serviço ACM para fornecer chaves de conteúdo criptografadas ao provedor da chave DRM.

**Restrições**  
O SPEKE oferece suporte à criptografia de chaves de conteúdo, conforme detalhado na especificação CPIX do DASH-IF, com as seguintes restrições:
+ O SPEKE não oferece suporte à verificação de assinatura digital (XMLDSIG) para cargas de solicitação ou resposta.
+ O SPEKE exige 2048 certificados baseados em RSA.

Essas restrições também estão listadas em [Personalizações e restrições à especificação DASH-IF](speke-constraints-v2.md).

**Implementar a criptografia de chaves de conteúdo**  
Para oferecer a criptografia de chaves de conteúdo, inclua o seguinte em suas implementações do provedor de chaves DRM:
+ Gerencie o elemento `<cpix:DeliveryDataList>` nas cargas de solicitação e de resposta.
+ Forneça valores criptografados em `<cpix:ContentKeyList>` das cargas de resposta.

Para obter mais informações sobre esses elementos, consulte a [Especificação do DASH-IF CPIX 2.3](https://dashif.org/docs/CPIX2.3/Cpix.html).

 *Exemplo de elemento de criptografia de chaves de conteúdo ` <cpix:DeliveryDataList> ` na carga de solicitação* 

```
<cpix:CPIX contentId="abc123"
    version="2.3"
    xmlns:cpix="urn:dashif:org:cpix"
    xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
    <cpix:DeliveryDataList>
        <cpix:DeliveryData id="<ORIGIN SERVER ID>">
            <cpix:DeliveryKey>
                <ds:X509Data>
                    <ds:X509Certificate><X.509 CERTIFICATE, BASE-64 ENCODED></ds:X509Certificate>
                </ds:X509Data>
            </cpix:DeliveryKey>
        </cpix:DeliveryData>
    </cpix:DeliveryDataList>
    <cpix:ContentKeyList>
     ...
    </cpix:ContentKeyList>
</cpix:CPIX>
```

 *Exemplo de elemento de criptografia de chaves de conteúdo ` <cpix:DeliveryDataList> ` na carga de resposta* 

```
<cpix:CPIX contentId="abc123"
    version="2.3"
    xmlns:cpix="urn:dashif:org:cpix"
    xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
    <cpix:DeliveryDataList>
        <cpix:DeliveryData id="<ORIGIN SERVER ID>">
            <cpix:DeliveryKey>
                <ds:X509Data>
                    <ds:X509Certificate><X.509 CERTIFICATE, BASE-64 ENCODED></ds:X509Certificate>
                </ds:X509Data>
            </cpix:DeliveryKey>
            <cpix:DocumentKey Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc">
                <cpix:Data>
                    <pskc:Secret>
                        <pskc:EncryptedValue>
                            <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
                            <enc:CipherData>
                                <enc:CipherValue><RSA CIPHER VALUE></enc:CipherValue>
                            </enc:CipherData>
                        </pskc:EncryptedValue>
                        <pskc:ValueMAC>qnei/5TsfUwDu+8bhsZrLjDRDngvmnUZD2eva7SfXWw=</pskc:ValueMAC>
                    </pskc:Secret>
                </cpix:Data>
            </cpix:DocumentKey>
            <cpix:MACMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha512">
                <cpix:Key>
                    <pskc:EncryptedValue>
                        <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
                        <enc:CipherData>
                            <enc:CipherValue><RSA CIPHER VALUE></enc:CipherValue>
                        </enc:CipherData>
                    </pskc:EncryptedValue>
                    <pskc:ValueMAC>DGqdpHUfFKxdsO9+EWrPjtdTCVfjPLwwtzEcFC/j0xY=</pskc:ValueMAC>
                </cpix:Key>
            </cpix:MACMethod>
        </cpix:DeliveryData>
    </cpix:DeliveryDataList>
    <cpix:ContentKeyList>
     ...
    </cpix:ContentKeyList>
</cpix:CPIX>
```

 *Exemplo de elemento de criptografia de chaves de conteúdo ` <cpix:ContentKeyList> ` na carga de resposta* 

O exemplo a seguir mostra o tratamento das chaves de conteúdo criptografadas no elemento `<cpix:ContentKeyList>` da carga de resposta. O elemento `<pskc:EncryptedValue>` é usado:

```
<cpix:ContentKeyList>
     <cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
         <cpix:Data>
             <pskc:Secret>
                 <pskc:EncryptedValue>
                     <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
                     <enc:CipherData>
                         <enc:CipherValue>NJYebfvJ2TdMm3k6v+rLNVYb0NoTJoTLBBdbpe8nmilEfp82SKa7MkqTn2lmQBPB</enc:CipherValue>
                     </enc:CipherData>
                 </pskc:EncryptedValue>
                 <pskc:ValueMAC>t9lW4WCebfS1GP+dh0IicMs+2+jnrAmfDa4WU6VGHc4=</pskc:ValueMAC>
             </pskc:Secret>
         </cpix:Data>
     </cpix:ContentKey>
 </cpix:ContentKeyList>
```

Por comparação, o exemplo a seguir mostra uma carga de resposta semelhante à chave de conteúdo entregue sem criptografia, como uma chave em branco. O elemento `<pskc:PlainValue>` é usado:

```
<cpix:ContentKeyList>
    <cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
        <cpix:Data>
            <pskc:Secret>
                <pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
            </pskc:Secret>
        </cpix:Data>
    </cpix:ContentKey>
</cpix:ContentKeyList>
```

# SPEKE API v2: Substituindo o identificador de chave
<a name="kid-override-v2"></a>

O criptografador cria um novo identificador de chave (KID) sempre que ele alterna chaves. Ele repassa o KID para o provedor de chaves de DRM nas solicitações. Quase sempre, o provedor de chaves responde usando o mesmo KID, mas pode fornecer um valor diferente para o KID na resposta.

O seguinte é uma solicitação de exemplo com o KID `11111111-1111-1111-1111-111111111111`:

```
<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="11111111-1111-1111-1111-111111111111" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- Widevine -->
		<cpix:DRMSystem kid="11111111-1111-1111-1111-111111111111" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="11111111-1111-1111-1111-111111111111" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

A seguinte resposta substitui o KID por `22222222-2222-2222-2222-222222222222`:

```
<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="22222222-2222-2222-2222-222222222222" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- Widevine -->
		<cpix:DRMSystem kid="22222222-2222-2222-2222-222222222222" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="22222222-2222-2222-2222-222222222222" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```