From 2f1551c1eeac481c5876994af2d634832b092a36 Mon Sep 17 00:00:00 2001 From: Fang Yu Date: Tue, 23 Oct 2018 10:21:08 -0700 Subject: [PATCH] Do not reference internal header files within wv_cas_ecm.h ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=218363187 --- media_cas_packager_sdk/public/wv_cas_ecm.cc | 61 +++++++++++---------- media_cas_packager_sdk/public/wv_cas_ecm.h | 7 +-- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/media_cas_packager_sdk/public/wv_cas_ecm.cc b/media_cas_packager_sdk/public/wv_cas_ecm.cc index a31e843..630e023 100644 --- a/media_cas_packager_sdk/public/wv_cas_ecm.cc +++ b/media_cas_packager_sdk/public/wv_cas_ecm.cc @@ -32,15 +32,24 @@ namespace { static constexpr size_t kCryptoModeCbc = 0; static constexpr size_t kCryptoModeCtr = 1; -int EcmIvSizeToInt(EcmIvSize iv_size) { - if (iv_size == kIvSize8) { - return 8; - } else if (iv_size == kIvSize16) { - return 16; +EcmInitParameters CreateEcmInitParameters(int content_iv_size, + bool key_rotation_enabled, + int crypto_mode) { + EcmInitParameters params; + if (content_iv_size == 8) { + params.content_iv_size = kIvSize8; } else { - return 0; + params.content_iv_size = kIvSize16; } + params.key_rotation_enabled = key_rotation_enabled; + params.crypto_mode = CasCryptoMode::CTR; + // Internal ECM class can hold entitlement keys for multiple tracks. + // So we need to set a default track type here to be associated with + // the entitlement keys set later. + params.track_types.push_back(kDefaultTrackTypeSd); + return params; } + } // namespace util::Status WvCasEcm::Initialize(int content_iv_size, @@ -50,25 +59,18 @@ util::Status WvCasEcm::Initialize(int content_iv_size, util::error::INTERNAL, "Cannot initialize an instance of WvCasEcm more than once"); } - if (content_iv_size == 8) { - ecm_init_params_.content_iv_size = kIvSize8; - } else if (content_iv_size == 16) { - ecm_init_params_.content_iv_size = kIvSize16; - } else { + if (content_iv_size != 8 && content_iv_size != 16) { return util::Status(util::error::INVALID_ARGUMENT, "Only support content_iv_size being 8 now"); } - ecm_init_params_.key_rotation_enabled = key_rotation_enabled; + content_iv_size_ = content_iv_size; + key_rotation_enabled_ = key_rotation_enabled; if (crypto_mode != kCryptoModeCtr) { return util::Status(util::error::INVALID_ARGUMENT, "Only CTR crypto mode is supported by Widevine plugin " "for content encryption"); } - ecm_init_params_.crypto_mode = CasCryptoMode::CTR; - // Internal ECM class can hold entitlement keys for multiple tracks. - // So we need to set a default track type here to be associated with - // the entitlement keys set later. - ecm_init_params_.track_types.push_back(kDefaultTrackTypeSd); + crypto_mode_ = crypto_mode; initialized_ = true; @@ -87,15 +89,13 @@ util::Status WvCasEcm::GenerateEcm(const std::string& even_key, return util::Status(util::error::INTERNAL, "WvCasEcm has not been properly initialized"); } - if (!ecm_init_params_.key_rotation_enabled) { + if (!key_rotation_enabled_) { return util::Status(util::error::INTERNAL, "Please call GenerateSingleKeyEcm() instead when key " "rotation is disabled"); } - if (even_content_iv.size() != - EcmIvSizeToInt(ecm_init_params_.content_iv_size) || - odd_content_iv.size() != - EcmIvSizeToInt(ecm_init_params_.content_iv_size)) { + if (even_content_iv.size() != content_iv_size_ || + odd_content_iv.size() != content_iv_size_) { return util::Status(util::error::INVALID_ARGUMENT, "Size of content IV is incorrect"); } @@ -104,6 +104,8 @@ util::Status WvCasEcm::GenerateEcm(const std::string& even_key, std::unique_ptr cas_ecm = absl::make_unique(); std::string entitlement_request; std::string entitlement_response; + EcmInitParameters ecm_init_params = CreateEcmInitParameters( + content_iv_size_, key_rotation_enabled_, crypto_mode_); // 'content_id' and 'provider' are used in entitlement key request/response // only, NOT needed for constructing the ECM. So we just use hardcoded value // here for now. @@ -112,7 +114,7 @@ util::Status WvCasEcm::GenerateEcm(const std::string& even_key, // to this function here. util::Status status; if (!(status = cas_ecm->Initialize(kDefaultContentId, kDefaultProvider, - ecm_init_params_, &entitlement_request)) + ecm_init_params, &entitlement_request)) .ok()) { return status; } @@ -135,7 +137,7 @@ util::Status WvCasEcm::GenerateEcm(const std::string& even_key, CasEcmGenerator ecm_generator; ecm_generator.set_ecm(std::move(cas_ecm)); EcmParameters ecm_param; - ecm_param.rotation_enabled = ecm_init_params_.key_rotation_enabled; + ecm_param.rotation_enabled = key_rotation_enabled_; // Add even entitlement key. ecm_param.key_params.emplace_back(); ecm_param.key_params[0].key_data = even_key; @@ -163,13 +165,12 @@ util::Status WvCasEcm::GenerateSingleKeyEcm(const std::string& even_key, return util::Status(util::error::INTERNAL, "WvCasEcm has not been properly initialized"); } - if (ecm_init_params_.key_rotation_enabled) { + if (key_rotation_enabled_) { return util::Status( util::error::INTERNAL, "Please call GenerateEcm() instead when key rotation is enabled"); } - if (even_content_iv.size() != - EcmIvSizeToInt(ecm_init_params_.content_iv_size)) { + if (even_content_iv.size() != content_iv_size_) { return util::Status(util::error::INVALID_ARGUMENT, "Size of content IV is incorrect"); } @@ -178,6 +179,8 @@ util::Status WvCasEcm::GenerateSingleKeyEcm(const std::string& even_key, std::unique_ptr cas_ecm = absl::make_unique(); std::string entitlement_request; std::string entitlement_response; + EcmInitParameters ecm_init_params = CreateEcmInitParameters( + content_iv_size_, key_rotation_enabled_, crypto_mode_); // 'content_id' and 'provider' are used in entitlement key request/response // only, NOT needed for constructing the ECM. So we just use hardcoded value // here for now. @@ -186,7 +189,7 @@ util::Status WvCasEcm::GenerateSingleKeyEcm(const std::string& even_key, // to this function here. util::Status status; if (!(status = cas_ecm->Initialize(kDefaultContentId, kDefaultProvider, - ecm_init_params_, &entitlement_request)) + ecm_init_params, &entitlement_request)) .ok()) { return status; } @@ -209,7 +212,7 @@ util::Status WvCasEcm::GenerateSingleKeyEcm(const std::string& even_key, CasEcmGenerator ecm_generator; ecm_generator.set_ecm(std::move(cas_ecm)); EcmParameters ecm_param; - ecm_param.rotation_enabled = ecm_init_params_.key_rotation_enabled; + ecm_param.rotation_enabled = key_rotation_enabled_; // Add even entitlement key. ecm_param.key_params.emplace_back(); ecm_param.key_params[0].key_data = even_key; diff --git a/media_cas_packager_sdk/public/wv_cas_ecm.h b/media_cas_packager_sdk/public/wv_cas_ecm.h index 2b76cc2..47d5b20 100644 --- a/media_cas_packager_sdk/public/wv_cas_ecm.h +++ b/media_cas_packager_sdk/public/wv_cas_ecm.h @@ -17,9 +17,6 @@ #include #include "util/status.h" -#include "media_cas_packager_sdk/internal/ecm.h" -#include "media_cas_packager_sdk/internal/ecm_generator.h" -#include "protos/public/media_cas.pb.h" namespace widevine { namespace cas { @@ -106,7 +103,9 @@ class WvCasEcm { private: bool initialized_ = false; - EcmInitParameters ecm_init_params_; + int content_iv_size_; + bool key_rotation_enabled_; + int crypto_mode_; }; } // namespace cas