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:
@@ -40,6 +40,8 @@ const int kHttpOk = 200;
|
||||
|
||||
const std::string kCencMimeType = "video/mp4";
|
||||
const std::string kWebmMimeType = "video/webm";
|
||||
const std::string kEmptyString;
|
||||
const std::string kComma = ",";
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -389,4 +391,116 @@ TEST_F(WvCdmEngineTest, LicenseRenewal) {
|
||||
config_.client_auth());
|
||||
}
|
||||
|
||||
TEST_F(WvCdmEngineTest, ParseDecryptHashStringTest) {
|
||||
|
||||
CdmSessionId session_id;
|
||||
uint32_t frame_number;
|
||||
std::string hash;
|
||||
|
||||
const std::string test_session_id = "sample session id";
|
||||
uint32_t test_frame_number = 5;
|
||||
const std::string test_frame_number_string =
|
||||
std::to_string(test_frame_number);
|
||||
const std::string test_invalid_hash = "an invalid hash";
|
||||
std::vector<uint8_t> binary_hash{ 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38 };
|
||||
const std::string test_valid_decoded_hash(binary_hash.begin(),
|
||||
binary_hash.end());
|
||||
const std::string test_valid_hash = Base64Encode(binary_hash);
|
||||
const std::string test_invalid_hash_string = "sample hash string";
|
||||
const std::string test_valid_hash_string = test_session_id + kComma +
|
||||
test_frame_number_string + kComma + test_valid_hash;
|
||||
|
||||
// invalid parameters
|
||||
EXPECT_EQ(PARAMETER_NULL,
|
||||
CdmEngine::ParseDecryptHashString(test_valid_hash_string, nullptr,
|
||||
&frame_number, &hash));
|
||||
EXPECT_EQ(PARAMETER_NULL,
|
||||
CdmEngine::ParseDecryptHashString(test_valid_hash_string,
|
||||
&session_id, nullptr, &hash));
|
||||
EXPECT_EQ(PARAMETER_NULL,
|
||||
CdmEngine::ParseDecryptHashString(test_valid_hash_string,
|
||||
&session_id, &frame_number,
|
||||
nullptr));
|
||||
|
||||
// Too few or too many parameters
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(kEmptyString, &session_id,
|
||||
&frame_number, &hash));
|
||||
std::string hash_data = test_session_id;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data += kComma;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data += test_frame_number_string;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data += kComma;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data += test_valid_hash + kComma + test_valid_hash;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
|
||||
// No parameters
|
||||
hash_data = kComma;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data = kComma + kComma;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data = kComma + kComma + kComma;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
|
||||
// Missing parameters
|
||||
hash_data = kComma + test_frame_number_string + kComma + test_valid_hash;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data = test_session_id + kComma + kComma + test_valid_hash;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data = test_session_id + kComma + test_frame_number_string + kComma;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data = test_session_id + kComma + test_frame_number_string + kComma +
|
||||
kComma;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
|
||||
// Invalid parameters (frame number, hash)
|
||||
hash_data = test_session_id + kComma + test_session_id + kComma +
|
||||
test_valid_hash;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
hash_data = test_session_id + kComma + test_frame_number_string + kComma +
|
||||
test_invalid_hash;
|
||||
EXPECT_EQ(INVALID_DECRYPT_HASH_FORMAT,
|
||||
CdmEngine::ParseDecryptHashString(hash_data, &session_id,
|
||||
&frame_number, &hash));
|
||||
|
||||
// valid data
|
||||
EXPECT_EQ(NO_ERROR,
|
||||
CdmEngine::ParseDecryptHashString(test_valid_hash_string,
|
||||
&session_id, &frame_number,
|
||||
&hash));
|
||||
EXPECT_EQ(test_session_id, session_id);
|
||||
EXPECT_EQ(test_frame_number, frame_number);
|
||||
EXPECT_EQ(test_valid_decoded_hash, hash);
|
||||
}
|
||||
|
||||
|
||||
} // namespace wvcdm
|
||||
|
||||
@@ -775,6 +775,18 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
|
||||
case DEVICE_CANNOT_REPROVISION:
|
||||
*os << "DEVICE_CANNOT_REPROVISION";
|
||||
break;
|
||||
case SET_DECRYPT_HASH_ERROR:
|
||||
*os << "SET_DECRYPT_HASH_ERROR";
|
||||
break;
|
||||
case GET_DECRYPT_HASH_ERROR:
|
||||
*os << "GET_DECRYPT_HASH_ERROR";
|
||||
break;
|
||||
case SESSION_NOT_FOUND_20:
|
||||
*os << "SESSION_NOT_FOUND_20";
|
||||
break;
|
||||
case INVALID_DECRYPT_HASH_FORMAT:
|
||||
*os << "INVALID_DECRYPT_HASH_FORMAT";
|
||||
break;
|
||||
default:
|
||||
*os << "Unknown CdmResponseType";
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user