""" @generated by mypy-protobuf. Do not edit manually! isort:skip_file """ import builtins import collections.abc import google.protobuf.descriptor import google.protobuf.internal.containers import google.protobuf.internal.enum_type_wrapper import google.protobuf.message import sys import typing if sys.version_info >= (3, 10): import typing as typing_extensions else: import typing_extensions DESCRIPTOR: google.protobuf.descriptor.FileDescriptor class _LicenseType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _LicenseTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_LicenseType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor STREAMING: _LicenseType.ValueType # 1 OFFLINE: _LicenseType.ValueType # 2 AUTOMATIC: _LicenseType.ValueType # 3 """License type decision is left to provider.""" class LicenseType(_LicenseType, metaclass=_LicenseTypeEnumTypeWrapper): """---------------------------------------------------------------------------- license_protocol.proto ---------------------------------------------------------------------------- Description of section: Definitions of the protocol buffer messages used in the Widevine license exchange protocol, described in Widevine license exchange protocol document """ STREAMING: LicenseType.ValueType # 1 OFFLINE: LicenseType.ValueType # 2 AUTOMATIC: LicenseType.ValueType # 3 """License type decision is left to provider.""" global___LicenseType = LicenseType class _ProtocolVersion: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _ProtocolVersionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ProtocolVersion.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor VERSION_2_0: _ProtocolVersion.ValueType # 20 VERSION_2_1: _ProtocolVersion.ValueType # 21 VERSION_2_2: _ProtocolVersion.ValueType # 22 class ProtocolVersion(_ProtocolVersion, metaclass=_ProtocolVersionEnumTypeWrapper): ... VERSION_2_0: ProtocolVersion.ValueType # 20 VERSION_2_1: ProtocolVersion.ValueType # 21 VERSION_2_2: ProtocolVersion.ValueType # 22 global___ProtocolVersion = ProtocolVersion class _HashAlgorithmProto: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _HashAlgorithmProtoEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_HashAlgorithmProto.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor HASH_ALGORITHM_UNSPECIFIED: _HashAlgorithmProto.ValueType # 0 """Unspecified hash algorithm: SHA_256 shall be used for ECC based algorithms and SHA_1 shall be used otherwise. """ HASH_ALGORITHM_SHA_1: _HashAlgorithmProto.ValueType # 1 HASH_ALGORITHM_SHA_256: _HashAlgorithmProto.ValueType # 2 HASH_ALGORITHM_SHA_384: _HashAlgorithmProto.ValueType # 3 class HashAlgorithmProto(_HashAlgorithmProto, metaclass=_HashAlgorithmProtoEnumTypeWrapper): """---------------------------------------------------------------------------- hash_algorithm.proto ---------------------------------------------------------------------------- Description of section: Public protocol buffer definitions for Widevine Hash Algorithm protocol. """ HASH_ALGORITHM_UNSPECIFIED: HashAlgorithmProto.ValueType # 0 """Unspecified hash algorithm: SHA_256 shall be used for ECC based algorithms and SHA_1 shall be used otherwise. """ HASH_ALGORITHM_SHA_1: HashAlgorithmProto.ValueType # 1 HASH_ALGORITHM_SHA_256: HashAlgorithmProto.ValueType # 2 HASH_ALGORITHM_SHA_384: HashAlgorithmProto.ValueType # 3 global___HashAlgorithmProto = HashAlgorithmProto @typing.final class LicenseIdentification(google.protobuf.message.Message): """LicenseIdentification is propagated from LicenseRequest to License, incrementing version with each iteration. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor REQUEST_ID_FIELD_NUMBER: builtins.int SESSION_ID_FIELD_NUMBER: builtins.int PURCHASE_ID_FIELD_NUMBER: builtins.int TYPE_FIELD_NUMBER: builtins.int VERSION_FIELD_NUMBER: builtins.int PROVIDER_SESSION_TOKEN_FIELD_NUMBER: builtins.int ORIGINAL_RENTAL_DURATION_SECONDS_FIELD_NUMBER: builtins.int ORIGINAL_PLAYBACK_DURATION_SECONDS_FIELD_NUMBER: builtins.int ORIGINAL_START_TIME_SECONDS_FIELD_NUMBER: builtins.int request_id: builtins.bytes session_id: builtins.bytes purchase_id: builtins.bytes type: global___LicenseType.ValueType version: builtins.int provider_session_token: builtins.bytes original_rental_duration_seconds: builtins.int original_playback_duration_seconds: builtins.int original_start_time_seconds: builtins.int def __init__( self, *, request_id: builtins.bytes | None = ..., session_id: builtins.bytes | None = ..., purchase_id: builtins.bytes | None = ..., type: global___LicenseType.ValueType | None = ..., version: builtins.int | None = ..., provider_session_token: builtins.bytes | None = ..., original_rental_duration_seconds: builtins.int | None = ..., original_playback_duration_seconds: builtins.int | None = ..., original_start_time_seconds: builtins.int | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["original_playback_duration_seconds", b"original_playback_duration_seconds", "original_rental_duration_seconds", b"original_rental_duration_seconds", "original_start_time_seconds", b"original_start_time_seconds", "provider_session_token", b"provider_session_token", "purchase_id", b"purchase_id", "request_id", b"request_id", "session_id", b"session_id", "type", b"type", "version", b"version"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["original_playback_duration_seconds", b"original_playback_duration_seconds", "original_rental_duration_seconds", b"original_rental_duration_seconds", "original_start_time_seconds", b"original_start_time_seconds", "provider_session_token", b"provider_session_token", "purchase_id", b"purchase_id", "request_id", b"request_id", "session_id", b"session_id", "type", b"type", "version", b"version"]) -> None: ... global___LicenseIdentification = LicenseIdentification @typing.final class LicenseRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor class _RequestType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _RequestTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[LicenseRequest._RequestType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor NEW: LicenseRequest._RequestType.ValueType # 1 RENEWAL: LicenseRequest._RequestType.ValueType # 2 RELEASE: LicenseRequest._RequestType.ValueType # 3 class RequestType(_RequestType, metaclass=_RequestTypeEnumTypeWrapper): ... NEW: LicenseRequest.RequestType.ValueType # 1 RENEWAL: LicenseRequest.RequestType.ValueType # 2 RELEASE: LicenseRequest.RequestType.ValueType # 3 @typing.final class ContentIdentification(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @typing.final class WidevinePsshData(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor PSSH_DATA_FIELD_NUMBER: builtins.int LICENSE_TYPE_FIELD_NUMBER: builtins.int REQUEST_ID_FIELD_NUMBER: builtins.int license_type: global___LicenseType.ValueType request_id: builtins.bytes """Opaque, client-specified.""" @property def pssh_data(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.bytes]: """repeated WidevinePsshData pssh_data = 1;""" def __init__( self, *, pssh_data: collections.abc.Iterable[builtins.bytes] | None = ..., license_type: global___LicenseType.ValueType | None = ..., request_id: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["license_type", b"license_type", "request_id", b"request_id"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["license_type", b"license_type", "pssh_data", b"pssh_data", "request_id", b"request_id"]) -> None: ... @typing.final class WebmKeyId(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor HEADER_FIELD_NUMBER: builtins.int LICENSE_TYPE_FIELD_NUMBER: builtins.int REQUEST_ID_FIELD_NUMBER: builtins.int header: builtins.bytes license_type: global___LicenseType.ValueType request_id: builtins.bytes """Opaque, client-specified.""" def __init__( self, *, header: builtins.bytes | None = ..., license_type: global___LicenseType.ValueType | None = ..., request_id: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["header", b"header", "license_type", b"license_type", "request_id", b"request_id"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["header", b"header", "license_type", b"license_type", "request_id", b"request_id"]) -> None: ... @typing.final class ExistingLicense(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor LICENSE_ID_FIELD_NUMBER: builtins.int SECONDS_SINCE_STARTED_FIELD_NUMBER: builtins.int SECONDS_SINCE_LAST_PLAYED_FIELD_NUMBER: builtins.int SESSION_USAGE_TABLE_ENTRY_FIELD_NUMBER: builtins.int seconds_since_started: builtins.int seconds_since_last_played: builtins.int session_usage_table_entry: builtins.bytes @property def license_id(self) -> global___LicenseIdentification: ... def __init__( self, *, license_id: global___LicenseIdentification | None = ..., seconds_since_started: builtins.int | None = ..., seconds_since_last_played: builtins.int | None = ..., session_usage_table_entry: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["license_id", b"license_id", "seconds_since_last_played", b"seconds_since_last_played", "seconds_since_started", b"seconds_since_started", "session_usage_table_entry", b"session_usage_table_entry"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["license_id", b"license_id", "seconds_since_last_played", b"seconds_since_last_played", "seconds_since_started", b"seconds_since_started", "session_usage_table_entry", b"session_usage_table_entry"]) -> None: ... @typing.final class InitData(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor class _InitDataType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _InitDataTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[LicenseRequest.ContentIdentification.InitData._InitDataType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor CENC: LicenseRequest.ContentIdentification.InitData._InitDataType.ValueType # 1 WEBM: LicenseRequest.ContentIdentification.InitData._InitDataType.ValueType # 2 class InitDataType(_InitDataType, metaclass=_InitDataTypeEnumTypeWrapper): ... CENC: LicenseRequest.ContentIdentification.InitData.InitDataType.ValueType # 1 WEBM: LicenseRequest.ContentIdentification.InitData.InitDataType.ValueType # 2 INIT_DATA_TYPE_FIELD_NUMBER: builtins.int INIT_DATA_FIELD_NUMBER: builtins.int LICENSE_TYPE_FIELD_NUMBER: builtins.int REQUEST_ID_FIELD_NUMBER: builtins.int init_data_type: global___LicenseRequest.ContentIdentification.InitData.InitDataType.ValueType init_data: builtins.bytes license_type: global___LicenseType.ValueType request_id: builtins.bytes def __init__( self, *, init_data_type: global___LicenseRequest.ContentIdentification.InitData.InitDataType.ValueType | None = ..., init_data: builtins.bytes | None = ..., license_type: global___LicenseType.ValueType | None = ..., request_id: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["init_data", b"init_data", "init_data_type", b"init_data_type", "license_type", b"license_type", "request_id", b"request_id"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["init_data", b"init_data", "init_data_type", b"init_data_type", "license_type", b"license_type", "request_id", b"request_id"]) -> None: ... WIDEVINE_PSSH_DATA_FIELD_NUMBER: builtins.int WEBM_KEY_ID_FIELD_NUMBER: builtins.int EXISTING_LICENSE_FIELD_NUMBER: builtins.int INIT_DATA_FIELD_NUMBER: builtins.int @property def widevine_pssh_data(self) -> global___LicenseRequest.ContentIdentification.WidevinePsshData: """Exactly one of these must be present.""" @property def webm_key_id(self) -> global___LicenseRequest.ContentIdentification.WebmKeyId: ... @property def existing_license(self) -> global___LicenseRequest.ContentIdentification.ExistingLicense: ... @property def init_data(self) -> global___LicenseRequest.ContentIdentification.InitData: ... def __init__( self, *, widevine_pssh_data: global___LicenseRequest.ContentIdentification.WidevinePsshData | None = ..., webm_key_id: global___LicenseRequest.ContentIdentification.WebmKeyId | None = ..., existing_license: global___LicenseRequest.ContentIdentification.ExistingLicense | None = ..., init_data: global___LicenseRequest.ContentIdentification.InitData | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["content_id_variant", b"content_id_variant", "existing_license", b"existing_license", "init_data", b"init_data", "webm_key_id", b"webm_key_id", "widevine_pssh_data", b"widevine_pssh_data"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["content_id_variant", b"content_id_variant", "existing_license", b"existing_license", "init_data", b"init_data", "webm_key_id", b"webm_key_id", "widevine_pssh_data", b"widevine_pssh_data"]) -> None: ... def WhichOneof(self, oneof_group: typing.Literal["content_id_variant", b"content_id_variant"]) -> typing.Literal["widevine_pssh_data", "webm_key_id", "existing_license", "init_data"] | None: ... @typing.final class SubSessionData(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor SUB_SESSION_KEY_ID_FIELD_NUMBER: builtins.int NONCE_FIELD_NUMBER: builtins.int TRACK_LABEL_FIELD_NUMBER: builtins.int sub_session_key_id: builtins.str """Required. The key ID for the corresponding SUB_SESSION_KEY. The value must match the sub_session_key_id field for a corresponding SubLicense message from the PSSH. """ nonce: builtins.int """Required. The nonce for the track.""" track_label: builtins.str """Required for initial license request used for each CONTENT key_container to know which nonce to use for building its key control block. Not needed for renewal license request. """ def __init__( self, *, sub_session_key_id: builtins.str | None = ..., nonce: builtins.int | None = ..., track_label: builtins.str | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["nonce", b"nonce", "sub_session_key_id", b"sub_session_key_id", "track_label", b"track_label"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["nonce", b"nonce", "sub_session_key_id", b"sub_session_key_id", "track_label", b"track_label"]) -> None: ... CLIENT_ID_FIELD_NUMBER: builtins.int CONTENT_ID_FIELD_NUMBER: builtins.int TYPE_FIELD_NUMBER: builtins.int REQUEST_TIME_FIELD_NUMBER: builtins.int KEY_CONTROL_NONCE_DEPRECATED_FIELD_NUMBER: builtins.int PROTOCOL_VERSION_FIELD_NUMBER: builtins.int KEY_CONTROL_NONCE_FIELD_NUMBER: builtins.int ENCRYPTED_CLIENT_ID_FIELD_NUMBER: builtins.int CLIENT_VERSION_FIELD_NUMBER: builtins.int type: global___LicenseRequest.RequestType.ValueType request_time: builtins.int """Time of the request in seconds (UTC) as set by the client.""" key_control_nonce_deprecated: builtins.bytes """Old-style decimal-encoded string key control nonce.""" protocol_version: global___ProtocolVersion.ValueType key_control_nonce: builtins.int """New-style uint32 key control nonce, please use instead of key_control_nonce_deprecated. """ client_version: builtins.str """Optional sub session context information. Required for using SubLicenses from the PSSH. repeated SubSessionData sub_session_data = 9; """ @property def client_id(self) -> global___ClientIdentification: """The client_id provides information authenticating the calling device. It contains the Widevine keybox token that was installed on the device at the factory. This field or encrypted_client_id below is required for a valid license request, but both should never be present in the same request. """ @property def content_id(self) -> global___LicenseRequest.ContentIdentification: ... @property def encrypted_client_id(self) -> global___EncryptedClientIdentification: """Encrypted ClientIdentification message, used for privacy purposes.""" def __init__( self, *, client_id: global___ClientIdentification | None = ..., content_id: global___LicenseRequest.ContentIdentification | None = ..., type: global___LicenseRequest.RequestType.ValueType | None = ..., request_time: builtins.int | None = ..., key_control_nonce_deprecated: builtins.bytes | None = ..., protocol_version: global___ProtocolVersion.ValueType | None = ..., key_control_nonce: builtins.int | None = ..., encrypted_client_id: global___EncryptedClientIdentification | None = ..., client_version: builtins.str | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["client_id", b"client_id", "client_version", b"client_version", "content_id", b"content_id", "encrypted_client_id", b"encrypted_client_id", "key_control_nonce", b"key_control_nonce", "key_control_nonce_deprecated", b"key_control_nonce_deprecated", "protocol_version", b"protocol_version", "request_time", b"request_time", "type", b"type"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["client_id", b"client_id", "client_version", b"client_version", "content_id", b"content_id", "encrypted_client_id", b"encrypted_client_id", "key_control_nonce", b"key_control_nonce", "key_control_nonce_deprecated", b"key_control_nonce_deprecated", "protocol_version", b"protocol_version", "request_time", b"request_time", "type", b"type"]) -> None: ... global___LicenseRequest = LicenseRequest @typing.final class MetricData(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor class _MetricType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _MetricTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[MetricData._MetricType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor LATENCY: MetricData._MetricType.ValueType # 1 """The time spent in the 'stage', specified in microseconds.""" TIMESTAMP: MetricData._MetricType.ValueType # 2 """The UNIX epoch timestamp at which the 'stage' was first accessed in microseconds. """ class MetricType(_MetricType, metaclass=_MetricTypeEnumTypeWrapper): ... LATENCY: MetricData.MetricType.ValueType # 1 """The time spent in the 'stage', specified in microseconds.""" TIMESTAMP: MetricData.MetricType.ValueType # 2 """The UNIX epoch timestamp at which the 'stage' was first accessed in microseconds. """ @typing.final class TypeValue(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor TYPE_FIELD_NUMBER: builtins.int VALUE_FIELD_NUMBER: builtins.int type: global___MetricData.MetricType.ValueType value: builtins.int """The value associated with 'type'. For example if type == LATENCY, the value would be the time in microseconds spent in this 'stage'. """ def __init__( self, *, type: global___MetricData.MetricType.ValueType | None = ..., value: builtins.int | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["type", b"type", "value", b"value"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["type", b"type", "value", b"value"]) -> None: ... STAGE_NAME_FIELD_NUMBER: builtins.int METRIC_DATA_FIELD_NUMBER: builtins.int stage_name: builtins.str """'stage' that is currently processing the SignedMessage. Required.""" @property def metric_data(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___MetricData.TypeValue]: """metric and associated value.""" def __init__( self, *, stage_name: builtins.str | None = ..., metric_data: collections.abc.Iterable[global___MetricData.TypeValue] | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["stage_name", b"stage_name"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["metric_data", b"metric_data", "stage_name", b"stage_name"]) -> None: ... global___MetricData = MetricData @typing.final class VersionInfo(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor LICENSE_SDK_VERSION_FIELD_NUMBER: builtins.int LICENSE_SERVICE_VERSION_FIELD_NUMBER: builtins.int license_sdk_version: builtins.str """License SDK version reported by the Widevine License SDK. This field is populated automatically by the SDK. """ license_service_version: builtins.str """Version of the service hosting the license SDK. This field is optional. It may be provided by the hosting service. """ def __init__( self, *, license_sdk_version: builtins.str | None = ..., license_service_version: builtins.str | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["license_sdk_version", b"license_sdk_version", "license_service_version", b"license_service_version"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["license_sdk_version", b"license_sdk_version", "license_service_version", b"license_service_version"]) -> None: ... global___VersionInfo = VersionInfo @typing.final class SignedMessage(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor class _MessageType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _MessageTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SignedMessage._MessageType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor LICENSE_REQUEST: SignedMessage._MessageType.ValueType # 1 LICENSE: SignedMessage._MessageType.ValueType # 2 ERROR_RESPONSE: SignedMessage._MessageType.ValueType # 3 SERVICE_CERTIFICATE_REQUEST: SignedMessage._MessageType.ValueType # 4 SERVICE_CERTIFICATE: SignedMessage._MessageType.ValueType # 5 SUB_LICENSE: SignedMessage._MessageType.ValueType # 6 CAS_LICENSE_REQUEST: SignedMessage._MessageType.ValueType # 7 CAS_LICENSE: SignedMessage._MessageType.ValueType # 8 EXTERNAL_LICENSE_REQUEST: SignedMessage._MessageType.ValueType # 9 EXTERNAL_LICENSE: SignedMessage._MessageType.ValueType # 10 class MessageType(_MessageType, metaclass=_MessageTypeEnumTypeWrapper): ... LICENSE_REQUEST: SignedMessage.MessageType.ValueType # 1 LICENSE: SignedMessage.MessageType.ValueType # 2 ERROR_RESPONSE: SignedMessage.MessageType.ValueType # 3 SERVICE_CERTIFICATE_REQUEST: SignedMessage.MessageType.ValueType # 4 SERVICE_CERTIFICATE: SignedMessage.MessageType.ValueType # 5 SUB_LICENSE: SignedMessage.MessageType.ValueType # 6 CAS_LICENSE_REQUEST: SignedMessage.MessageType.ValueType # 7 CAS_LICENSE: SignedMessage.MessageType.ValueType # 8 EXTERNAL_LICENSE_REQUEST: SignedMessage.MessageType.ValueType # 9 EXTERNAL_LICENSE: SignedMessage.MessageType.ValueType # 10 class _SessionKeyType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _SessionKeyTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SignedMessage._SessionKeyType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor UNDEFINED: SignedMessage._SessionKeyType.ValueType # 0 WRAPPED_AES_KEY: SignedMessage._SessionKeyType.ValueType # 1 EPHERMERAL_ECC_PUBLIC_KEY: SignedMessage._SessionKeyType.ValueType # 2 class SessionKeyType(_SessionKeyType, metaclass=_SessionKeyTypeEnumTypeWrapper): ... UNDEFINED: SignedMessage.SessionKeyType.ValueType # 0 WRAPPED_AES_KEY: SignedMessage.SessionKeyType.ValueType # 1 EPHERMERAL_ECC_PUBLIC_KEY: SignedMessage.SessionKeyType.ValueType # 2 TYPE_FIELD_NUMBER: builtins.int MSG_FIELD_NUMBER: builtins.int SIGNATURE_FIELD_NUMBER: builtins.int SESSION_KEY_FIELD_NUMBER: builtins.int REMOTE_ATTESTATION_FIELD_NUMBER: builtins.int METRIC_DATA_FIELD_NUMBER: builtins.int SERVICE_VERSION_INFO_FIELD_NUMBER: builtins.int SESSION_KEY_TYPE_FIELD_NUMBER: builtins.int OEMCRYPTO_CORE_MESSAGE_FIELD_NUMBER: builtins.int USING_SECONDARY_KEY_FIELD_NUMBER: builtins.int type: global___SignedMessage.MessageType.ValueType msg: builtins.bytes signature: builtins.bytes """Required field that contains the signature of the bytes of msg. For license requests, the signing algorithm is determined by the certificate contained in the request. For license responses, the signing algorithm is HMAC with signing key based on |session_key|. """ session_key: builtins.bytes """If populated, the contents of this field will be signaled by the |session_key_type| type. If the |session_key_type| is WRAPPED_AES_KEY the key is the bytes of an encrypted AES key. If the |session_key_type| is EPHERMERAL_ECC_PUBLIC_KEY the field contains the bytes of an RFC5208 ASN1 serialized ECC public key. """ remote_attestation: builtins.bytes """Remote attestation data which will be present in the initial license request for ChromeOS client devices operating in verified mode. Remote attestation challenge data is |msg| field above. Optional. """ session_key_type: global___SignedMessage.SessionKeyType.ValueType """Optional field that contains the algorithm type used to generate the session_key and signature in a LICENSE message. """ oemcrypto_core_message: builtins.bytes """The core message is the simple serialization of fields used by OEMCrypto. This field was introduced in OEMCrypto API v16. """ using_secondary_key: builtins.bool @property def metric_data(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___MetricData]: ... @property def service_version_info(self) -> global___VersionInfo: """Version information from the SDK and license service. This information is provided in the license response. """ def __init__( self, *, type: global___SignedMessage.MessageType.ValueType | None = ..., msg: builtins.bytes | None = ..., signature: builtins.bytes | None = ..., session_key: builtins.bytes | None = ..., remote_attestation: builtins.bytes | None = ..., metric_data: collections.abc.Iterable[global___MetricData] | None = ..., service_version_info: global___VersionInfo | None = ..., session_key_type: global___SignedMessage.SessionKeyType.ValueType | None = ..., oemcrypto_core_message: builtins.bytes | None = ..., using_secondary_key: builtins.bool | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["msg", b"msg", "oemcrypto_core_message", b"oemcrypto_core_message", "remote_attestation", b"remote_attestation", "service_version_info", b"service_version_info", "session_key", b"session_key", "session_key_type", b"session_key_type", "signature", b"signature", "type", b"type", "using_secondary_key", b"using_secondary_key"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["metric_data", b"metric_data", "msg", b"msg", "oemcrypto_core_message", b"oemcrypto_core_message", "remote_attestation", b"remote_attestation", "service_version_info", b"service_version_info", "session_key", b"session_key", "session_key_type", b"session_key_type", "signature", b"signature", "type", b"type", "using_secondary_key", b"using_secondary_key"]) -> None: ... global___SignedMessage = SignedMessage @typing.final class ProvisioningResponse(google.protobuf.message.Message): """---------------------------------------------------------------------------- certificate_provisioning.proto ---------------------------------------------------------------------------- Description of section: Public protocol buffer definitions for Widevine Device Certificate Provisioning protocol. Provisioning response sent by the provisioning server to client devices. This message is used for both regular Widevine DRM certificates and for application-specific X.509 certificates. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor class _ProvisioningStatus: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _ProvisioningStatusEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ProvisioningResponse._ProvisioningStatus.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor NO_ERROR: ProvisioningResponse._ProvisioningStatus.ValueType # 0 """Indicates a valid provisioning response""" REVOKED_DEVICE_CREDENTIALS: ProvisioningResponse._ProvisioningStatus.ValueType # 1 """The device credentials have been revoked. Provisioning is not possible.""" REVOKED_DEVICE_SERIES: ProvisioningResponse._ProvisioningStatus.ValueType # 2 """Devices in this series have been revoked. Provisioning is not possible.""" class ProvisioningStatus(_ProvisioningStatus, metaclass=_ProvisioningStatusEnumTypeWrapper): ... NO_ERROR: ProvisioningResponse.ProvisioningStatus.ValueType # 0 """Indicates a valid provisioning response""" REVOKED_DEVICE_CREDENTIALS: ProvisioningResponse.ProvisioningStatus.ValueType # 1 """The device credentials have been revoked. Provisioning is not possible.""" REVOKED_DEVICE_SERIES: ProvisioningResponse.ProvisioningStatus.ValueType # 2 """Devices in this series have been revoked. Provisioning is not possible.""" @typing.final class OtaKeybox(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor DEVICE_KEY_ENCRYPTION_IV_FIELD_NUMBER: builtins.int ENCRYPTED_DEVICE_KEY_FIELD_NUMBER: builtins.int DEVICE_CA_TOKEN_FIELD_NUMBER: builtins.int device_key_encryption_iv: builtins.bytes """Iv used along with SessionKeys.encryption_key for encrypting device key.""" encrypted_device_key: builtins.bytes """Device key component of the keybox, encrypted using the SessionKeys.encryption_key in the request and |device_key_encryption_iv| above. """ device_ca_token: builtins.bytes """Device CA token component of the keybox.""" def __init__( self, *, device_key_encryption_iv: builtins.bytes | None = ..., encrypted_device_key: builtins.bytes | None = ..., device_ca_token: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["device_ca_token", b"device_ca_token", "device_key_encryption_iv", b"device_key_encryption_iv", "encrypted_device_key", b"encrypted_device_key"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["device_ca_token", b"device_ca_token", "device_key_encryption_iv", b"device_key_encryption_iv", "encrypted_device_key", b"encrypted_device_key"]) -> None: ... DEVICE_RSA_KEY_FIELD_NUMBER: builtins.int DEVICE_RSA_KEY_IV_FIELD_NUMBER: builtins.int DEVICE_CERTIFICATE_FIELD_NUMBER: builtins.int NONCE_FIELD_NUMBER: builtins.int WRAPPING_KEY_FIELD_NUMBER: builtins.int OTA_KEYBOX_FIELD_NUMBER: builtins.int STATUS_FIELD_NUMBER: builtins.int device_rsa_key: builtins.bytes """AES-128 encrypted device private RSA key. PKCS#1 ASN.1 DER-encoded. Required. For X.509 certificates, the private RSA key may also include a prefix as specified by private_key_prefix in the X509CertificateMetadata proto message. """ device_rsa_key_iv: builtins.bytes """Initialization vector used to encrypt device_rsa_key. Required.""" device_certificate: builtins.bytes """For Widevine DRM certificates, this contains the serialized SignedDrmCertificate. For X.509 certificates, this contains the PEM encoded X.509 certificate. Required. """ nonce: builtins.bytes """Nonce value matching nonce in ProvisioningRequest. Required.""" wrapping_key: builtins.bytes """Key used to wrap device_rsa_key when DRM provisioning an OEM factory provisioned device. Encrypted with the device OEM public key using RSA-OAEP. """ status: global___ProvisioningResponse.ProvisioningStatus.ValueType """The provisioning service may return a ProvisioningStatus. Fields other than |status| may be empty and should be ignored if the |status| is present and not NO_ERROR """ @property def ota_keybox(self) -> global___ProvisioningResponse.OtaKeybox: """Only populated in OTA keybox provisioning response.""" def __init__( self, *, device_rsa_key: builtins.bytes | None = ..., device_rsa_key_iv: builtins.bytes | None = ..., device_certificate: builtins.bytes | None = ..., nonce: builtins.bytes | None = ..., wrapping_key: builtins.bytes | None = ..., ota_keybox: global___ProvisioningResponse.OtaKeybox | None = ..., status: global___ProvisioningResponse.ProvisioningStatus.ValueType | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["device_certificate", b"device_certificate", "device_rsa_key", b"device_rsa_key", "device_rsa_key_iv", b"device_rsa_key_iv", "nonce", b"nonce", "ota_keybox", b"ota_keybox", "status", b"status", "wrapping_key", b"wrapping_key"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["device_certificate", b"device_certificate", "device_rsa_key", b"device_rsa_key", "device_rsa_key_iv", b"device_rsa_key_iv", "nonce", b"nonce", "ota_keybox", b"ota_keybox", "status", b"status", "wrapping_key", b"wrapping_key"]) -> None: ... global___ProvisioningResponse = ProvisioningResponse @typing.final class SignedProvisioningContext(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor PROVISIONING_CONTEXT_FIELD_NUMBER: builtins.int SIGNATURE_FIELD_NUMBER: builtins.int provisioning_context: builtins.bytes """ProvisioningContext in bytes.""" signature: builtins.bytes """RSASSA-PSS signature of provisioning_context. Signed with service private key. """ def __init__( self, *, provisioning_context: builtins.bytes | None = ..., signature: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["provisioning_context", b"provisioning_context", "signature", b"signature"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["provisioning_context", b"provisioning_context", "signature", b"signature"]) -> None: ... global___SignedProvisioningContext = SignedProvisioningContext @typing.final class SignedProvisioningMessage(google.protobuf.message.Message): """Serialized ProvisioningRequest or ProvisioningResponse signed with The message authentication key. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor class _ProvisioningProtocolVersion: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _ProvisioningProtocolVersionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SignedProvisioningMessage._ProvisioningProtocolVersion.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor VERSION_UNSPECIFIED: SignedProvisioningMessage._ProvisioningProtocolVersion.ValueType # 0 VERSION_1: SignedProvisioningMessage._ProvisioningProtocolVersion.ValueType # 1 VERSION_1_1: SignedProvisioningMessage._ProvisioningProtocolVersion.ValueType # 2 """Version 1.1 changed error handling. Some errors are returned as a field in a response message rather than being handled as errors via the API implementation. E.g. embedded in the ProvisioningResponse rather than returning a 400 error to the caller. """ VERSION_2: SignedProvisioningMessage._ProvisioningProtocolVersion.ValueType # 3 """Version 2 will implement a larger change of the protocol definition in protobufs. This will provide a cleaner separation between protocols. """ class ProvisioningProtocolVersion(_ProvisioningProtocolVersion, metaclass=_ProvisioningProtocolVersionEnumTypeWrapper): ... VERSION_UNSPECIFIED: SignedProvisioningMessage.ProvisioningProtocolVersion.ValueType # 0 VERSION_1: SignedProvisioningMessage.ProvisioningProtocolVersion.ValueType # 1 VERSION_1_1: SignedProvisioningMessage.ProvisioningProtocolVersion.ValueType # 2 """Version 1.1 changed error handling. Some errors are returned as a field in a response message rather than being handled as errors via the API implementation. E.g. embedded in the ProvisioningResponse rather than returning a 400 error to the caller. """ VERSION_2: SignedProvisioningMessage.ProvisioningProtocolVersion.ValueType # 3 """Version 2 will implement a larger change of the protocol definition in protobufs. This will provide a cleaner separation between protocols. """ class _ProvisioningType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _ProvisioningTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SignedProvisioningMessage._ProvisioningType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor PROVISIONING_TYPE_UNSPECIFIED: SignedProvisioningMessage._ProvisioningType.ValueType # 0 SERVICE_CERTIFICATE_REQUEST: SignedProvisioningMessage._ProvisioningType.ValueType # 1 """Service certificate request.""" PROVISIONING_20: SignedProvisioningMessage._ProvisioningType.ValueType # 2 """Keybox factory-provisioned devices.""" PROVISIONING_30: SignedProvisioningMessage._ProvisioningType.ValueType # 3 """OEM certificate factory-provisioned devices.""" ARCPP_PROVISIONING: SignedProvisioningMessage._ProvisioningType.ValueType # 4 """ChromeOS/Arc++ devices.""" INTEL_SIGMA_101: SignedProvisioningMessage._ProvisioningType.ValueType # 101 """Intel Sigma 1.0.1 protocol.""" class ProvisioningType(_ProvisioningType, metaclass=_ProvisioningTypeEnumTypeWrapper): """This enum was renamed to avoid confusion""" PROVISIONING_TYPE_UNSPECIFIED: SignedProvisioningMessage.ProvisioningType.ValueType # 0 SERVICE_CERTIFICATE_REQUEST: SignedProvisioningMessage.ProvisioningType.ValueType # 1 """Service certificate request.""" PROVISIONING_20: SignedProvisioningMessage.ProvisioningType.ValueType # 2 """Keybox factory-provisioned devices.""" PROVISIONING_30: SignedProvisioningMessage.ProvisioningType.ValueType # 3 """OEM certificate factory-provisioned devices.""" ARCPP_PROVISIONING: SignedProvisioningMessage.ProvisioningType.ValueType # 4 """ChromeOS/Arc++ devices.""" INTEL_SIGMA_101: SignedProvisioningMessage.ProvisioningType.ValueType # 101 """Intel Sigma 1.0.1 protocol.""" MESSAGE_FIELD_NUMBER: builtins.int SIGNATURE_FIELD_NUMBER: builtins.int PROVISIONING_TYPE_FIELD_NUMBER: builtins.int SIGNED_PROVISIONING_CONTEXT_FIELD_NUMBER: builtins.int REMOTE_ATTESTATION_FIELD_NUMBER: builtins.int OEMCRYPTO_CORE_MESSAGE_FIELD_NUMBER: builtins.int HASH_ALGORITHM_FIELD_NUMBER: builtins.int PROTOCOL_VERSION_FIELD_NUMBER: builtins.int message: builtins.bytes """Serialized protobuf message for the corresponding protocol and stage of the provisioning exchange. ProvisioningRequest or ProvisioningResponse in the case of Provisioning 2.0, 3.0 and ARCPP_PROVISIONING. Required. """ signature: builtins.bytes """HMAC-SHA256 (Keybox) or RSASSA-PSS (OEM) signature of message. Required for provisioning 2.0 and 3.0. For ARCPP_PROVISIONING, only used in response. """ provisioning_type: global___SignedProvisioningMessage.ProvisioningType.ValueType """Version number of provisioning protocol.""" remote_attestation: builtins.bytes """Remote attestation data to authenticate that the ChromeOS client device is operating in verified mode. Remote attestation challenge data is |message| field above. Required for ARCPP_PROVISIONING request. It contains signature of |message|. """ oemcrypto_core_message: builtins.bytes """The core message is the simple serialization of fields used by OEMCrypto. This field was introduced in OEMCrypto API v16. The core message format is documented in the "Widevine Core Message Serialization". """ hash_algorithm: global___HashAlgorithmProto.ValueType """Optional field that indicates the hash algorithm used in signature scheme.""" protocol_version: global___SignedProvisioningMessage.ProvisioningProtocolVersion.ValueType """Indicates which version of the protocol is in use.""" @property def signed_provisioning_context(self) -> global___SignedProvisioningContext: """Protocol-specific context / state information for multiple-exchange, stateful provisioning protocols. Optional. """ def __init__( self, *, message: builtins.bytes | None = ..., signature: builtins.bytes | None = ..., provisioning_type: global___SignedProvisioningMessage.ProvisioningType.ValueType | None = ..., signed_provisioning_context: global___SignedProvisioningContext | None = ..., remote_attestation: builtins.bytes | None = ..., oemcrypto_core_message: builtins.bytes | None = ..., hash_algorithm: global___HashAlgorithmProto.ValueType | None = ..., protocol_version: global___SignedProvisioningMessage.ProvisioningProtocolVersion.ValueType | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["hash_algorithm", b"hash_algorithm", "message", b"message", "oemcrypto_core_message", b"oemcrypto_core_message", "protocol_version", b"protocol_version", "provisioning_type", b"provisioning_type", "remote_attestation", b"remote_attestation", "signature", b"signature", "signed_provisioning_context", b"signed_provisioning_context"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["hash_algorithm", b"hash_algorithm", "message", b"message", "oemcrypto_core_message", b"oemcrypto_core_message", "protocol_version", b"protocol_version", "provisioning_type", b"provisioning_type", "remote_attestation", b"remote_attestation", "signature", b"signature", "signed_provisioning_context", b"signed_provisioning_context"]) -> None: ... global___SignedProvisioningMessage = SignedProvisioningMessage @typing.final class ClientIdentification(google.protobuf.message.Message): """---------------------------------------------------------------------------- client_identification.proto ---------------------------------------------------------------------------- Description of section: ClientIdentification messages used by provisioning and license protocols. ClientIdentification message used to authenticate the client device. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor class _TokenType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _TokenTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ClientIdentification._TokenType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor KEYBOX: ClientIdentification._TokenType.ValueType # 0 DRM_DEVICE_CERTIFICATE: ClientIdentification._TokenType.ValueType # 1 REMOTE_ATTESTATION_CERTIFICATE: ClientIdentification._TokenType.ValueType # 2 OEM_DEVICE_CERTIFICATE: ClientIdentification._TokenType.ValueType # 3 class TokenType(_TokenType, metaclass=_TokenTypeEnumTypeWrapper): ... KEYBOX: ClientIdentification.TokenType.ValueType # 0 DRM_DEVICE_CERTIFICATE: ClientIdentification.TokenType.ValueType # 1 REMOTE_ATTESTATION_CERTIFICATE: ClientIdentification.TokenType.ValueType # 2 OEM_DEVICE_CERTIFICATE: ClientIdentification.TokenType.ValueType # 3 @typing.final class NameValue(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor NAME_FIELD_NUMBER: builtins.int VALUE_FIELD_NUMBER: builtins.int name: builtins.str value: builtins.str def __init__( self, *, name: builtins.str | None = ..., value: builtins.str | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["name", b"name", "value", b"value"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["name", b"name", "value", b"value"]) -> None: ... @typing.final class ClientCapabilities(google.protobuf.message.Message): """Capabilities which not all clients may support. Used for the license exchange protocol only. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor class _HdcpVersion: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _HdcpVersionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ClientIdentification.ClientCapabilities._HdcpVersion.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor HDCP_NONE: ClientIdentification.ClientCapabilities._HdcpVersion.ValueType # 0 HDCP_V1: ClientIdentification.ClientCapabilities._HdcpVersion.ValueType # 1 HDCP_V2: ClientIdentification.ClientCapabilities._HdcpVersion.ValueType # 2 HDCP_V2_1: ClientIdentification.ClientCapabilities._HdcpVersion.ValueType # 3 HDCP_V2_2: ClientIdentification.ClientCapabilities._HdcpVersion.ValueType # 4 HDCP_V2_3: ClientIdentification.ClientCapabilities._HdcpVersion.ValueType # 5 HDCP_NO_DIGITAL_OUTPUT: ClientIdentification.ClientCapabilities._HdcpVersion.ValueType # 255 class HdcpVersion(_HdcpVersion, metaclass=_HdcpVersionEnumTypeWrapper): ... HDCP_NONE: ClientIdentification.ClientCapabilities.HdcpVersion.ValueType # 0 HDCP_V1: ClientIdentification.ClientCapabilities.HdcpVersion.ValueType # 1 HDCP_V2: ClientIdentification.ClientCapabilities.HdcpVersion.ValueType # 2 HDCP_V2_1: ClientIdentification.ClientCapabilities.HdcpVersion.ValueType # 3 HDCP_V2_2: ClientIdentification.ClientCapabilities.HdcpVersion.ValueType # 4 HDCP_V2_3: ClientIdentification.ClientCapabilities.HdcpVersion.ValueType # 5 HDCP_NO_DIGITAL_OUTPUT: ClientIdentification.ClientCapabilities.HdcpVersion.ValueType # 255 class _CertificateKeyType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _CertificateKeyTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ClientIdentification.ClientCapabilities._CertificateKeyType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor RSA_2048: ClientIdentification.ClientCapabilities._CertificateKeyType.ValueType # 0 RSA_3072: ClientIdentification.ClientCapabilities._CertificateKeyType.ValueType # 1 ECC_SECP256R1: ClientIdentification.ClientCapabilities._CertificateKeyType.ValueType # 2 ECC_SECP384R1: ClientIdentification.ClientCapabilities._CertificateKeyType.ValueType # 3 ECC_SECP521R1: ClientIdentification.ClientCapabilities._CertificateKeyType.ValueType # 4 class CertificateKeyType(_CertificateKeyType, metaclass=_CertificateKeyTypeEnumTypeWrapper): ... RSA_2048: ClientIdentification.ClientCapabilities.CertificateKeyType.ValueType # 0 RSA_3072: ClientIdentification.ClientCapabilities.CertificateKeyType.ValueType # 1 ECC_SECP256R1: ClientIdentification.ClientCapabilities.CertificateKeyType.ValueType # 2 ECC_SECP384R1: ClientIdentification.ClientCapabilities.CertificateKeyType.ValueType # 3 ECC_SECP521R1: ClientIdentification.ClientCapabilities.CertificateKeyType.ValueType # 4 class _AnalogOutputCapabilities: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _AnalogOutputCapabilitiesEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ClientIdentification.ClientCapabilities._AnalogOutputCapabilities.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor ANALOG_OUTPUT_UNKNOWN: ClientIdentification.ClientCapabilities._AnalogOutputCapabilities.ValueType # 0 ANALOG_OUTPUT_NONE: ClientIdentification.ClientCapabilities._AnalogOutputCapabilities.ValueType # 1 ANALOG_OUTPUT_SUPPORTED: ClientIdentification.ClientCapabilities._AnalogOutputCapabilities.ValueType # 2 ANALOG_OUTPUT_SUPPORTS_CGMS_A: ClientIdentification.ClientCapabilities._AnalogOutputCapabilities.ValueType # 3 class AnalogOutputCapabilities(_AnalogOutputCapabilities, metaclass=_AnalogOutputCapabilitiesEnumTypeWrapper): ... ANALOG_OUTPUT_UNKNOWN: ClientIdentification.ClientCapabilities.AnalogOutputCapabilities.ValueType # 0 ANALOG_OUTPUT_NONE: ClientIdentification.ClientCapabilities.AnalogOutputCapabilities.ValueType # 1 ANALOG_OUTPUT_SUPPORTED: ClientIdentification.ClientCapabilities.AnalogOutputCapabilities.ValueType # 2 ANALOG_OUTPUT_SUPPORTS_CGMS_A: ClientIdentification.ClientCapabilities.AnalogOutputCapabilities.ValueType # 3 class _WatermarkingSupport: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _WatermarkingSupportEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ClientIdentification.ClientCapabilities._WatermarkingSupport.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor WATERMARKING_SUPPORT_UNKNOWN: ClientIdentification.ClientCapabilities._WatermarkingSupport.ValueType # 0 WATERMARKING_NOT_SUPPORTED: ClientIdentification.ClientCapabilities._WatermarkingSupport.ValueType # 1 WATERMARKING_CONFIGURABLE: ClientIdentification.ClientCapabilities._WatermarkingSupport.ValueType # 2 WATERMARKING_ALWAYS_ON: ClientIdentification.ClientCapabilities._WatermarkingSupport.ValueType # 3 class WatermarkingSupport(_WatermarkingSupport, metaclass=_WatermarkingSupportEnumTypeWrapper): ... WATERMARKING_SUPPORT_UNKNOWN: ClientIdentification.ClientCapabilities.WatermarkingSupport.ValueType # 0 WATERMARKING_NOT_SUPPORTED: ClientIdentification.ClientCapabilities.WatermarkingSupport.ValueType # 1 WATERMARKING_CONFIGURABLE: ClientIdentification.ClientCapabilities.WatermarkingSupport.ValueType # 2 WATERMARKING_ALWAYS_ON: ClientIdentification.ClientCapabilities.WatermarkingSupport.ValueType # 3 CLIENT_TOKEN_FIELD_NUMBER: builtins.int SESSION_TOKEN_FIELD_NUMBER: builtins.int VIDEO_RESOLUTION_CONSTRAINTS_FIELD_NUMBER: builtins.int MAX_HDCP_VERSION_FIELD_NUMBER: builtins.int OEM_CRYPTO_API_VERSION_FIELD_NUMBER: builtins.int ANTI_ROLLBACK_USAGE_TABLE_FIELD_NUMBER: builtins.int SRM_VERSION_FIELD_NUMBER: builtins.int CAN_UPDATE_SRM_FIELD_NUMBER: builtins.int SUPPORTED_CERTIFICATE_KEY_TYPE_FIELD_NUMBER: builtins.int ANALOG_OUTPUT_CAPABILITIES_FIELD_NUMBER: builtins.int CAN_DISABLE_ANALOG_OUTPUT_FIELD_NUMBER: builtins.int RESOURCE_RATING_TIER_FIELD_NUMBER: builtins.int WATERMARKING_SUPPORT_FIELD_NUMBER: builtins.int INITIAL_RENEWAL_DELAY_BASE_FIELD_NUMBER: builtins.int client_token: builtins.bool session_token: builtins.bool video_resolution_constraints: builtins.bool max_hdcp_version: global___ClientIdentification.ClientCapabilities.HdcpVersion.ValueType oem_crypto_api_version: builtins.int anti_rollback_usage_table: builtins.bool """Client has hardware support for protecting the usage table, such as storing the generation number in secure memory. For Details, see: Widevine Modular DRM Security Integration Guide for CENC """ srm_version: builtins.int """The client shall report |srm_version| if available.""" can_update_srm: builtins.bool """A device may have SRM data, and report a version, but may not be capable of updating SRM data. """ analog_output_capabilities: global___ClientIdentification.ClientCapabilities.AnalogOutputCapabilities.ValueType can_disable_analog_output: builtins.bool resource_rating_tier: builtins.int """Clients can indicate a performance level supported by OEMCrypto. This will allow applications and providers to choose an appropriate quality of content to serve. Currently defined tiers are 1 (low), 2 (medium) and 3 (high). Any other value indicates that the resource rating is unavailable or reporting erroneous values for that device. For details see, Widevine Modular DRM Security Integration Guide for CENC """ watermarking_support: global___ClientIdentification.ClientCapabilities.WatermarkingSupport.ValueType initial_renewal_delay_base: builtins.bool @property def supported_certificate_key_type(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___ClientIdentification.ClientCapabilities.CertificateKeyType.ValueType]: ... def __init__( self, *, client_token: builtins.bool | None = ..., session_token: builtins.bool | None = ..., video_resolution_constraints: builtins.bool | None = ..., max_hdcp_version: global___ClientIdentification.ClientCapabilities.HdcpVersion.ValueType | None = ..., oem_crypto_api_version: builtins.int | None = ..., anti_rollback_usage_table: builtins.bool | None = ..., srm_version: builtins.int | None = ..., can_update_srm: builtins.bool | None = ..., supported_certificate_key_type: collections.abc.Iterable[global___ClientIdentification.ClientCapabilities.CertificateKeyType.ValueType] | None = ..., analog_output_capabilities: global___ClientIdentification.ClientCapabilities.AnalogOutputCapabilities.ValueType | None = ..., can_disable_analog_output: builtins.bool | None = ..., resource_rating_tier: builtins.int | None = ..., watermarking_support: global___ClientIdentification.ClientCapabilities.WatermarkingSupport.ValueType | None = ..., initial_renewal_delay_base: builtins.bool | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["analog_output_capabilities", b"analog_output_capabilities", "anti_rollback_usage_table", b"anti_rollback_usage_table", "can_disable_analog_output", b"can_disable_analog_output", "can_update_srm", b"can_update_srm", "client_token", b"client_token", "initial_renewal_delay_base", b"initial_renewal_delay_base", "max_hdcp_version", b"max_hdcp_version", "oem_crypto_api_version", b"oem_crypto_api_version", "resource_rating_tier", b"resource_rating_tier", "session_token", b"session_token", "srm_version", b"srm_version", "video_resolution_constraints", b"video_resolution_constraints", "watermarking_support", b"watermarking_support"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["analog_output_capabilities", b"analog_output_capabilities", "anti_rollback_usage_table", b"anti_rollback_usage_table", "can_disable_analog_output", b"can_disable_analog_output", "can_update_srm", b"can_update_srm", "client_token", b"client_token", "initial_renewal_delay_base", b"initial_renewal_delay_base", "max_hdcp_version", b"max_hdcp_version", "oem_crypto_api_version", b"oem_crypto_api_version", "resource_rating_tier", b"resource_rating_tier", "session_token", b"session_token", "srm_version", b"srm_version", "supported_certificate_key_type", b"supported_certificate_key_type", "video_resolution_constraints", b"video_resolution_constraints", "watermarking_support", b"watermarking_support"]) -> None: ... @typing.final class ClientCredentials(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor TYPE_FIELD_NUMBER: builtins.int TOKEN_FIELD_NUMBER: builtins.int type: global___ClientIdentification.TokenType.ValueType token: builtins.bytes def __init__( self, *, type: global___ClientIdentification.TokenType.ValueType | None = ..., token: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["token", b"token", "type", b"type"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["token", b"token", "type", b"type"]) -> None: ... TYPE_FIELD_NUMBER: builtins.int TOKEN_FIELD_NUMBER: builtins.int CLIENT_INFO_FIELD_NUMBER: builtins.int PROVIDER_CLIENT_TOKEN_FIELD_NUMBER: builtins.int LICENSE_COUNTER_FIELD_NUMBER: builtins.int CLIENT_CAPABILITIES_FIELD_NUMBER: builtins.int VMP_DATA_FIELD_NUMBER: builtins.int DEVICE_CREDENTIALS_FIELD_NUMBER: builtins.int type: global___ClientIdentification.TokenType.ValueType """Type of factory-provisioned device root of trust. Optional.""" token: builtins.bytes """Factory-provisioned device root of trust. Required.""" provider_client_token: builtins.bytes """Client token generated by the content provider. Optional.""" license_counter: builtins.int """Number of licenses received by the client to which the token above belongs. Only present if client_token is specified. """ vmp_data: builtins.bytes """Serialized VmpData message. Optional.""" @property def client_info(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ClientIdentification.NameValue]: """Optional client information name/value pairs.""" @property def client_capabilities(self) -> global___ClientIdentification.ClientCapabilities: """List of non-baseline client capabilities.""" @property def device_credentials(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ClientIdentification.ClientCredentials]: """Optional field that may contain additional provisioning credentials.""" def __init__( self, *, type: global___ClientIdentification.TokenType.ValueType | None = ..., token: builtins.bytes | None = ..., client_info: collections.abc.Iterable[global___ClientIdentification.NameValue] | None = ..., provider_client_token: builtins.bytes | None = ..., license_counter: builtins.int | None = ..., client_capabilities: global___ClientIdentification.ClientCapabilities | None = ..., vmp_data: builtins.bytes | None = ..., device_credentials: collections.abc.Iterable[global___ClientIdentification.ClientCredentials] | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["client_capabilities", b"client_capabilities", "license_counter", b"license_counter", "provider_client_token", b"provider_client_token", "token", b"token", "type", b"type", "vmp_data", b"vmp_data"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["client_capabilities", b"client_capabilities", "client_info", b"client_info", "device_credentials", b"device_credentials", "license_counter", b"license_counter", "provider_client_token", b"provider_client_token", "token", b"token", "type", b"type", "vmp_data", b"vmp_data"]) -> None: ... global___ClientIdentification = ClientIdentification @typing.final class EncryptedClientIdentification(google.protobuf.message.Message): """EncryptedClientIdentification message used to hold ClientIdentification messages encrypted for privacy purposes. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor PROVIDER_ID_FIELD_NUMBER: builtins.int SERVICE_CERTIFICATE_SERIAL_NUMBER_FIELD_NUMBER: builtins.int ENCRYPTED_CLIENT_ID_FIELD_NUMBER: builtins.int ENCRYPTED_CLIENT_ID_IV_FIELD_NUMBER: builtins.int ENCRYPTED_PRIVACY_KEY_FIELD_NUMBER: builtins.int provider_id: builtins.str """Provider ID for which the ClientIdentifcation is encrypted (owner of service certificate). """ service_certificate_serial_number: builtins.bytes """Serial number for the service certificate for which ClientIdentification is encrypted. """ encrypted_client_id: builtins.bytes """Serialized ClientIdentification message, encrypted with the privacy key using AES-128-CBC with PKCS#5 padding. """ encrypted_client_id_iv: builtins.bytes """Initialization vector needed to decrypt encrypted_client_id.""" encrypted_privacy_key: builtins.bytes """AES-128 privacy key, encrypted with the service public key using RSA-OAEP.""" def __init__( self, *, provider_id: builtins.str | None = ..., service_certificate_serial_number: builtins.bytes | None = ..., encrypted_client_id: builtins.bytes | None = ..., encrypted_client_id_iv: builtins.bytes | None = ..., encrypted_privacy_key: builtins.bytes | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["encrypted_client_id", b"encrypted_client_id", "encrypted_client_id_iv", b"encrypted_client_id_iv", "encrypted_privacy_key", b"encrypted_privacy_key", "provider_id", b"provider_id", "service_certificate_serial_number", b"service_certificate_serial_number"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["encrypted_client_id", b"encrypted_client_id", "encrypted_client_id_iv", b"encrypted_client_id_iv", "encrypted_privacy_key", b"encrypted_privacy_key", "provider_id", b"provider_id", "service_certificate_serial_number", b"service_certificate_serial_number"]) -> None: ... global___EncryptedClientIdentification = EncryptedClientIdentification @typing.final class DrmCertificate(google.protobuf.message.Message): """---------------------------------------------------------------------------- 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. DRM certificate definition for user devices, intermediate, service, and root certificates. Next id: 13 """ DESCRIPTOR: google.protobuf.descriptor.Descriptor class _Type: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _TypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DrmCertificate._Type.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor ROOT: DrmCertificate._Type.ValueType # 0 """ProtoBestPractices: ignore.""" DEVICE_MODEL: DrmCertificate._Type.ValueType # 1 DEVICE: DrmCertificate._Type.ValueType # 2 SERVICE: DrmCertificate._Type.ValueType # 3 PROVISIONER: DrmCertificate._Type.ValueType # 4 class Type(_Type, metaclass=_TypeEnumTypeWrapper): ... ROOT: DrmCertificate.Type.ValueType # 0 """ProtoBestPractices: ignore.""" DEVICE_MODEL: DrmCertificate.Type.ValueType # 1 DEVICE: DrmCertificate.Type.ValueType # 2 SERVICE: DrmCertificate.Type.ValueType # 3 PROVISIONER: DrmCertificate.Type.ValueType # 4 class _ServiceType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _ServiceTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DrmCertificate._ServiceType.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor UNKNOWN_SERVICE_TYPE: DrmCertificate._ServiceType.ValueType # 0 LICENSE_SERVER_SDK: DrmCertificate._ServiceType.ValueType # 1 LICENSE_SERVER_PROXY_SDK: DrmCertificate._ServiceType.ValueType # 2 PROVISIONING_SDK: DrmCertificate._ServiceType.ValueType # 3 CAS_PROXY_SDK: DrmCertificate._ServiceType.ValueType # 4 class ServiceType(_ServiceType, metaclass=_ServiceTypeEnumTypeWrapper): ... UNKNOWN_SERVICE_TYPE: DrmCertificate.ServiceType.ValueType # 0 LICENSE_SERVER_SDK: DrmCertificate.ServiceType.ValueType # 1 LICENSE_SERVER_PROXY_SDK: DrmCertificate.ServiceType.ValueType # 2 PROVISIONING_SDK: DrmCertificate.ServiceType.ValueType # 3 CAS_PROXY_SDK: DrmCertificate.ServiceType.ValueType # 4 class _Algorithm: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType class _AlgorithmEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DrmCertificate._Algorithm.ValueType], builtins.type): DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor UNKNOWN_ALGORITHM: DrmCertificate._Algorithm.ValueType # 0 RSA: DrmCertificate._Algorithm.ValueType # 1 ECC_SECP256R1: DrmCertificate._Algorithm.ValueType # 2 ECC_SECP384R1: DrmCertificate._Algorithm.ValueType # 3 ECC_SECP521R1: DrmCertificate._Algorithm.ValueType # 4 class Algorithm(_Algorithm, metaclass=_AlgorithmEnumTypeWrapper): ... UNKNOWN_ALGORITHM: DrmCertificate.Algorithm.ValueType # 0 RSA: DrmCertificate.Algorithm.ValueType # 1 ECC_SECP256R1: DrmCertificate.Algorithm.ValueType # 2 ECC_SECP384R1: DrmCertificate.Algorithm.ValueType # 3 ECC_SECP521R1: DrmCertificate.Algorithm.ValueType # 4 @typing.final class EncryptionKey(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor PUBLIC_KEY_FIELD_NUMBER: builtins.int ALGORITHM_FIELD_NUMBER: builtins.int public_key: builtins.bytes """Device public key. PKCS#1 ASN.1 DER-encoded. Required.""" algorithm: global___DrmCertificate.Algorithm.ValueType """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. """ def __init__( self, *, public_key: builtins.bytes | None = ..., algorithm: global___DrmCertificate.Algorithm.ValueType | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["algorithm", b"algorithm", "public_key", b"public_key"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "public_key", b"public_key"]) -> None: ... TYPE_FIELD_NUMBER: builtins.int SERIAL_NUMBER_FIELD_NUMBER: builtins.int CREATION_TIME_SECONDS_FIELD_NUMBER: builtins.int EXPIRATION_TIME_SECONDS_FIELD_NUMBER: builtins.int PUBLIC_KEY_FIELD_NUMBER: builtins.int SYSTEM_ID_FIELD_NUMBER: builtins.int TEST_DEVICE_DEPRECATED_FIELD_NUMBER: builtins.int PROVIDER_ID_FIELD_NUMBER: builtins.int SERVICE_TYPES_FIELD_NUMBER: builtins.int ALGORITHM_FIELD_NUMBER: builtins.int ROT_ID_FIELD_NUMBER: builtins.int ENCRYPTION_KEY_FIELD_NUMBER: builtins.int type: global___DrmCertificate.Type.ValueType """Type of certificate. Required.""" serial_number: builtins.bytes """128-bit globally unique serial number of certificate. Value is 0 for root certificate. Required. """ creation_time_seconds: builtins.int """POSIX time, in seconds, when the certificate was created. Required.""" expiration_time_seconds: builtins.int """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). """ public_key: builtins.bytes """Device public key. PKCS#1 ASN.1 DER-encoded. Required.""" system_id: builtins.int """Widevine system ID for the device. Required for intermediate and user device certificates. """ test_device_deprecated: builtins.bool """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. """ provider_id: builtins.str """Service identifier (web origin) for the provider which owns the certificate. Required for service and provisioner certificates. """ algorithm: global___DrmCertificate.Algorithm.ValueType """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. """ rot_id: builtins.bytes """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. """ @property def service_types(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DrmCertificate.ServiceType.ValueType]: """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. """ @property def encryption_key(self) -> global___DrmCertificate.EncryptionKey: """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. """ def __init__( self, *, type: global___DrmCertificate.Type.ValueType | None = ..., serial_number: builtins.bytes | None = ..., creation_time_seconds: builtins.int | None = ..., expiration_time_seconds: builtins.int | None = ..., public_key: builtins.bytes | None = ..., system_id: builtins.int | None = ..., test_device_deprecated: builtins.bool | None = ..., provider_id: builtins.str | None = ..., service_types: collections.abc.Iterable[global___DrmCertificate.ServiceType.ValueType] | None = ..., algorithm: global___DrmCertificate.Algorithm.ValueType | None = ..., rot_id: builtins.bytes | None = ..., encryption_key: global___DrmCertificate.EncryptionKey | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["algorithm", b"algorithm", "creation_time_seconds", b"creation_time_seconds", "encryption_key", b"encryption_key", "expiration_time_seconds", b"expiration_time_seconds", "provider_id", b"provider_id", "public_key", b"public_key", "rot_id", b"rot_id", "serial_number", b"serial_number", "system_id", b"system_id", "test_device_deprecated", b"test_device_deprecated", "type", b"type"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "creation_time_seconds", b"creation_time_seconds", "encryption_key", b"encryption_key", "expiration_time_seconds", b"expiration_time_seconds", "provider_id", b"provider_id", "public_key", b"public_key", "rot_id", b"rot_id", "serial_number", b"serial_number", "service_types", b"service_types", "system_id", b"system_id", "test_device_deprecated", b"test_device_deprecated", "type", b"type"]) -> None: ... global___DrmCertificate = DrmCertificate @typing.final class SignedDrmCertificate(google.protobuf.message.Message): """---------------------------------------------------------------------------- signed_drm_certificate.proto ---------------------------------------------------------------------------- Description of section: DrmCertificate signed by a higher (CA) DRM certificate. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor DRM_CERTIFICATE_FIELD_NUMBER: builtins.int SIGNATURE_FIELD_NUMBER: builtins.int SIGNER_FIELD_NUMBER: builtins.int HASH_ALGORITHM_FIELD_NUMBER: builtins.int drm_certificate: builtins.bytes """Serialized certificate. Required.""" signature: builtins.bytes """Signature of certificate. Signed with root or intermediate certificate specified below. Required. """ hash_algorithm: global___HashAlgorithmProto.ValueType """Optional field that indicates the hash algorithm used in signature scheme.""" @property def signer(self) -> global___SignedDrmCertificate: """SignedDrmCertificate used to sign this certificate.""" def __init__( self, *, drm_certificate: builtins.bytes | None = ..., signature: builtins.bytes | None = ..., signer: global___SignedDrmCertificate | None = ..., hash_algorithm: global___HashAlgorithmProto.ValueType | None = ..., ) -> None: ... def HasField(self, field_name: typing.Literal["drm_certificate", b"drm_certificate", "hash_algorithm", b"hash_algorithm", "signature", b"signature", "signer", b"signer"]) -> builtins.bool: ... def ClearField(self, field_name: typing.Literal["drm_certificate", b"drm_certificate", "hash_algorithm", b"hash_algorithm", "signature", b"signature", "signer", b"signer"]) -> None: ... global___SignedDrmCertificate = SignedDrmCertificate