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:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user