blob: fe8b9f6060f3432c00d6ac9f24549af11c4c3272 [file] [log] [blame]
Jeff Tinkera53d6552017-01-20 00:31:46 -08001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17//#define LOG_NDEBUG 0
18#define LOG_TAG "DrmHal"
Jeff Tinkera53d6552017-01-20 00:31:46 -080019
Jeff Tinker7d2c6e82018-02-16 16:14:59 -080020#include <mediadrm/DrmHal.h>
Kyle Zhang6605add2022-01-13 17:51:23 +000021#include <mediadrm/DrmHalAidl.h>
22#include <mediadrm/DrmHalHidl.h>
Robert Shihc0d1d0e2019-11-24 13:21:04 -080023#include <mediadrm/DrmUtils.h>
Adam Stone32494f52018-02-26 22:53:27 -080024
Jeff Tinkera53d6552017-01-20 00:31:46 -080025namespace android {
26
Kyle Zhang6605add2022-01-13 17:51:23 +000027DrmHal::DrmHal() {
28 mDrmHalHidl = sp<DrmHalHidl>::make();
29 mDrmHalAidl = ndk::SharedRefBase::make<DrmHalAidl>();
Jeff Tinkera53d6552017-01-20 00:31:46 -080030}
31
Kyle Zhang6605add2022-01-13 17:51:23 +000032DrmHal::~DrmHal() {}
Jeff Tinkera53d6552017-01-20 00:31:46 -080033
34status_t DrmHal::initCheck() const {
Kyle Zhang6605add2022-01-13 17:51:23 +000035 if (mDrmHalAidl->initCheck() == OK || mDrmHalHidl->initCheck() == OK) return OK;
36 if (mDrmHalAidl->initCheck() == NO_INIT || mDrmHalHidl->initCheck() == NO_INIT) return NO_INIT;
37 return mDrmHalHidl->initCheck();
Jeff Tinkera53d6552017-01-20 00:31:46 -080038}
39
Kyle Zhang6605add2022-01-13 17:51:23 +000040status_t DrmHal::isCryptoSchemeSupported(const uint8_t uuid[16], const String8& mimeType,
41 DrmPlugin::SecurityLevel securityLevel, bool* result) {
42 status_t statusResult;
43 statusResult = mDrmHalAidl->isCryptoSchemeSupported(uuid, mimeType, securityLevel, result);
44 if (*result) return statusResult;
45 return mDrmHalHidl->isCryptoSchemeSupported(uuid, mimeType, securityLevel, result);
Jeff Tinkera53d6552017-01-20 00:31:46 -080046}
47
Kyle Zhang6605add2022-01-13 17:51:23 +000048status_t DrmHal::createPlugin(const uint8_t uuid[16], const String8& appPackageName) {
49 status_t statusResult;
50 statusResult = mDrmHalAidl->createPlugin(uuid, appPackageName);
51 if (statusResult != OK) return mDrmHalHidl->createPlugin(uuid, appPackageName);
52 return statusResult;
Jeff Tinkera53d6552017-01-20 00:31:46 -080053}
54
55status_t DrmHal::destroyPlugin() {
Kyle Zhang6605add2022-01-13 17:51:23 +000056 status_t statusResult = mDrmHalAidl->destroyPlugin();
57 status_t statusResultHidl = mDrmHalHidl->destroyPlugin();
58 if (statusResult != OK) return statusResult;
59 return statusResultHidl;
Jeff Tinkera53d6552017-01-20 00:31:46 -080060}
61
Kyle Zhang6605add2022-01-13 17:51:23 +000062status_t DrmHal::openSession(DrmPlugin::SecurityLevel securityLevel, Vector<uint8_t>& sessionId) {
63 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->openSession(securityLevel, sessionId);
64 return mDrmHalHidl->openSession(securityLevel, sessionId);
Jeff Tinkera53d6552017-01-20 00:31:46 -080065}
66
Kyle Zhang6605add2022-01-13 17:51:23 +000067status_t DrmHal::closeSession(Vector<uint8_t> const& sessionId) {
68 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->closeSession(sessionId);
69 return mDrmHalHidl->closeSession(sessionId);
Jeff Tinkera53d6552017-01-20 00:31:46 -080070}
71
Kyle Zhang6605add2022-01-13 17:51:23 +000072status_t DrmHal::getKeyRequest(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& initData,
73 String8 const& mimeType, DrmPlugin::KeyType keyType,
74 KeyedVector<String8, String8> const& optionalParameters,
75 Vector<uint8_t>& request, String8& defaultUrl,
76 DrmPlugin::KeyRequestType* keyRequestType) {
77 if (mDrmHalAidl->initCheck() == OK)
78 return mDrmHalAidl->getKeyRequest(sessionId, initData, mimeType, keyType,
79 optionalParameters, request, defaultUrl, keyRequestType);
80 return mDrmHalHidl->getKeyRequest(sessionId, initData, mimeType, keyType, optionalParameters,
81 request, defaultUrl, keyRequestType);
Jeff Tinkerb8684f32018-12-12 08:41:31 -080082}
83
Kyle Zhang6605add2022-01-13 17:51:23 +000084status_t DrmHal::provideKeyResponse(Vector<uint8_t> const& sessionId,
85 Vector<uint8_t> const& response, Vector<uint8_t>& keySetId) {
86 if (mDrmHalAidl->initCheck() == OK)
87 return mDrmHalAidl->provideKeyResponse(sessionId, response, keySetId);
88 return mDrmHalHidl->provideKeyResponse(sessionId, response, keySetId);
Jeff Tinkerb8684f32018-12-12 08:41:31 -080089}
90
Kyle Zhang6605add2022-01-13 17:51:23 +000091status_t DrmHal::removeKeys(Vector<uint8_t> const& keySetId) {
92 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeKeys(keySetId);
93 return mDrmHalHidl->removeKeys(keySetId);
Jeff Tinkera53d6552017-01-20 00:31:46 -080094}
95
Kyle Zhang6605add2022-01-13 17:51:23 +000096status_t DrmHal::restoreKeys(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keySetId) {
97 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->restoreKeys(sessionId, keySetId);
98 return mDrmHalHidl->restoreKeys(sessionId, keySetId);
Jeff Tinkera53d6552017-01-20 00:31:46 -080099}
100
Kyle Zhang6605add2022-01-13 17:51:23 +0000101status_t DrmHal::queryKeyStatus(Vector<uint8_t> const& sessionId,
102 KeyedVector<String8, String8>& infoMap) const {
103 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->queryKeyStatus(sessionId, infoMap);
104 return mDrmHalHidl->queryKeyStatus(sessionId, infoMap);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800105}
106
Kyle Zhang6605add2022-01-13 17:51:23 +0000107status_t DrmHal::getProvisionRequest(String8 const& certType, String8 const& certAuthority,
108 Vector<uint8_t>& request, String8& defaultUrl) {
109 if (mDrmHalAidl->initCheck() == OK)
110 return mDrmHalAidl->getProvisionRequest(certType, certAuthority, request, defaultUrl);
111 return mDrmHalHidl->getProvisionRequest(certType, certAuthority, request, defaultUrl);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800112}
113
Kyle Zhang6605add2022-01-13 17:51:23 +0000114status_t DrmHal::provideProvisionResponse(Vector<uint8_t> const& response,
115 Vector<uint8_t>& certificate,
116 Vector<uint8_t>& wrappedKey) {
117 if (mDrmHalAidl->initCheck() == OK)
118 return mDrmHalAidl->provideProvisionResponse(response, certificate, wrappedKey);
119 return mDrmHalHidl->provideProvisionResponse(response, certificate, wrappedKey);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800120}
121
Kyle Zhang6605add2022-01-13 17:51:23 +0000122status_t DrmHal::getSecureStops(List<Vector<uint8_t>>& secureStops) {
123 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecureStops(secureStops);
124 return mDrmHalHidl->getSecureStops(secureStops);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800125}
126
Kyle Zhang6605add2022-01-13 17:51:23 +0000127status_t DrmHal::getSecureStopIds(List<Vector<uint8_t>>& secureStopIds) {
128 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecureStopIds(secureStopIds);
129 return mDrmHalHidl->getSecureStopIds(secureStopIds);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800130}
131
Kyle Zhang6605add2022-01-13 17:51:23 +0000132status_t DrmHal::getSecureStop(Vector<uint8_t> const& ssid, Vector<uint8_t>& secureStop) {
133 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecureStop(ssid, secureStop);
134 return mDrmHalHidl->getSecureStop(ssid, secureStop);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800135}
136
Kyle Zhang6605add2022-01-13 17:51:23 +0000137status_t DrmHal::releaseSecureStops(Vector<uint8_t> const& ssRelease) {
138 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->releaseSecureStops(ssRelease);
139 return mDrmHalHidl->releaseSecureStops(ssRelease);
Jeff Tinker15177d72018-01-25 12:57:55 -0800140}
141
Kyle Zhang6605add2022-01-13 17:51:23 +0000142status_t DrmHal::removeSecureStop(Vector<uint8_t> const& ssid) {
143 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeSecureStop(ssid);
144 return mDrmHalHidl->removeSecureStop(ssid);
Jeff Tinker15177d72018-01-25 12:57:55 -0800145}
146
147status_t DrmHal::removeAllSecureStops() {
Kyle Zhang6605add2022-01-13 17:51:23 +0000148 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeAllSecureStops();
149 return mDrmHalHidl->removeAllSecureStops();
Jeff Tinkera53d6552017-01-20 00:31:46 -0800150}
151
Kyle Zhang6605add2022-01-13 17:51:23 +0000152status_t DrmHal::getHdcpLevels(DrmPlugin::HdcpLevel* connectedLevel,
153 DrmPlugin::HdcpLevel* maxLevel) const {
154 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getHdcpLevels(connectedLevel, maxLevel);
155 return mDrmHalHidl->getHdcpLevels(connectedLevel, maxLevel);
Jeff Tinker6d998b62017-12-18 14:37:43 -0800156}
157
Kyle Zhang6605add2022-01-13 17:51:23 +0000158status_t DrmHal::getNumberOfSessions(uint32_t* currentSessions, uint32_t* maxSessions) const {
159 if (mDrmHalAidl->initCheck() == OK)
160 return mDrmHalAidl->getNumberOfSessions(currentSessions, maxSessions);
161 return mDrmHalHidl->getNumberOfSessions(currentSessions, maxSessions);
Jeff Tinker6d998b62017-12-18 14:37:43 -0800162}
163
Kyle Zhang6605add2022-01-13 17:51:23 +0000164status_t DrmHal::getSecurityLevel(Vector<uint8_t> const& sessionId,
165 DrmPlugin::SecurityLevel* level) const {
166 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getSecurityLevel(sessionId, level);
167 return mDrmHalHidl->getSecurityLevel(sessionId, level);
Jeff Tinker6d998b62017-12-18 14:37:43 -0800168}
169
Kyle Zhang6605add2022-01-13 17:51:23 +0000170status_t DrmHal::getOfflineLicenseKeySetIds(List<Vector<uint8_t>>& keySetIds) const {
171 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getOfflineLicenseKeySetIds(keySetIds);
172 return mDrmHalHidl->getOfflineLicenseKeySetIds(keySetIds);
Jeff Tinkerc8baaba2018-10-23 11:32:36 -0700173}
174
Kyle Zhang6605add2022-01-13 17:51:23 +0000175status_t DrmHal::removeOfflineLicense(Vector<uint8_t> const& keySetId) {
176 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->removeOfflineLicense(keySetId);
177 return mDrmHalHidl->removeOfflineLicense(keySetId);
Jeff Tinkerc8baaba2018-10-23 11:32:36 -0700178}
179
Kyle Zhang6605add2022-01-13 17:51:23 +0000180status_t DrmHal::getOfflineLicenseState(Vector<uint8_t> const& keySetId,
181 DrmPlugin::OfflineLicenseState* licenseState) const {
182 if (mDrmHalAidl->initCheck() == OK)
183 return mDrmHalAidl->getOfflineLicenseState(keySetId, licenseState);
184 return mDrmHalHidl->getOfflineLicenseState(keySetId, licenseState);
Jeff Tinkerc8baaba2018-10-23 11:32:36 -0700185}
186
Kyle Zhang6605add2022-01-13 17:51:23 +0000187status_t DrmHal::getPropertyString(String8 const& name, String8& value) const {
188 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getPropertyString(name, value);
189 return mDrmHalHidl->getPropertyString(name, value);
John W. Bruce33ecc4f2017-04-03 16:49:05 -0700190}
191
Kyle Zhang6605add2022-01-13 17:51:23 +0000192status_t DrmHal::getPropertyByteArray(String8 const& name, Vector<uint8_t>& value) const {
193 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getPropertyByteArray(name, value);
194 return mDrmHalHidl->getPropertyByteArray(name, value);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800195}
196
Kyle Zhang6605add2022-01-13 17:51:23 +0000197status_t DrmHal::setPropertyString(String8 const& name, String8 const& value) const {
198 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setPropertyString(name, value);
199 return mDrmHalHidl->setPropertyString(name, value);
John W. Bruce33ecc4f2017-04-03 16:49:05 -0700200}
201
Kyle Zhang6605add2022-01-13 17:51:23 +0000202status_t DrmHal::setPropertyByteArray(String8 const& name, Vector<uint8_t> const& value) const {
203 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setPropertyByteArray(name, value);
204 return mDrmHalHidl->setPropertyByteArray(name, value);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800205}
206
Kyle Zhang6605add2022-01-13 17:51:23 +0000207status_t DrmHal::getMetrics(const sp<IDrmMetricsConsumer>& consumer) {
208 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getMetrics(consumer);
209 return mDrmHalHidl->getMetrics(consumer);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800210}
211
Kyle Zhang6605add2022-01-13 17:51:23 +0000212status_t DrmHal::setCipherAlgorithm(Vector<uint8_t> const& sessionId, String8 const& algorithm) {
213 if (mDrmHalAidl->initCheck() == OK)
214 return mDrmHalAidl->setCipherAlgorithm(sessionId, algorithm);
215 return mDrmHalHidl->setCipherAlgorithm(sessionId, algorithm);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800216}
217
Kyle Zhang6605add2022-01-13 17:51:23 +0000218status_t DrmHal::setMacAlgorithm(Vector<uint8_t> const& sessionId, String8 const& algorithm) {
219 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setMacAlgorithm(sessionId, algorithm);
220 return mDrmHalHidl->setMacAlgorithm(sessionId, algorithm);
Adam Stoneab394d12017-12-22 12:34:20 -0800221}
Jeff Tinkera53d6552017-01-20 00:31:46 -0800222
Kyle Zhang6605add2022-01-13 17:51:23 +0000223status_t DrmHal::encrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
224 Vector<uint8_t> const& input, Vector<uint8_t> const& iv,
225 Vector<uint8_t>& output) {
226 if (mDrmHalAidl->initCheck() == OK)
227 return mDrmHalAidl->encrypt(sessionId, keyId, input, iv, output);
228 return mDrmHalHidl->encrypt(sessionId, keyId, input, iv, output);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800229}
230
Kyle Zhang6605add2022-01-13 17:51:23 +0000231status_t DrmHal::decrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
232 Vector<uint8_t> const& input, Vector<uint8_t> const& iv,
233 Vector<uint8_t>& output) {
234 if (mDrmHalAidl->initCheck() == OK)
235 return mDrmHalAidl->decrypt(sessionId, keyId, input, iv, output);
236 return mDrmHalHidl->decrypt(sessionId, keyId, input, iv, output);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800237}
238
Kyle Zhang6605add2022-01-13 17:51:23 +0000239status_t DrmHal::sign(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
240 Vector<uint8_t> const& message, Vector<uint8_t>& signature) {
241 if (mDrmHalAidl->initCheck() == OK)
242 return mDrmHalAidl->sign(sessionId, keyId, message, signature);
243 return mDrmHalHidl->sign(sessionId, keyId, message, signature);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800244}
245
Kyle Zhang6605add2022-01-13 17:51:23 +0000246status_t DrmHal::verify(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
247 Vector<uint8_t> const& message, Vector<uint8_t> const& signature,
248 bool& match) {
249 if (mDrmHalAidl->initCheck() == OK)
250 return mDrmHalAidl->verify(sessionId, keyId, message, signature, match);
251 return mDrmHalHidl->verify(sessionId, keyId, message, signature, match);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800252}
253
Kyle Zhang6605add2022-01-13 17:51:23 +0000254status_t DrmHal::signRSA(Vector<uint8_t> const& sessionId, String8 const& algorithm,
255 Vector<uint8_t> const& message, Vector<uint8_t> const& wrappedKey,
256 Vector<uint8_t>& signature) {
257 if (mDrmHalAidl->initCheck() == OK)
258 return mDrmHalAidl->signRSA(sessionId, algorithm, message, wrappedKey, signature);
259 return mDrmHalHidl->signRSA(sessionId, algorithm, message, wrappedKey, signature);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800260}
261
Kyle Zhang6605add2022-01-13 17:51:23 +0000262status_t DrmHal::setListener(const sp<IDrmClient>& listener) {
263 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setListener(listener);
264 return mDrmHalHidl->setListener(listener);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800265}
266
Kyle Zhang6605add2022-01-13 17:51:23 +0000267status_t DrmHal::requiresSecureDecoder(const char* mime, bool* required) const {
268 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->requiresSecureDecoder(mime, required);
269 return mDrmHalHidl->requiresSecureDecoder(mime, required);
Jeff Tinkera53d6552017-01-20 00:31:46 -0800270}
271
Kyle Zhang6605add2022-01-13 17:51:23 +0000272status_t DrmHal::requiresSecureDecoder(const char* mime, DrmPlugin::SecurityLevel securityLevel,
273 bool* required) const {
274 if (mDrmHalAidl->initCheck() == OK)
275 return mDrmHalAidl->requiresSecureDecoder(mime, securityLevel, required);
276 return mDrmHalHidl->requiresSecureDecoder(mime, securityLevel, required);
Adam Stonefb679e32018-02-07 10:25:48 -0800277}
278
Kyle Zhang6605add2022-01-13 17:51:23 +0000279status_t DrmHal::setPlaybackId(Vector<uint8_t> const& sessionId, const char* playbackId) {
280 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->setPlaybackId(sessionId, playbackId);
281 return mDrmHalHidl->setPlaybackId(sessionId, playbackId);
John W. Bruce33ecc4f2017-04-03 16:49:05 -0700282}
283
Kyle Zhang6605add2022-01-13 17:51:23 +0000284status_t DrmHal::getLogMessages(Vector<drm::V1_4::LogMessage>& logs) const {
285 if (mDrmHalAidl->initCheck() == OK) return mDrmHalAidl->getLogMessages(logs);
286 return mDrmHalHidl->getLogMessages(logs);
Robert Shih9afca952021-02-12 01:36:06 -0800287}
288
Jeff Tinkera53d6552017-01-20 00:31:46 -0800289} // namespace android