

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: 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  | 