diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index dd940f35..ea9704c2 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -814,7 +814,7 @@ extern "C" OEMCryptoResult OEMCrypto_DeleteUsageEntry(OEMCrypto_SESSION session, LevelSession pair = kAdapter->get(session); if (!pair.fcn) return OEMCrypto_ERROR_INVALID_SESSION; if( pair.fcn->version > 8 ) { - return pair.fcn->DeleteUsageEntry(session, pst, pst_length, message, + return pair.fcn->DeleteUsageEntry(pair.session, pst, pst_length, message, message_length, signature, signature_length); } else { diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_static_v8.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_static_v8.cpp index e631d05b..4dbfcf4f 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_static_v8.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_static_v8.cpp @@ -76,7 +76,7 @@ extern "C" OEMCryptoResult OEMCrypto_LoadKeys( const uint8_t* enc_mac_key_iv, const uint8_t* enc_mac_key, size_t num_keys, const OEMCrypto_KeyObject* key_array, const uint8_t* pst, size_t pst_length) { - return OEMCrypto_LoadKeys_V8(session, message, message_length, signature, + return OEMCrypto_LoadKeys_V8(pair.session, message, message_length, signature, signature_length, enc_mac_key_iv, enc_mac_key, num_keys, key_array); } diff --git a/libwvdrmengine/level3/arm/libwvlevel3.a b/libwvdrmengine/level3/arm/libwvlevel3.a index 76d69056..26bfcc4a 100644 Binary files a/libwvdrmengine/level3/arm/libwvlevel3.a and b/libwvdrmengine/level3/arm/libwvlevel3.a differ diff --git a/libwvdrmengine/level3/x86/libwvlevel3.a b/libwvdrmengine/level3/x86/libwvlevel3.a index c37269cd..971b5274 100644 Binary files a/libwvdrmengine/level3/x86/libwvlevel3.a and b/libwvdrmengine/level3/x86/libwvlevel3.a differ diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index d9b95925..afed83a4 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -2125,6 +2125,30 @@ TEST_F(DISABLED_TestKeybox, LoadKeyWithBadNonce) { ASSERT_NE(OEMCrypto_SUCCESS, sts); } +TEST_F(DISABLED_TestKeybox, LoadKeyWithRepeatNonce) { + InstallKeybox(kDefaultKeybox, true); + Session s; + s.open(); + s.GenerateDerivedKeys(); + uint32_t nonce = s.get_nonce(); + s.FillSimpleMessage(0, wvoec_mock::kControlNonceEnabled, nonce); + s.EncryptAndSign(); + s.LoadTestKeys(); + s.close(); + + s.open(); + s.GenerateDerivedKeys(); + s.FillSimpleMessage(0, wvoec_mock::kControlNonceEnabled, + nonce); // same old nonce. + s.EncryptAndSign(); + OEMCryptoResult sts = OEMCrypto_LoadKeys( + s.session_id(), s.message_ptr(), sizeof(MessageData), &s.signature()[0], + s.signature().size(), s.encrypted_license().mac_key_iv, + s.encrypted_license().mac_keys, kNumKeys, s.key_array(), NULL, 0); + + ASSERT_NE(OEMCrypto_SUCCESS, sts); +} + TEST_F(DISABLED_TestKeybox, LoadKeyWithBadVerification) { InstallKeybox(kDefaultKeybox, true); Session s; @@ -4775,9 +4799,7 @@ TEST_P(DISABLED_UsageTableTest, GenericEncrypt) { wvoec_mock::kControlNonceRequired, nonce, pst); s.EncryptAndSign(); - printf("Getting ready to load keys.\n"); s.LoadTestKeys(pst, new_mac_keys_); - printf("done to load keys.\n"); OEMCryptoResult sts; unsigned int key_index = 0; uint8_t expected_encrypted[kBufferSize]; @@ -4791,7 +4813,6 @@ TEST_P(DISABLED_UsageTableTest, GenericEncrypt) { encrypted); ASSERT_EQ(OEMCrypto_SUCCESS, sts); EXPECT_EQ(0, memcmp(encrypted, expected_encrypted, kBufferSize)); - printf("doing the generate report"); s.GenerateReport(pst); EXPECT_EQ(kActive, s.pst_report()->status); EXPECT_ALMOST( @@ -5145,6 +5166,7 @@ TEST_P(DISABLED_UsageTableTest, TimingTest) { OEMCrypto_Terminate(); sleep(kShortSleep); OEMCrypto_Initialize(); + InstallKeybox(kDefaultKeybox, true); // After a reboot, we should be able to reload keys, and generate reports. sleep(kLongSleep);