Update to support OEMCrypto v16 with ODK

This commit is contained in:
Widevine Buildbot
2020-09-22 01:38:10 +00:00
parent 9e2d97ce2a
commit 863d114011
53 changed files with 2839 additions and 0 deletions

116
run_tests.sh Executable file
View File

@@ -0,0 +1,116 @@
#!/bin/bash
################################################################################
# Copyright 2016 Google LLC.
#
# This software is licensed under the terms defined in the Widevine Master
# License Agreement. For a copy of this agreement, please contact
# widevine-licensing@google.com.
################################################################################
#
# This script generates a directory that stores the intermediate artifacts
# needed for testing.
#
# Prerequirements (if running the script directly):
# - Python 2.7 or later
# - pip: https://pip.pypa.io/en/latest/installing/
# - Python cryptography package: https://cryptography.io/en/latest/installation/
# - Protocol compiler: https://github.com/google/protobuf#protocol-compiler-installation
# On Ubuntu: sudo apt-get install protobuf-compiler
# - Protobuf Python runtime (version 3.0 or later): sudo pip install protobuf
# - CLIF: https://github.com/google/clif
# Environment Variables:
# - TOOLS_PATH: colon-delimited paths to additional tools such as protoc.
# - CLIF_PREFIX: prefix path to CLIF installation.
set -ex
cd "$(dirname "$0")"
if [[ -v TOOLS_PATH ]]; then
export PATH=$PATH:$TOOLS_PATH
fi
if ! which protoc 2>/dev/null; then
echo >&2 "Protobuf is required but not found (did you set TOOLS_PATH?). Aborting."
exit 1
fi
if ! [[ -v CLIF_PREFIX ]]; then
echo >&2 "CLIF_PREFIX not set. Defaulting to '$HOME/opt'."
export CLIF_PREFIX=$HOME/opt
fi
PYCLIF="$CLIF_PREFIX/clif/bin/pyclif"
PYCLIF_PROTO="$CLIF_PREFIX/clif/bin/pyclif_proto"
CLIF_INC="-I$CLIF_PREFIX"
if ! [[ -x $PYCLIF ]]; then
echo >&2 "CLIF is required but not found."
exit 1
fi
# Get the path of the native python C++ header files.
PYTHON_INC="-I$(printf "from distutils.sysconfig import get_python_inc\nprint(get_python_inc())\n" | python)"
SRC_DIR="$(pwd)"
GEN_DIR="$(pwd)/test_genfiles"
PROTO_GEN_DIR="$GEN_DIR/protos/public"
COMMON_GEN_DIR="$GEN_DIR/common/python"
SDK_PYTHON_GEN_DIR="$GEN_DIR/provisioning_sdk/public/python"
export PYEXT_BUILD_DIR="$(pwd)/python_ext_build"
PYEXT_INSTALL_DIR="$(pwd)/python_env"
rm -rf "$GEN_DIR"
rm -rf "$PYEXT_BUILD_DIR"
rm -rf "$PYEXT_INSTALL_DIR"
mkdir -p "$PROTO_GEN_DIR"
mkdir -p "$COMMON_GEN_DIR"
mkdir -p "$SDK_PYTHON_GEN_DIR"
mkdir -p "$PYEXT_BUILD_DIR"
# Generate C++ outputs.
# The protos are needed to compile the public header provisioning_engine.h.
protoc -I="$SRC_DIR" --cpp_out="$GEN_DIR" "$SRC_DIR/protos/public/client_identification.proto"
protoc -I="$SRC_DIR" --cpp_out="$GEN_DIR" "$SRC_DIR/protos/public/remote_attestation.proto"
protoc -I="$SRC_DIR" --cpp_out="$GEN_DIR" "$SRC_DIR/protos/public/certificate_provisioning.proto"
# Generate py outputs.
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/client_identification.proto"
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/hash_algorithm.proto"
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/remote_attestation.proto"
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/provisioned_device_info.proto"
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/certificate_provisioning.proto"
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/signed_drm_certificate.proto"
# Generate CLIF Python wrappers.
"$PYCLIF" --modname certificate_type --ccdeps_out="$COMMON_GEN_DIR/certificate_type.cc" --ccinit_out="$COMMON_GEN_DIR/initcertificate_type.cc" --header_out="$COMMON_GEN_DIR/certificate_type.h" --cc_flags="-std=c++11 -I$SRC_DIR $PYTHON_INC $CLIF_INC" "$SRC_DIR/common/python/certificate_type.clif"
"$PYCLIF" --modname provisioning_status --ccdeps_out="$SDK_PYTHON_GEN_DIR/provisioning_status.cc" --ccinit_out="$SDK_PYTHON_GEN_DIR/initprovisioning_status.cc" --header_out="$SDK_PYTHON_GEN_DIR/provisioning_status.h" --cc_flags="-std=c++11 -I$SRC_DIR $PYTHON_INC $CLIF_INC" "$SRC_DIR/provisioning_sdk/public/python/provisioning_status.clif"
"$PYCLIF" --modname provisioning_session --ccdeps_out="$SDK_PYTHON_GEN_DIR/provisioning_session.cc" --ccinit_out="$SDK_PYTHON_GEN_DIR/initprovisioning_session.cc" --header_out="$SDK_PYTHON_GEN_DIR/provisioning_session.h" --cc_flags="-std=c++11 -I$SRC_DIR -I$GEN_DIR $PYTHON_INC $CLIF_INC" --include_paths="$GEN_DIR" "$SRC_DIR/provisioning_sdk/public/python/provisioning_session.clif"
"$PYCLIF" --modname provisioning_engine --ccdeps_out="$SDK_PYTHON_GEN_DIR/provisioning_engine.cc" --ccinit_out="$SDK_PYTHON_GEN_DIR/initprovisioning_engine.cc" --header_out="$SDK_PYTHON_GEN_DIR/provisioning_engine.h" --cc_flags="-std=c++11 -I$SRC_DIR -I$GEN_DIR $PYTHON_INC $CLIF_INC" --include_paths="$GEN_DIR" "$SRC_DIR/provisioning_sdk/public/python/provisioning_engine.clif"
# Create virtual Python environment, build extensions, and install onto virtual
# environment.
cp -a provisioning_sdk/public/python/* test_genfiles/
cd test_genfiles
rm -rf "$PYEXT_INSTALL_DIR"
virtualenv "$PYEXT_INSTALL_DIR"
"$PYEXT_INSTALL_DIR/bin/python" "$PYEXT_INSTALL_DIR/bin/pip" install enum34
"$PYEXT_INSTALL_DIR/bin/python" "$PYEXT_INSTALL_DIR/bin/pip" install protobuf
"$PYEXT_INSTALL_DIR/bin/python" "$PYEXT_INSTALL_DIR/bin/pip" install cryptography
"$PYEXT_INSTALL_DIR/bin/python" certificate_type_setup.py build --build-base="$PYEXT_BUILD_DIR" install
"$PYEXT_INSTALL_DIR/bin/python" provisioning_status_setup.py build --build-base="$PYEXT_BUILD_DIR" install
"$PYEXT_INSTALL_DIR/bin/python" provisioning_session_setup.py build --build-base="$PYEXT_BUILD_DIR" install
"$PYEXT_INSTALL_DIR/bin/python" provisioning_engine_setup.py build --build-base="$PYEXT_BUILD_DIR" install
shopt -s globstar
for d in "protos"/**/; do
touch -- "$d/__init__.py";
done
"$PYEXT_INSTALL_DIR/bin/python" init_engine_test.py
"$PYEXT_INSTALL_DIR/bin/python" set_certificate_status_list_test.py
"$PYEXT_INSTALL_DIR/bin/python" drm_intermediate_certificate_test.py
"$PYEXT_INSTALL_DIR/bin/python" engine_generate_certificate_test.py
"$PYEXT_INSTALL_DIR/bin/python" new_session_test.py