OEMCrypto v13 Header and Stubs
Merge from Widevine repo of http://go/wvgerrit/22899 This is most of the header changes for OEMCrypto v13. This updates just enough of the code that existing unit tests build and pass. The documentation will be reviewed in http://go/wvgerrit/22887. When that CL has been approved, comments in the code will be updated to match. Real code will be broken into several other CLs. bug:31458046 arm/libwvlevel3.a Level3 Library 4445 Jan 17 2017 20:01:26 x86/libwvlevel3.a Level3 Library 4464 Jan 17 2017 19:00:37 mips/libwvlevel3.a Level3 Library 4465 Jan 17 2017 19:24:35 Change-Id: I0318c53235c0b33afb623cba933365e09dec4e61
This commit is contained in:
committed by
Jeff Tinker
parent
d7b27e49a0
commit
b2a3921b37
@@ -222,7 +222,8 @@ void Session::LoadTestKeys(const std::string& pst, bool new_mac_keys) {
|
||||
&signature_[0], signature_.size(),
|
||||
encrypted_license().mac_key_iv,
|
||||
encrypted_license().mac_keys, num_keys_,
|
||||
key_array_, pst_ptr, pst.length()));
|
||||
key_array_, pst_ptr, pst.length(),
|
||||
NULL));
|
||||
// Update new generated keys.
|
||||
memcpy(&mac_key_server_[0], license_.mac_keys, wvcdm::MAC_KEY_SIZE);
|
||||
memcpy(&mac_key_client_[0], license_.mac_keys + wvcdm::MAC_KEY_SIZE,
|
||||
@@ -231,7 +232,8 @@ void Session::LoadTestKeys(const std::string& pst, bool new_mac_keys) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS,
|
||||
OEMCrypto_LoadKeys(session_id(), message_ptr(), message_size_,
|
||||
&signature_[0], signature_.size(), NULL, NULL,
|
||||
num_keys_, key_array_, pst_ptr, pst.length()));
|
||||
num_keys_, key_array_, pst_ptr, pst.length(),
|
||||
NULL));
|
||||
}
|
||||
VerifyTestKeys();
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ TEST_F(OEMCryptoClientTest, VersionNumber) {
|
||||
cout << " OEMCrypto does not support usage tables." << endl;
|
||||
}
|
||||
ASSERT_GE(version, 8u);
|
||||
ASSERT_LE(version, 12u);
|
||||
ASSERT_LE(version, 13u);
|
||||
}
|
||||
|
||||
TEST_F(OEMCryptoClientTest, ProvisioningDeclaredAPI12) {
|
||||
@@ -592,7 +592,7 @@ class OEMCryptoSessionTests : public OEMCryptoClientTest {
|
||||
virtual void SetUp() {
|
||||
OEMCryptoClientTest::SetUp();
|
||||
EnsureTestKeys();
|
||||
if (global_features.usage_table) OEMCrypto_DeleteUsageTable();
|
||||
if (global_features.usage_table) OEMCrypto_DeleteOldUsageTable();
|
||||
}
|
||||
|
||||
void EnsureTestKeys() {
|
||||
@@ -938,7 +938,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange1) {
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
&mac_keys[0], // Not pointing into buffer.
|
||||
s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.num_keys(), s.key_array(), NULL, 0, NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -956,7 +956,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange2) {
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(),
|
||||
&mac_key_iv[0], // bad.
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -974,7 +975,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange3) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -993,7 +995,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange4) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -1010,7 +1013,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange5) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -1029,7 +1033,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange6) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -1048,7 +1053,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadRange7) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -1063,7 +1069,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadNonce) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
@@ -1088,7 +1095,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithRepeatNonce) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
@@ -1103,7 +1111,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithBadVerification) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
@@ -1137,7 +1146,8 @@ TEST_P(SessionTestAlternateVerification, LoadKeys) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
// If this is a future API, then LoadKeys should fail.
|
||||
if (global_features.api_version < target_api_) {
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
@@ -1163,7 +1173,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeysBadSignature) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -1176,7 +1187,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeysWithNoDerivedKeys) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
@@ -1193,7 +1205,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyNoKeys) {
|
||||
OEMCrypto_SUCCESS,
|
||||
OEMCrypto_LoadKeys(s.session_id(), s.message_ptr(), s.message_size(),
|
||||
&s.signature()[0], s.signature().size(), NULL, NULL,
|
||||
kNoKeys, s.key_array(), NULL, 0));
|
||||
kNoKeys, s.key_array(), NULL, 0,
|
||||
NULL));
|
||||
}
|
||||
|
||||
TEST_F(OEMCryptoSessionTests, LoadKeyNoKeyWithNonce) {
|
||||
@@ -1208,7 +1221,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyNoKeyWithNonce) {
|
||||
OEMCrypto_SUCCESS,
|
||||
OEMCrypto_LoadKeys(s.session_id(), s.message_ptr(), s.message_size(),
|
||||
&s.signature()[0], s.signature().size(), NULL, NULL,
|
||||
kNoKeys, s.key_array(), NULL, 0));
|
||||
kNoKeys, s.key_array(), NULL, 0,
|
||||
NULL));
|
||||
}
|
||||
|
||||
TEST_F(OEMCryptoSessionTests, QueryKeyControl) {
|
||||
@@ -1248,7 +1262,8 @@ TEST_F(OEMCryptoSessionTests, AntiRollbackHardwareRequired) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
if (OEMCrypto_IsAntiRollbackHwPresent()) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
} else {
|
||||
@@ -1271,7 +1286,8 @@ TEST_F(OEMCryptoSessionTests, CheckMinimumPatchLevel) {
|
||||
&s.signature()[0], s.signature().size(),
|
||||
s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(),
|
||||
s.key_array(), NULL, 0));
|
||||
s.key_array(), NULL, 0,
|
||||
NULL));
|
||||
if (patch_level < 0x3F) {
|
||||
Session s;
|
||||
ASSERT_NO_FATAL_FAILURE(s.open());
|
||||
@@ -1286,7 +1302,8 @@ TEST_F(OEMCryptoSessionTests, CheckMinimumPatchLevel) {
|
||||
&s.signature()[0], s.signature().size(),
|
||||
s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(),
|
||||
s.key_array(), NULL, 0));
|
||||
s.key_array(), NULL, 0,
|
||||
NULL));
|
||||
}
|
||||
if (patch_level > 0) {
|
||||
Session s;
|
||||
@@ -1302,7 +1319,8 @@ TEST_F(OEMCryptoSessionTests, CheckMinimumPatchLevel) {
|
||||
&s.signature()[0], s.signature().size(),
|
||||
s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(),
|
||||
s.key_array(), NULL, 0));
|
||||
s.key_array(), NULL, 0,
|
||||
NULL));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4280,7 +4298,7 @@ class UsageTableTest : public GenericCryptoTest {
|
||||
|
||||
void DeactivatePST(const std::string& pst) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS,
|
||||
OEMCrypto_DeactivateUsageEntry(
|
||||
OEMCrypto_DeactivateUsageEntry(0,
|
||||
reinterpret_cast<const uint8_t*>(pst.c_str()), pst.length()));
|
||||
}
|
||||
|
||||
@@ -4457,7 +4475,8 @@ TEST_F(UsageTableTest, RepeatOnlineLicense) {
|
||||
&s.signature()[0], s.signature().size(),
|
||||
s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(),
|
||||
s.key_array(), pst_ptr, pst.length()));
|
||||
s.key_array(), pst_ptr, pst.length(),
|
||||
NULL));
|
||||
ASSERT_NO_FATAL_FAILURE(s2.close());
|
||||
}
|
||||
|
||||
@@ -4474,7 +4493,8 @@ TEST_F(UsageTableTest, OnlineEmptyPST) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
ASSERT_NO_FATAL_FAILURE(s.close());
|
||||
}
|
||||
@@ -4492,7 +4512,7 @@ TEST_F(UsageTableTest, EmptyTable) {
|
||||
ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_));
|
||||
s.GenerateReport(pst);
|
||||
ASSERT_NO_FATAL_FAILURE(s.close());
|
||||
OEMCrypto_DeleteUsageTable();
|
||||
OEMCrypto_DeleteOldUsageTable();
|
||||
Session s2;
|
||||
ASSERT_NO_FATAL_FAILURE(s2.open());
|
||||
s2.GenerateReport(pst, false);
|
||||
@@ -4803,11 +4823,11 @@ TEST_P(UsageTableTestWithMAC, DeleteEntryBadRange) {
|
||||
TEST_P(UsageTableTestWithMAC, DeactivateBadPST) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_UpdateUsageTable());
|
||||
std::string pst = "nonexistant pst";
|
||||
OEMCryptoResult sts = OEMCrypto_DeactivateUsageEntry(
|
||||
OEMCryptoResult sts = OEMCrypto_DeactivateUsageEntry(0,
|
||||
reinterpret_cast<const uint8_t*>(pst.c_str()), pst.length());
|
||||
EXPECT_EQ(OEMCrypto_ERROR_INVALID_CONTEXT, sts);
|
||||
std::string null_pst = "";
|
||||
sts = OEMCrypto_DeactivateUsageEntry(
|
||||
sts = OEMCrypto_DeactivateUsageEntry(0,
|
||||
reinterpret_cast<const uint8_t*>(null_pst.c_str()), null_pst.length());
|
||||
EXPECT_EQ(OEMCrypto_ERROR_INVALID_CONTEXT, sts);
|
||||
}
|
||||
@@ -5160,7 +5180,8 @@ TEST_P(UsageTableTestWithMAC, BadReloadOfflineLicense) {
|
||||
&s2.signature()[0], s2.signature().size(),
|
||||
s2.encrypted_license().mac_key_iv,
|
||||
s2.encrypted_license().mac_keys, s.num_keys(),
|
||||
s2.key_array(), pst_ptr, pst.length()));
|
||||
s2.key_array(), pst_ptr, pst.length(),
|
||||
NULL));
|
||||
ASSERT_NO_FATAL_FAILURE(s2.close());
|
||||
|
||||
// Offline license with same mac keys should still be OK.
|
||||
@@ -5186,7 +5207,8 @@ TEST_P(UsageTableTestWithMAC, OfflineBadNonce) {
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), pst_ptr,
|
||||
pst.length());
|
||||
pst.length(),
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
ASSERT_NO_FATAL_FAILURE(s.close());
|
||||
}
|
||||
@@ -5203,7 +5225,8 @@ TEST_P(UsageTableTestWithMAC, OfflineEmptyPST) {
|
||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||
s.session_id(), s.message_ptr(), s.message_size(), &s.signature()[0],
|
||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0);
|
||||
s.encrypted_license().mac_keys, s.num_keys(), s.key_array(), NULL, 0,
|
||||
NULL);
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
ASSERT_NO_FATAL_FAILURE(s.close());
|
||||
}
|
||||
@@ -5241,7 +5264,8 @@ TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicense) {
|
||||
&s.signature()[0], s.signature().size(),
|
||||
s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(),
|
||||
s.key_array(), pst_ptr, pst.length()));
|
||||
s.key_array(), pst_ptr, pst.length(),
|
||||
NULL));
|
||||
// But we can still generate a report.
|
||||
Session s3;
|
||||
ASSERT_NO_FATAL_FAILURE(s3.open());
|
||||
@@ -5265,7 +5289,8 @@ TEST_P(UsageTableTestWithMAC, BadRange) {
|
||||
&s.signature()[0], s.signature().size(),
|
||||
s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(),
|
||||
s.key_array(), pst_ptr, pst.length()));
|
||||
s.key_array(), pst_ptr, pst.length(),
|
||||
NULL));
|
||||
}
|
||||
|
||||
TEST_F(UsageTableTest, TimingTest) {
|
||||
@@ -5530,7 +5555,8 @@ TEST_F(UsageTableTest, PSTLargeBuffer) {
|
||||
&s.signature()[0], s.signature().size(),
|
||||
s.encrypted_license().mac_key_iv,
|
||||
s.encrypted_license().mac_keys, s.num_keys(),
|
||||
s.key_array(), pst_ptr, pst.length()));
|
||||
s.key_array(), pst_ptr, pst.length(),
|
||||
NULL));
|
||||
// But we can still generate a report.
|
||||
Session s3;
|
||||
ASSERT_NO_FATAL_FAILURE(s3.open());
|
||||
|
||||
Reference in New Issue
Block a user