Add Provisioning 4 support
Widevine provisioning 4 support is added in this patch.
This commit is contained in:
@@ -20,9 +20,25 @@ message NameValue {
|
||||
optional string value = 2;
|
||||
}
|
||||
|
||||
message DeviceCertificate {
|
||||
message OemCertificate {
|
||||
enum PrivateKeyType {
|
||||
RSA = 0;
|
||||
ECC = 1;
|
||||
}
|
||||
optional bytes certificate = 1;
|
||||
optional bytes wrapped_private_key = 2;
|
||||
optional PrivateKeyType key_type = 3 [default = RSA];
|
||||
}
|
||||
|
||||
// DRM certificate.
|
||||
message DeviceCertificate {
|
||||
enum PrivateKeyType {
|
||||
RSA = 0;
|
||||
ECC = 1;
|
||||
}
|
||||
optional bytes certificate = 1;
|
||||
optional bytes wrapped_private_key = 2;
|
||||
optional PrivateKeyType key_type = 3 [default = RSA];
|
||||
}
|
||||
|
||||
message License {
|
||||
@@ -95,6 +111,8 @@ message File {
|
||||
USAGE_INFO = 3;
|
||||
HLS_ATTRIBUTES = 4;
|
||||
USAGE_TABLE_INFO = 5;
|
||||
OKP_INFO = 6;
|
||||
OEM_CERTIFICATE = 7;
|
||||
}
|
||||
|
||||
enum FileVersion { VERSION_1 = 1; }
|
||||
@@ -106,6 +124,8 @@ message File {
|
||||
optional UsageInfo usage_info = 5;
|
||||
optional HlsAttributes hls_attributes = 6;
|
||||
optional UsageTableInfo usage_table_info = 7;
|
||||
reserved 8;
|
||||
optional OemCertificate oem_certificate = 9;
|
||||
}
|
||||
|
||||
message HashedFile {
|
||||
|
||||
@@ -580,6 +580,30 @@ message GroupKeys {
|
||||
// Public protocol buffer definitions for Widevine Device Certificate
|
||||
// Provisioning protocol.
|
||||
|
||||
// A KeyToCertify contains a client generated public key to be incorporated into
|
||||
// a signed certificate.
|
||||
message PublicKeyToCertify {
|
||||
// A KeyType indicates a high level key type.
|
||||
enum KeyType {
|
||||
KEY_TYPE_UNSPECIFIED = 0;
|
||||
RSA = 1;
|
||||
ECC = 2;
|
||||
}
|
||||
|
||||
// |public_key| contains the bytes of an ASN.1 DER-encoded
|
||||
// SubjectPublicKeyInfo as specified in RFC 5280.
|
||||
optional bytes public_key = 1;
|
||||
// KeyType contains a highlevel hint to use in parsing the serialized key
|
||||
// contained in |public_key|. If the key is an EC key, curve parameters can be
|
||||
// extracted from the deserialized key.
|
||||
// Keys are expected to match the certificate key type in the device record.
|
||||
optional KeyType key_type = 2;
|
||||
// The signature of |public_key|.
|
||||
// Keys that are signed using ECDSA or RSA should hash the message using
|
||||
// SHA-256.
|
||||
optional bytes signature = 3;
|
||||
}
|
||||
|
||||
// ProvisioningOptions specifies the type of certificate to specify and
|
||||
// in the case of X509 certificates, the certificate authority to use.
|
||||
message ProvisioningOptions {
|
||||
@@ -642,6 +666,10 @@ message ProvisioningRequest {
|
||||
// SessionKeys encrypted using a service cert public key.
|
||||
// Required for keybox provisioning.
|
||||
optional EncryptedSessionKeys encrypted_session_keys = 8;
|
||||
// Specifies the public key that should be certified by the provisioning
|
||||
// server. The client holds the private key. If specified, the response no
|
||||
// longer needs to contain server generated |device_rsa_key|.
|
||||
optional PublicKeyToCertify certificate_public_key = 10;
|
||||
}
|
||||
|
||||
// Provisioning response sent by the provisioning server to client devices.
|
||||
@@ -758,6 +786,7 @@ message ClientIdentification {
|
||||
DRM_DEVICE_CERTIFICATE = 1;
|
||||
REMOTE_ATTESTATION_CERTIFICATE = 2;
|
||||
OEM_DEVICE_CERTIFICATE = 3;
|
||||
BOOT_CERTIFICATE_CHAIN = 4;
|
||||
}
|
||||
|
||||
message NameValue {
|
||||
@@ -810,6 +839,25 @@ message ClientIdentification {
|
||||
optional bool can_disable_analog_output = 11 [default = false];
|
||||
}
|
||||
|
||||
message ClientCredentials {
|
||||
// Deprecated. Use credential_type instead.
|
||||
optional TokenType type = 1 [default = KEYBOX];
|
||||
optional bytes token = 2;
|
||||
|
||||
// Additional types of credentials that may be present in the client
|
||||
// identification.
|
||||
enum CredentialType {
|
||||
CREDENTIAL_TYPE_UNKNOWN = 0;
|
||||
// CBOR format used by the Provisioning 4.0 phase 3 uploading model.
|
||||
CREDENTIAL_TYPE_BCC_SIGNATURE_CBOR = 1;
|
||||
// PKCS7 format, used by Provisioning 4.0 signing model.
|
||||
CREDENTIAL_TYPE_BCC_SIGNATURE_PKCS7 = 2;
|
||||
}
|
||||
|
||||
// The type of the token.
|
||||
optional CredentialType credential_type = 3;
|
||||
}
|
||||
|
||||
// Type of factory-provisioned device root of trust. Optional.
|
||||
optional TokenType type = 1 [default = KEYBOX];
|
||||
// Factory-provisioned device root of trust. Required.
|
||||
@@ -825,6 +873,8 @@ message ClientIdentification {
|
||||
optional ClientCapabilities client_capabilities = 6;
|
||||
// Serialized VmpData message. Optional.
|
||||
optional bytes vmp_data = 7;
|
||||
// Optional field that may contain additional provisioning credentials.
|
||||
optional ClientCredentials device_credentials = 8;
|
||||
}
|
||||
|
||||
// EncryptedClientIdentification message used to hold ClientIdentification
|
||||
@@ -1259,3 +1309,149 @@ message SignedCASDrmResponse {
|
||||
optional bytes response = 1;
|
||||
optional bytes signature = 2;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// drm_certificate.proto
|
||||
// ----------------------------------------------------------------------------
|
||||
// Description of section:
|
||||
// Definition of the root of trust identifier proto. The proto message contains
|
||||
// the EC-IES encrypted identifier (e.g. keybox unique id) for a device and
|
||||
// an associated hash. These can be used by Widevine to identify the root of
|
||||
// trust that was used to acquire a DRM certificate.
|
||||
//
|
||||
// In addition to the encrypted part and the hash, the proto contains the
|
||||
// version of the root of trust id which implies the EC key algorithm that was
|
||||
// used.
|
||||
// Next id: 5
|
||||
message RootOfTrustId {
|
||||
// The version specifies the EC algorithm that was used to generate the
|
||||
// root of trust id.
|
||||
enum RootOfTrustIdVersion {
|
||||
// Should not be used.
|
||||
ROOT_OF_TRUST_ID_VERSION_UNSPECIFIED = 0;
|
||||
// Version 1 of the ID uses EC-IES with SECP256R1 curve.
|
||||
ROOT_OF_TRUST_ID_VERSION_1 = 1;
|
||||
}
|
||||
optional RootOfTrustIdVersion version = 1;
|
||||
// The key_id is used for key rotation. It indicates which key was used to
|
||||
// generate the root of trust id.
|
||||
optional uint32 key_id = 2;
|
||||
|
||||
// The EC-IES encrypted message containing the unique_id. The bytes are
|
||||
// a concatenation of
|
||||
// 1) The ephemeral public key. Uncompressed keypoint format per X9.62.
|
||||
// 2) The plaintext encrypted with the derived AES key using AES CBC,
|
||||
// PKCS7 padding and a zerio iv.
|
||||
// 3) The HMAC SHA256 of the cipher text.
|
||||
optional bytes encrypted_unique_id = 3;
|
||||
|
||||
// The hash of encrypted unique id and other values.
|
||||
// unique_id_hash = SHA256(
|
||||
// encrypted_unique_id || system_id || SHA256(unique_id || secret_sauce)).
|
||||
optional bytes unique_id_hash = 4;
|
||||
}
|
||||
|
||||
// DRM certificate definition for user devices, intermediate, service, and root
|
||||
// certificates.
|
||||
// Next id: 13
|
||||
message DrmCertificate {
|
||||
enum Type {
|
||||
ROOT = 0; // ProtoBestPractices: ignore.
|
||||
DEVICE_MODEL = 1;
|
||||
DEVICE = 2;
|
||||
SERVICE = 3;
|
||||
PROVISIONER = 4;
|
||||
// Only used by internal L3 CDMs with baked-in (embedded) certificates that
|
||||
// support the Drm Reprovisioning method for individualization of embedded
|
||||
// certificates.
|
||||
DEVICE_EMBEDDED = 5;
|
||||
}
|
||||
enum ServiceType {
|
||||
UNKNOWN_SERVICE_TYPE = 0;
|
||||
LICENSE_SERVER_SDK = 1;
|
||||
LICENSE_SERVER_PROXY_SDK = 2;
|
||||
PROVISIONING_SDK = 3;
|
||||
CAS_PROXY_SDK = 4;
|
||||
}
|
||||
enum Algorithm {
|
||||
UNKNOWN_ALGORITHM = 0;
|
||||
RSA = 1;
|
||||
ECC_SECP256R1 = 2;
|
||||
ECC_SECP384R1 = 3;
|
||||
ECC_SECP521R1 = 4;
|
||||
}
|
||||
|
||||
message EncryptionKey {
|
||||
// Device public key. PKCS#1 ASN.1 DER-encoded. Required.
|
||||
optional bytes public_key = 1;
|
||||
// Required. The algorithm field contains the curve used to create the
|
||||
// |public_key| if algorithm is one of the ECC types.
|
||||
// The |algorithm| is used for both to determine the if the certificate is
|
||||
// ECC or RSA. The |algorithm| also specifies the parameters that were used
|
||||
// to create |public_key| and are used to create an ephemeral session key.
|
||||
optional Algorithm algorithm = 2 [default = RSA];
|
||||
}
|
||||
|
||||
// Type of certificate. Required.
|
||||
optional Type type = 1;
|
||||
// 128-bit globally unique serial number of certificate.
|
||||
// Value is 0 for root certificate. Required.
|
||||
optional bytes serial_number = 2;
|
||||
// POSIX time, in seconds, when the certificate was created. Required.
|
||||
optional uint32 creation_time_seconds = 3;
|
||||
// POSIX time, in seconds, when the certificate should expire. Value of zero
|
||||
// denotes indefinite expiry time. For more information on limited lifespan
|
||||
// DRM certificates see (go/limited-lifespan-drm-certificates).
|
||||
optional uint32 expiration_time_seconds = 12;
|
||||
// Device public key. PKCS#1 ASN.1 DER-encoded. Required.
|
||||
optional bytes public_key = 4;
|
||||
// Widevine system ID for the device. Required for intermediate and
|
||||
// user device certificates.
|
||||
optional uint32 system_id = 5;
|
||||
// Deprecated field, which used to indicate whether the device was a test
|
||||
// (non-production) device. The test_device field in ProvisionedDeviceInfo
|
||||
// below should be observed instead.
|
||||
optional bool test_device_deprecated = 6 [deprecated = true];
|
||||
// Service identifier (web origin) for the provider which owns the
|
||||
// certificate. Required for service and provisioner certificates.
|
||||
optional string provider_id = 7;
|
||||
// This field is used only when type = SERVICE to specify which SDK uses
|
||||
// service certificate. This repeated field is treated as a set. A certificate
|
||||
// may be used for the specified service SDK if the appropriate ServiceType
|
||||
// is specified in this field.
|
||||
repeated ServiceType service_types = 8;
|
||||
// Required. The algorithm field contains the curve used to create the
|
||||
// |public_key| if algorithm is one of the ECC types.
|
||||
// The |algorithm| is used for both to determine the if the certificate is ECC
|
||||
// or RSA. The |algorithm| also specifies the parameters that were used to
|
||||
// create |public_key| and are used to create an ephemeral session key.
|
||||
optional Algorithm algorithm = 9 [default = RSA];
|
||||
// Optional. May be present in DEVICE certificate types. This is the root
|
||||
// of trust identifier that holds an encrypted value that identifies the
|
||||
// keybox or other root of trust that was used to provision a DEVICE drm
|
||||
// certificate.
|
||||
optional RootOfTrustId rot_id = 10;
|
||||
// Optional. May be present in devices that explicitly support dual keys. When
|
||||
// present the |public_key| is used for verification of received license
|
||||
// request messages.
|
||||
optional EncryptionKey encryption_key = 11;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// signed_drm_certificate.proto
|
||||
// ----------------------------------------------------------------------------
|
||||
// Description of section:
|
||||
// Signed device certificate definition.
|
||||
|
||||
// DrmCertificate signed by a higher (CA) DRM certificate.
|
||||
message SignedDrmCertificate {
|
||||
// Serialized certificate. Required.
|
||||
optional bytes drm_certificate = 1;
|
||||
// Signature of certificate. Signed with root or intermediate
|
||||
// certificate specified below. Required.
|
||||
optional bytes signature = 2;
|
||||
// SignedDrmCertificate used to sign this certificate.
|
||||
optional SignedDrmCertificate signer = 3;
|
||||
// Optional field that indicates the hash algorithm used in signature scheme.
|
||||
optional HashAlgorithmProto hash_algorithm = 4;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user