diff --git a/libwvdrmengine/cdm/core/include/wv_cdm_constants.h b/libwvdrmengine/cdm/core/include/wv_cdm_constants.h index 67160db2..81f28cf0 100644 --- a/libwvdrmengine/cdm/core/include/wv_cdm_constants.h +++ b/libwvdrmengine/cdm/core/include/wv_cdm_constants.h @@ -87,6 +87,7 @@ static const std::string QUERY_VALUE_HDCP_V1 = "HDCP-1.x"; static const std::string QUERY_VALUE_HDCP_V2_0 = "HDCP-2.0"; static const std::string QUERY_VALUE_HDCP_V2_1 = "HDCP-2.1"; static const std::string QUERY_VALUE_HDCP_V2_2 = "HDCP-2.2"; +static const std::string QUERY_VALUE_HDCP_V2_3 = "HDCP-2.3"; static const std::string QUERY_VALUE_HDCP_LEVEL_UNKNOWN = "HDCP-LevelUnknown"; static const std::string ISO_BMFF_VIDEO_MIME_TYPE = "video/mp4"; diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 6cb92813..270ce1d5 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -1768,6 +1768,8 @@ std::string CdmEngine::MapHdcpVersion( return QUERY_VALUE_HDCP_V2_1; case HDCP_V2_2: return QUERY_VALUE_HDCP_V2_2; + case HDCP_V2_3: + return QUERY_VALUE_HDCP_V2_3; case HDCP_NO_DIGITAL_OUTPUT: return QUERY_VALUE_HDCP_NO_DIGITAL_OUTPUT; default: diff --git a/libwvdrmengine/cdm/core/src/client_identification.cpp b/libwvdrmengine/cdm/core/src/client_identification.cpp index 16755b69..150ff0aa 100644 --- a/libwvdrmengine/cdm/core/src/client_identification.cpp +++ b/libwvdrmengine/cdm/core/src/client_identification.cpp @@ -191,6 +191,11 @@ CdmResponseType ClientIdentification::Prepare( video_widevine:: ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_V2_2); break; + case HDCP_V2_3: + client_capabilities->set_max_hdcp_version( + video_widevine:: + ClientIdentification_ClientCapabilities_HdcpVersion_HDCP_V2_3); + break; case HDCP_NO_DIGITAL_OUTPUT: client_capabilities->set_max_hdcp_version( video_widevine:: diff --git a/libwvdrmengine/cdm/core/src/license_key_status.cpp b/libwvdrmengine/cdm/core/src/license_key_status.cpp index 85f75b4d..b2485a07 100644 --- a/libwvdrmengine/cdm/core/src/license_key_status.cpp +++ b/libwvdrmengine/cdm/core/src/license_key_status.cpp @@ -32,6 +32,8 @@ wvcdm::CryptoSession::HdcpCapability ProtobufHdcpToOemCryptoHdcp( return HDCP_V2_1; case OutputProtection::HDCP_V2_2: return HDCP_V2_2; + case OutputProtection::HDCP_V2_3: + return HDCP_V2_3; case OutputProtection::HDCP_NO_DIGITAL_OUTPUT: return HDCP_NO_DIGITAL_OUTPUT; default: diff --git a/libwvdrmengine/cdm/core/test/license_keys_unittest.cpp b/libwvdrmengine/cdm/core/test/license_keys_unittest.cpp index 16ce2007..0e2e124e 100644 --- a/libwvdrmengine/cdm/core/test/license_keys_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/license_keys_unittest.cpp @@ -44,13 +44,19 @@ static const KeyId ck_sw_crypto_NO_HDCP = "ck_sw_crypto_NO_HDCP"; static const KeyId ck_hw_secure_NO_HDCP = "ck_hw_secure_NO_HDCP"; static const KeyId ck_sw_crypto_HDCP_V2_1 = "ck_sw_crypto_HDCP_V2_1"; static const KeyId ck_hw_secure_HDCP_V2_1 = "ck_hw_secure_HDCP_V2_1"; +static const KeyId ck_sw_crypto_HDCP_V2_2 = "ck_sw_crypto_HDCP_V2_2"; +static const KeyId ck_hw_secure_HDCP_V2_2 = "ck_hw_secure_HDCP_V2_2"; +static const KeyId ck_sw_crypto_HDCP_V2_3 = "ck_sw_crypto_HDCP_V2_3"; +static const KeyId ck_hw_secure_HDCP_V2_3 = "ck_hw_secure_HDCP_V2_3"; static const KeyId ck_sw_crypto_HDCP_NO_OUTPUT = "ck_sw_crypto_HDCP_NO_OUT"; static const KeyId ck_hw_secure_HDCP_NO_OUTPUT = "ck_hw_secure_HDCP_NO_OUT"; // Constraint test keys static const KeyId ck_NO_HDCP_lo_res = "ck_NO_HDCP_lo_res"; static const KeyId ck_HDCP_NO_OUTPUT_hi_res = "ck_HDCP_NO_OUTPUT_hi_res"; -static const KeyId ck_HDCP_V2_1_max_res = "ck_HDCP_V2_1_max_res"; +static const KeyId ck_HDCP_V2_1_hi_res = "ck_HDCP_V2_1_hi_res"; +static const KeyId ck_HDCP_V2_2_max_res = "ck_HDCP_V2_2_max_res"; +static const KeyId ck_HDCP_V2_3_max_res = "ck_HDCP_V2_3_max_res"; static const KeyId ck_NO_HDCP_dual_res = "ck_NO_HDCP_dual_res"; } // namespace @@ -248,6 +254,20 @@ class LicenseKeysTest : public ::testing::Test { true, KeyContainer::OutputProtection::HDCP_V2_1); content_key_count_++; + AddContentKey(ck_sw_crypto_HDCP_V2_2, true, KeyContainer::SW_SECURE_CRYPTO, + true, KeyContainer::OutputProtection::HDCP_V2_2); + content_key_count_++; + AddContentKey(ck_hw_secure_HDCP_V2_2, true, KeyContainer::HW_SECURE_ALL, + true, KeyContainer::OutputProtection::HDCP_V2_2); + content_key_count_++; + + AddContentKey(ck_sw_crypto_HDCP_V2_3, true, KeyContainer::SW_SECURE_CRYPTO, + true, KeyContainer::OutputProtection::HDCP_V2_3); + content_key_count_++; + AddContentKey(ck_hw_secure_HDCP_V2_3, true, KeyContainer::HW_SECURE_ALL, + true, KeyContainer::OutputProtection::HDCP_V2_3); + content_key_count_++; + AddContentKey(ck_sw_crypto_HDCP_NO_OUTPUT, true, KeyContainer::SW_SECURE_CRYPTO, true, KeyContainer::OutputProtection::HDCP_NO_DIGITAL_OUTPUT); @@ -294,11 +314,27 @@ class LicenseKeysTest : public ::testing::Test { &constraints); content_key_count_++; + constraints.clear(); + AddConstraint(constraints, key_hi_res_min, key_hi_res_max); + + AddContentKey(ck_HDCP_V2_1_hi_res, true, KeyContainer::SW_SECURE_CRYPTO, + true, KeyContainer::OutputProtection::HDCP_V2_1, true, + &constraints); + content_key_count_++; + constraints.clear(); AddConstraint(constraints, key_top_res_min, key_top_res_max); - AddContentKey(ck_HDCP_V2_1_max_res, true, KeyContainer::SW_SECURE_CRYPTO, - true, KeyContainer::OutputProtection::HDCP_V2_1, true, + AddContentKey(ck_HDCP_V2_2_max_res, true, KeyContainer::SW_SECURE_CRYPTO, + true, KeyContainer::OutputProtection::HDCP_V2_2, true, + &constraints); + content_key_count_++; + + constraints.clear(); + AddConstraint(constraints, key_top_res_min, key_top_res_max); + + AddContentKey(ck_HDCP_V2_3_max_res, true, KeyContainer::SW_SECURE_CRYPTO, + true, KeyContainer::OutputProtection::HDCP_V2_3, true, &constraints); content_key_count_++; @@ -643,6 +679,10 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_NO_HDCP)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_1)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_3)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_3)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_NO_OUTPUT)); @@ -650,6 +690,10 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_NO_HDCP)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_1)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_3)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_3)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); @@ -663,6 +707,10 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_NO_HDCP)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_1)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_NO_OUTPUT)); @@ -670,13 +718,32 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_NO_HDCP)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_1)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusOutputNotAllowed); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); license_keys_.ApplyConstraints(100, HDCP_V1); any_change = license_keys_.ApplyStatusChange(kKeyStatusUsable, @@ -688,6 +755,10 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_NO_HDCP)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_1)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_NO_OUTPUT)); @@ -695,13 +766,80 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_NO_HDCP)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_1)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); license_keys_.ExtractKeyStatuses(&key_status_map); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + + license_keys_.ApplyConstraints(100, HDCP_V2_1); + any_change = license_keys_.ApplyStatusChange(kKeyStatusUsable, + &new_usable_keys); + + EXPECT_TRUE(any_change); + EXPECT_TRUE(new_usable_keys); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_NO_HDCP)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_NO_HDCP)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_NO_OUTPUT)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_NO_OUTPUT)); + + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_NO_HDCP)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_NO_HDCP)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_NO_OUTPUT)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); + + license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); license_keys_.ApplyConstraints(100, HDCP_V2_2); any_change = license_keys_.ApplyStatusChange(kKeyStatusUsable, @@ -713,6 +851,10 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_NO_HDCP)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_1)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_NO_OUTPUT)); @@ -720,12 +862,78 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_NO_HDCP)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_1)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + + license_keys_.ApplyConstraints(100, HDCP_V2_3); + any_change = license_keys_.ApplyStatusChange(kKeyStatusUsable, + &new_usable_keys); + + EXPECT_TRUE(any_change); + EXPECT_TRUE(new_usable_keys); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_NO_HDCP)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_NO_HDCP)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_3)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_NO_OUTPUT)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_NO_OUTPUT)); + + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_NO_HDCP)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_NO_HDCP)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_1)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_2)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_3)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_NO_OUTPUT)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); + + license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, kKeyStatusOutputNotAllowed); @@ -750,8 +958,22 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, kKeyStatusUsable); @@ -765,6 +987,10 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.CanDecryptContent(ck_hw_secure_NO_HDCP)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_1)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_hw_secure_HDCP_NO_OUTPUT)); @@ -772,12 +998,30 @@ TEST_F(LicenseKeysTest, HdcpChanges) { EXPECT_TRUE(license_keys_.MeetsConstraints(ck_hw_secure_NO_HDCP)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_1)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_1)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_2)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_V2_3)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_V2_3)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_sw_crypto_HDCP_NO_OUTPUT)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_hw_secure_HDCP_NO_OUTPUT)); license_keys_.ExtractKeyStatuses(&key_status_map); - ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, - kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, kKeyStatusOutputNotAllowed); } @@ -795,12 +1039,16 @@ TEST_F(LicenseKeysTest, ConstraintChanges) { EXPECT_TRUE(new_usable_keys); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_lo_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_max_res)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_hi_res)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_V2_2_max_res)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_dual_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_lo_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_max_res)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_hi_res)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_V2_2_max_res)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); // Low-res device, no HDCP support @@ -812,18 +1060,37 @@ TEST_F(LicenseKeysTest, ConstraintChanges) { EXPECT_FALSE(new_usable_keys); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_dual_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusOutputNotAllowed); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); // Hi-res device, HDCP_V1 support license_keys_.ApplyConstraints(dev_hi_res, HDCP_V1); @@ -834,18 +1101,37 @@ TEST_F(LicenseKeysTest, ConstraintChanges) { EXPECT_TRUE(new_usable_keys); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_NO_HDCP_lo_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_max_res)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_3_max_res)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_NO_HDCP_dual_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_NO_HDCP_lo_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_max_res)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_3_max_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); license_keys_.ExtractKeyStatuses(&key_status_map); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); // Lo-res device, HDCP V2.2 support license_keys_.ApplyConstraints(dev_lo_res, HDCP_V2_2); @@ -856,19 +1142,35 @@ TEST_F(LicenseKeysTest, ConstraintChanges) { EXPECT_TRUE(new_usable_keys); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_dual_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); license_keys_.ExtractKeyStatuses(&key_status_map); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); // Hi-res device, Maximal HDCP support license_keys_.ApplyConstraints(dev_hi_res, HDCP_NO_DIGITAL_OUTPUT); @@ -879,17 +1181,33 @@ TEST_F(LicenseKeysTest, ConstraintChanges) { EXPECT_TRUE(new_usable_keys); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_NO_HDCP_lo_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_max_res)); + EXPECT_TRUE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_dual_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_NO_HDCP_lo_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_max_res)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, kKeyStatusUsable); @@ -902,17 +1220,39 @@ TEST_F(LicenseKeysTest, ConstraintChanges) { EXPECT_TRUE(new_usable_keys); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_3_max_res)); EXPECT_TRUE(license_keys_.CanDecryptContent(ck_NO_HDCP_dual_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_3_max_res)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); + EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); EXPECT_TRUE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, + kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, kKeyStatusOutputNotAllowed); @@ -925,17 +1265,37 @@ TEST_F(LicenseKeysTest, ConstraintChanges) { EXPECT_FALSE(new_usable_keys); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.CanDecryptContent(ck_HDCP_V2_3_max_res)); EXPECT_FALSE(license_keys_.CanDecryptContent(ck_NO_HDCP_dual_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_NO_HDCP_lo_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_NO_OUTPUT_hi_res)); - EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_1_hi_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_2_max_res)); + EXPECT_FALSE(license_keys_.MeetsConstraints(ck_HDCP_V2_3_max_res)); EXPECT_FALSE(license_keys_.MeetsConstraints(ck_NO_HDCP_dual_res)); license_keys_.ExtractKeyStatuses(&key_status_map); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_NO_HDCP, + kKeyStatusUsable); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_NO_HDCP, kKeyStatusUsable); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_1, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_2, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_V2_3, + kKeyStatusOutputNotAllowed); + ExpectKeyStatusEqual(key_status_map, ck_sw_crypto_HDCP_NO_OUTPUT, + kKeyStatusOutputNotAllowed); ExpectKeyStatusEqual(key_status_map, ck_hw_secure_HDCP_NO_OUTPUT, kKeyStatusOutputNotAllowed); }