Report OEMCrypto's ECC capabilities.
[ Merge of http://go/wvgerrit/110824 ]
When generating a provisioning request, the CDM includes the different
certificate key types that are supported.
This change will enable the reporting of ECC certificate types if
OEMCrypto supports them.
Test: Linux unit tests and Android integration test
Bug: 140813486
Change-Id: I713ff1c469dff5c8a41461727ce63486d962575e
(cherry picked from commit 547d2f8775)
Merged-In: I713ff1c469dff5c8a41461727ce63486d962575e
This commit is contained in:
@@ -56,7 +56,9 @@ bool IsPropertyKeyReserved(const std::string& prop_name) {
|
||||
} // namespace
|
||||
|
||||
// Protobuf generated classes.
|
||||
using video_widevine::ClientIdentification_ClientCapabilities;
|
||||
using ClientCapabilities =
|
||||
video_widevine::ClientIdentification::ClientCapabilities;
|
||||
using AnalogOutputCapabilities = ClientCapabilities::AnalogOutputCapabilities;
|
||||
using video_widevine::ClientIdentification_NameValue;
|
||||
using video_widevine::EncryptedClientIdentification;
|
||||
using video_widevine::ProvisioningOptions;
|
||||
@@ -187,7 +189,7 @@ CdmResponseType ClientIdentification::Prepare(
|
||||
client_id->set_provider_client_token(provider_client_token);
|
||||
}
|
||||
|
||||
ClientIdentification_ClientCapabilities* client_capabilities =
|
||||
ClientCapabilities* client_capabilities =
|
||||
client_id->mutable_client_capabilities();
|
||||
|
||||
client_capabilities->set_client_token(true);
|
||||
@@ -214,38 +216,31 @@ CdmResponseType ClientIdentification::Prepare(
|
||||
switch (max_version) {
|
||||
case HDCP_NONE:
|
||||
client_capabilities->set_max_hdcp_version(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_NONE);
|
||||
ClientCapabilities::HDCP_NONE);
|
||||
break;
|
||||
case HDCP_V1:
|
||||
client_capabilities->set_max_hdcp_version(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_V1);
|
||||
ClientCapabilities::HDCP_V1);
|
||||
break;
|
||||
case HDCP_V2:
|
||||
client_capabilities->set_max_hdcp_version(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_V2);
|
||||
ClientCapabilities::HDCP_V2);
|
||||
break;
|
||||
case HDCP_V2_1:
|
||||
client_capabilities->set_max_hdcp_version(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_V2_1);
|
||||
ClientCapabilities::HDCP_V2_1);
|
||||
break;
|
||||
case HDCP_V2_2:
|
||||
client_capabilities->set_max_hdcp_version(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_V2_2);
|
||||
ClientCapabilities::HDCP_V2_2);
|
||||
break;
|
||||
case HDCP_V2_3:
|
||||
client_capabilities->set_max_hdcp_version(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_V2_3);
|
||||
ClientCapabilities::HDCP_V2_3);
|
||||
break;
|
||||
case HDCP_NO_DIGITAL_OUTPUT:
|
||||
client_capabilities->set_max_hdcp_version(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_NO_DIGITAL_OUTPUT);
|
||||
ClientCapabilities::HDCP_NO_DIGITAL_OUTPUT);
|
||||
break;
|
||||
default:
|
||||
LOGW("Unexpected HDCP max capability version: max_version = %d",
|
||||
@@ -258,13 +253,23 @@ CdmResponseType ClientIdentification::Prepare(
|
||||
if (crypto_session_->GetSupportedCertificateTypes(&supported_certs)) {
|
||||
if (supported_certs.rsa_2048_bit) {
|
||||
client_capabilities->add_supported_certificate_key_type(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_CertificateKeyType_RSA_2048);
|
||||
ClientCapabilities::RSA_2048);
|
||||
}
|
||||
if (supported_certs.rsa_3072_bit) {
|
||||
client_capabilities->add_supported_certificate_key_type(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_CertificateKeyType_RSA_3072);
|
||||
ClientCapabilities::RSA_3072);
|
||||
}
|
||||
if (supported_certs.ecc_secp256r1) {
|
||||
client_capabilities->add_supported_certificate_key_type(
|
||||
ClientCapabilities::ECC_SECP256R1);
|
||||
}
|
||||
if (supported_certs.ecc_secp384r1) {
|
||||
client_capabilities->add_supported_certificate_key_type(
|
||||
ClientCapabilities::ECC_SECP384R1);
|
||||
}
|
||||
if (supported_certs.ecc_secp521r1) {
|
||||
client_capabilities->add_supported_certificate_key_type(
|
||||
ClientCapabilities::ECC_SECP521R1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,33 +285,27 @@ CdmResponseType ClientIdentification::Prepare(
|
||||
bool can_support_cgms_a;
|
||||
if (crypto_session_->GetAnalogOutputCapabilities(
|
||||
&can_support_output, &can_disable_output, &can_support_cgms_a)) {
|
||||
video_widevine::ClientIdentification_ClientCapabilities_AnalogOutputCapabilities
|
||||
capabilities = video_widevine::
|
||||
ClientIdentification_ClientCapabilities_AnalogOutputCapabilities_ANALOG_OUTPUT_NONE;
|
||||
AnalogOutputCapabilities capabilities =
|
||||
ClientCapabilities::ANALOG_OUTPUT_NONE;
|
||||
|
||||
if (can_support_output) {
|
||||
if (can_support_cgms_a) {
|
||||
capabilities = video_widevine::
|
||||
ClientIdentification_ClientCapabilities_AnalogOutputCapabilities_ANALOG_OUTPUT_SUPPORTS_CGMS_A;
|
||||
capabilities = ClientCapabilities::ANALOG_OUTPUT_SUPPORTS_CGMS_A;
|
||||
} else {
|
||||
capabilities = video_widevine::
|
||||
ClientIdentification_ClientCapabilities_AnalogOutputCapabilities_ANALOG_OUTPUT_SUPPORTED;
|
||||
capabilities = ClientCapabilities::ANALOG_OUTPUT_SUPPORTED;
|
||||
}
|
||||
}
|
||||
client_capabilities->set_analog_output_capabilities(capabilities);
|
||||
client_capabilities->set_can_disable_analog_output(can_disable_output);
|
||||
} else {
|
||||
client_capabilities->set_analog_output_capabilities(
|
||||
video_widevine::
|
||||
ClientIdentification_ClientCapabilities_AnalogOutputCapabilities_ANALOG_OUTPUT_UNKNOWN);
|
||||
ClientCapabilities::ANALOG_OUTPUT_UNKNOWN);
|
||||
}
|
||||
|
||||
uint32_t version, tier;
|
||||
if (crypto_session_->GetApiVersion(&version)) {
|
||||
if (version >= OEM_CRYPTO_API_VERSION_SUPPORTS_RESOURCE_RATING_TIER) {
|
||||
if (crypto_session_->GetResourceRatingTier(&tier)) {
|
||||
client_capabilities->set_resource_rating_tier(tier);
|
||||
}
|
||||
if (api_version >= OEM_CRYPTO_API_VERSION_SUPPORTS_RESOURCE_RATING_TIER) {
|
||||
uint32_t tier;
|
||||
if (crypto_session_->GetResourceRatingTier(&tier)) {
|
||||
client_capabilities->set_resource_rating_tier(tier);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user