OEMCrypto Query Key Control Block
Merge from Widevine repo http://go/wvgerrit/13818 This CL adds the ability to query OEMCrypto about the key control block and duration of a key that has been loaded. There are unit tests and implementation in the level 3 and reference implementation. b/18503541 Change-Id: I8e40d90a3c64c1ce030af6fef9e98c8eac0df1a5
This commit is contained in:
@@ -451,6 +451,43 @@ OEMCryptoResult OEMCrypto_RefreshKeys(
|
||||
return OEMCrypto_SUCCESS;
|
||||
}
|
||||
|
||||
extern "C" OEMCryptoResult OEMCrypto_QueryKeyControl(
|
||||
OEMCrypto_SESSION session, const uint8_t* key_id, size_t key_id_length,
|
||||
uint8_t* key_control_block, size_t* key_control_block_length) {
|
||||
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||
LOGI("-- OEMCryptoResult OEMCrypto_QueryKeyControl"
|
||||
"(const OEMCrypto_SESSION session)\n");
|
||||
if (wvcdm::g_cutoff >= wvcdm::LOG_VERBOSE) {
|
||||
dump_hex("key_id", key_id, key_id_length);
|
||||
}
|
||||
}
|
||||
uint32_t* block = reinterpret_cast<uint32_t*>(key_control_block);
|
||||
if ((key_control_block_length == NULL)
|
||||
|| (*key_control_block_length < wvcdm::KEY_CONTROL_SIZE)) {
|
||||
LOGE("[OEMCrypto_QueryKeyControl(): OEMCrypto_ERROR_SHORT_BUFFER]");
|
||||
return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
}
|
||||
*key_control_block_length = wvcdm::KEY_CONTROL_SIZE;
|
||||
if (key_id == NULL) {
|
||||
LOGE("[OEMCrypto_QueryKeyControl(): key_id null. "
|
||||
"OEMCrypto_ERROR_UNKNOWN_FAILURE]");
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
|
||||
SessionContext* session_ctx = crypto_engine->FindSession(session);
|
||||
if (!session_ctx || !session_ctx->isValid()) {
|
||||
LOGE("[OEMCrypto_QueryKeyControl(): ERROR_INVALID_SESSION]");
|
||||
return OEMCrypto_ERROR_INVALID_SESSION;
|
||||
}
|
||||
const std::vector<uint8_t> key_id_str =
|
||||
std::vector<uint8_t>(key_id, key_id + key_id_length);
|
||||
if (!session_ctx->QueryKeyControlBlock(key_id_str, block)) {
|
||||
LOGE("[OEMCrypto_QueryKeyControl(): FAIL]");
|
||||
return OEMCrypto_ERROR_NO_CONTENT_KEY;
|
||||
}
|
||||
return OEMCrypto_SUCCESS;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
OEMCryptoResult OEMCrypto_SelectKey(const OEMCrypto_SESSION session,
|
||||
const uint8_t* key_id,
|
||||
|
||||
Reference in New Issue
Block a user