blob: dce6c0c62aae5c7fa3e074309b4ad46d4a2204bb [file] [log] [blame]
Jeff Tinkerb075caa2016-12-06 23:15:20 -08001/*
2 * Copyright (C) 2016 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
Jeff Tinkerda002fe2017-01-19 14:41:11 -080017#ifndef ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H
18#define ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H
Jeff Tinkerb075caa2016-12-06 23:15:20 -080019
Jeff Tinkerda002fe2017-01-19 14:41:11 -080020#include <android/hardware/drm/1.0/IDrmPlugin.h>
21#include <android/hardware/drm/1.0/IDrmPluginListener.h>
Jeff Tinkerb075caa2016-12-06 23:15:20 -080022#include <hidl/Status.h>
Jeff Tinkerda002fe2017-01-19 14:41:11 -080023#include <media/drm/DrmAPI.h>
Jeff Tinkerb075caa2016-12-06 23:15:20 -080024
25namespace android {
26namespace hardware {
27namespace drm {
Jeff Tinkerb075caa2016-12-06 23:15:20 -080028namespace V1_0 {
29namespace implementation {
30
Jeff Tinkerda002fe2017-01-19 14:41:11 -080031using ::android::hardware::drm::V1_0::EventType;
32using ::android::hardware::drm::V1_0::IDrmPlugin;
33using ::android::hardware::drm::V1_0::IDrmPluginListener;
34using ::android::hardware::drm::V1_0::KeyRequestType;
35using ::android::hardware::drm::V1_0::KeyStatus;
36using ::android::hardware::drm::V1_0::KeyType;
37using ::android::hardware::drm::V1_0::KeyValue;
38using ::android::hardware::drm::V1_0::SecureStop;
Jeff Tinkerb075caa2016-12-06 23:15:20 -080039using ::android::hardware::hidl_array;
40using ::android::hardware::hidl_string;
41using ::android::hardware::hidl_vec;
42using ::android::hardware::Return;
43using ::android::hardware::Void;
44using ::android::sp;
45
46struct DrmPlugin : public IDrmPlugin, android::DrmPluginListener {
47
48 DrmPlugin(android::DrmPlugin *plugin) : mLegacyPlugin(plugin) {}
Jeff Tinkere3b6ae12017-05-16 18:21:39 +000049 ~DrmPlugin() {delete mLegacyPlugin;}
Jeff Tinkerb075caa2016-12-06 23:15:20 -080050
Jeff Tinkerda002fe2017-01-19 14:41:11 -080051 // Methods from ::android::hardware::drm::V1_0::IDrmPlugin follow.
Jeff Tinkerb075caa2016-12-06 23:15:20 -080052
53 Return<void> openSession(openSession_cb _hidl_cb) override;
54
55 Return<Status> closeSession(const hidl_vec<uint8_t>& sessionId) override;
56
57 Return<void> getKeyRequest(const hidl_vec<uint8_t>& scope,
58 const hidl_vec<uint8_t>& initData, const hidl_string& mimeType,
59 KeyType keyType, const hidl_vec<KeyValue>& optionalParameters,
60 getKeyRequest_cb _hidl_cb) override;
61
62 Return<void> provideKeyResponse(const hidl_vec<uint8_t>& scope,
63 const hidl_vec<uint8_t>& response, provideKeyResponse_cb _hidl_cb)
64 override;
65
66 Return<Status> removeKeys(const hidl_vec<uint8_t>& sessionId) override;
67
68 Return<Status> restoreKeys(const hidl_vec<uint8_t>& sessionId,
69 const hidl_vec<uint8_t>& keySetId) override;
70
71 Return<void> queryKeyStatus(const hidl_vec<uint8_t>& sessionId,
72 queryKeyStatus_cb _hidl_cb) override;
73
74 Return<void> getProvisionRequest(const hidl_string& certificateType,
75 const hidl_string& certificateAuthority,
76 getProvisionRequest_cb _hidl_cb) override;
77
78 Return<void> provideProvisionResponse(const hidl_vec<uint8_t>& response,
79 provideProvisionResponse_cb _hidl_cb) override;
80
81 Return<void> getSecureStops(getSecureStops_cb _hidl_cb) override;
82
83 Return<void> getSecureStop(const hidl_vec<uint8_t>& secureStopId,
84 getSecureStop_cb _hidl_cb) override;
85
86 Return<Status> releaseAllSecureStops() override;
87
88 Return<Status> releaseSecureStop(const hidl_vec<uint8_t>& secureStopId)
89 override;
90
91 Return<void> getPropertyString(const hidl_string& propertyName,
92 getPropertyString_cb _hidl_cb) override;
93
94 Return<void> getPropertyByteArray(const hidl_string& propertyName,
95 getPropertyByteArray_cb _hidl_cb) override;
96
97 Return<Status> setPropertyString(const hidl_string& propertyName,
98 const hidl_string& value) override;
99
100 Return<Status> setPropertyByteArray(const hidl_string& propertyName,
101 const hidl_vec<uint8_t>& value) override;
102
103 Return<Status> setCipherAlgorithm(const hidl_vec<uint8_t>& sessionId,
104 const hidl_string& algorithm) override;
105
106 Return<Status> setMacAlgorithm(const hidl_vec<uint8_t>& sessionId,
107 const hidl_string& algorithm) override;
108
109 Return<void> encrypt(const hidl_vec<uint8_t>& sessionId,
110 const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& input,
111 const hidl_vec<uint8_t>& iv, encrypt_cb _hidl_cb) override;
112
113 Return<void> decrypt(const hidl_vec<uint8_t>& sessionId,
114 const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& input,
115 const hidl_vec<uint8_t>& iv, decrypt_cb _hidl_cb) override;
116
117 Return<void> sign(const hidl_vec<uint8_t>& sessionId,
118 const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& message,
119 sign_cb _hidl_cb) override;
120
121 Return<void> verify(const hidl_vec<uint8_t>& sessionId,
122 const hidl_vec<uint8_t>& keyId, const hidl_vec<uint8_t>& message,
123 const hidl_vec<uint8_t>& signature, verify_cb _hidl_cb) override;
124
125 Return<void> signRSA(const hidl_vec<uint8_t>& sessionId,
126 const hidl_string& algorithm, const hidl_vec<uint8_t>& message,
127 const hidl_vec<uint8_t>& wrappedkey, signRSA_cb _hidl_cb) override;
128
129 Return<void> setListener(const sp<IDrmPluginListener>& listener) override;
130
131 Return<void> sendEvent(EventType eventType,
132 const hidl_vec<uint8_t>& sessionId, const hidl_vec<uint8_t>& data)
133 override;
134
135 Return<void> sendExpirationUpdate(const hidl_vec<uint8_t>& sessionId,
136 int64_t expiryTimeInMS) override;
137
138 Return<void> sendKeysChange(const hidl_vec<uint8_t>& sessionId,
139 const hidl_vec<KeyStatus>& keyStatusList, bool hasNewUsableKey)
140 override;
141
142 // Methods from android::DrmPluginListener follow
143
144 virtual void sendEvent(android::DrmPlugin::EventType eventType, int extra,
145 Vector<uint8_t> const *sessionId, Vector<uint8_t> const *data);
146
147 virtual void sendExpirationUpdate(Vector<uint8_t> const *sessionId,
148 int64_t expiryTimeInMS);
149
150 virtual void sendKeysChange(Vector<uint8_t> const *sessionId,
151 Vector<android::DrmPlugin::KeyStatus> const *keyStatusList,
152 bool hasNewUsableKey);
153
154private:
155 android::DrmPlugin *mLegacyPlugin;
Jeff Tinkere3b6ae12017-05-16 18:21:39 +0000156 sp<IDrmPluginListener> mListener;
Jeff Tinkerb075caa2016-12-06 23:15:20 -0800157
158 DrmPlugin() = delete;
159 DrmPlugin(const DrmPlugin &) = delete;
160 void operator=(const DrmPlugin &) = delete;
161};
162
163} // namespace implementation
164} // namespace V1_0
165} // namespace drm
Jeff Tinkerb075caa2016-12-06 23:15:20 -0800166} // namespace hardware
167} // namespace android
168
Jeff Tinkerda002fe2017-01-19 14:41:11 -0800169#endif // ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H