Source release v3.5.0

This commit is contained in:
Gene Morgan
2017-11-28 17:42:16 -08:00
parent 501c22890d
commit 31381a1311
155 changed files with 16680 additions and 3816 deletions

View File

@@ -17,6 +17,7 @@
#include "license.h"
#include "log.h"
#include "properties.h"
#include "service_certificate.h"
#include "string_conversions.h"
#include "wv_cdm_constants.h"
#include "wv_cdm_event_listener.h"
@@ -212,7 +213,7 @@ class CdmImpl : public Cdm,
virtual void OnSessionKeysChange(const CdmSessionId& session_id,
const CdmKeyStatusMap& keys_status,
bool has_new_usable_key) OVERRIDE;
bool /* has_new_usable_key */) OVERRIDE;
virtual void OnExpirationUpdate(const CdmSessionId& session_id,
int64_t new_expiry_time_seconds) OVERRIDE;
@@ -285,13 +286,16 @@ Cdm::Status CdmImpl::setServiceCertificate(const std::string& certificate) {
return kTypeError;
}
// Check for properly signed and well-formed certificate.
// Keep results. NOTE: an empty certificate should be accepted here.
CdmResponseType status = cdm_engine_.SetServiceCertificate(certificate);
// Verify that the certificate is properly signed and well-formed.
ServiceCertificate service_certificate;
CdmResponseType status = service_certificate.Init(certificate);
if (status != NO_ERROR) {
LOGE("Invalid service certificate! Error code = %d", status);
return kTypeError;
}
// TODO(gmorgan): remove when provisioning service certificate is added
cdm_engine_.SetServiceCertificate(certificate);
property_set_.set_service_certificate(certificate);
return kSuccess;
}
@@ -301,8 +305,7 @@ Cdm::Status CdmImpl::getServiceCertificateRequest(std::string* message) {
"string return parameter not supplied");
return kTypeError;
}
CdmKeyMessage request_message;
if (!cdm_engine_.GetServiceCertificateRequest(message)) {
if (!ServiceCertificate::GetRequest(message)) {
LOGE("Unable to return service certificate request!");
message->clear();
return kTypeError;
@@ -317,13 +320,12 @@ Cdm::Status CdmImpl::parseServiceCertificateResponse(
"string return parameter not supplied");
return kTypeError;
}
if (cdm_engine_.ParseServiceCertificateResponse(response, certificate) !=
NO_ERROR) {
if (ServiceCertificate::ParseResponse(response, certificate) != NO_ERROR) {
LOGE("Failure parsing service certificate response!");
certificate->clear();
return kTypeError;
}
return kSuccess;
return setServiceCertificate(*certificate);
}
bool CdmImpl::isProvisioned() {
@@ -1017,7 +1019,7 @@ Cdm::Status CdmImpl::genericEncrypt(
LOGE("No such session: %s", session_id.c_str());
return kSessionNotFound;
}
if (result == KEY_NOT_FOUND_3 || result == KEY_ERROR_1) {
if (result == KEY_NOT_FOUND_3 || result == NEED_KEY) {
LOGE("Key Error: %s", session_id.c_str());
return kNoKey;
}
@@ -1045,7 +1047,7 @@ Cdm::Status CdmImpl::genericDecrypt(
LOGE("No such session: %s", session_id.c_str());
return kSessionNotFound;
}
if (result == KEY_NOT_FOUND_4 || result == KEY_ERROR_2) {
if (result == KEY_NOT_FOUND_4 || result == NEED_KEY) {
LOGE("Key Error: %s", session_id.c_str());
return kNoKey;
}
@@ -1073,7 +1075,7 @@ Cdm::Status CdmImpl::genericSign(
LOGE("No such session: %s", session_id.c_str());
return kSessionNotFound;
}
if (result == KEY_NOT_FOUND_5 || result == KEY_ERROR_3) {
if (result == KEY_NOT_FOUND_5 || result == NEED_KEY) {
LOGE("Key Error: %s", session_id.c_str());
return kNoKey;
}
@@ -1101,7 +1103,7 @@ Cdm::Status CdmImpl::genericVerify(
LOGE("No such session: %s", session_id.c_str());
return kSessionNotFound;
}
if (result == KEY_NOT_FOUND_6 || result == KEY_ERROR_4) {
if (result == KEY_NOT_FOUND_6 || result == NEED_KEY) {
LOGE("Key Error: %s", session_id.c_str());
return kNoKey;
}
@@ -1151,7 +1153,8 @@ void CdmImpl::OnSessionRenewalNeeded(const CdmSessionId& session_id) {
}
void CdmImpl::OnSessionKeysChange(const CdmSessionId& session_id,
const CdmKeyStatusMap& keys_status, bool) {
const CdmKeyStatusMap& keys_status,
bool /* has_new_usable_key */) {
KeyStatusMap& map = sessions_[session_id].key_statuses;
CdmKeyStatusMap::const_iterator it;
@@ -1250,7 +1253,7 @@ CdmSigningAlgorithm CdmImpl::ConvertSigningAlgorithm(
}
bool VerifyL1() {
CryptoSession cs;
CryptoSession cs(NULL);
return cs.GetSecurityLevel() == kSecurityLevelL1;
}

View File

@@ -15,7 +15,8 @@ LogPriority g_cutoff = LOG_WARN;
void InitLogging() {}
void Log(const char* file, int line, LogPriority level, const char* fmt, ...) {
void Log(const char* file, const char* function, int line, LogPriority level,
const char* fmt, ...) {
const char* severities[] = { "ERROR", "WARN", "INFO", "DEBUG", "VERBOSE" };
if (level >= sizeof(severities) / sizeof(*severities)) {
fprintf(stderr, "[FATAL:%s(%d)] Invalid log priority level: %d\n",
@@ -24,7 +25,7 @@ void Log(const char* file, int line, LogPriority level, const char* fmt, ...) {
}
if (level > g_cutoff) return;
fprintf(stderr, "[%s:%s(%d)] ", severities[level], file, line);
fprintf(stderr, "[%s:%s(%d):%s] ", severities[level], file, line, function);
va_list ap;
va_start(ap, fmt);

View File

@@ -84,9 +84,9 @@ void Properties::Init() {
oem_crypto_use_secure_buffers_ = use_secure_buffers_;
oem_crypto_use_fifo_ = use_fifo_;
oem_crypto_use_userspace_buffers_ = use_userspace_buffers_;
use_certificates_as_identification_ = true;
provisioning_messages_are_binary_ = set_provisioning_messages_to_binary_;
security_level_path_backward_compatibility_support_ = false;
allow_service_certificate_requests_ = false;
session_property_set_.reset(new CdmClientPropertySetMap());
}