Add decrypt hash support
[ Merge of http://go/wvgerrit/68083 ] Add ability to query decrypt hash support, set a hash computed over a frame and retrieve the last error at a later point. Bug: 34080802 Test: WV unit/integration tests. New tests added to cdm_engine_test, libwvdrmdrmplugin_hidl_test and request_license_test. Change-Id: I7548c8798c873a6af3e1cfc0df57c117e1e474a6
This commit is contained in:
@@ -1810,6 +1810,70 @@ bool CryptoSession::GetBuildInformation(std::string* info) {
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t CryptoSession::IsDecryptHashSupported() {
|
||||
LOGV("IsDecryptHashSupported");
|
||||
if (!initialized_) return false;
|
||||
|
||||
uint32_t secure_decrypt_support =
|
||||
OEMCrypto_SupportsDecryptHash(requested_security_level_);
|
||||
switch (secure_decrypt_support) {
|
||||
case OEMCrypto_Hash_Not_Supported:
|
||||
case OEMCrypto_CRC_Clear_Buffer:
|
||||
case OEMCrypto_Partner_Defined_Hash:
|
||||
break;
|
||||
default:
|
||||
LOGW("OEMCrypto_SupportsDecryptHash returned unexpected result: %d",
|
||||
secure_decrypt_support);
|
||||
secure_decrypt_support = OEMCrypto_Hash_Not_Supported;
|
||||
break;
|
||||
}
|
||||
return secure_decrypt_support;
|
||||
}
|
||||
|
||||
CdmResponseType CryptoSession::SetDecryptHash(
|
||||
uint32_t frame_number,
|
||||
const std::string& hash) {
|
||||
LOGV("SetDecryptHash");
|
||||
OEMCryptoResult sts = OEMCrypto_SetDecryptHash(
|
||||
oec_session_id_, frame_number,
|
||||
reinterpret_cast<const uint8_t*>(hash.data()), hash.size());
|
||||
if (OEMCrypto_SUCCESS != sts) {
|
||||
LOGE("SetSecureDecryptHash: failed with error %d", sts);
|
||||
return SET_DECRYPT_HASH_ERROR;
|
||||
}
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
CdmResponseType CryptoSession::GetDecryptHashError(std::string* error_string) {
|
||||
LOGV("GetDecryptHashError");
|
||||
if (error_string == nullptr) {
|
||||
LOGE("CryptoSession::GetDecryptHashError: |error_string| not provided");
|
||||
return PARAMETER_NULL;
|
||||
}
|
||||
error_string->clear();
|
||||
|
||||
uint32_t failed_frame_number;
|
||||
OEMCryptoResult sts = OEMCrypto_GetHashErrorCode(
|
||||
oec_session_id_, &failed_frame_number);
|
||||
error_string->assign(std::to_string(sts));
|
||||
|
||||
switch (sts) {
|
||||
case OEMCrypto_SUCCESS:
|
||||
case OEMCrypto_ERROR_BAD_HASH:
|
||||
case OEMCrypto_ERROR_SESSION_LOST_STATE:
|
||||
case OEMCrypto_ERROR_SYSTEM_INVALIDATED:
|
||||
error_string->assign(std::to_string(sts));
|
||||
error_string->append(",");
|
||||
error_string->append(std::to_string(failed_frame_number));
|
||||
return NO_ERROR;
|
||||
case OEMCrypto_ERROR_UNKNOWN_FAILURE:
|
||||
case OEMCrypto_ERROR_NOT_IMPLEMENTED:
|
||||
default:
|
||||
LOGE("GetDecryptHashError: failed with error %d", sts);
|
||||
return GET_DECRYPT_HASH_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
CdmResponseType CryptoSession::GenericEncrypt(const std::string& in_buffer,
|
||||
const std::string& key_id,
|
||||
const std::string& iv,
|
||||
|
||||
Reference in New Issue
Block a user