Use new Base64 encode functions.

[ Merge of http://go/wvgerrit/119806 ]

This change replaces all calls for base64 encoding which first converts
a string to a vector.  The new base64 encoding function allow for
encoding binary data contained within strings.

Bug: 181732604
Test: Android unittests
Change-Id: Ibfe79dba99e6a2ee2f2a96e85b62fbd22519aea7
This commit is contained in:
Alex Dale
2021-03-12 19:35:59 -08:00
parent e51f869190
commit d859c1ab17
8 changed files with 19 additions and 33 deletions

View File

@@ -318,9 +318,7 @@ CdmResponseType CertificateProvisioning::GetProvisioningRequestInternal(
if (!wvcdm::Properties::provisioning_messages_are_binary()) {
// Return request as web-safe base64 string
std::vector<uint8_t> request_vector(serialized_request.begin(),
serialized_request.end());
*request = Base64SafeEncodeNoPad(request_vector);
*request = Base64SafeEncodeNoPad(serialized_request);
} else {
*request = std::move(serialized_request);
}

View File

@@ -1771,9 +1771,7 @@ std::string DeviceFiles::GetUsageInfoFileName(const std::string& app_id) {
}
std::string DeviceFiles::GetFileNameSafeHash(const std::string& input) {
std::string hash = Md5Hash(input);
return wvcdm::Base64SafeEncode(
std::vector<uint8_t>(hash.begin(), hash.end()));
return wvcdm::Base64SafeEncode(Md5Hash(input));
}
} // namespace wvcdm

View File

@@ -107,9 +107,7 @@ class WvCdmEnginePreProvTest : public WvCdmTestBaseWithEngine {
license_request.GetDrmMessage(http_response, *response);
LOGV("response: size = %zu, string =\n%s\n", response->size(),
Base64SafeEncode(
std::vector<uint8_t>(response->begin(), response->end()))
.c_str());
Base64SafeEncode(*response).c_str());
return true;
}

View File

@@ -352,11 +352,11 @@ bool FakeProvisioningServer::MakeResponse(
// CDM.
std::string response_data;
signed_response.SerializeToString(&response_data);
std::vector<uint8_t> response_data_v(response_data.begin(),
response_data.end());
static const std::string json_start = "{ \"signedResponse\": \"";
static const std::string json_end = "\" }";
*json_response = json_start + Base64SafeEncode(response_data_v) + json_end;
static const std::string kJsonStart = "{ \"signedResponse\": \"";
static const std::string kJsonEnd = "\" }";
*json_response = kJsonStart;
json_response->append(Base64SafeEncode(response_data));
json_response->append(kJsonEnd);
return true;
}

View File

@@ -341,11 +341,8 @@ class VectorOfStrings {
std::string GenerateHlsUriData(const std::string& provider,
const std::string& content_id,
const std::vector<std::string>& key_ids) {
std::string json = GenerateJsonInitData(provider, content_id, key_ids);
std::vector<uint8_t> json_init_data(
reinterpret_cast<const uint8_t*>(json.data()),
reinterpret_cast<const uint8_t*>(json.data() + json.size()));
return kHlsTestUriDataFormat + Base64Encode(json_init_data);
const std::string json = GenerateJsonInitData(provider, content_id, key_ids);
return kHlsTestUriDataFormat + Base64Encode(json);
}
std::string CreateHlsAttributeList(const std::string& method,
@@ -786,19 +783,16 @@ INSTANTIATE_TEST_CASE_P(
.AddKeyId(kHlsTestKeyId1)));
TEST_F(HlsInitDataConstructionTest, InvalidUriDataFormat) {
std::string json =
const std::string json =
GenerateJsonInitData(kHlsTestProvider, kHlsTestContentId,
VectorOfStrings(kHlsTestKeyId1).Generate());
std::vector<uint8_t> json_init_data(
reinterpret_cast<const uint8_t*>(json.data()),
reinterpret_cast<const uint8_t*>(json.data() + json.size()));
std::string value;
EXPECT_FALSE(InitializationData::ConstructWidevineInitData(
kHlsMethodAes128, Base64Encode(json_init_data), &value));
kHlsMethodAes128, Base64Encode(json), &value));
}
TEST_F(HlsInitDataConstructionTest, InvalidUriBase64Encode) {
std::string json =
const std::string json =
GenerateJsonInitData(kHlsTestProvider, kHlsTestContentId,
VectorOfStrings(kHlsTestKeyId1).Generate());
std::string value;

View File

@@ -291,7 +291,6 @@ WvCdmTestBase::WvCdmTestBase()
void WvCdmTestBase::Provision() {
CdmProvisioningRequest prov_request;
CdmProvisioningRequest binary_prov_request;
std::string provisioning_server_url;
CdmCertificateType cert_type = kCertificateWidevine;
std::string cert_authority;
@@ -331,9 +330,7 @@ void WvCdmTestBase::Provision() {
ASSERT_EQ(NO_ERROR, result);
if (binary_provisioning_) {
binary_prov_request = prov_request;
prov_request = std::string(Base64SafeEncodeNoPad(std::vector<uint8_t>(
binary_prov_request.begin(), binary_prov_request.end())));
prov_request = Base64SafeEncodeNoPad(prov_request);
}
LOGV("Provisioning request: req = %s", prov_request.c_str());

View File

@@ -8,6 +8,7 @@
#include <chrono>
#include <sstream>
#include <thread>
#include <utility>
#include <android-base/properties.h>
#include <gmock/gmock.h>
@@ -2564,9 +2565,9 @@ TEST_F(WvCdmRequestLicenseTest, ProvisioningRevocationTest) {
signed_response.SerializeToString(&response);
if (!wvcdm::Properties::provisioning_messages_are_binary()) {
std::vector<uint8_t> response_vec(response.begin(), response.end());
const std::string binary_response = std::move(response);
response = "\"signedResponse\": \"";
response.append(wvcdm::Base64SafeEncode(response_vec));
response.append(wvcdm::Base64SafeEncode(binary_response));
response.append("\"");
}

View File

@@ -3224,10 +3224,10 @@ TEST_F(WVDrmPluginTest, CanSetDecryptHashProperties) {
// "<sessionId>,<frameNumber>,<base64encodedHash>"
static const std::string frameNumber = ",1";
uint32_t hash = 0xbeef; // crc32 hash
std::vector<uint8_t> hashVector(
const std::vector<uint8_t> hashVector(
reinterpret_cast<uint8_t*>(&hash),
reinterpret_cast<uint8_t*>(&hash) + sizeof(uint32_t));
std::string base64EncodedHash = Base64Encode(hashVector);
const std::string base64EncodedHash = Base64Encode(hashVector);
std::string computedHash(sessionId.begin(), sessionId.end());
computedHash.append(frameNumber.c_str());
computedHash.append(base64EncodedHash.c_str());