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