Merge "Enabled log formatting warnings."
This commit is contained in:
@@ -23,7 +23,6 @@
|
||||
#include "wv_cdm_constants.h"
|
||||
|
||||
namespace {
|
||||
|
||||
const uint32_t kFourCcCbc1 = 0x63626331;
|
||||
const uint32_t kFourCcCbcs = 0x63626373;
|
||||
const uint32_t kFourCcLittleEndianCbc1 = 0x31636263;
|
||||
@@ -32,10 +31,11 @@ const uint32_t kFourCcCenc = 0x63656e63;
|
||||
|
||||
const std::string kEmptyString;
|
||||
|
||||
// MAC key in the license are two separate MAC keys (client and server).
|
||||
constexpr size_t kLicenseMacKeySize = wvcdm::MAC_KEY_SIZE * 2;
|
||||
} // namespace
|
||||
|
||||
namespace wvcdm {
|
||||
|
||||
// Protobuf generated classes.
|
||||
using video_widevine::EncryptedClientIdentification;
|
||||
using video_widevine::License;
|
||||
@@ -596,17 +596,17 @@ CdmResponseType CdmLicense::HandleKeyResponse(
|
||||
mac_key_iv.assign(license.key(i).iv());
|
||||
|
||||
// Strip off PKCS#5 padding
|
||||
mac_keys.assign(license.key(i).key().data(), 2 * MAC_KEY_SIZE);
|
||||
mac_keys.assign(license.key(i).key().data(), kLicenseMacKeySize);
|
||||
}
|
||||
}
|
||||
if (license.policy().can_renew() ||
|
||||
(mac_key_iv.size() != 0 || mac_keys.size() != 0)) {
|
||||
if (mac_key_iv.size() != KEY_IV_SIZE ||
|
||||
mac_keys.size() != 2 * MAC_KEY_SIZE) {
|
||||
mac_keys.size() != kLicenseMacKeySize) {
|
||||
LOGE(
|
||||
"MAC key/IV size error: expected = %lu/%lu, "
|
||||
"MAC key/IV size error: expected = %zu/%zu, "
|
||||
"actual = %zu/%zu (key/iv)",
|
||||
2 * MAC_KEY_SIZE, KEY_IV_SIZE, mac_keys.size(), mac_key_iv.size());
|
||||
kLicenseMacKeySize, KEY_IV_SIZE, mac_keys.size(), mac_key_iv.size());
|
||||
return KEY_SIZE_ERROR_1;
|
||||
}
|
||||
}
|
||||
@@ -1177,7 +1177,7 @@ CdmResponseType CdmLicense::HandleNewEntitledKeys(
|
||||
if (content_key.size() < CONTENT_KEY_SIZE) {
|
||||
LOGE(
|
||||
"Entitled content key too small: "
|
||||
"expected = %lu, actual = %zu (bytes)",
|
||||
"expected = %zu, actual = %zu (bytes)",
|
||||
CONTENT_KEY_SIZE, content_key.size());
|
||||
return KEY_SIZE_ERROR_2;
|
||||
} else if (content_key.size() > CONTENT_KEY_SIZE) {
|
||||
|
||||
@@ -507,10 +507,10 @@ class WatchDog {
|
||||
ssize_t size = sizeof(flag);
|
||||
ssize_t size_written = file->Write(reinterpret_cast<char*>(&flag), size);
|
||||
if (size != size_written) {
|
||||
LOGE("Wrote %d bytes, not %d, to file %s", size_written, size,
|
||||
LOGE("Wrote %zd bytes, not %zd, to file %s", size_written, size,
|
||||
filename.c_str());
|
||||
} else {
|
||||
LOGE("I wrote %d to %s", size_written, filename.c_str());
|
||||
LOGE("I wrote %zd to %s", size_written, filename.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1055,7 +1055,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
continue;
|
||||
default: {
|
||||
LOGW("Unknown usage entry storage type: %d, usage_entry_number = %u",
|
||||
LOGW("Unknown usage entry storage type: %d, usage_entry_number = %zu",
|
||||
static_cast<int>(usage_entry_info.storage_type),
|
||||
usage_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
@@ -1063,7 +1063,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
}
|
||||
}
|
||||
if (!retrieve_response) {
|
||||
LOGW("Could not retrieve license message: usage_entry_number = %u",
|
||||
LOGW("Could not retrieve license message: usage_entry_number = %zu",
|
||||
usage_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
continue;
|
||||
@@ -1071,7 +1071,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
|
||||
if (retrieved_entry_number != usage_entry_number) {
|
||||
LOGW(
|
||||
"Usage entry number mismatched: usage_entry_number = %u, "
|
||||
"Usage entry number mismatched: usage_entry_number = %zu, "
|
||||
"retrieved_entry_number = %u",
|
||||
usage_entry_number, retrieved_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
@@ -1080,7 +1080,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
|
||||
video_widevine::License license;
|
||||
if (!ParseLicenseFromLicenseMessage(license_message, &license)) {
|
||||
LOGW("Could not parse license: usage_entry_number = %u",
|
||||
LOGW("Could not parse license: usage_entry_number = %zu",
|
||||
usage_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
continue;
|
||||
|
||||
@@ -109,7 +109,7 @@ class WvCdmEnginePreProvTest : public WvCdmTestBase {
|
||||
LicenseRequest license_request;
|
||||
license_request.GetDrmMessage(http_response, *response);
|
||||
|
||||
LOGV("response: size=%u, string:\n%s\n", response->size(),
|
||||
LOGV("response: size = %zu, string =\n%s\n", response->size(),
|
||||
Base64SafeEncode(
|
||||
std::vector<uint8_t>(response->begin(), response->end()))
|
||||
.c_str());
|
||||
@@ -239,7 +239,7 @@ class WvCdmEngineTest : public WvCdmEnginePreProvTest {
|
||||
std::string drm_msg;
|
||||
LicenseRequest lic_request;
|
||||
lic_request.GetDrmMessage(response, drm_msg);
|
||||
LOGV("drm msg: %u bytes\r\n%s", drm_msg.size(),
|
||||
LOGV("drm msg: %zu bytes\r\n%s", drm_msg.size(),
|
||||
HexEncode(reinterpret_cast<const uint8_t*>(drm_msg.data()),
|
||||
drm_msg.size())
|
||||
.c_str());
|
||||
|
||||
@@ -41,7 +41,7 @@ void ConcatenateChunkedResponse(const std::string http_response,
|
||||
sscanf(&http_response[chunk_size_pos], "%zx", &chunk_size);
|
||||
if (chunk_size > http_response.size()) {
|
||||
// precaution, in case we misread chunk size
|
||||
LOGE("invalid chunk size %u", chunk_size);
|
||||
LOGE("Invalid chunk size %zu", chunk_size);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ void ConcatenateChunkedResponse(const std::string http_response,
|
||||
sscanf(&http_response[chunk_size_pos], "%zx", &chunk_size);
|
||||
if (chunk_size > http_response.size()) {
|
||||
// precaution, in case we misread chunk size
|
||||
LOGE("invalid chunk size %u", chunk_size);
|
||||
LOGE("Invalid chunk size %zu", chunk_size);
|
||||
break;
|
||||
}
|
||||
chunk_pos = http_response.find(kCrLf, chunk_size_pos);
|
||||
@@ -104,11 +104,12 @@ bool UrlRequest::GetResponse(std::string* message) {
|
||||
// non-blocking mode.
|
||||
while (true) {
|
||||
char read_buffer[kReadBufferSize];
|
||||
int bytes = socket_.Read(read_buffer, sizeof(read_buffer), kReadTimeoutMs);
|
||||
const int bytes =
|
||||
socket_.Read(read_buffer, sizeof(read_buffer), kReadTimeoutMs);
|
||||
if (bytes > 0) {
|
||||
response.append(read_buffer, bytes);
|
||||
} else if (bytes < 0) {
|
||||
LOGE("read error, errno = %d", errno);
|
||||
LOGE("Read error, errno = %d", errno);
|
||||
return false;
|
||||
} else {
|
||||
// end of stream.
|
||||
@@ -117,7 +118,7 @@ bool UrlRequest::GetResponse(std::string* message) {
|
||||
}
|
||||
|
||||
ConcatenateChunkedResponse(response, message);
|
||||
LOGV("HTTP response from %s://%s:%d%s: (%zd): %s", socket_.scheme().c_str(),
|
||||
LOGV("HTTP response from %s://%s:%d%s: (%zu): %s", socket_.scheme().c_str(),
|
||||
socket_.domain_name().c_str(), socket_.port(),
|
||||
socket_.resource_path().c_str(), message->size(), message->c_str());
|
||||
return true;
|
||||
@@ -204,7 +205,7 @@ bool UrlRequest::PostRequestWithPath(const std::string& path,
|
||||
|
||||
const int ret =
|
||||
socket_.Write(request.c_str(), request.size(), kWriteTimeoutMs);
|
||||
LOGV("HTTP request: (%d): %s", request.size(), b2a_hex(request).c_str());
|
||||
LOGV("HTTP request: (%zu): %s", request.size(), b2a_hex(request).c_str());
|
||||
return ret != -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -327,8 +327,8 @@ EngineMetrics::~EngineMetrics() {
|
||||
std::unique_lock<std::mutex> lock(session_metrics_lock_);
|
||||
if (!active_session_metrics_list_.empty()
|
||||
|| !completed_session_metrics_list_.empty()) {
|
||||
LOGV("EngineMetrics::~EngineMetrics. Session counts: "
|
||||
"active %d. completed %d.", active_session_metrics_list_.size(),
|
||||
LOGV("Session counts: active = %zu, completed = %zu.",
|
||||
active_session_metrics_list_.size(),
|
||||
completed_session_metrics_list_.size());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,7 +336,7 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase {
|
||||
|
||||
void LogResponseError(const std::string& message, int http_status_code) {
|
||||
LOGD("HTTP Status code = %d", http_status_code);
|
||||
LOGD("HTTP response(%d): %s", message.size(), b2a_hex(message).c_str());
|
||||
LOGD("HTTP response(%zu): %s", message.size(), b2a_hex(message).c_str());
|
||||
}
|
||||
|
||||
// Post a request and extract the drm message from the response
|
||||
@@ -360,7 +360,7 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase {
|
||||
if (kHttpOk == http_status_code) {
|
||||
LicenseRequest lic_request;
|
||||
lic_request.GetDrmMessage(message, drm_msg);
|
||||
LOGV("HTTP response body: (%u bytes)", drm_msg.size());
|
||||
LOGV("HTTP response body: (%zu bytes)", drm_msg.size());
|
||||
}
|
||||
key_response_ = drm_msg;
|
||||
return drm_msg;
|
||||
@@ -408,7 +408,7 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase {
|
||||
if (kHttpOk == http_status_code) {
|
||||
LicenseRequest license;
|
||||
license.GetDrmMessage(message, usage_info);
|
||||
LOGV("HTTP response body: (%u bytes)", usage_info.size());
|
||||
LOGV("HTTP response body: (%zu bytes)", usage_info.size());
|
||||
}
|
||||
return usage_info;
|
||||
}
|
||||
|
||||
@@ -242,7 +242,7 @@ class WvCdmFeatureTest : public WvCdmTestBase {
|
||||
|
||||
void LogResponseError(const std::string& message, int http_status_code) {
|
||||
LOGD("HTTP Status code = %d", http_status_code);
|
||||
LOGD("HTTP response(%d): %s", message.size(), b2a_hex(message).c_str());
|
||||
LOGD("HTTP response(%zu): %s", message.size(), b2a_hex(message).c_str());
|
||||
}
|
||||
|
||||
// Post a request and extract the signed provisioning message from
|
||||
@@ -268,13 +268,13 @@ class WvCdmFeatureTest : public WvCdmTestBase {
|
||||
bool ExtractTokenType(const std::string& b64_provisioning_request_no_pad,
|
||||
ClientIdentification_TokenType* token_type) {
|
||||
std::string b64_provisioning_request = b64_provisioning_request_no_pad;
|
||||
size_t binary_size = b64_provisioning_request.size() * 3 / 4;
|
||||
const size_t binary_size = b64_provisioning_request.size() * 3 / 4;
|
||||
// base64 message with pad = 4*ceil[n/3]
|
||||
size_t pad_size =
|
||||
const size_t pad_size =
|
||||
((binary_size + 2) / 3) * 4 - b64_provisioning_request.size();
|
||||
if (pad_size >= 3) return false;
|
||||
b64_provisioning_request.append(pad_size, '=');
|
||||
LOGW("ExtractTokenType: pad_size: %d", pad_size);
|
||||
LOGW("ExtractTokenType: pad_size: %zu", pad_size);
|
||||
|
||||
std::vector<uint8_t> bin_provisioning_request =
|
||||
Base64SafeDecode(b64_provisioning_request);
|
||||
@@ -360,7 +360,7 @@ class WvCdmFeatureTest : public WvCdmTestBase {
|
||||
if (kHttpOk == http_status_code) {
|
||||
LicenseRequest lic_request;
|
||||
lic_request.GetDrmMessage(message, drm_msg);
|
||||
LOGV("HTTP response body: (%u bytes)", drm_msg.size());
|
||||
LOGV("HTTP response body: (%zu bytes)", drm_msg.size());
|
||||
}
|
||||
return drm_msg;
|
||||
}
|
||||
|
||||
@@ -1865,7 +1865,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase {
|
||||
|
||||
void LogResponseError(const std::string& message, int http_status_code) {
|
||||
LOGD("HTTP Status code = %d", http_status_code);
|
||||
LOGD("HTTP response(%d): %s", message.size(), b2a_hex(message).c_str());
|
||||
LOGD("HTTP response(%zu): %s", message.size(), b2a_hex(message).c_str());
|
||||
}
|
||||
|
||||
// Post a request and extract the drm message from the response
|
||||
@@ -1879,7 +1879,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase {
|
||||
std::string message;
|
||||
EXPECT_TRUE(url_request.GetResponse(&message));
|
||||
|
||||
int http_status_code = url_request.GetStatusCode(message);
|
||||
const int http_status_code = url_request.GetStatusCode(message);
|
||||
if (kHttpOk != http_status_code) {
|
||||
LogResponseError(message, http_status_code);
|
||||
}
|
||||
@@ -1890,7 +1890,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase {
|
||||
if (kHttpOk == http_status_code) {
|
||||
LicenseRequest lic_request;
|
||||
lic_request.GetDrmMessage(message, drm_msg);
|
||||
LOGV("HTTP response body: (%u bytes)", drm_msg.size());
|
||||
LOGV("HTTP response body: (%zu bytes)", drm_msg.size());
|
||||
}
|
||||
return drm_msg;
|
||||
}
|
||||
@@ -1927,7 +1927,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase {
|
||||
std::string message;
|
||||
EXPECT_TRUE(url_request.GetResponse(&message));
|
||||
|
||||
int http_status_code = url_request.GetStatusCode(message);
|
||||
const int http_status_code = url_request.GetStatusCode(message);
|
||||
if (kHttpOk != http_status_code) {
|
||||
LogResponseError(message, http_status_code);
|
||||
}
|
||||
@@ -1937,7 +1937,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase {
|
||||
if (kHttpOk == http_status_code) {
|
||||
LicenseRequest license;
|
||||
license.GetDrmMessage(message, usage_info);
|
||||
LOGV("HTTP response body: (%u bytes)", usage_info.size());
|
||||
LOGV("HTTP response body: (%zu bytes)", usage_info.size());
|
||||
}
|
||||
return usage_info;
|
||||
}
|
||||
@@ -6167,7 +6167,7 @@ class WvCdmRequestLicenseRollbackTest
|
||||
protected:
|
||||
void RollbackSystemTime(time_t rollback_time_ms) {
|
||||
if (!in_rollback_state_) {
|
||||
LOGW("Rolling back system time %d ms.", rollback_time_ms);
|
||||
LOGW("Rolling back system time %ld ms.", rollback_time_ms);
|
||||
wall_time_before_rollback_ = std::chrono::system_clock::now();
|
||||
monotonic_time_before_rollback_ = std::chrono::steady_clock::now();
|
||||
auto modified_wall_time = wall_time_before_rollback_ -
|
||||
|
||||
@@ -33,8 +33,18 @@ extern LogPriority g_cutoff;
|
||||
// unit tests.
|
||||
CORE_UTIL_EXPORT void InitLogging();
|
||||
|
||||
// Only enable format specifier warnings on LP64 systems. There is
|
||||
// no easy portable method to handle format specifiers for int64_t.
|
||||
#if (defined(__gnuc__) || defined(__clang__)) && defined(__LP64__)
|
||||
[[gnu::format(printf, 5, 6)]] CORE_UTIL_EXPORT void Log(const char* file,
|
||||
const char* function,
|
||||
int line,
|
||||
LogPriority level,
|
||||
const char* fmt, ...);
|
||||
#else
|
||||
CORE_UTIL_EXPORT void Log(const char* file, const char* function, int line,
|
||||
LogPriority level, const char* fmt, ...);
|
||||
#endif
|
||||
|
||||
// Log APIs
|
||||
#ifndef LOGE
|
||||
|
||||
@@ -102,7 +102,7 @@ int64_t CryptoEngine::MonotonicTime() {
|
||||
wvcdm::Clock().GetCurrentTime() + offline_time_info_.rollback_offset;
|
||||
static int64_t then = now;
|
||||
if (now < then) {
|
||||
LOGW("Clock rollback detected: %lld seconds", then - now);
|
||||
LOGW("Clock rollback detected: %ld seconds", then - now);
|
||||
offline_time_info_.rollback_offset += then - now;
|
||||
now = then;
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ uint32_t KeyControlBlock::ExtractField(const std::vector<uint8_t>& str,
|
||||
KeyControlBlock::KeyControlBlock(
|
||||
const std::vector<uint8_t>& key_control_string) {
|
||||
if (key_control_string.size() < wvoec::KEY_CONTROL_SIZE) {
|
||||
LOGE("KCB: BAD Size: %d (not %d)", key_control_string.size(),
|
||||
LOGE("KCB: BAD Size: %zu (not %zu)", key_control_string.size(),
|
||||
wvoec::KEY_CONTROL_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ bool SessionContext::RSADeriveKeys(
|
||||
return false;
|
||||
}
|
||||
session_key_.resize(RSA_size(rsa_key()));
|
||||
int decrypted_size =
|
||||
const int decrypted_size =
|
||||
RSA_private_decrypt(enc_session_key.size(), &enc_session_key[0],
|
||||
&session_key_[0], rsa_key(), RSA_PKCS1_OAEP_PADDING);
|
||||
if (-1 == decrypted_size) {
|
||||
@@ -347,7 +347,7 @@ OEMCryptoResult SessionContext::PrepAndSignLicenseRequest(
|
||||
return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
}
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("ODK error: %d", result);
|
||||
LOGE("ODK error: %d", static_cast<int>(result));
|
||||
return result;
|
||||
}
|
||||
if (message == nullptr || message_length < *core_message_length ||
|
||||
@@ -395,7 +395,7 @@ OEMCryptoResult SessionContext::PrepAndSignRenewalRequest(
|
||||
return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
}
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("ODK error: %d", result);
|
||||
LOGE("ODK error: %d", static_cast<int>(result));
|
||||
return result;
|
||||
}
|
||||
if (message == nullptr || message_length < *core_message_length ||
|
||||
@@ -438,7 +438,7 @@ OEMCryptoResult SessionContext::PrepAndSignProvisioningRequest(
|
||||
return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
}
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("ODK error: %d", result);
|
||||
LOGE("ODK error: %d", static_cast<int>(result));
|
||||
return result;
|
||||
}
|
||||
if (message == nullptr || message_length == 0 || signature == nullptr) {
|
||||
@@ -452,7 +452,8 @@ OEMCryptoResult SessionContext::PrepAndSignProvisioningRequest(
|
||||
result = GenerateCertSignature(message, message_length, signature,
|
||||
signature_length);
|
||||
} else {
|
||||
LOGE("Bad prov method = %d", ce_->config_provisioning_method());
|
||||
LOGE("Bad prov method = %d",
|
||||
static_cast<int>(ce_->config_provisioning_method()));
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
if (result == OEMCrypto_SUCCESS) state_request_signed_ = true;
|
||||
@@ -508,7 +509,8 @@ size_t SessionContext::ROTSignatureSize() {
|
||||
return SHA256_DIGEST_LENGTH;
|
||||
if (ce_->config_provisioning_method() == OEMCrypto_OEMCertificate)
|
||||
return CertSignatureSize();
|
||||
LOGE("Bad prov method = %d", ce_->config_provisioning_method());
|
||||
LOGE("Bad prov method = %d",
|
||||
static_cast<int>(ce_->config_provisioning_method()));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -522,7 +524,7 @@ OEMCryptoResult SessionContext::GenerateCertSignature(
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
if (!rsa_key()) {
|
||||
LOGE("no RSA key set");
|
||||
LOGE("No RSA key set");
|
||||
return OEMCrypto_ERROR_INVALID_RSA_KEY;
|
||||
}
|
||||
if (*signature_length < static_cast<size_t>(RSA_size(rsa_key()))) {
|
||||
@@ -530,7 +532,7 @@ OEMCryptoResult SessionContext::GenerateCertSignature(
|
||||
return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
}
|
||||
if (allowed_schemes_ != kSign_RSASSA_PSS) {
|
||||
LOGE("message signing not allowed");
|
||||
LOGE("Message signing not allowed");
|
||||
return OEMCrypto_ERROR_INVALID_RSA_KEY;
|
||||
}
|
||||
|
||||
@@ -572,7 +574,7 @@ OEMCryptoResult SessionContext::GenerateRSASignature(
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
if (!rsa_key()) {
|
||||
LOGE("no RSA key set");
|
||||
LOGE("No RSA key set");
|
||||
return OEMCrypto_ERROR_INVALID_RSA_KEY;
|
||||
}
|
||||
if (*signature_length < static_cast<size_t>(RSA_size(rsa_key()))) {
|
||||
@@ -592,10 +594,10 @@ OEMCryptoResult SessionContext::GenerateRSASignature(
|
||||
return OEMCrypto_ERROR_SIGNATURE_FAILURE;
|
||||
}
|
||||
// Pad the message with PKCS1 padding, and then encrypt.
|
||||
int status = RSA_private_encrypt(message_length, message, signature,
|
||||
rsa_key(), RSA_PKCS1_PADDING);
|
||||
const int status = RSA_private_encrypt(message_length, message, signature,
|
||||
rsa_key(), RSA_PKCS1_PADDING);
|
||||
if (status < 0) {
|
||||
LOGE("error in RSA private encrypt. status=%d", status);
|
||||
LOGE("Error in RSA private encrypt. status = %d", status);
|
||||
dump_boringssl_error();
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
@@ -710,7 +712,7 @@ OEMCryptoResult SessionContext::LoadLicense(const uint8_t* message,
|
||||
usage_entry_present(), license_request_hash_, &timer_limits_,
|
||||
&clock_values_, &nonce_values_, &parsed_response);
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("ODK Error %d", result);
|
||||
LOGE("ODK Error %d", static_cast<int>(result));
|
||||
return result;
|
||||
}
|
||||
// Validate message signature
|
||||
@@ -793,21 +795,21 @@ OEMCryptoResult SessionContext::LoadKeysNoSignature(
|
||||
message + srm_restriction_data.offset);
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
uint32_t minimum_version = htonl(*reinterpret_cast<const uint32_t*>(
|
||||
const uint32_t minimum_version = htonl(*reinterpret_cast<const uint32_t*>(
|
||||
message + srm_restriction_data.offset + 8));
|
||||
uint16_t current_version = 0;
|
||||
if (OEMCrypto_SUCCESS != ce_->current_srm_version(¤t_version)) {
|
||||
LOGW("[LoadKeys: SRM Version not available");
|
||||
srm_requirements_status_ = InvalidSRMVersion;
|
||||
} else if (current_version < minimum_version) {
|
||||
LOGW("[LoadKeys: SRM Version is too small %d, required: %d",
|
||||
LOGW("[LoadKeys: SRM Version is too small %u, required: %u",
|
||||
current_version, minimum_version);
|
||||
srm_requirements_status_ = InvalidSRMVersion;
|
||||
} else if (ce_->srm_blacklisted_device_attached()) {
|
||||
LOGW("[LoadKeys: SRM blacklisted device attached]");
|
||||
srm_requirements_status_ = InvalidSRMVersion;
|
||||
} else {
|
||||
LOGI("[LoadKeys: SRM Versions is %d, required: %d]", current_version,
|
||||
LOGI("[LoadKeys: SRM Versions is %u, required: %u]", current_version,
|
||||
minimum_version);
|
||||
srm_requirements_status_ = ValidSRMVersion;
|
||||
}
|
||||
@@ -863,7 +865,7 @@ OEMCryptoResult SessionContext::LoadKeysNoSignature(
|
||||
message + enc_mac_keys_iv.offset + wvoec::KEY_IV_SIZE);
|
||||
|
||||
if (!UpdateMacKeys(enc_mac_keys_str, enc_mac_key_iv_str)) {
|
||||
LOGE("Failed to update mac keys.\n");
|
||||
LOGE("Failed to update mac keys.");
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
}
|
||||
@@ -882,7 +884,7 @@ OEMCryptoResult SessionContext::LoadKeysNoSignature(
|
||||
return result;
|
||||
}
|
||||
if (!usage_entry_->SetMacKeys(mac_key_server_, mac_key_client_)) {
|
||||
LOGE("LoadKeys: Usage table can't set keys.\n");
|
||||
LOGE("LoadKeys: Usage table can't set keys.");
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
break;
|
||||
@@ -891,7 +893,7 @@ OEMCryptoResult SessionContext::LoadKeysNoSignature(
|
||||
return OEMCrypto_ERROR_WRONG_PST;
|
||||
}
|
||||
if (!usage_entry_->VerifyMacKeys(mac_key_server_, mac_key_client_)) {
|
||||
LOGE("LoadKeys: Usage table entry mac keys do not match.\n");
|
||||
LOGE("LoadKeys: Usage table entry mac keys do not match.");
|
||||
return OEMCrypto_ERROR_WRONG_KEYS;
|
||||
}
|
||||
if (usage_entry_->Inactive()) return OEMCrypto_ERROR_LICENSE_INACTIVE;
|
||||
@@ -991,11 +993,11 @@ OEMCryptoResult SessionContext::InstallKey(
|
||||
LOGE("Anti-rollback hardware is required but hardware not present");
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
uint8_t minimum_patch_level = (key_control_block.control_bits() &
|
||||
wvoec::kControlSecurityPatchLevelMask) >>
|
||||
wvoec::kControlSecurityPatchLevelShift;
|
||||
const uint8_t minimum_patch_level = (key_control_block.control_bits() &
|
||||
wvoec::kControlSecurityPatchLevelMask) >>
|
||||
wvoec::kControlSecurityPatchLevelShift;
|
||||
if (minimum_patch_level > OEMCrypto_Security_Patch_Level()) {
|
||||
LOGE("[InstallKey(): security patch level: %d. Minimum:%d]",
|
||||
LOGE("[InstallKey(): security_patch_level = %u, minimum_patch_level = %u]",
|
||||
OEMCrypto_Security_Patch_Level(), minimum_patch_level);
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
@@ -1026,7 +1028,7 @@ OEMCryptoResult SessionContext::InstallKey(
|
||||
bool SessionContext::InstallRSAEncryptedKey(
|
||||
const uint8_t* encrypted_message_key, size_t encrypted_message_key_length) {
|
||||
encryption_key_.resize(RSA_size(rsa_key()));
|
||||
int decrypted_size = RSA_private_decrypt(
|
||||
const int decrypted_size = RSA_private_decrypt(
|
||||
encrypted_message_key_length, encrypted_message_key, &encryption_key_[0],
|
||||
rsa_key(), RSA_PKCS1_OAEP_PADDING);
|
||||
if (-1 == decrypted_size) {
|
||||
@@ -1054,7 +1056,7 @@ OEMCryptoResult SessionContext::LoadRenewal(const uint8_t* message,
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
if (!ValidateMessage(message, message_length, signature, signature_length)) {
|
||||
LOGE("signature was invalid");
|
||||
LOGE("Signature was invalid");
|
||||
return OEMCrypto_ERROR_SIGNATURE_FAILURE;
|
||||
}
|
||||
|
||||
@@ -1247,7 +1249,7 @@ OEMCryptoResult SessionContext::Generic_Encrypt(const uint8_t* in_buffer,
|
||||
const std::vector<uint8_t>& key = current_content_key()->value();
|
||||
// Set the AES key.
|
||||
if (static_cast<int>(key.size()) != AES_BLOCK_SIZE) {
|
||||
LOGE("[Generic_Encrypt(): CONTENT_KEY has wrong size: %d", key.size());
|
||||
LOGE("[Generic_Encrypt(): CONTENT_KEY has wrong size: %zu", key.size());
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
OEMCryptoResult result = CheckKeyUse("Generic_Encrypt", wvoec::kControlAllowEncrypt,
|
||||
@@ -1332,7 +1334,7 @@ OEMCryptoResult SessionContext::Generic_Sign(const uint8_t* in_buffer,
|
||||
}
|
||||
const std::vector<uint8_t>& key = current_content_key()->value();
|
||||
if (static_cast<int>(key.size()) != SHA256_DIGEST_LENGTH) {
|
||||
LOGE("[Generic_Sign(): CONTENT_KEY has wrong size; %d", key.size());
|
||||
LOGE("[Generic_Sign(): CONTENT_KEY has wrong size: %zu", key.size());
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
OEMCryptoResult result = CheckKeyUse("Generic_Sign", wvoec::kControlAllowSign,
|
||||
@@ -1368,7 +1370,7 @@ OEMCryptoResult SessionContext::Generic_Verify(const uint8_t* in_buffer,
|
||||
}
|
||||
const std::vector<uint8_t>& key = current_content_key()->value();
|
||||
if (static_cast<int>(key.size()) != SHA256_DIGEST_LENGTH) {
|
||||
LOGE("[Generic_Verify(): CONTENT_KEY has wrong size: %d", key.size());
|
||||
LOGE("[Generic_Verify(): CONTENT_KEY has wrong size: %zu", key.size());
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
OEMCryptoResult result = CheckKeyUse("Generic_Verify", wvoec::kControlAllowVerify,
|
||||
@@ -1558,20 +1560,20 @@ OEMCryptoResult SessionContext::DecryptSamples(
|
||||
OEMCryptoResult result = ce_->SetDestination(
|
||||
subsample_dest, subsample_length, subsample.subsample_flags);
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("SetDestination status: %d", result);
|
||||
LOGE("SetDestination status: %d", static_cast<int>(result));
|
||||
return result;
|
||||
}
|
||||
|
||||
result = DecryptSubsample(subsample, subsample_source, ce_->destination(),
|
||||
subsample_dest.type, subsample_iv, pattern);
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("DecryptSubsample status: %d", result);
|
||||
LOGE("DecryptSubsample status: %d", static_cast<int>(result));
|
||||
return result;
|
||||
}
|
||||
|
||||
result = ce_->PushDestination(subsample_dest, subsample.subsample_flags);
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
LOGE("PushDestination status: %d", result);
|
||||
LOGE("PushDestination status: %d", static_cast<int>(result));
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1630,7 +1632,7 @@ OEMCryptoResult SessionContext::DecryptSubsample(
|
||||
current_hash_);
|
||||
if (OEMCrypto_LastSubsample & subsample.subsample_flags) {
|
||||
if (current_hash_ != given_hash_) {
|
||||
LOGE("CRC for frame %d is %08x, should be %08x\n",
|
||||
LOGE("CRC for frame %u is %08x, should be %08x\n",
|
||||
current_frame_number_, current_hash_, given_hash_);
|
||||
// Update bad_frame_number_ only if this is the first bad frame.
|
||||
if (hash_error_ == OEMCrypto_SUCCESS) {
|
||||
@@ -1666,7 +1668,7 @@ OEMCryptoResult SessionContext::ChooseDecrypt(
|
||||
|
||||
// Set the AES key.
|
||||
if (static_cast<int>(content_key.size()) != AES_BLOCK_SIZE) {
|
||||
LOGE("[DecryptCTR(): CONTENT_KEY has wrong size: %d", content_key.size());
|
||||
LOGE("[DecryptCTR(): CONTENT_KEY has wrong size: %zu", content_key.size());
|
||||
return OEMCrypto_ERROR_DECRYPT_FAILED;
|
||||
}
|
||||
const uint8_t* key_u8 = &content_key[0];
|
||||
|
||||
@@ -116,7 +116,7 @@ OEMCryptoResult UsageTableEntry::ReportUsage(const std::vector<uint8_t>& pst,
|
||||
if (recent_decrypt_) return OEMCrypto_ERROR_ENTRY_NEEDS_UPDATE;
|
||||
if (pst.size() == 0 || pst.size() > kMaxPSTLength ||
|
||||
pst.size() != data_.pst_length) {
|
||||
LOGE("ReportUsage: bad pst length = %d, should be %d.", pst.size(),
|
||||
LOGE("ReportUsage: bad pst length = %zu, should be %u.", pst.size(),
|
||||
data_.pst_length);
|
||||
return OEMCrypto_ERROR_WRONG_PST;
|
||||
}
|
||||
@@ -125,7 +125,8 @@ OEMCryptoResult UsageTableEntry::ReportUsage(const std::vector<uint8_t>& pst,
|
||||
wvcdm::HexEncode(data_.pst, data_.pst_length).c_str());
|
||||
return OEMCrypto_ERROR_WRONG_PST;
|
||||
}
|
||||
size_t length_needed = wvcdm::Unpacked_PST_Report::report_size(pst.size());
|
||||
const size_t length_needed =
|
||||
wvcdm::Unpacked_PST_Report::report_size(pst.size());
|
||||
if (*buffer_length < length_needed) {
|
||||
*buffer_length = length_needed;
|
||||
return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
@@ -135,7 +136,7 @@ OEMCryptoResult UsageTableEntry::ReportUsage(const std::vector<uint8_t>& pst,
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
wvcdm::Unpacked_PST_Report pst_report(buffer);
|
||||
int64_t now = usage_table_->ce_->SystemTime();
|
||||
const int64_t now = usage_table_->ce_->SystemTime();
|
||||
pst_report.set_seconds_since_license_received(now -
|
||||
data_.time_of_license_received);
|
||||
pst_report.set_seconds_since_first_decrypt(now - data_.time_of_first_decrypt);
|
||||
@@ -233,7 +234,7 @@ OEMCryptoResult UsageTableEntry::LoadData(CryptoEngine* ce, uint32_t index,
|
||||
ODK_ClockValues* clock_values) {
|
||||
if (buffer.size() < SignedEntrySize()) return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
if (buffer.size() > SignedEntrySize())
|
||||
LOGW("LoadUsageTableEntry: buffer is large. %d > %d", buffer.size(),
|
||||
LOGW("LoadUsageTableEntry: buffer is large. %zu > %zu", buffer.size(),
|
||||
SignedEntrySize());
|
||||
std::vector<uint8_t> clear_buffer(buffer.size());
|
||||
SignedEntryBlock* clear =
|
||||
@@ -357,10 +358,10 @@ OEMCryptoResult UsageTable::CreateNewUsageEntry(
|
||||
}
|
||||
if (!entry) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
if (!usage_entry_number) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
uint32_t index = generation_numbers_.size();
|
||||
size_t max = ce_->max_usage_table_size();
|
||||
const size_t index = generation_numbers_.size();
|
||||
const size_t max = ce_->max_usage_table_size();
|
||||
if (max > 0 && index >= max) {
|
||||
LOGE("Too many usage entries: %d/%d", index, max);
|
||||
LOGE("Too many usage entries: %zu/%zu", index, max);
|
||||
return OEMCrypto_ERROR_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
UsageTableEntry* new_entry = MakeEntry(index);
|
||||
@@ -387,9 +388,9 @@ OEMCryptoResult UsageTable::LoadUsageEntry(
|
||||
LOGE("LoadUsageEntry: index %d used by other session.", index);
|
||||
return OEMCrypto_ERROR_INVALID_SESSION;
|
||||
}
|
||||
size_t max = ce_->max_usage_table_size();
|
||||
const size_t max = ce_->max_usage_table_size();
|
||||
if (max > 0 && index >= max) {
|
||||
LOGE("Too many usage entries: %d/%d", index, max);
|
||||
LOGE("Too many usage entries: %u/%zu", index, max);
|
||||
return OEMCrypto_ERROR_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
std::unique_ptr<UsageTableEntry> new_entry(MakeEntry(index));
|
||||
@@ -417,7 +418,7 @@ OEMCryptoResult UsageTable::ShrinkUsageTableHeader(
|
||||
uint32_t new_table_size, uint8_t* header_buffer,
|
||||
size_t* header_buffer_length) {
|
||||
if (new_table_size > generation_numbers_.size()) {
|
||||
LOGE("OEMCrypto_ShrinkUsageTableHeader: %d > %zd.", new_table_size,
|
||||
LOGE("OEMCrypto_ShrinkUsageTableHeader: %u > %zu", new_table_size,
|
||||
generation_numbers_.size());
|
||||
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
||||
}
|
||||
@@ -433,7 +434,7 @@ OEMCryptoResult UsageTable::ShrinkUsageTableHeader(
|
||||
}
|
||||
for (size_t i = new_table_size; i < sessions_.size(); ++i) {
|
||||
if (sessions_[i]) {
|
||||
LOGE("ShrinkUsageTableHeader: session open for %d", i);
|
||||
LOGE("ShrinkUsageTableHeader: session open for %zu", i);
|
||||
return OEMCrypto_ERROR_ENTRY_IN_USE;
|
||||
}
|
||||
}
|
||||
@@ -505,8 +506,8 @@ OEMCryptoResult UsageTable::LoadUsageTableHeader(
|
||||
if (buffer.size() < SignedHeaderSize(0)) return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
size_t max = ce_->max_usage_table_size();
|
||||
if (max > 0 && buffer.size() > SignedHeaderSize(max)) {
|
||||
LOGE("Header too big: %zd bytes/%zd bytes",
|
||||
buffer.size(), SignedHeaderSize(max));
|
||||
LOGE("Header too big: %zu bytes/%zu bytes", buffer.size(),
|
||||
SignedHeaderSize(max));
|
||||
return OEMCrypto_ERROR_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
std::vector<uint8_t> clear_buffer(buffer.size());
|
||||
@@ -567,7 +568,7 @@ OEMCryptoResult UsageTable::LoadUsageTableHeader(
|
||||
return OEMCrypto_ERROR_SHORT_BUFFER;
|
||||
}
|
||||
if (buffer.size() > SignedHeaderSize(clear->count)) {
|
||||
LOGW("LoadUsageTableHeader: buffer is large. %d > %d", buffer.size(),
|
||||
LOGW("LoadUsageTableHeader: buffer is large. %zu > %zu", buffer.size(),
|
||||
SignedHeaderSize(clear->count));
|
||||
}
|
||||
|
||||
@@ -594,12 +595,12 @@ OEMCryptoResult UsageTable::LoadUsageTableHeader(
|
||||
OEMCryptoResult UsageTable::MoveEntry(UsageTableEntry* entry,
|
||||
uint32_t new_index) {
|
||||
if (new_index >= generation_numbers_.size()) {
|
||||
LOGE("MoveEntry: index beyond end of usage table %d >= %d", new_index,
|
||||
LOGE("MoveEntry: index beyond end of usage table %u >= %zu", new_index,
|
||||
generation_numbers_.size());
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
if (sessions_[new_index]) {
|
||||
LOGE("MoveEntry: session open for %d", new_index);
|
||||
LOGE("MoveEntry: session open for %u", new_index);
|
||||
return OEMCrypto_ERROR_ENTRY_IN_USE;
|
||||
}
|
||||
if (!entry) {
|
||||
@@ -690,7 +691,7 @@ OEMCryptoResult UsageTable::CreateUsageTableHeader(
|
||||
// Make sure there are no entries that are currently tied to an open session.
|
||||
for (size_t i = 0; i < sessions_.size(); ++i) {
|
||||
if (sessions_[i] != nullptr) {
|
||||
LOGE("CreateUsageTableHeader: index %d used by session.", i);
|
||||
LOGE("CreateUsageTableHeader: index %zu used by session.", i);
|
||||
return OEMCrypto_ERROR_INVALID_SESSION;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5883,7 +5883,7 @@ TEST_P(OEMCryptoUsageTableDefragTest, ManyUsageEntries) {
|
||||
OEMCryptoResult status = OEMCrypto_SUCCESS;
|
||||
while (successful_count < attempt_count && status == OEMCrypto_SUCCESS) {
|
||||
wvcdm::TestSleep::SyncFakeClock();
|
||||
LOGD("Creating license for entry %zd", successful_count);
|
||||
LOGD("Creating license for entry %zu", successful_count);
|
||||
entries.push_back(
|
||||
std::unique_ptr<LicenseWithUsageEntry>(new LicenseWithUsageEntry()));
|
||||
entries.back()->set_pst("pst " + std::to_string(successful_count));
|
||||
@@ -5909,7 +5909,7 @@ TEST_P(OEMCryptoUsageTableDefragTest, ManyUsageEntries) {
|
||||
successful_count++;
|
||||
}
|
||||
}
|
||||
LOGD("successful_count = %d", successful_count);
|
||||
LOGD("successful_count = %zu", successful_count);
|
||||
if (status != OEMCrypto_SUCCESS) {
|
||||
// If we failed to create this many entries because of limited resources,
|
||||
// then the error returned should be insufficient resources.
|
||||
|
||||
Reference in New Issue
Block a user