First Publicly Shared Version of ODKiTEE v15
This commit is contained in:
59
oemcrypto_ta/oemcrypto_session_key_table.c
Normal file
59
oemcrypto_ta/oemcrypto_session_key_table.c
Normal file
@@ -0,0 +1,59 @@
|
||||
/* Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary
|
||||
source code may only be used and distributed under the Widevine Master
|
||||
License Agreement. */
|
||||
|
||||
#include "oemcrypto_session_key_table.h"
|
||||
|
||||
#include "string.h"
|
||||
|
||||
#include "assert_interface.h"
|
||||
|
||||
static CryptoKey** get_key_table(OEMCryptoSession* session,
|
||||
OEMCrypto_LicenseType license_type,
|
||||
uint32_t* num_keys) {
|
||||
ASSERT(session != NULL && num_keys != NULL, "Parameters are NULL");
|
||||
ASSERT(license_type == OEMCrypto_ContentLicense ||
|
||||
license_type == OEMCrypto_EntitlementLicense,
|
||||
"session has invalid license type");
|
||||
if (license_type == OEMCrypto_ContentLicense) {
|
||||
*num_keys = session->num_content_keys;
|
||||
return session->content_keys;
|
||||
} else {
|
||||
*num_keys = session->num_entitlement_keys;
|
||||
return session->entitlement_keys;
|
||||
}
|
||||
}
|
||||
|
||||
CryptoKey* FindKeyFromTable(OEMCryptoSession* session, bool is_content_key,
|
||||
const uint8_t* key_id, uint32_t key_id_length) {
|
||||
ASSERT(session != NULL && key_id != NULL && key_id_length != 0,
|
||||
"Parameters are NULL or 0");
|
||||
uint32_t num_keys;
|
||||
ASSERT(
|
||||
session->license_type == OEMCrypto_EntitlementLicense || is_content_key,
|
||||
"Cannot get entitlement key for content license");
|
||||
OEMCrypto_LicenseType license_type =
|
||||
is_content_key ? OEMCrypto_ContentLicense : OEMCrypto_EntitlementLicense;
|
||||
CryptoKey** key_table = get_key_table(session, license_type, &num_keys);
|
||||
for (uint32_t i = 0; i < num_keys; i++) {
|
||||
CryptoKey* key = key_table[i];
|
||||
ASSERT(key != NULL, "key at index %d is NULL", i);
|
||||
if (key_id_length == key->key_id_size &&
|
||||
memcmp(key->key_id, key_id, key_id_length) == 0) {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void UpdateDurationForAllKeys(OEMCryptoSession* session,
|
||||
KeyControlBlock key_control_block) {
|
||||
ASSERT(session != NULL, "session is NULL");
|
||||
uint32_t num_keys;
|
||||
CryptoKey** key_table =
|
||||
get_key_table(session, session->license_type, &num_keys);
|
||||
for (uint32_t i = 0; i < num_keys; i++) {
|
||||
ASSERT(key_table[i] != NULL, "key at index %d is NULL", i);
|
||||
key_table[i]->key_control_block.duration = key_control_block.duration;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user