From 81a63e05ae39f4b0ab519f2c1934d595cfd17a45 Mon Sep 17 00:00:00 2001 From: Kyle Zhang Date: Wed, 26 Jul 2023 22:27:05 +0000 Subject: [PATCH] Add dumping provision request functionality [ Merge of http://go/wvgerrit/179590 ] Bug: 277788529 Test: dumpsys android.hardware.drm.IDrmFactory/widevine -prov Change-Id: Ife88d1323bf5ee423eb8827ca324b73db3cc984a (cherry picked from commit afbfe173a89c9b939ffd2d7b082a977286a46d22) --- libwvdrmengine/include/WVDrmFactory.h | 1 + libwvdrmengine/src/WVDrmFactory.cpp | 32 ++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/libwvdrmengine/include/WVDrmFactory.h b/libwvdrmengine/include/WVDrmFactory.h index 142965ac..9a74d783 100644 --- a/libwvdrmengine/include/WVDrmFactory.h +++ b/libwvdrmengine/include/WVDrmFactory.h @@ -60,6 +60,7 @@ class WVDrmFactory : public ::aidl::android::hardware::drm::BnDrmFactory { static void printCdmMetrics(int fd); static void printCdmProperties(int fd); static void printUsage(int fd); + static void printProvisioningRequest(int fd, bool cast); friend class WVDrmFactoryTestPeer; }; diff --git a/libwvdrmengine/src/WVDrmFactory.cpp b/libwvdrmengine/src/WVDrmFactory.cpp index 45df9eab..12c3bb7a 100644 --- a/libwvdrmengine/src/WVDrmFactory.cpp +++ b/libwvdrmengine/src/WVDrmFactory.cpp @@ -230,6 +230,27 @@ string WVDrmFactory::stringToHex(const string& input) { return output; } +// Attempt to get provisioning request. +// Choose if it's cast specific. +// Output the request to fd. +void WVDrmFactory::printProvisioningRequest(int fd, bool cast) { + dprintf(fd, "provisioning_request:\n"); + std::shared_ptr plugin = ndk::SharedRefBase::make( + getCDM(), "dumpsys", &sOemCryptoInterface, + areSpoidsEnabled()); + ::aidl::android::hardware::drm::ProvisionRequest res; + std::string cert = ""; + std::string cert_auth = ""; + if (cast) { + cert = "X.509"; + cert_auth = "cast.google.com"; + } + plugin->getProvisionRequest(cert, cert_auth, &res); + string req(res.request.begin(), res.request.end()); + dprintf(fd, " request: %s\n", req.c_str()); + dprintf(fd, " default_url: %s\n", res.defaultUrl.c_str()); +} + void WVDrmFactory::printCdmMetrics(int fd) { dprintf(fd, "widevine_cdm_metrics:\n"); @@ -354,6 +375,7 @@ binder_status_t WVDrmFactory::dump(int fd, const char** args, } bool dumpCdmProperties, dumpCdmMetrics = false; + bool dumpProvReq = false, provCast = false; if (numArgs == 0) { // default to print all info if no arguments are given dumpCdmProperties = dumpCdmMetrics = true; @@ -366,6 +388,13 @@ binder_status_t WVDrmFactory::dump(int fd, const char** args, } else if (option.find("-m") != string::npos || option.find("-M") != string::npos) { dumpCdmMetrics = true; + } else if (option.find("-prov_cast") != string::npos || + option.find("-Prov_cast") != string::npos) { + dumpProvReq = true; + provCast = true; + } else if (option.find("-prov") != string::npos || + option.find("-Prov") != string::npos) { + dumpProvReq = true; } else if (option.find("-p") != string::npos || option.find("-P") != string::npos) { dumpCdmProperties = true; @@ -379,8 +408,9 @@ binder_status_t WVDrmFactory::dump(int fd, const char** args, } } - if (dumpCdmMetrics) printCdmMetrics(fd); if (dumpCdmProperties) printCdmProperties(fd); + if (dumpProvReq) printProvisioningRequest(fd, provCast); + if (dumpCdmMetrics) printCdmMetrics(fd); fsync(fd); return STATUS_OK;