Do not reference internal header files within wv_cas_ecm.h

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218363187
This commit is contained in:
Fang Yu
2018-10-23 10:21:08 -07:00
parent 947b950d95
commit 2f1551c1ee
2 changed files with 35 additions and 33 deletions

View File

@@ -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<CasEcm> cas_ecm = absl::make_unique<CasEcm>();
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<CasEcm> cas_ecm = absl::make_unique<CasEcm>();
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;

View File

@@ -17,9 +17,6 @@
#include <vector>
#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