xref: /aosp_15_r20/frameworks/av/drm/libmediadrm/DrmHal.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright (C) 2017 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
18*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "DrmHal"
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include <mediadrm/DrmHal.h>
21*ec779b8eSAndroid Build Coastguard Worker #include <mediadrm/DrmHalAidl.h>
22*ec779b8eSAndroid Build Coastguard Worker #include <mediadrm/DrmHalHidl.h>
23*ec779b8eSAndroid Build Coastguard Worker #include <mediadrm/DrmStatus.h>
24*ec779b8eSAndroid Build Coastguard Worker #include <mediadrm/DrmUtils.h>
25*ec779b8eSAndroid Build Coastguard Worker 
26*ec779b8eSAndroid Build Coastguard Worker namespace android {
27*ec779b8eSAndroid Build Coastguard Worker 
DrmHal()28*ec779b8eSAndroid Build Coastguard Worker DrmHal::DrmHal() {
29*ec779b8eSAndroid Build Coastguard Worker     mDrmHalHidl = sp<DrmHalHidl>::make();
30*ec779b8eSAndroid Build Coastguard Worker     mDrmHalAidl = sp<DrmHalAidl>::make();
31*ec779b8eSAndroid Build Coastguard Worker }
32*ec779b8eSAndroid Build Coastguard Worker 
~DrmHal()33*ec779b8eSAndroid Build Coastguard Worker DrmHal::~DrmHal() {}
34*ec779b8eSAndroid Build Coastguard Worker 
initCheck() const35*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::initCheck() const {
36*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK || mDrmHalHidl->initCheck() == OK) return DrmStatus(OK);
37*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == NO_INIT || mDrmHalHidl->initCheck() == NO_INIT)
38*ec779b8eSAndroid Build Coastguard Worker         return DrmStatus(NO_INIT);
39*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->initCheck();
40*ec779b8eSAndroid Build Coastguard Worker }
41*ec779b8eSAndroid Build Coastguard Worker 
isCryptoSchemeSupported(const uint8_t uuid[16],const String8 & mimeType,DrmPlugin::SecurityLevel securityLevel,bool * result)42*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::isCryptoSchemeSupported(const uint8_t uuid[16], const String8& mimeType,
43*ec779b8eSAndroid Build Coastguard Worker                                           DrmPlugin::SecurityLevel securityLevel, bool* result) {
44*ec779b8eSAndroid Build Coastguard Worker     DrmStatus statusResult =
45*ec779b8eSAndroid Build Coastguard Worker             mDrmHalAidl->isCryptoSchemeSupported(uuid, mimeType, securityLevel, result);
46*ec779b8eSAndroid Build Coastguard Worker     if (*result) return statusResult;
47*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->isCryptoSchemeSupported(uuid, mimeType, securityLevel, result);
48*ec779b8eSAndroid Build Coastguard Worker }
49*ec779b8eSAndroid Build Coastguard Worker 
createPlugin(const uint8_t uuid[16],const String8 & appPackageName)50*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::createPlugin(const uint8_t uuid[16], const String8& appPackageName) {
51*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalAidl->createPlugin(uuid, appPackageName) == OK
52*ec779b8eSAndroid Build Coastguard Worker                    ? DrmStatus(OK)
53*ec779b8eSAndroid Build Coastguard Worker                    : mDrmHalHidl->createPlugin(uuid, appPackageName);
54*ec779b8eSAndroid Build Coastguard Worker }
55*ec779b8eSAndroid Build Coastguard Worker 
destroyPlugin()56*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::destroyPlugin() {
57*ec779b8eSAndroid Build Coastguard Worker     DrmStatus statusResult = mDrmHalAidl->destroyPlugin();
58*ec779b8eSAndroid Build Coastguard Worker     DrmStatus statusResultHidl = mDrmHalHidl->destroyPlugin();
59*ec779b8eSAndroid Build Coastguard Worker     if (statusResult != OK) return statusResult;
60*ec779b8eSAndroid Build Coastguard Worker     return statusResultHidl;
61*ec779b8eSAndroid Build Coastguard Worker }
62*ec779b8eSAndroid Build Coastguard Worker 
openSession(DrmPlugin::SecurityLevel securityLevel,Vector<uint8_t> & sessionId)63*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::openSession(DrmPlugin::SecurityLevel securityLevel, Vector<uint8_t>& sessionId) {
64*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->openSession(securityLevel, sessionId);
65*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->openSession(securityLevel, sessionId);
66*ec779b8eSAndroid Build Coastguard Worker }
67*ec779b8eSAndroid Build Coastguard Worker 
closeSession(Vector<uint8_t> const & sessionId)68*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::closeSession(Vector<uint8_t> const& sessionId) {
69*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->closeSession(sessionId);
70*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->closeSession(sessionId);
71*ec779b8eSAndroid Build Coastguard Worker }
72*ec779b8eSAndroid Build Coastguard Worker 
getKeyRequest(Vector<uint8_t> const & sessionId,Vector<uint8_t> const & initData,String8 const & mimeType,DrmPlugin::KeyType keyType,KeyedVector<String8,String8> const & optionalParameters,Vector<uint8_t> & request,String8 & defaultUrl,DrmPlugin::KeyRequestType * keyRequestType)73*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getKeyRequest(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& initData,
74*ec779b8eSAndroid Build Coastguard Worker                                 String8 const& mimeType, DrmPlugin::KeyType keyType,
75*ec779b8eSAndroid Build Coastguard Worker                                 KeyedVector<String8, String8> const& optionalParameters,
76*ec779b8eSAndroid Build Coastguard Worker                                 Vector<uint8_t>& request, String8& defaultUrl,
77*ec779b8eSAndroid Build Coastguard Worker                                 DrmPlugin::KeyRequestType* keyRequestType) {
78*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
79*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->getKeyRequest(sessionId, initData, mimeType, keyType,
80*ec779b8eSAndroid Build Coastguard Worker                                           optionalParameters, request, defaultUrl, keyRequestType);
81*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getKeyRequest(sessionId, initData, mimeType, keyType, optionalParameters,
82*ec779b8eSAndroid Build Coastguard Worker                                       request, defaultUrl, keyRequestType);
83*ec779b8eSAndroid Build Coastguard Worker }
84*ec779b8eSAndroid Build Coastguard Worker 
provideKeyResponse(Vector<uint8_t> const & sessionId,Vector<uint8_t> const & response,Vector<uint8_t> & keySetId)85*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::provideKeyResponse(Vector<uint8_t> const& sessionId,
86*ec779b8eSAndroid Build Coastguard Worker                                      Vector<uint8_t> const& response, Vector<uint8_t>& keySetId) {
87*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
88*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->provideKeyResponse(sessionId, response, keySetId);
89*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->provideKeyResponse(sessionId, response, keySetId);
90*ec779b8eSAndroid Build Coastguard Worker }
91*ec779b8eSAndroid Build Coastguard Worker 
removeKeys(Vector<uint8_t> const & keySetId)92*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::removeKeys(Vector<uint8_t> const& keySetId) {
93*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeKeys(keySetId);
94*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->removeKeys(keySetId);
95*ec779b8eSAndroid Build Coastguard Worker }
96*ec779b8eSAndroid Build Coastguard Worker 
restoreKeys(Vector<uint8_t> const & sessionId,Vector<uint8_t> const & keySetId)97*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::restoreKeys(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keySetId) {
98*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->restoreKeys(sessionId, keySetId);
99*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->restoreKeys(sessionId, keySetId);
100*ec779b8eSAndroid Build Coastguard Worker }
101*ec779b8eSAndroid Build Coastguard Worker 
queryKeyStatus(Vector<uint8_t> const & sessionId,KeyedVector<String8,String8> & infoMap) const102*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::queryKeyStatus(Vector<uint8_t> const& sessionId,
103*ec779b8eSAndroid Build Coastguard Worker                                  KeyedVector<String8, String8>& infoMap) const {
104*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->queryKeyStatus(sessionId, infoMap);
105*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->queryKeyStatus(sessionId, infoMap);
106*ec779b8eSAndroid Build Coastguard Worker }
107*ec779b8eSAndroid Build Coastguard Worker 
getProvisionRequest(String8 const & certType,String8 const & certAuthority,Vector<uint8_t> & request,String8 & defaultUrl)108*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getProvisionRequest(String8 const& certType, String8 const& certAuthority,
109*ec779b8eSAndroid Build Coastguard Worker                                       Vector<uint8_t>& request, String8& defaultUrl) {
110*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
111*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->getProvisionRequest(certType, certAuthority, request, defaultUrl);
112*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getProvisionRequest(certType, certAuthority, request, defaultUrl);
113*ec779b8eSAndroid Build Coastguard Worker }
114*ec779b8eSAndroid Build Coastguard Worker 
provideProvisionResponse(Vector<uint8_t> const & response,Vector<uint8_t> & certificate,Vector<uint8_t> & wrappedKey)115*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::provideProvisionResponse(Vector<uint8_t> const& response,
116*ec779b8eSAndroid Build Coastguard Worker                                            Vector<uint8_t>& certificate,
117*ec779b8eSAndroid Build Coastguard Worker                                            Vector<uint8_t>& wrappedKey) {
118*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
119*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->provideProvisionResponse(response, certificate, wrappedKey);
120*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->provideProvisionResponse(response, certificate, wrappedKey);
121*ec779b8eSAndroid Build Coastguard Worker }
122*ec779b8eSAndroid Build Coastguard Worker 
getSecureStops(List<Vector<uint8_t>> & secureStops)123*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getSecureStops(List<Vector<uint8_t>>& secureStops) {
124*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecureStops(secureStops);
125*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getSecureStops(secureStops);
126*ec779b8eSAndroid Build Coastguard Worker }
127*ec779b8eSAndroid Build Coastguard Worker 
getSecureStopIds(List<Vector<uint8_t>> & secureStopIds)128*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getSecureStopIds(List<Vector<uint8_t>>& secureStopIds) {
129*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecureStopIds(secureStopIds);
130*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getSecureStopIds(secureStopIds);
131*ec779b8eSAndroid Build Coastguard Worker }
132*ec779b8eSAndroid Build Coastguard Worker 
getSecureStop(Vector<uint8_t> const & ssid,Vector<uint8_t> & secureStop)133*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getSecureStop(Vector<uint8_t> const& ssid, Vector<uint8_t>& secureStop) {
134*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecureStop(ssid, secureStop);
135*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getSecureStop(ssid, secureStop);
136*ec779b8eSAndroid Build Coastguard Worker }
137*ec779b8eSAndroid Build Coastguard Worker 
releaseSecureStops(Vector<uint8_t> const & ssRelease)138*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::releaseSecureStops(Vector<uint8_t> const& ssRelease) {
139*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->releaseSecureStops(ssRelease);
140*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->releaseSecureStops(ssRelease);
141*ec779b8eSAndroid Build Coastguard Worker }
142*ec779b8eSAndroid Build Coastguard Worker 
removeSecureStop(Vector<uint8_t> const & ssid)143*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::removeSecureStop(Vector<uint8_t> const& ssid) {
144*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeSecureStop(ssid);
145*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->removeSecureStop(ssid);
146*ec779b8eSAndroid Build Coastguard Worker }
147*ec779b8eSAndroid Build Coastguard Worker 
removeAllSecureStops()148*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::removeAllSecureStops() {
149*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeAllSecureStops();
150*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->removeAllSecureStops();
151*ec779b8eSAndroid Build Coastguard Worker }
152*ec779b8eSAndroid Build Coastguard Worker 
getHdcpLevels(DrmPlugin::HdcpLevel * connectedLevel,DrmPlugin::HdcpLevel * maxLevel) const153*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getHdcpLevels(DrmPlugin::HdcpLevel* connectedLevel,
154*ec779b8eSAndroid Build Coastguard Worker                                 DrmPlugin::HdcpLevel* maxLevel) const {
155*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getHdcpLevels(connectedLevel, maxLevel);
156*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getHdcpLevels(connectedLevel, maxLevel);
157*ec779b8eSAndroid Build Coastguard Worker }
158*ec779b8eSAndroid Build Coastguard Worker 
getNumberOfSessions(uint32_t * currentSessions,uint32_t * maxSessions) const159*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getNumberOfSessions(uint32_t* currentSessions, uint32_t* maxSessions) const {
160*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
161*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->getNumberOfSessions(currentSessions, maxSessions);
162*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getNumberOfSessions(currentSessions, maxSessions);
163*ec779b8eSAndroid Build Coastguard Worker }
164*ec779b8eSAndroid Build Coastguard Worker 
getSecurityLevel(Vector<uint8_t> const & sessionId,DrmPlugin::SecurityLevel * level) const165*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getSecurityLevel(Vector<uint8_t> const& sessionId,
166*ec779b8eSAndroid Build Coastguard Worker                                    DrmPlugin::SecurityLevel* level) const {
167*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecurityLevel(sessionId, level);
168*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getSecurityLevel(sessionId, level);
169*ec779b8eSAndroid Build Coastguard Worker }
170*ec779b8eSAndroid Build Coastguard Worker 
getOfflineLicenseKeySetIds(List<Vector<uint8_t>> & keySetIds) const171*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getOfflineLicenseKeySetIds(List<Vector<uint8_t>>& keySetIds) const {
172*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getOfflineLicenseKeySetIds(keySetIds);
173*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getOfflineLicenseKeySetIds(keySetIds);
174*ec779b8eSAndroid Build Coastguard Worker }
175*ec779b8eSAndroid Build Coastguard Worker 
removeOfflineLicense(Vector<uint8_t> const & keySetId)176*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::removeOfflineLicense(Vector<uint8_t> const& keySetId) {
177*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeOfflineLicense(keySetId);
178*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->removeOfflineLicense(keySetId);
179*ec779b8eSAndroid Build Coastguard Worker }
180*ec779b8eSAndroid Build Coastguard Worker 
getOfflineLicenseState(Vector<uint8_t> const & keySetId,DrmPlugin::OfflineLicenseState * licenseState) const181*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getOfflineLicenseState(Vector<uint8_t> const& keySetId,
182*ec779b8eSAndroid Build Coastguard Worker                                          DrmPlugin::OfflineLicenseState* licenseState) const {
183*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
184*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->getOfflineLicenseState(keySetId, licenseState);
185*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getOfflineLicenseState(keySetId, licenseState);
186*ec779b8eSAndroid Build Coastguard Worker }
187*ec779b8eSAndroid Build Coastguard Worker 
getPropertyString(String8 const & name,String8 & value) const188*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getPropertyString(String8 const& name, String8& value) const {
189*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getPropertyString(name, value);
190*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getPropertyString(name, value);
191*ec779b8eSAndroid Build Coastguard Worker }
192*ec779b8eSAndroid Build Coastguard Worker 
getPropertyByteArray(String8 const & name,Vector<uint8_t> & value) const193*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getPropertyByteArray(String8 const& name, Vector<uint8_t>& value) const {
194*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getPropertyByteArray(name, value);
195*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getPropertyByteArray(name, value);
196*ec779b8eSAndroid Build Coastguard Worker }
197*ec779b8eSAndroid Build Coastguard Worker 
setPropertyString(String8 const & name,String8 const & value) const198*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::setPropertyString(String8 const& name, String8 const& value) const {
199*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setPropertyString(name, value);
200*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->setPropertyString(name, value);
201*ec779b8eSAndroid Build Coastguard Worker }
202*ec779b8eSAndroid Build Coastguard Worker 
setPropertyByteArray(String8 const & name,Vector<uint8_t> const & value) const203*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::setPropertyByteArray(String8 const& name, Vector<uint8_t> const& value) const {
204*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setPropertyByteArray(name, value);
205*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->setPropertyByteArray(name, value);
206*ec779b8eSAndroid Build Coastguard Worker }
207*ec779b8eSAndroid Build Coastguard Worker 
getMetrics(const sp<IDrmMetricsConsumer> & consumer)208*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getMetrics(const sp<IDrmMetricsConsumer>& consumer) {
209*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getMetrics(consumer);
210*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getMetrics(consumer);
211*ec779b8eSAndroid Build Coastguard Worker }
212*ec779b8eSAndroid Build Coastguard Worker 
setCipherAlgorithm(Vector<uint8_t> const & sessionId,String8 const & algorithm)213*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::setCipherAlgorithm(Vector<uint8_t> const& sessionId, String8 const& algorithm) {
214*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
215*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->setCipherAlgorithm(sessionId, algorithm);
216*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->setCipherAlgorithm(sessionId, algorithm);
217*ec779b8eSAndroid Build Coastguard Worker }
218*ec779b8eSAndroid Build Coastguard Worker 
setMacAlgorithm(Vector<uint8_t> const & sessionId,String8 const & algorithm)219*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::setMacAlgorithm(Vector<uint8_t> const& sessionId, String8 const& algorithm) {
220*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setMacAlgorithm(sessionId, algorithm);
221*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->setMacAlgorithm(sessionId, algorithm);
222*ec779b8eSAndroid Build Coastguard Worker }
223*ec779b8eSAndroid Build Coastguard Worker 
encrypt(Vector<uint8_t> const & sessionId,Vector<uint8_t> const & keyId,Vector<uint8_t> const & input,Vector<uint8_t> const & iv,Vector<uint8_t> & output)224*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::encrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
225*ec779b8eSAndroid Build Coastguard Worker                           Vector<uint8_t> const& input, Vector<uint8_t> const& iv,
226*ec779b8eSAndroid Build Coastguard Worker                           Vector<uint8_t>& output) {
227*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
228*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->encrypt(sessionId, keyId, input, iv, output);
229*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->encrypt(sessionId, keyId, input, iv, output);
230*ec779b8eSAndroid Build Coastguard Worker }
231*ec779b8eSAndroid Build Coastguard Worker 
decrypt(Vector<uint8_t> const & sessionId,Vector<uint8_t> const & keyId,Vector<uint8_t> const & input,Vector<uint8_t> const & iv,Vector<uint8_t> & output)232*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::decrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
233*ec779b8eSAndroid Build Coastguard Worker                           Vector<uint8_t> const& input, Vector<uint8_t> const& iv,
234*ec779b8eSAndroid Build Coastguard Worker                           Vector<uint8_t>& output) {
235*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
236*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->decrypt(sessionId, keyId, input, iv, output);
237*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->decrypt(sessionId, keyId, input, iv, output);
238*ec779b8eSAndroid Build Coastguard Worker }
239*ec779b8eSAndroid Build Coastguard Worker 
sign(Vector<uint8_t> const & sessionId,Vector<uint8_t> const & keyId,Vector<uint8_t> const & message,Vector<uint8_t> & signature)240*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::sign(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
241*ec779b8eSAndroid Build Coastguard Worker                        Vector<uint8_t> const& message, Vector<uint8_t>& signature) {
242*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
243*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->sign(sessionId, keyId, message, signature);
244*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->sign(sessionId, keyId, message, signature);
245*ec779b8eSAndroid Build Coastguard Worker }
246*ec779b8eSAndroid Build Coastguard Worker 
verify(Vector<uint8_t> const & sessionId,Vector<uint8_t> const & keyId,Vector<uint8_t> const & message,Vector<uint8_t> const & signature,bool & match)247*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::verify(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
248*ec779b8eSAndroid Build Coastguard Worker                          Vector<uint8_t> const& message, Vector<uint8_t> const& signature,
249*ec779b8eSAndroid Build Coastguard Worker                          bool& match) {
250*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
251*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->verify(sessionId, keyId, message, signature, match);
252*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->verify(sessionId, keyId, message, signature, match);
253*ec779b8eSAndroid Build Coastguard Worker }
254*ec779b8eSAndroid Build Coastguard Worker 
signRSA(Vector<uint8_t> const & sessionId,String8 const & algorithm,Vector<uint8_t> const & message,Vector<uint8_t> const & wrappedKey,Vector<uint8_t> & signature)255*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::signRSA(Vector<uint8_t> const& sessionId, String8 const& algorithm,
256*ec779b8eSAndroid Build Coastguard Worker                           Vector<uint8_t> const& message, Vector<uint8_t> const& wrappedKey,
257*ec779b8eSAndroid Build Coastguard Worker                           Vector<uint8_t>& signature) {
258*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
259*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->signRSA(sessionId, algorithm, message, wrappedKey, signature);
260*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->signRSA(sessionId, algorithm, message, wrappedKey, signature);
261*ec779b8eSAndroid Build Coastguard Worker }
262*ec779b8eSAndroid Build Coastguard Worker 
setListener(const sp<IDrmClient> & listener)263*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::setListener(const sp<IDrmClient>& listener) {
264*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setListener(listener);
265*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->setListener(listener);
266*ec779b8eSAndroid Build Coastguard Worker }
267*ec779b8eSAndroid Build Coastguard Worker 
requiresSecureDecoder(const char * mime,bool * required) const268*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::requiresSecureDecoder(const char* mime, bool* required) const {
269*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->requiresSecureDecoder(mime, required);
270*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->requiresSecureDecoder(mime, required);
271*ec779b8eSAndroid Build Coastguard Worker }
272*ec779b8eSAndroid Build Coastguard Worker 
requiresSecureDecoder(const char * mime,DrmPlugin::SecurityLevel securityLevel,bool * required) const273*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::requiresSecureDecoder(const char* mime, DrmPlugin::SecurityLevel securityLevel,
274*ec779b8eSAndroid Build Coastguard Worker                                         bool* required) const {
275*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK)
276*ec779b8eSAndroid Build Coastguard Worker         return mDrmHalAidl->requiresSecureDecoder(mime, securityLevel, required);
277*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->requiresSecureDecoder(mime, securityLevel, required);
278*ec779b8eSAndroid Build Coastguard Worker }
279*ec779b8eSAndroid Build Coastguard Worker 
setPlaybackId(Vector<uint8_t> const & sessionId,const char * playbackId)280*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::setPlaybackId(Vector<uint8_t> const& sessionId, const char* playbackId) {
281*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setPlaybackId(sessionId, playbackId);
282*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->setPlaybackId(sessionId, playbackId);
283*ec779b8eSAndroid Build Coastguard Worker }
284*ec779b8eSAndroid Build Coastguard Worker 
getLogMessages(Vector<drm::V1_4::LogMessage> & logs) const285*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getLogMessages(Vector<drm::V1_4::LogMessage>& logs) const {
286*ec779b8eSAndroid Build Coastguard Worker     if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getLogMessages(logs);
287*ec779b8eSAndroid Build Coastguard Worker     return mDrmHalHidl->getLogMessages(logs);
288*ec779b8eSAndroid Build Coastguard Worker }
289*ec779b8eSAndroid Build Coastguard Worker 
getSupportedSchemes(std::vector<uint8_t> & schemes) const290*ec779b8eSAndroid Build Coastguard Worker DrmStatus DrmHal::getSupportedSchemes(std::vector<uint8_t>& schemes) const {
291*ec779b8eSAndroid Build Coastguard Worker     const DrmStatus statusResultAidl = mDrmHalAidl->getSupportedSchemes(schemes);
292*ec779b8eSAndroid Build Coastguard Worker     const DrmStatus statusResultHidl = mDrmHalHidl->getSupportedSchemes(schemes);
293*ec779b8eSAndroid Build Coastguard Worker     if (statusResultHidl == OK || statusResultAidl == OK) return OK;
294*ec779b8eSAndroid Build Coastguard Worker     return statusResultAidl;
295*ec779b8eSAndroid Build Coastguard Worker }
296*ec779b8eSAndroid Build Coastguard Worker 
297*ec779b8eSAndroid Build Coastguard Worker }  // namespace android
298