1b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker/* 2b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * Copyright (C) 2016 The Android Open Source Project 3b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * 4b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * Licensed under the Apache License, Version 2.0 (the "License"); 5b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * you may not use this file except in compliance with the License. 6b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * You may obtain a copy of the License at 7b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * 8b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * http://www.apache.org/licenses/LICENSE-2.0 9b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * 10b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * Unless required by applicable law or agreed to in writing, software 11b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * distributed under the License is distributed on an "AS IS" BASIS, 12b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * See the License for the specific language governing permissions and 14b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker * limitations under the License. 15b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker */ 16b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 17da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinker#ifndef ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H 18da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinker#define ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H 19b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 20da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinker#include <android/hardware/drm/1.0/IDrmPlugin.h> 21da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinker#include <android/hardware/drm/1.0/IDrmPluginListener.h> 22b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker#include <hidl/Status.h> 23da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinker#include <media/drm/DrmAPI.h> 24b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 25b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkernamespace android { 26b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkernamespace hardware { 27b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkernamespace drm { 28b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkernamespace V1_0 { 29b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkernamespace implementation { 30b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 31da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::EventType; 32da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::IDrmPlugin; 33da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::IDrmPluginListener; 34da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::KeyRequestType; 35da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::KeyStatus; 36da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::KeyType; 37da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::KeyValue; 38da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinkerusing ::android::hardware::drm::V1_0::SecureStop; 39b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerusing ::android::hardware::hidl_array; 40b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerusing ::android::hardware::hidl_string; 41b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerusing ::android::hardware::hidl_vec; 42b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerusing ::android::hardware::Return; 43b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerusing ::android::hardware::Void; 44b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerusing ::android::sp; 45b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 46b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerstruct DrmPlugin : public IDrmPlugin, android::DrmPluginListener { 47b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 48b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker DrmPlugin(android::DrmPlugin *plugin) : mLegacyPlugin(plugin) {} 495c459ea86d3c131170168a82f2107876370dc98cJeff Tinker ~DrmPlugin() {delete mLegacyPlugin;} 50b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 51da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinker // Methods from ::android::hardware::drm::V1_0::IDrmPlugin follow. 52b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 53b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> openSession(openSession_cb _hidl_cb) override; 54b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 55b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> closeSession(const hidl_vec<uint8_t>& sessionId) override; 56b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 57b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> getKeyRequest(const hidl_vec<uint8_t>& scope, 58b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& initData, const hidl_string& mimeType, 59b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker KeyType keyType, const hidl_vec<KeyValue>& optionalParameters, 60b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker getKeyRequest_cb _hidl_cb) override; 61b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 62b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> provideKeyResponse(const hidl_vec<uint8_t>& scope, 63b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& response, provideKeyResponse_cb _hidl_cb) 64b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker override; 65b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 66b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> removeKeys(const hidl_vec<uint8_t>& sessionId) override; 67b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 68b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> restoreKeys(const hidl_vec<uint8_t>& sessionId, 69b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& keySetId) override; 70b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 71b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> queryKeyStatus(const hidl_vec<uint8_t>& sessionId, 72b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker queryKeyStatus_cb _hidl_cb) override; 73b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 74b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> getProvisionRequest(const hidl_string& certificateType, 75b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_string& certificateAuthority, 76b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker getProvisionRequest_cb _hidl_cb) override; 77b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 78b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> provideProvisionResponse(const hidl_vec<uint8_t>& response, 79b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker provideProvisionResponse_cb _hidl_cb) override; 80b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 81b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> getSecureStops(getSecureStops_cb _hidl_cb) override; 82b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 83b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> getSecureStop(const hidl_vec<uint8_t>& secureStopId, 84b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker getSecureStop_cb _hidl_cb) override; 85b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 86b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> releaseAllSecureStops() override; 87b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 88b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> releaseSecureStop(const hidl_vec<uint8_t>& secureStopId) 89b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker override; 90b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 91b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> getPropertyString(const hidl_string& propertyName, 92b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker getPropertyString_cb _hidl_cb) override; 93b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 94b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> getPropertyByteArray(const hidl_string& propertyName, 95b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker getPropertyByteArray_cb _hidl_cb) override; 96b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 97b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> setPropertyString(const hidl_string& propertyName, 98b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_string& value) override; 99b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 100b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> setPropertyByteArray(const hidl_string& propertyName, 101b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& value) override; 102b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 103b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> setCipherAlgorithm(const hidl_vec<uint8_t>& sessionId, 104b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_string& algorithm) override; 105b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 106b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<Status> setMacAlgorithm(const hidl_vec<uint8_t>& sessionId, 107b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_string& algorithm) override; 108b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 109b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> encrypt(const hidl_vec<uint8_t>& sessionId, 110b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& input, 111b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& iv, encrypt_cb _hidl_cb) override; 112b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 113b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> decrypt(const hidl_vec<uint8_t>& sessionId, 114b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& input, 115b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& iv, decrypt_cb _hidl_cb) override; 116b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 117b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> sign(const hidl_vec<uint8_t>& sessionId, 118b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& message, 119b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker sign_cb _hidl_cb) override; 120b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 121b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> verify(const hidl_vec<uint8_t>& sessionId, 122b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& message, 123b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& signature, verify_cb _hidl_cb) override; 124b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 125b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> signRSA(const hidl_vec<uint8_t>& sessionId, 126b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_string& algorithm, const hidl_vec<uint8_t>& message, 127b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& wrappedkey, signRSA_cb _hidl_cb) override; 128b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 129b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> setListener(const sp<IDrmPluginListener>& listener) override; 130b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 131b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> sendEvent(EventType eventType, 132b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<uint8_t>& sessionId, const hidl_vec<uint8_t>& data) 133b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker override; 134b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 135b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> sendExpirationUpdate(const hidl_vec<uint8_t>& sessionId, 136b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker int64_t expiryTimeInMS) override; 137b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 138b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Return<void> sendKeysChange(const hidl_vec<uint8_t>& sessionId, 139b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker const hidl_vec<KeyStatus>& keyStatusList, bool hasNewUsableKey) 140b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker override; 141b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 142b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker // Methods from android::DrmPluginListener follow 143b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 144b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker virtual void sendEvent(android::DrmPlugin::EventType eventType, int extra, 145b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Vector<uint8_t> const *sessionId, Vector<uint8_t> const *data); 146b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 147b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker virtual void sendExpirationUpdate(Vector<uint8_t> const *sessionId, 148b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker int64_t expiryTimeInMS); 149b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 150b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker virtual void sendKeysChange(Vector<uint8_t> const *sessionId, 151b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker Vector<android::DrmPlugin::KeyStatus> const *keyStatusList, 152b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker bool hasNewUsableKey); 153b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 154b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinkerprivate: 155b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker android::DrmPlugin *mLegacyPlugin; 1565c459ea86d3c131170168a82f2107876370dc98cJeff Tinker sp<IDrmPluginListener> mListener; 157b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 158b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker DrmPlugin() = delete; 159b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker DrmPlugin(const DrmPlugin &) = delete; 160b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker void operator=(const DrmPlugin &) = delete; 161b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker}; 162b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 163b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker} // namespace implementation 164b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker} // namespace V1_0 165b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker} // namespace drm 166b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker} // namespace hardware 167b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker} // namespace android 168b075caa3b95c0c980e6118fb78878b87ce21a6a3Jeff Tinker 169da002fe6415cee1e37cc3131aafb79ddb53f01e5Jeff Tinker#endif // ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H 170