From 2045316001ce22feac52d3f8237c8f60745a87a3 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Mon, 9 Jan 2017 19:42:46 -0800 Subject: [PATCH] Add API for device provisioning server certificate [ Merge of http://go/wvgerrit/20205/ ] This is separate from the server certificate used for license requests. b/34211823 Test: Reran unittests. All tests other than some oemcrypto, request_license_test passed. Those tests failed with or without this CL. Change-Id: I23abdf276f8d3db9222f014175d0bb5094010a04 --- .../core/include/cdm_client_property_set.h | 4 ++++ libwvdrmengine/cdm/core/include/properties.h | 4 ++++ libwvdrmengine/cdm/core/src/cdm_engine.cpp | 5 +++++ libwvdrmengine/cdm/core/src/properties.cpp | 22 +++++++++++++++++++ .../cdm/test/cdm_extended_duration_test.cpp | 8 +++++++ .../cdm/test/request_license_test.cpp | 8 +++++++ libwvdrmengine/mediadrm/include/WVDrmPlugin.h | 11 ++++++++++ 7 files changed, 62 insertions(+) diff --git a/libwvdrmengine/cdm/core/include/cdm_client_property_set.h b/libwvdrmengine/cdm/core/include/cdm_client_property_set.h index 589a60cc..7e9aca48 100644 --- a/libwvdrmengine/cdm/core/include/cdm_client_property_set.h +++ b/libwvdrmengine/cdm/core/include/cdm_client_property_set.h @@ -17,6 +17,10 @@ class CdmClientPropertySet { virtual bool use_privacy_mode() const = 0; virtual const std::string& service_certificate() const = 0; virtual void set_service_certificate(const std::string& cert) = 0; + virtual const std::string& device_provisioning_service_certificate() const + = 0; + virtual void set_device_provisioning_service_certificate( + const std::string& cert) = 0; virtual bool is_session_sharing_enabled() const = 0; virtual uint32_t session_sharing_id() const = 0; virtual void set_session_sharing_id(uint32_t id) = 0; diff --git a/libwvdrmengine/cdm/core/include/properties.h b/libwvdrmengine/cdm/core/include/properties.h index bf4da706..cb826867 100644 --- a/libwvdrmengine/cdm/core/include/properties.h +++ b/libwvdrmengine/cdm/core/include/properties.h @@ -63,6 +63,10 @@ class Properties { std::string* service_certificate); static bool SetServiceCertificate(const CdmSessionId& session_id, const std::string& service_certificate); + static bool GetDeviceProvisioningServiceCertificate( + const CdmSessionId& session_id, std::string* service_certificate); + static bool SetDeviceProvisioningServiceCertificate( + const CdmSessionId& session_id, const std::string& service_certificate); static bool UsePrivacyMode(const CdmSessionId& session_id); static uint32_t GetSessionSharingId(const CdmSessionId& session_id); diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 7b13434b..c98c3acc 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -41,6 +41,11 @@ class UsagePropertySet : public CdmClientPropertySet { virtual bool use_privacy_mode() const { return false; } virtual const std::string& service_certificate() const { return empty_; } virtual void set_service_certificate(const std::string&) {} + virtual const std::string& device_provisioning_service_certificate() const { + return empty_; + } + virtual void set_device_provisioning_service_certificate(const std::string&) { + } virtual bool is_session_sharing_enabled() const { return false; } virtual uint32_t session_sharing_id() const { return 0; } virtual void set_session_sharing_id(uint32_t /* id */) {} diff --git a/libwvdrmengine/cdm/core/src/properties.cpp b/libwvdrmengine/cdm/core/src/properties.cpp index 0363b61e..ca3fe0ca 100644 --- a/libwvdrmengine/cdm/core/src/properties.cpp +++ b/libwvdrmengine/cdm/core/src/properties.cpp @@ -80,6 +80,28 @@ bool Properties::SetServiceCertificate(const CdmSessionId& session_id, return true; } +bool Properties::GetDeviceProvisioningServiceCertificate( + const CdmSessionId& session_id, std::string* service_certificate) { + const CdmClientPropertySet* property_set = + GetCdmClientPropertySet(session_id); + if (NULL == property_set) { + return false; + } + *service_certificate = property_set->device_provisioning_service_certificate(); + return true; +} + +bool Properties::SetDeviceProvisioningServiceCertificate( + const CdmSessionId& session_id, const std::string& service_certificate) { + CdmClientPropertySet* property_set = + GetCdmClientPropertySet(session_id); + if (NULL == property_set) { + return false; + } + property_set->set_device_provisioning_service_certificate(service_certificate); + return true; +} + bool Properties::UsePrivacyMode(const CdmSessionId& session_id) { const CdmClientPropertySet* property_set = GetCdmClientPropertySet(session_id); diff --git a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp index 6c55c06b..03a08f76 100644 --- a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp +++ b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp @@ -209,6 +209,13 @@ class TestWvCdmClientPropertySet : public CdmClientPropertySet { virtual void set_service_certificate(const std::string& cert) { service_certificate_ = cert; } + virtual const std::string& device_provisioning_service_certificate() const { + return device_provisioning_service_certificate_; + } + virtual void set_device_provisioning_service_certificate( + const std::string& cert) { + device_provisioning_service_certificate_ = cert; + } virtual bool use_privacy_mode() const { return use_privacy_mode_; } virtual bool is_session_sharing_enabled() const { return is_session_sharing_enabled_; @@ -234,6 +241,7 @@ class TestWvCdmClientPropertySet : public CdmClientPropertySet { std::string app_id_; std::string security_level_; std::string service_certificate_; + std::string device_provisioning_service_certificate_; bool use_privacy_mode_; bool is_session_sharing_enabled_; uint32_t session_sharing_id_; diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index 07009056..019966fe 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -889,6 +889,13 @@ class TestWvCdmClientPropertySet : public CdmClientPropertySet { virtual void set_service_certificate(const std::string& cert) { service_certificate_ = cert; } + virtual const std::string& device_provisioning_service_certificate() const { + return device_provisioning_service_certificate_; + } + virtual void set_device_provisioning_service_certificate( + const std::string& cert) { + device_provisioning_service_certificate_ = cert; + } virtual bool use_privacy_mode() const { return use_privacy_mode_; } virtual bool is_session_sharing_enabled() const { return is_session_sharing_enabled_; @@ -914,6 +921,7 @@ class TestWvCdmClientPropertySet : public CdmClientPropertySet { std::string app_id_; std::string security_level_; std::string service_certificate_; + std::string device_provisioning_service_certificate_; bool use_privacy_mode_; bool is_session_sharing_enabled_; uint32_t session_sharing_id_; diff --git a/libwvdrmengine/mediadrm/include/WVDrmPlugin.h b/libwvdrmengine/mediadrm/include/WVDrmPlugin.h index 29998ddc..22f6d095 100644 --- a/libwvdrmengine/mediadrm/include/WVDrmPlugin.h +++ b/libwvdrmengine/mediadrm/include/WVDrmPlugin.h @@ -215,6 +215,16 @@ class WVDrmPlugin : public android::DrmPlugin, mServiceCertificate = serviceCertificate; } + virtual const std::string& device_provisioning_service_certificate() const { + // Android does not support service certificates for provisioning. + return mEmptyString; + } + + virtual void set_device_provisioning_service_certificate( + const std::string& ) { + // Ignore. Android does not support service certificates for provisioning + } + virtual bool is_session_sharing_enabled() const { return mShareKeys; } @@ -248,6 +258,7 @@ class WVDrmPlugin : public android::DrmPlugin, bool mShareKeys; uint32_t mSessionSharingId; std::string mAppId; + const std::string mEmptyString; } mPropertySet; android::sp const mCDM;