diff --git a/libwvdrmengine/cdm/core/include/wv_cdm_types.h b/libwvdrmengine/cdm/core/include/wv_cdm_types.h index c06ed7e5..3517005f 100644 --- a/libwvdrmengine/cdm/core/include/wv_cdm_types.h +++ b/libwvdrmengine/cdm/core/include/wv_cdm_types.h @@ -253,7 +253,7 @@ enum CdmResponseType { INVALID_SESSION_1 = 199, NO_DEVICE_KEY_1 = 200, NO_CONTENT_KEY_2 = 201, - INSUFFICIENT_CRYPTO_RESOURCES_2 = 202, + /* previously INSUFFICIENT_CRYPTO_RESOURCES_2 = 202, */ INVALID_PARAMETERS_ENG_13 = 203, INVALID_PARAMETERS_ENG_14 = 204, INVALID_PARAMETERS_ENG_15 = 205, @@ -272,7 +272,7 @@ enum CdmResponseType { LOAD_USAGE_HEADER_UNKNOWN_ERROR = 218, /* previously INVALID_PARAMETERS_ENG_17 = 219, */ /* preivously INVALID_PARAMETERS_ENG_18 = 220, */ - INSUFFICIENT_CRYPTO_RESOURCES_3 = 221, + /* previously INSUFFICIENT_CRYPTO_RESOURCES_3 = 221, */ CREATE_USAGE_ENTRY_UNKNOWN_ERROR = 222, LOAD_USAGE_ENTRY_GENERATION_SKEW = 223, LOAD_USAGE_ENTRY_SIGNATURE_FAILURE = 224, @@ -331,12 +331,12 @@ enum CdmResponseType { /* previously LICENSE_REQUEST_INVALID_SUBLICENSE = 277, */ CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE = 278, LOAD_SYSTEM_ID_ERROR = 279, - INSUFFICIENT_CRYPTO_RESOURCES_4 = 280, - INSUFFICIENT_CRYPTO_RESOURCES_5 = 281, + /* previously INSUFFICIENT_CRYPTO_RESOURCES_4 = 280, */ + /* previously INSUFFICIENT_CRYPTO_RESOURCES_5 = 281, */ REMOVE_USAGE_INFO_ERROR_1 = 282, REMOVE_USAGE_INFO_ERROR_2 = 283, REMOVE_USAGE_INFO_ERROR_3 = 284, - INSUFFICIENT_CRYPTO_RESOURCES_6 = 285, + /* previously INSUFFICIENT_CRYPTO_RESOURCES_6 = 285, */ NOT_AN_ENTITLEMENT_SESSION = 286, NO_MATCHING_ENTITLEMENT_KEY = 287, LOAD_ENTITLED_CONTENT_KEYS_ERROR = 288, diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index db7fa1c3..f4c61f2f 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -940,7 +940,7 @@ CdmResponseType CryptoSession::LoadKeys( update_usage_table_after_close_session_ = true; return KEY_ADDED; case OEMCrypto_ERROR_TOO_MANY_KEYS: - return INSUFFICIENT_CRYPTO_RESOURCES_4; + return INSUFFICIENT_CRYPTO_RESOURCES; case OEMCrypto_ERROR_USAGE_TABLE_UNRECOVERABLE: // Handle vendor specific error return NEED_PROVISIONING; @@ -980,7 +980,7 @@ CdmResponseType CryptoSession::LoadLicense(const std::string& signed_message, return LOAD_LICENSE_ERROR; case OEMCrypto_ERROR_TOO_MANY_KEYS: LOGE("Too many keys in license"); - return INSUFFICIENT_CRYPTO_RESOURCES_4; + return INSUFFICIENT_CRYPTO_RESOURCES; default: break; } @@ -1182,16 +1182,15 @@ CdmResponseType CryptoSession::PrepareAndSignProvisioningRequest( CdmResponseType CryptoSession::LoadEntitledContentKeys( const std::vector& key_array) { - OEMCryptoResult sts; - WithOecSessionLock("LoadEntitledContentKeys", [&] { - sts = key_session_->LoadEntitledContentKeys(key_array); - }); + const OEMCryptoResult sts = WithOecSessionLock( + "LoadEntitledContentKeys", + [&] { return key_session_->LoadEntitledContentKeys(key_array); }); switch (sts) { case OEMCrypto_SUCCESS: return KEY_ADDED; case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES_6; + return INSUFFICIENT_CRYPTO_RESOURCES; case OEMCrypto_ERROR_INVALID_CONTEXT: return NOT_AN_ENTITLEMENT_SESSION; case OEMCrypto_KEY_NOT_ENTITLED: @@ -1240,39 +1239,46 @@ CdmResponseType CryptoSession::LoadCertificatePrivateKey( // Private. CdmResponseType CryptoSession::SelectKey(const std::string& key_id, CdmCipherMode cipher_mode) { - OEMCryptoResult sts; - WithOecSessionLock( - "SelectKey", [&] { sts = key_session_->SelectKey(key_id, cipher_mode); }); + const OEMCryptoResult sts = WithOecSessionLock("SelectKey", [&] { + return key_session_->SelectKey(key_id, cipher_mode); + }); switch (sts) { + // SelectKey errors. case OEMCrypto_SUCCESS: return NO_ERROR; case OEMCrypto_ERROR_KEY_EXPIRED: return NEED_KEY; - case OEMCrypto_ERROR_INSUFFICIENT_HDCP: - return INSUFFICIENT_OUTPUT_PROTECTION; - case OEMCrypto_ERROR_ANALOG_OUTPUT: - return ANALOG_OUTPUT_ERROR; case OEMCrypto_ERROR_INVALID_SESSION: return INVALID_SESSION_1; case OEMCrypto_ERROR_NO_DEVICE_KEY: return NO_DEVICE_KEY_1; case OEMCrypto_ERROR_NO_CONTENT_KEY: return NO_CONTENT_KEY_2; - case OEMCrypto_KEY_NOT_LOADED: // obsolete. - return NO_CONTENT_KEY_3; - case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES_2; - case OEMCrypto_ERROR_UNKNOWN_FAILURE: - return UNKNOWN_SELECT_KEY_ERROR_1; - case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; - case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; case OEMCrypto_ERROR_CONTROL_INVALID: case OEMCrypto_ERROR_KEYBOX_INVALID: - default: return UNKNOWN_SELECT_KEY_ERROR_2; + case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: + return INSUFFICIENT_CRYPTO_RESOURCES; + case OEMCrypto_ERROR_UNKNOWN_FAILURE: + return UNKNOWN_SELECT_KEY_ERROR_1; + case OEMCrypto_ERROR_ANALOG_OUTPUT: + return ANALOG_OUTPUT_ERROR; + case OEMCrypto_ERROR_INSUFFICIENT_HDCP: + return INSUFFICIENT_OUTPUT_PROTECTION; + // LoadEntitledContentKeys errors. + // |key_session_| may make calls to OEMCrypto_LoadEntitledContentKeys + // if the key selected has not yet been loaded. + case OEMCrypto_ERROR_INVALID_CONTEXT: + return NOT_AN_ENTITLEMENT_SESSION; + case OEMCrypto_KEY_NOT_ENTITLED: + return NO_MATCHING_ENTITLEMENT_KEY; + // Obsolete errors. + case OEMCrypto_KEY_NOT_LOADED: + return NO_CONTENT_KEY_3; + // Catch all else. + default: + return MapOEMCryptoResult(sts, UNKNOWN_SELECT_KEY_ERROR_2, "SelectKey"); } } @@ -1527,7 +1533,7 @@ CdmResponseType CryptoSession::Decrypt( case OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION: return NO_ERROR; case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES_5; + return INSUFFICIENT_CRYPTO_RESOURCES; case OEMCrypto_ERROR_KEY_EXPIRED: return NEED_KEY; case OEMCrypto_ERROR_INVALID_SESSION: @@ -2494,7 +2500,7 @@ CdmResponseType CryptoSession::CreateUsageEntry(uint32_t* entry_number) { case OEMCrypto_SUCCESS: return NO_ERROR; case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES_3; + return INSUFFICIENT_CRYPTO_RESOURCES; case OEMCrypto_ERROR_SESSION_LOST_STATE: return SESSION_LOST_STATE_ERROR; case OEMCrypto_ERROR_SYSTEM_INVALIDATED: diff --git a/libwvdrmengine/cdm/core/src/usage_table_header.cpp b/libwvdrmengine/cdm/core/src/usage_table_header.cpp index 73bafb32..09ca4ab6 100644 --- a/libwvdrmengine/cdm/core/src/usage_table_header.cpp +++ b/libwvdrmengine/cdm/core/src/usage_table_header.cpp @@ -300,7 +300,7 @@ CdmResponseType UsageTableHeader::AddEntry( CdmResponseType status = crypto_session->CreateUsageEntry(usage_entry_number); - if (status == INSUFFICIENT_CRYPTO_RESOURCES_3) { + if (status == INSUFFICIENT_CRYPTO_RESOURCES) { LOGW("Usage table may be full, releasing oldest entry: size = %zu", usage_entry_info_.size()); status = ReleaseOldestEntry(metrics); diff --git a/libwvdrmengine/cdm/core/test/test_printers.cpp b/libwvdrmengine/cdm/core/test/test_printers.cpp index 6caa8931..b88b8910 100644 --- a/libwvdrmengine/cdm/core/test/test_printers.cpp +++ b/libwvdrmengine/cdm/core/test/test_printers.cpp @@ -284,21 +284,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) { case INSUFFICIENT_CRYPTO_RESOURCES: *os << "INSUFFICIENT_CRYPTO_RESOURCES"; break; - case INSUFFICIENT_CRYPTO_RESOURCES_2: - *os << "INSUFFICIENT_CRYPTO_RESOURCES_2"; - break; - case INSUFFICIENT_CRYPTO_RESOURCES_3: - *os << "INSUFFICIENT_CRYPTO_RESOURCES_3"; - break; - case INSUFFICIENT_CRYPTO_RESOURCES_4: - *os << "INSUFFICIENT_CRYPTO_RESOURCES_4"; - break; - case INSUFFICIENT_CRYPTO_RESOURCES_5: - *os << "INSUFFICIENT_CRYPTO_RESOURCES_5"; - break; - case INSUFFICIENT_CRYPTO_RESOURCES_6: - *os << "INSUFFICIENT_CRYPTO_RESOURCES_6"; - break; case INSUFFICIENT_OUTPUT_PROTECTION: *os << "INSUFFICIENT_OUTPUT_PROTECTION"; break; diff --git a/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp b/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp index e59a42c1..f70ae5f6 100644 --- a/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp @@ -904,10 +904,9 @@ TEST_F(UsageTableHeaderTest, Return(NO_ERROR))); EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) - .WillOnce(Return(INSUFFICIENT_CRYPTO_RESOURCES_3)) - .WillOnce( - DoAll(SetArgPointee<0>(expected_usage_entry_number), - Return(NO_ERROR))); + .WillOnce(Return(INSUFFICIENT_CRYPTO_RESOURCES)) + .WillOnce(DoAll(SetArgPointee<0>(expected_usage_entry_number), + Return(NO_ERROR))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kUsageTableHeader, _)) .WillOnce(DoAll(SaveArg<1>(&final_usage_entries), Return(true))); @@ -954,11 +953,11 @@ TEST_F(UsageTableHeaderTest, AddEntry_CreateUsageEntryFailsEveryTime) { EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .Times(2) - .WillRepeatedly(Return(INSUFFICIENT_CRYPTO_RESOURCES_3)); + .WillRepeatedly(Return(INSUFFICIENT_CRYPTO_RESOURCES)); // Now invoke the method under test uint32_t usage_entry_number; - EXPECT_EQ(INSUFFICIENT_CRYPTO_RESOURCES_3, + EXPECT_EQ(INSUFFICIENT_CRYPTO_RESOURCES, mock_usage_table_header->AddEntry( crypto_session_, true /* persistent */, kUsageEntryInfoOfflineLicense6.key_set_id, diff --git a/libwvdrmengine/include/mapErrors-inl.h b/libwvdrmengine/include/mapErrors-inl.h index e7315d7f..57cb53c1 100644 --- a/libwvdrmengine/include/mapErrors-inl.h +++ b/libwvdrmengine/include/mapErrors-inl.h @@ -212,16 +212,6 @@ static android::status_t mapCdmResponseType(wvcdm::CdmResponseType res) { return kIncorrectUsageSupportType2; case wvcdm::INIT_DATA_NOT_FOUND: return kInitDataNotFound; - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_2: - return kInsufficientCryptoResources2; - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_3: - return kInsufficientCryptoResources3; - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_4: - return kInsufficientCryptoResources4; - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_5: - return kInsufficientCryptoResources5; - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_6: - return kInsufficientCryptoResources6; case wvcdm::INVALID_DECRYPT_HASH_FORMAT: return kInvalidDecryptHashFormat; case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_1: diff --git a/libwvdrmengine/include_hidl/mapErrors-inl.h b/libwvdrmengine/include_hidl/mapErrors-inl.h index c6f61778..7c4f5a37 100644 --- a/libwvdrmengine/include_hidl/mapErrors-inl.h +++ b/libwvdrmengine/include_hidl/mapErrors-inl.h @@ -225,7 +225,6 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) { case wvcdm::INVALID_SESSION_1: case wvcdm::NO_DEVICE_KEY_1: case wvcdm::NO_CONTENT_KEY_2: - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_2: case wvcdm::INVALID_PARAMETERS_ENG_13: case wvcdm::INVALID_PARAMETERS_ENG_14: case wvcdm::INVALID_PARAMETERS_ENG_15: @@ -238,9 +237,6 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) { case wvcdm::LOAD_USAGE_HEADER_SIGNATURE_FAILURE: case wvcdm::LOAD_USAGE_HEADER_BAD_MAGIC: case wvcdm::LOAD_USAGE_HEADER_UNKNOWN_ERROR: - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_3: - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_4: - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_5: case wvcdm::CREATE_USAGE_ENTRY_UNKNOWN_ERROR: case wvcdm::LOAD_USAGE_ENTRY_GENERATION_SKEW: case wvcdm::LOAD_USAGE_ENTRY_SIGNATURE_FAILURE: @@ -293,7 +289,6 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) { case wvcdm::REMOVE_USAGE_INFO_ERROR_1: case wvcdm::REMOVE_USAGE_INFO_ERROR_2: case wvcdm::REMOVE_USAGE_INFO_ERROR_3: - case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_6: case wvcdm::NOT_AN_ENTITLEMENT_SESSION: case wvcdm::LOAD_ENTITLED_CONTENT_KEYS_ERROR: case wvcdm::GET_PROVISIONING_METHOD_ERROR: