

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# SPEKE API v2 - Personalizzazioni e vincoli alla specifica DASH-IF
<a name="speke-constraints-v2"></a>

La specifica [CPIX](https://dashif.org/docs/CPIX2.3/Cpix.html) 2.3 del DASH Industry Forum supporta una serie di casi d'uso e topologie. La specifica SPEKE API v2.0 definisce sia un profilo CPIX che un'API per CPIX. Per raggiungere questi due obiettivi, aderisce alla specifica CPIX con le seguenti personalizzazioni e vincoli:

**Profilo CPIX**
+ SPEKE segue il flusso di lavoro di Encryptor Consumer.
+ Per le chiavi di contenuto crittografate, SPEKE applica le seguenti restrizioni:
  + SPEKE non supporta la verifica della firma digitale (XMLDSIG) per i payload di richiesta o risposta.
  + SPEKE richiede 2048 certificati basati su RSA.
+ SPEKE sfrutta solo un sottoinsieme di funzionalità CPIX:
  + SPEKE `UpdateHistoryItemList` omette la funzionalità. Se l'elenco è presente nella risposta, SPEKE lo ignora.
  + SPEKE omette la funzionalità chiave. root/leaf Se l'`ContentKey@dependsOnKey`attributo è presente nella risposta, SPEKE lo ignora.
  + SPEKE omette l'`BitrateFilter`elemento e l'attributo. `VideoFilter@wcg` Se questi elementi o attributi sono presenti nel payload CPIX, SPEKE lo ignora.
+ Solo gli elementi o gli attributi indicati come «Supportati» nella pagina [Standard Payload Components o nella pagina](standard-payload-components-v2.md) del [contratto di crittografia possono essere utilizzati nei documenti CPIX scambiati](encryption-contract-v2.md) con SPEKE v2.
+ Se inclusi in una richiesta CPIX dal criptatore, tutti gli elementi e gli attributi devono riportare un valore valido nella risposta CPIX del fornitore di chiavi. In caso contrario, l'encryptor si fermerà e genererà un errore.
+ SPEKE supporta la rotazione dei tasti con gli elementi. `KeyPeriodFilter` SPEKE utilizza solo il `ContentKeyPeriod@index` per tenere traccia del periodo chiave.
+ Per la segnalazione HLS, devono essere utilizzati più `DRMSystem.HLSSignalingData` elementi: uno con il valore di `DRMSystem.HLSSignalingData@playlist` attributo 'media' e l'altro con il valore di `DRMSystem.HLSSignalingData@playlist` attributo 'master'.
+ Al momento di richiedere le chiavi, il componente di crittografia potrebbe utilizzare l'attributo facoltativo `@explicitIV` dell'elemento `ContentKey`. Il provider di chiavi è in grado di rispondere con un IV utilizzando `@explicitIV`, anche se l'attributo non è incluso nella richiesta.
+ Il componente di crittografia crea l'identificatore chiave (`KID`), che rimane uguale per un determinato periodo di chiavi e ID di contenuti. Il provider di chiavi include `KID` nella risposta al documento di richiesta.
+ L'encryptor deve includere un valore per l'attributo. `CPIX@contentId` Quando riceve un valore vuoto per questo attributo, il fornitore della chiave restituirà un errore con la descrizione 'Missing CPIX @contentId '. `CPIX@contentId`il valore non può essere sovrascritto dal fornitore di chiavi.

   `CPIX@id`il valore, se non nullo, deve essere ignorato dal fornitore della chiave.
+ L'encryptor deve includere un valore per l'attributo. `CPIX@version` Quando riceve un valore vuoto per questo attributo, il fornitore della chiave restituirà un errore con la descrizione 'Missing CPIX @version '. Quando si riceve una richiesta con una versione non supportata, la descrizione dell'errore restituita dal fornitore della chiave è «Unsupported CPIX @version».

   `CPIX@version`il valore non può essere sovrascritto dal fornitore della chiave.
+ L'encryptor deve includere un valore per l'`ContentKey@commonEncryptionScheme`attributo per ogni chiave richiesta. Quando riceve un valore vuoto per questo attributo, il fornitore della chiave restituirà un errore con la descrizione 'Missing ContentKey @ commonEncryptionScheme for KID '. `id`

  Un documento CPIX unico non può combinare più valori per attributi diversi. `ContentKey@commonEncryptionScheme` Quando riceve una tale combinazione, il fornitore della chiave restituirà un errore con la descrizione «Combinazione @ non conforme ContentKey». commonEncryptionScheme 

  Non tutti i `ContentKey@commonEncryptionScheme` valori sono compatibili con tutte le tecnologie DRM. Quando riceve una tale combinazione, il fornitore della chiave restituirà un errore con la descrizione 'ContentKey@ commonEncryptionScheme non compatibile con DRMSystem `id`'.

   `ContentKey@commonEncryptionScheme`il valore non può essere sovrascritto dal fornitore della chiave.
+ Quando riceve valori diversi per `DRMSystem@PSSH` un `<pssh>` elemento `DRMSystem.ContentProtectionData` innerXML nel corpo della risposta CPIX, l'encryptor si interromperà e genererà un errore.

**API per CPIX**
+ Il fornitore di chiavi deve includere un valore per l'intestazione della risposta `X-Speke-User-Agent` HTTP.
+ Un crittografo conforme a SPEKE funge da client e invia operazioni POST all'endpoint del provider di chiavi.
+ Il criptatore deve includere un valore per l'intestazione della richiesta `X-Speke-Version` HTTP, con la versione SPEKE utilizzata con la richiesta, formulata come. MajorVersion MinorVersion, come '2.0' per SPEKE v2.0. Se il fornitore di chiavi non supporta la versione SPEKE utilizzata dall'encryptor per la richiesta corrente, restituirà un errore con la descrizione «Versione SPEKE non supportata» e non tenterà di elaborare il documento CPIX con la massima diligenza.

  Il valore dell'`X-Speke-Version`intestazione definito dall'encoder non può essere modificato dal fornitore della chiave nella risposta alla richiesta.
+ Quando riceve errori nel corpo della risposta, il criptatore deve generare un errore e non riprovare la richiesta con una versione SPEKE v1.0.

  Se il fornitore di chiavi non restituisce un errore ma non riesce a restituire un documento CPIX che include le informazioni obbligatorie, il criptatore dovrebbe fermarsi e generare un errore.

La tabella seguente riassume i messaggi standard che devono essere restituiti dal fornitore di chiavi nel corpo del messaggio. Il codice di risposta HTTP in caso di errore deve essere un 4XX o un 5XX, mai un 200. Il codice di errore 422 può essere utilizzato per tutti gli errori relativi a SPEKE/CPIX.


| Caso di errore | Messaggio di errore | 
| --- | --- | 
|  CPIX @contentId non è definito  |  CPIX @contentId mancante  | 
|  CPIX @version non è definito  |  Manca CPIX @version  | 
|  CPIX @version non è supportato  |  CPIX @version non supportato  | 
|  ContentKey@ commonEncryptionScheme non è definito  |   ContentKey@ mancante commonEncryptionScheme per KID `id` (dove è `id` uguale al valore ContentKey @kid)  | 
|  Più commonEncryptionScheme valori ContentKey @ utilizzati in un singolo documento CPIX  |  Combinazione @ non conforme ContentKey commonEncryptionScheme   | 
|  ContentKey@ non commonEncryptionScheme è compatibile con la tecnologia DRM  |  ContentKey@ commonEncryptionScheme non compatibile con DRMSystem `id` (dove è `id` uguale DRMSystem al valore @systemId)  | 
|  X-Speke-Version il valore dell'intestazione non è una versione SPEKE supportata  |  Versione SPEKE non supportata  | 
|  Il contratto di crittografia non è valido  |  Contratto di crittografia non valido  | 
|  Il contratto di crittografia contraddice i vincoli relativi ai livelli di sicurezza del DRM  |  Il contratto di crittografia CPIX richiesto non è supportato  | 
|  Il contratto di crittografia non include alcun elemento or VideoFilter AudioFilter   |  Contratto di crittografia CPIX mancante  | 