Add Call to Install Keybox to Widevine CDM
This merges the following changes from the Widevine CDM repository: 1a72a7e Combine utility code into single library on Android Combines several previously-separate files into a static library, libcdm_utils, so that it can easily be used by both CDM and OEMCrypto. 8c4d04d Install Keybox If the keybox has not been installed, install it from /factory/wv.keys. Bug: 9972451 Change-Id: I8688ecd0adcf321e0c7d0faf55dd10f3910c12ec
This commit is contained in:
@@ -4,18 +4,32 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Builds libmodp_b64.a
|
# Builds libcdm_utils.a
|
||||||
#
|
#
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
LOCAL_MODULE := libmodp_b64
|
LOCAL_MODULE := libcdm_utils
|
||||||
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
|
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
|
||||||
|
|
||||||
LOCAL_C_INCLUDES := \
|
LOCAL_C_INCLUDES := \
|
||||||
bionic \
|
bionic \
|
||||||
external/stlport/stlport
|
external/stlport/stlport \
|
||||||
|
vendor/widevine/libwvdrmengine/cdm/core/include \
|
||||||
|
vendor/widevine/libwvdrmengine/cdm/include \
|
||||||
|
vendor/widevine/libwvdrmengine/oemcrypto/include \
|
||||||
|
vendor/widevine/libwvdrmengine/third_party/stringencoders/src
|
||||||
|
|
||||||
LOCAL_SRC_FILES := third_party/stringencoders/src/modp_b64w.cpp
|
SRC_DIR := cdm/src
|
||||||
|
CORE_SRC_DIR := cdm/core/src
|
||||||
|
LOCAL_SRC_FILES := third_party/stringencoders/src/modp_b64w.cpp \
|
||||||
|
$(CORE_SRC_DIR)/properties.cpp \
|
||||||
|
$(CORE_SRC_DIR)/string_conversions.cpp \
|
||||||
|
$(SRC_DIR)/clock.cpp \
|
||||||
|
$(SRC_DIR)/file_store.cpp \
|
||||||
|
$(SRC_DIR)/lock.cpp \
|
||||||
|
$(SRC_DIR)/log.cpp \
|
||||||
|
$(SRC_DIR)/properties_android.cpp \
|
||||||
|
$(SRC_DIR)/timer.cpp \
|
||||||
|
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|
||||||
@@ -77,6 +91,7 @@ LOCAL_C_INCLUDES := \
|
|||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := \
|
LOCAL_STATIC_LIBRARIES := \
|
||||||
libcdm \
|
libcdm \
|
||||||
|
libcdm_utils \
|
||||||
libwvwrapper \
|
libwvwrapper \
|
||||||
libwvlevel3 \
|
libwvlevel3 \
|
||||||
libprotobuf-cpp-2.3.0-lite \
|
libprotobuf-cpp-2.3.0-lite \
|
||||||
|
|||||||
@@ -31,17 +31,8 @@ LOCAL_SRC_FILES := \
|
|||||||
$(CORE_SRC_DIR)/device_files.cpp \
|
$(CORE_SRC_DIR)/device_files.cpp \
|
||||||
$(CORE_SRC_DIR)/license.cpp \
|
$(CORE_SRC_DIR)/license.cpp \
|
||||||
$(CORE_SRC_DIR)/policy_engine.cpp \
|
$(CORE_SRC_DIR)/policy_engine.cpp \
|
||||||
$(CORE_SRC_DIR)/properties.cpp \
|
|
||||||
$(CORE_SRC_DIR)/string_conversions.cpp \
|
|
||||||
$(SRC_DIR)/clock.cpp \
|
|
||||||
$(SRC_DIR)/file_store.cpp \
|
|
||||||
$(SRC_DIR)/lock.cpp \
|
|
||||||
$(SRC_DIR)/log.cpp \
|
|
||||||
$(SRC_DIR)/properties_android.cpp \
|
|
||||||
$(SRC_DIR)/timer.cpp \
|
|
||||||
$(SRC_DIR)/wv_content_decryption_module.cpp
|
$(SRC_DIR)/wv_content_decryption_module.cpp
|
||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES := libmodp_b64
|
|
||||||
LOCAL_MODULE := libcdm
|
LOCAL_MODULE := libcdm
|
||||||
LOCAL_MODULE_TAGS := optional
|
LOCAL_MODULE_TAGS := optional
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ class Properties {
|
|||||||
static bool GetProductName(std::string* product_name);
|
static bool GetProductName(std::string* product_name);
|
||||||
static bool GetBuildInfo(std::string* build_info);
|
static bool GetBuildInfo(std::string* build_info);
|
||||||
static bool GetDeviceFilesBasePath(std::string* base_path);
|
static bool GetDeviceFilesBasePath(std::string* base_path);
|
||||||
|
static bool GetFactoryKeyboxPath(std::string* keybox);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void set_begin_license_usage_when_received(bool flag) {
|
static void set_begin_license_usage_when_received(bool flag) {
|
||||||
|
|||||||
@@ -92,4 +92,13 @@ bool Properties::GetDeviceFilesBasePath(std::string* base_path) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Properties::GetFactoryKeyboxPath(std::string* keybox) {
|
||||||
|
if (!keybox) {
|
||||||
|
LOGW("Properties::GetFactoryKeyboxPath: Invalid parameter");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*keybox = "/factory/wv.keys";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace wvcdm
|
} // namespace wvcdm
|
||||||
|
|||||||
@@ -34,15 +34,15 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(cdm_proto_gen_headers)
|
|||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := \
|
LOCAL_STATIC_LIBRARIES := \
|
||||||
libcdm \
|
libcdm \
|
||||||
|
libcdm_protos \
|
||||||
libgmock \
|
libgmock \
|
||||||
libgtest \
|
libgtest \
|
||||||
libgtest_main \
|
libgtest_main \
|
||||||
libwvwrapper \
|
libwvwrapper \
|
||||||
libwvlevel3 \
|
libwvlevel3 \
|
||||||
|
libcdm_utils \
|
||||||
libprotobuf-cpp-2.3.0-lite
|
libprotobuf-cpp-2.3.0-lite
|
||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES := libcdm_protos
|
|
||||||
|
|
||||||
LOCAL_SHARED_LIBRARIES := \
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
libcrypto \
|
libcrypto \
|
||||||
libcutils \
|
libcutils \
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -18,6 +18,8 @@ LOCAL_C_INCLUDES := \
|
|||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := \
|
LOCAL_STATIC_LIBRARIES := \
|
||||||
libcdm \
|
libcdm \
|
||||||
|
libcdm_protos \
|
||||||
|
libcdm_utils \
|
||||||
libgmock \
|
libgmock \
|
||||||
libgmock_main \
|
libgmock_main \
|
||||||
libgtest \
|
libgtest \
|
||||||
@@ -47,8 +49,6 @@ LOCAL_C_INCLUDES += \
|
|||||||
|
|
||||||
LOCAL_ADDITIONAL_DEPENDENCIES += $(proto_generated_headers)
|
LOCAL_ADDITIONAL_DEPENDENCIES += $(proto_generated_headers)
|
||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES := libcdm_protos
|
|
||||||
|
|
||||||
# End protobuf section
|
# End protobuf section
|
||||||
|
|
||||||
LOCAL_MODULE := libwvdrmmediacrypto_test
|
LOCAL_MODULE := libwvdrmmediacrypto_test
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ LOCAL_C_INCLUDES := \
|
|||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := \
|
LOCAL_STATIC_LIBRARIES := \
|
||||||
libcdm \
|
libcdm \
|
||||||
|
libcdm_protos \
|
||||||
|
libcdm_utils \
|
||||||
libgmock \
|
libgmock \
|
||||||
libgmock_main \
|
libgmock_main \
|
||||||
libgtest \
|
libgtest \
|
||||||
@@ -46,8 +48,6 @@ LOCAL_C_INCLUDES += \
|
|||||||
|
|
||||||
LOCAL_ADDITIONAL_DEPENDENCIES += $(proto_generated_headers)
|
LOCAL_ADDITIONAL_DEPENDENCIES += $(proto_generated_headers)
|
||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES := libcdm_protos
|
|
||||||
|
|
||||||
# End protobuf section
|
# End protobuf section
|
||||||
|
|
||||||
LOCAL_MODULE := libwvdrmdrmplugin_test
|
LOCAL_MODULE := libwvdrmdrmplugin_test
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* OEMCryptoCENC.h
|
* level3.h
|
||||||
*
|
*
|
||||||
* (c) Copyright 2013 Google, Inc.
|
* (c) Copyright 2013 Google, Inc.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,18 +2,12 @@ LOCAL_PATH:= $(call my-dir)
|
|||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
CDM_SRC_DIR=../../cdm/src
|
|
||||||
CORE_SRC_DIR=../../cdm/core/src
|
|
||||||
|
|
||||||
LOCAL_SRC_FILES:= \
|
LOCAL_SRC_FILES:= \
|
||||||
src/oemcrypto_engine_mock.cpp \
|
src/oemcrypto_engine_mock.cpp \
|
||||||
src/oemcrypto_key_mock.cpp \
|
src/oemcrypto_key_mock.cpp \
|
||||||
src/oemcrypto_keybox_mock.cpp \
|
src/oemcrypto_keybox_mock.cpp \
|
||||||
src/oemcrypto_mock.cpp \
|
src/oemcrypto_mock.cpp \
|
||||||
src/wvcrc.cpp \
|
src/wvcrc.cpp \
|
||||||
$(CDM_SRC_DIR)/lock.cpp \
|
|
||||||
$(CDM_SRC_DIR)/log.cpp \
|
|
||||||
$(CORE_SRC_DIR)/string_conversions.cpp \
|
|
||||||
|
|
||||||
LOCAL_MODULE_TAGS := tests
|
LOCAL_MODULE_TAGS := tests
|
||||||
|
|
||||||
@@ -37,7 +31,9 @@ LOCAL_SHARED_LIBRARIES := \
|
|||||||
libutils \
|
libutils \
|
||||||
libz \
|
libz \
|
||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES := libmodp_b64
|
LOCAL_STATIC_LIBRARIES := \
|
||||||
|
libcdm_utils
|
||||||
|
|
||||||
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
|
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
|
||||||
LOCAL_MODULE := liboemcrypto
|
LOCAL_MODULE := liboemcrypto
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
#include "level3.h"
|
#include "level3.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "file_store.h"
|
||||||
|
#include "properties.h"
|
||||||
|
|
||||||
using namespace wvoec_level3;
|
using namespace wvoec_level3;
|
||||||
|
|
||||||
@@ -232,6 +234,32 @@ OEMCryptoResult OEMCrypto_Initialize(void) {
|
|||||||
return Level3_Initialize();
|
return Level3_Initialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (OEMCrypto_SUCCESS != OEMCrypto_IsKeyboxValid()) {
|
||||||
|
wvcdm::File file;
|
||||||
|
std::string filename;
|
||||||
|
if (!wvcdm::Properties::GetFactoryKeyboxPath(&filename)) {
|
||||||
|
LOGW("Bad Level 1 Keybox. Falling Back to L3.");
|
||||||
|
dlclose(level1.library);
|
||||||
|
level1.library = NULL;
|
||||||
|
return Level3_Initialize();
|
||||||
|
}
|
||||||
|
ssize_t size = file.FileSize(filename);
|
||||||
|
if( size <= 0 || !file.Open(filename, file.kBinary | file.kReadOnly) ) {
|
||||||
|
LOGW("Could not open %s. Falling Back to L3.", filename.c_str());
|
||||||
|
dlclose(level1.library);
|
||||||
|
level1.library = NULL;
|
||||||
|
return Level3_Initialize();
|
||||||
|
}
|
||||||
|
uint8_t keybox[size];
|
||||||
|
ssize_t size_read = file.Read(reinterpret_cast<char *>(keybox), size);
|
||||||
|
if (level1.OEMCrypto_InstallKeybox(keybox, size) != OEMCrypto_SUCCESS) {
|
||||||
|
LOGE("Could NOT install keybox in /factory/wv.keys. Falling Back to L3.");
|
||||||
|
dlclose(level1.library);
|
||||||
|
level1.library = NULL;
|
||||||
|
return Level3_Initialize();
|
||||||
|
}
|
||||||
|
LOGI("Installed keybox from %s", filename.c_str());
|
||||||
|
}
|
||||||
LOGD("OEMCrypto_Initialize Level 1 success. I will use level 1.");
|
LOGD("OEMCrypto_Initialize Level 1 success. I will use level 1.");
|
||||||
return OEMCrypto_SUCCESS;
|
return OEMCrypto_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,12 +21,12 @@ LOCAL_C_INCLUDES += \
|
|||||||
vendor/widevine/libwvdrmengine/cdm/core/include \
|
vendor/widevine/libwvdrmengine/cdm/core/include \
|
||||||
vendor/widevine/libwvdrmengine/third_party/stringencoders/src \
|
vendor/widevine/libwvdrmengine/third_party/stringencoders/src \
|
||||||
|
|
||||||
# TODO(fredgc): fix order dependencies on libwvlevel3 and libwvwrapper.
|
|
||||||
LOCAL_STATIC_LIBRARIES := \
|
LOCAL_STATIC_LIBRARIES := \
|
||||||
libgtest \
|
libgtest \
|
||||||
libgtest_main \
|
libgtest_main \
|
||||||
libwvwrapper \
|
libwvwrapper \
|
||||||
libwvlevel3 \
|
libwvlevel3 \
|
||||||
|
libcdm_utils \
|
||||||
|
|
||||||
LOCAL_SHARED_LIBRARIES := \
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
libcrypto \
|
libcrypto \
|
||||||
|
|||||||
Reference in New Issue
Block a user