Add CDM integration test for offline renewal and release
[ Merge of http://go/wvgerrit/70865 ] Bug: 116643233 Test: WV unit/integration tests Change-Id: I13aba71d120dc25950b8ccba4091800835aaaaf4
This commit is contained in:
@@ -190,6 +190,31 @@ SubSampleInfo single_encrypted_sub_sample = {
|
||||
wvcdm::a2b_hex("f6f4b1e600a5b67813ed2bded913ba9f"), 0,
|
||||
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample};
|
||||
|
||||
SubSampleInfo single_encrypted_offline_sub_sample = {
|
||||
// key SD, encrypted, 256b
|
||||
true, 1, true, true, false,
|
||||
wvcdm::a2bs_hex("DD003BA34DA3CDA09AA3B6D5CC6C34B2"),
|
||||
wvcdm::a2b_hex(
|
||||
"64ab17b3e3dfab47245c7cce4543d4fc7a26dcf248f19f9b59f3c92601440b36"
|
||||
"17c8ed0c96c656549e461f38708cd47a434066f8df28ccc28b79252eee3f9c2d"
|
||||
"7f6c68ebe40141fe818fe082ca523c03d69ddaf183a93c022327fedc5582c5ab"
|
||||
"ca9d342b71263a67f9cb2336f12108aaaef464f17177e44e9b0c4e56e61da53c"
|
||||
"2150b4405cc82d994dfd9bf4087c761956d6688a9705db4cf350381085f383c4"
|
||||
"9666d4aed135c519c1f0b5cba06e287feea96ea367bf54e7368dcf998276c6e4"
|
||||
"6497e0c50e20fef74e42cb518fe7f22ef27202428688f86404e8278587017012"
|
||||
"c1d65537c6cbd7dde04aae338d68115a9f430afc100ab83cdadf45dca39db685"),
|
||||
wvcdm::a2b_hex(
|
||||
"4E477383EDAFA01D4C31CBCF015AE3D256FF96052F24EB50C37AEC9E798A23AE"
|
||||
"58D187C627769F11E72C712BFE269F7BEB04D7E636D508F9B623888416340730"
|
||||
"36C0F409B49BD9EB2DBAAF7218527371A40AB9B93A7C3FACA246A9A37C560106"
|
||||
"2F6C5C5F7C0F4DA528C70639268602E08D100079A6D8CDBD82C44BFF7FC8D304"
|
||||
"277E5638AA275AD1CC08F0D4F850777E0453DEFD927B49D2B5CF0372FC95BEEE"
|
||||
"4287F7AEB30E3FECBDEB2981BD0691FED2D7CFACB92E115A44CADD96843F240E"
|
||||
"236A9F9B2E3CB075912FE15C5056B21D809538C3C19D5B2F5FA242CD7F550306"
|
||||
"6DA2F6A78C5090D9B49F78632FB6F278AC1F680E690BF3AD4933FDE77922CF6A"),
|
||||
wvcdm::a2b_hex("f6f4b1e600a5b67813ed2bded913ba9f"), 0,
|
||||
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample};
|
||||
|
||||
SubSampleInfo switch_key_encrypted_sub_samples[2] = {
|
||||
// block 0, key SD, encrypted, 256b
|
||||
{true, 2, true, true, false,
|
||||
@@ -2572,8 +2597,8 @@ TEST_F(WvCdmRequestLicenseTest, OfflineLicenseRenewal) {
|
||||
std::string client_auth;
|
||||
GetOfflineConfiguration(&key_id, &client_auth);
|
||||
|
||||
decryptor_.OpenSession(config_.key_system(), NULL, kDefaultCdmIdentifier, NULL,
|
||||
&session_id_);
|
||||
decryptor_.OpenSession(config_.key_system(), NULL, kDefaultCdmIdentifier,
|
||||
NULL, &session_id_);
|
||||
GenerateKeyRequest(key_id, kLicenseTypeOffline);
|
||||
VerifyKeyRequestResponse(config_.license_server(), client_auth);
|
||||
|
||||
@@ -2584,6 +2609,85 @@ TEST_F(WvCdmRequestLicenseTest, OfflineLicenseRenewal) {
|
||||
decryptor_.CloseSession(session_id_);
|
||||
}
|
||||
|
||||
TEST_F(WvCdmRequestLicenseTest, OfflineLicenseRenewalAndRelease) {
|
||||
Unprovision();
|
||||
Provision(kLevelDefault);
|
||||
|
||||
// override default settings unless configured through the command line
|
||||
std::string key_id;
|
||||
std::string client_auth;
|
||||
GetOfflineConfiguration(&key_id, &client_auth);
|
||||
|
||||
// Retrieve offline license
|
||||
decryptor_.OpenSession(config_.key_system(), NULL, kDefaultCdmIdentifier,
|
||||
NULL, &session_id_);
|
||||
GenerateKeyRequest(key_id, kLicenseTypeOffline);
|
||||
VerifyKeyRequestResponse(config_.license_server(), client_auth);
|
||||
|
||||
CdmKeySetId key_set_id = key_set_id_;
|
||||
EXPECT_FALSE(key_set_id_.empty());
|
||||
|
||||
// Verify that we can decrypt a subsample
|
||||
SubSampleInfo* data = &single_encrypted_offline_sub_sample;
|
||||
std::vector<uint8_t> decrypt_buffer(data->encrypt_data.size());
|
||||
CdmDecryptionParameters decryption_parameters(
|
||||
&data->key_id, &data->encrypt_data.front(), data->encrypt_data.size(),
|
||||
&data->iv, data->block_offset, &decrypt_buffer[0]);
|
||||
decryption_parameters.is_encrypted = data->is_encrypted;
|
||||
decryption_parameters.is_secure = data->is_secure;
|
||||
decryption_parameters.subsample_flags = data->subsample_flags;
|
||||
|
||||
EXPECT_EQ(NO_ERROR,
|
||||
decryptor_.Decrypt(session_id_, data->validate_key_id,
|
||||
decryption_parameters));
|
||||
EXPECT_TRUE(std::equal(data->decrypt_data.begin(), data->decrypt_data.end(),
|
||||
decrypt_buffer.begin()));
|
||||
|
||||
decryptor_.CloseSession(session_id_);
|
||||
session_id_.clear();
|
||||
|
||||
// Restore offline license and renew it
|
||||
decryptor_.OpenSession(config_.key_system(), NULL, kDefaultCdmIdentifier,
|
||||
NULL, &session_id_);
|
||||
EXPECT_EQ(wvcdm::KEY_ADDED, decryptor_.RestoreKey(session_id_, key_set_id));
|
||||
|
||||
std::string license_server;
|
||||
GenerateRenewalRequest(kLicenseTypeOffline, &license_server);
|
||||
EXPECT_FALSE(license_server.empty());
|
||||
VerifyKeyRequestResponse(license_server, client_auth);
|
||||
|
||||
// Verify that we can decrypt a subsample
|
||||
decrypt_buffer = data->encrypt_data;
|
||||
EXPECT_EQ(NO_ERROR, decryptor_.Decrypt(session_id_, data->validate_key_id,
|
||||
decryption_parameters));
|
||||
EXPECT_TRUE(std::equal(data->decrypt_data.begin(), data->decrypt_data.end(),
|
||||
decrypt_buffer.begin()));
|
||||
|
||||
decryptor_.CloseSession(session_id_);
|
||||
session_id_.clear();
|
||||
|
||||
// Restore offline license and test it
|
||||
decryptor_.OpenSession(config_.key_system(), NULL, kDefaultCdmIdentifier,
|
||||
NULL, &session_id_);
|
||||
EXPECT_EQ(wvcdm::KEY_ADDED, decryptor_.RestoreKey(session_id_, key_set_id));
|
||||
|
||||
// Verify that we can decrypt a subsample
|
||||
decrypt_buffer = data->encrypt_data;
|
||||
EXPECT_EQ(NO_ERROR, decryptor_.Decrypt(session_id_, data->validate_key_id,
|
||||
decryption_parameters));
|
||||
EXPECT_TRUE(std::equal(data->decrypt_data.begin(), data->decrypt_data.end(),
|
||||
decrypt_buffer.begin()));
|
||||
|
||||
decryptor_.CloseSession(session_id_);
|
||||
session_id_.clear();
|
||||
|
||||
// Restore and release offline license
|
||||
key_set_id_.clear();
|
||||
GenerateKeyRelease(key_set_id);
|
||||
key_set_id_ = key_set_id;
|
||||
VerifyKeyRequestResponse(config_.license_server(), client_auth);
|
||||
}
|
||||
|
||||
TEST_F(WvCdmRequestLicenseTest, RemoveKeys) {
|
||||
ASSERT_EQ(NO_ERROR, decryptor_.OpenSession(config_.key_system(), NULL,
|
||||
kDefaultCdmIdentifier, NULL,
|
||||
|
||||
Reference in New Issue
Block a user