Update OEMCrypto calls to use substrings
Merge from master branch of Widevine repo of http://go/wvgerrit/66073 Merge from oemcrypto-v15 branch of Widevine repo of http://go/wvgerrit/64083 As part of the update to v15, LoadKeys, RefreshKeys, and LoadEntitledContentKeys should all use offsets and lengths into the message rather than a pointer for its parameters. The CDM, tests, adapters, and OEMCrypto implementations are changed to reflect this. Test: tested as part of http://go/ag/5501993 Bug: 115874964 Change-Id: I981fa322dec7c565066fd163ca5775dbff71fccf
This commit is contained in:
committed by
Fred Gylys-Colwell
parent
4550979f22
commit
e6439255ba
@@ -92,6 +92,26 @@ size_t GetOffset(std::string message, std::string field) {
|
||||
return pos;
|
||||
}
|
||||
|
||||
OEMCrypto_Substring GetSubstring(const std::string& message,
|
||||
const std::string& field, bool set_zero) {
|
||||
OEMCrypto_Substring substring;
|
||||
if (set_zero || field.empty() || message.empty()) {
|
||||
substring.offset = 0;
|
||||
substring.length = 0;
|
||||
} else {
|
||||
size_t pos = message.find(field);
|
||||
if (pos == std::string::npos) {
|
||||
LOGW("GetSubstring : Cannot find offset for %s", field.c_str());
|
||||
substring.offset = 0;
|
||||
substring.length = 0;
|
||||
} else {
|
||||
substring.offset = pos;
|
||||
substring.length = field.length();
|
||||
}
|
||||
}
|
||||
return substring;
|
||||
}
|
||||
|
||||
void GenerateMacContext(const std::string& input_context,
|
||||
std::string* deriv_context) {
|
||||
if (!deriv_context) {
|
||||
@@ -933,22 +953,12 @@ bool CryptoSession::RefreshKeys(const std::string& message,
|
||||
for (int i = 0; i < num_keys; ++i) {
|
||||
const CryptoKey* ki = &key_array[i];
|
||||
OEMCrypto_KeyRefreshObject* ko = &load_key_array[i];
|
||||
if (ki->key_id().empty()) {
|
||||
ko->key_id = NULL;
|
||||
} else {
|
||||
ko->key_id = msg + GetOffset(message, ki->key_id());
|
||||
}
|
||||
if (ki->HasKeyControl()) {
|
||||
if (ki->key_control_iv().empty()) {
|
||||
ko->key_control_iv = NULL;
|
||||
} else {
|
||||
ko->key_control_iv = msg + GetOffset(message, ki->key_control_iv());
|
||||
}
|
||||
ko->key_control = msg + GetOffset(message, ki->key_control());
|
||||
} else {
|
||||
ko->key_control_iv = NULL;
|
||||
ko->key_control = NULL;
|
||||
}
|
||||
ko->key_id = GetSubstring(message, ki->key_id());
|
||||
bool has_key_control = ki->HasKeyControl();
|
||||
ko->key_control_iv =
|
||||
GetSubstring(message, ki->key_control_iv(), !has_key_control);
|
||||
ko->key_control =
|
||||
GetSubstring(message, ki->key_control(), !has_key_control);
|
||||
}
|
||||
LOGV("RefreshKeys: id=%lu", oec_session_id_);
|
||||
OEMCryptoResult refresh_sts;
|
||||
|
||||
Reference in New Issue
Block a user