Add session parameter to OEMCrypto_CopyBuffer

Merge from master branch of Widevine repo of http://go/wvgerrit/66070
Merge from oemcrypto-v15 branch of Widevine repo of http://go/wvgerrit/63662

To make the threading model more clear, CopyBuffer is now a session function.
This means we need to pass in which session the current thread locks.

Test: unit tests.
Test: tested as part of http://go/ag/5501993
Bug: 113680369
Change-Id: I2fdd2cfcaab99f3793950b3845941463675f5e4c
This commit is contained in:
Fred Gylys-Colwell
2018-11-12 14:15:00 -08:00
parent 5b20bb54ff
commit 43a47a60c0
6 changed files with 56 additions and 44 deletions

View File

@@ -478,7 +478,7 @@ const uint32_t OEMCrypto_Partner_Defined_Hash = 2;
#define OEMCrypto_GetMaxNumberOfSessions _oecc37
#define OEMCrypto_GetNumberOfOpenSessions _oecc38
#define OEMCrypto_IsAntiRollbackHwPresent _oecc39
#define OEMCrypto_CopyBuffer _oecc40
#define OEMCrypto_CopyBuffer_v14 _oecc40
#define OEMCrypto_QueryKeyControl _oecc41
#define OEMCrypto_LoadTestKeybox_V13 _oecc42
#define OEMCrypto_ForceDeleteUsageEntry _oecc43
@@ -521,6 +521,7 @@ const uint32_t OEMCrypto_Partner_Defined_Hash = 2;
#define OEMCrypto_BuildInformation _oecc90
#define OEMCrypto_RefreshKeys _oecc91
#define OEMCrypto_LoadEntitledContentKeys _oecc92
#define OEMCrypto_CopyBuffer _oecc93
/*
* OEMCrypto_SetSandbox
@@ -1846,7 +1847,8 @@ OEMCryptoResult OEMCrypto_DecryptCENC(
* Version:
* This method is changed in API version 15.
*/
OEMCryptoResult OEMCrypto_CopyBuffer(const uint8_t* data_addr,
OEMCryptoResult OEMCrypto_CopyBuffer(OEMCrypto_SESSION session,
const uint8_t* data_addr,
size_t data_length,
OEMCrypto_DestBufferDesc* out_buffer,
uint8_t subsample_flags);

View File

@@ -523,7 +523,7 @@ extern "C" OEMCryptoResult OEMCrypto_DecryptCENC(
}
extern "C" OEMCryptoResult OEMCrypto_CopyBuffer(
const uint8_t* data_addr, size_t data_length,
OEMCrypto_SESSION session, const uint8_t* data_addr, size_t data_length,
OEMCrypto_DestBufferDesc* out_buffer, uint8_t subsample_flags) {
if (!crypto_engine) {
LOGE("OEMCrypto_CopyBuffer: OEMCrypto Not Initialized.");

View File

@@ -398,6 +398,8 @@ TEST_F(OEMCryptoClientTest, PreventNonceFlood3API09) {
}
TEST_F(OEMCryptoClientTest, ClearCopyTestAPI10) {
Session s;
ASSERT_NO_FATAL_FAILURE(s.open());
const int kDataSize = 256;
vector<uint8_t> input_buffer(kDataSize);
GetRandBytes(&input_buffer[0], input_buffer.size());
@@ -408,31 +410,36 @@ TEST_F(OEMCryptoClientTest, ClearCopyTestAPI10) {
dest_buffer.buffer.clear.max_length = output_buffer.size();
ASSERT_EQ(
OEMCrypto_SUCCESS,
OEMCrypto_CopyBuffer(&input_buffer[0], input_buffer.size(), &dest_buffer,
OEMCrypto_CopyBuffer(s.session_id(), &input_buffer[0],
input_buffer.size(), &dest_buffer,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
ASSERT_EQ(input_buffer, output_buffer);
ASSERT_EQ(
OEMCrypto_ERROR_INVALID_CONTEXT,
OEMCrypto_CopyBuffer(NULL, input_buffer.size(), &dest_buffer,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
ASSERT_EQ(
OEMCrypto_ERROR_INVALID_CONTEXT,
OEMCrypto_CopyBuffer(&input_buffer[0], input_buffer.size(), NULL,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
ASSERT_EQ(OEMCrypto_ERROR_INVALID_CONTEXT,
OEMCrypto_CopyBuffer(
s.session_id(), NULL, input_buffer.size(), &dest_buffer,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
ASSERT_EQ(OEMCrypto_ERROR_INVALID_CONTEXT,
OEMCrypto_CopyBuffer(
s.session_id(), &input_buffer[0], input_buffer.size(), NULL,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
dest_buffer.buffer.clear.address = NULL;
ASSERT_EQ(
OEMCrypto_ERROR_INVALID_CONTEXT,
OEMCrypto_CopyBuffer(&input_buffer[0], input_buffer.size(), &dest_buffer,
OEMCrypto_CopyBuffer(s.session_id(), &input_buffer[0],
input_buffer.size(), &dest_buffer,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
dest_buffer.buffer.clear.address = &output_buffer[0];
dest_buffer.buffer.clear.max_length = output_buffer.size() - 1;
ASSERT_EQ(
OEMCrypto_ERROR_SHORT_BUFFER,
OEMCrypto_CopyBuffer(&input_buffer[0], input_buffer.size(), &dest_buffer,
OEMCrypto_CopyBuffer(s.session_id(), &input_buffer[0],
input_buffer.size(), &dest_buffer,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
}
TEST_F(OEMCryptoClientTest, ClearCopyTestLargeBufferAPI10) {
Session s;
ASSERT_NO_FATAL_FAILURE(s.open());
vector<uint8_t> input_buffer(kMaxDecryptSize);
GetRandBytes(&input_buffer[0], input_buffer.size());
vector<uint8_t> output_buffer(kMaxDecryptSize);
@@ -442,7 +449,8 @@ TEST_F(OEMCryptoClientTest, ClearCopyTestLargeBufferAPI10) {
dest_buffer.buffer.clear.max_length = output_buffer.size();
ASSERT_EQ(
OEMCrypto_SUCCESS,
OEMCrypto_CopyBuffer(&input_buffer[0], input_buffer.size(), &dest_buffer,
OEMCrypto_CopyBuffer(s.session_id(), &input_buffer[0],
input_buffer.size(), &dest_buffer,
OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample));
ASSERT_EQ(input_buffer, output_buffer);
}