Merge "OEMCrypto Backwards Compatible Usage Table"
This commit is contained in:
committed by
Android (Google) Code Review
commit
49a61f6270
@@ -48,7 +48,11 @@ OEMCryptoResult OEMCrypto_ShrinkUsageTableHeader(SecurityLevel level,
|
||||
uint32_t new_table_size,
|
||||
uint8_t* header_buffer,
|
||||
size_t* header_buffer_length);
|
||||
|
||||
OEMCryptoResult OEMCrypto_CreateOldUsageEntry(SecurityLevel level,
|
||||
uint64_t time_since_license_received, uint64_t time_since_first_decrypt,
|
||||
uint64_t time_since_last_decrypt, OEMCrypto_Usage_Entry_Status status,
|
||||
uint8_t* server_mac_key, uint8_t* client_mac_key, const uint8_t* pst,
|
||||
size_t pst_length);
|
||||
} // namespace wvcdm
|
||||
|
||||
#endif // WVCDM_CORE_OEMCRYPTO_ADAPTER_H_
|
||||
|
||||
@@ -242,6 +242,11 @@ typedef OEMCryptoResult (*L1_MoveEntry_t)(OEMCrypto_SESSION session,
|
||||
typedef OEMCryptoResult (*L1_CopyOldUsageEntry_t)(OEMCrypto_SESSION session,
|
||||
const uint8_t*pst,
|
||||
size_t pst_length);
|
||||
typedef OEMCryptoResult (*L1_CreateOldUsageEntry_t)(
|
||||
uint64_t time_since_license_received, uint64_t time_since_first_decrypt,
|
||||
uint64_t time_since_last_decrypt, OEMCrypto_Usage_Entry_Status status,
|
||||
uint8_t* server_mac_key, uint8_t* client_mac_key, const uint8_t* pst,
|
||||
size_t pst_length);
|
||||
|
||||
struct FunctionPointers {
|
||||
uint32_t version;
|
||||
@@ -305,6 +310,7 @@ struct FunctionPointers {
|
||||
L1_ShrinkUsageTableHeader_t ShrinkUsageTableHeader;
|
||||
L1_MoveEntry_t MoveEntry;
|
||||
L1_CopyOldUsageEntry_t CopyOldUsageEntry;
|
||||
L1_CreateOldUsageEntry_t CreateOldUsageEntry;
|
||||
|
||||
L1_LoadKeys_V8_t LoadKeys_V8;
|
||||
L1_GenerateRSASignature_V8_t GenerateRSASignature_V8;
|
||||
@@ -590,6 +596,7 @@ class Adapter {
|
||||
LOOKUP(ShrinkUsageTableHeader, OEMCrypto_ShrinkUsageTableHeader);
|
||||
LOOKUP(MoveEntry, OEMCrypto_MoveEntry);
|
||||
LOOKUP(CopyOldUsageEntry, OEMCrypto_CopyOldUsageEntry);
|
||||
LOOKUP(CreateOldUsageEntry, OEMCrypto_CreateOldUsageEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -750,6 +757,8 @@ class Adapter {
|
||||
level3_.ShrinkUsageTableHeader = Level3_ShrinkUsageTableHeader;
|
||||
level3_.MoveEntry = Level3_MoveEntry;
|
||||
level3_.CopyOldUsageEntry = Level3_CopyOldUsageEntry;
|
||||
// TODO(fredgc): add stub.
|
||||
// level3_.CreateOldUsageEntry = Level3_CreateOldUsageEntry;
|
||||
|
||||
level3_.version = Level3_APIVersion();
|
||||
}
|
||||
@@ -1018,10 +1027,26 @@ OEMCryptoResult OEMCrypto_ShrinkUsageTableHeader(SecurityLevel level,
|
||||
const FunctionPointers* fcn = kAdapter->get(level);
|
||||
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||
if (fcn->version < 13) return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
if (!fcn->ShrinkUsageTableHeader) return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
return fcn->ShrinkUsageTableHeader(new_table_size, header_buffer,
|
||||
header_buffer_length);
|
||||
}
|
||||
|
||||
OEMCryptoResult OEMCrypto_CreateOldUsageEntry(
|
||||
SecurityLevel level, uint64_t time_since_license_received,
|
||||
uint64_t time_since_first_decrypt, uint64_t time_since_last_decrypt,
|
||||
OEMCrypto_Usage_Entry_Status status, uint8_t* server_mac_key,
|
||||
uint8_t* client_mac_key, const uint8_t* pst, size_t pst_length) {
|
||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
const FunctionPointers* fcn = kAdapter->get(level);
|
||||
if (!fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||
if (fcn->version < 13) return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
if (!fcn->CreateOldUsageEntry) return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
return fcn->CreateOldUsageEntry(
|
||||
time_since_license_received, time_since_first_decrypt,
|
||||
time_since_last_decrypt, status, server_mac_key, client_mac_key, pst,
|
||||
pst_length);
|
||||
}
|
||||
} // namespace wvcdm
|
||||
|
||||
extern "C" OEMCryptoResult OEMCrypto_Initialize(void) {
|
||||
@@ -1088,6 +1113,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, const uint8_t* srm_requirement) {
|
||||
|
||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
LevelSession pair = kAdapter->get(session);
|
||||
if (!pair.fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||
@@ -1557,6 +1583,7 @@ extern "C" OEMCryptoResult OEMCrypto_DeleteUsageEntry(
|
||||
const uint8_t* message, size_t message_length, const uint8_t* signature,
|
||||
size_t signature_length) {
|
||||
LOGE("TODO(fredgc): remove DeleteUsageEntry.");
|
||||
|
||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
LevelSession pair = kAdapter->get(session);
|
||||
if (!pair.fcn) return OEMCrypto_ERROR_INVALID_SESSION;
|
||||
@@ -1572,6 +1599,7 @@ extern "C" OEMCryptoResult OEMCrypto_DeleteUsageEntry(
|
||||
extern "C" OEMCryptoResult OEMCrypto_ForceDeleteUsageEntry(
|
||||
const uint8_t* pst, size_t pst_length) {
|
||||
LOGE("TODO(fredgc): remove ForceDeleteUsageEntry.");
|
||||
|
||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
const FunctionPointers* fcn1 = kAdapter->get(kLevelDefault);
|
||||
const FunctionPointers* fcn3 = kAdapter->get(kLevel3);
|
||||
@@ -1589,6 +1617,7 @@ extern "C" OEMCryptoResult OEMCrypto_ForceDeleteUsageEntry(
|
||||
}
|
||||
|
||||
extern "C" OEMCryptoResult OEMCrypto_DeleteOldUsageTable() {
|
||||
|
||||
if (!kAdapter) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
const FunctionPointers* fcn1 = kAdapter->get(kLevelDefault);
|
||||
const FunctionPointers* fcn3 = kAdapter->get(kLevel3);
|
||||
@@ -1718,15 +1747,13 @@ OEMCryptoResult OEMCrypto_CopyOldUsageEntry(OEMCrypto_SESSION session,
|
||||
return pair.fcn->CopyOldUsageEntry(pair.session, pst, pst_length);
|
||||
}
|
||||
|
||||
extern "C"
|
||||
OEMCryptoResult Level3_CreateOldUsageEntry(uint64_t time_since_license_received,
|
||||
uint64_t time_since_first_decrypt,
|
||||
uint64_t time_since_last_decrypt,
|
||||
OEMCrypto_Usage_Entry_Status status,
|
||||
uint8_t *server_mac_key,
|
||||
uint8_t *client_mac_key,
|
||||
const uint8_t* pst,
|
||||
size_t pst_length) {
|
||||
// TODO(fredgc): add this.
|
||||
return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
||||
extern "C" OEMCryptoResult OEMCrypto_CreateOldUsageEntry(
|
||||
uint64_t time_since_license_received, uint64_t time_since_first_decrypt,
|
||||
uint64_t time_since_last_decrypt, OEMCrypto_Usage_Entry_Status status,
|
||||
uint8_t* server_mac_key, uint8_t* client_mac_key, const uint8_t* pst,
|
||||
size_t pst_length) {
|
||||
return OEMCrypto_CreateOldUsageEntry(
|
||||
kLevelDefault, time_since_license_received, time_since_first_decrypt,
|
||||
time_since_last_decrypt, status, server_mac_key, client_mac_key, pst,
|
||||
pst_length);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user