1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/*
2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2013 The Android Open Source Project
3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License");
5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License.
6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at
7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *      http://www.apache.org/licenses/LICENSE-2.0
9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software
11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS,
12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and
14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License.
15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */
16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <binder/IInterface.h>
18637b7855829920114a8863b93fe52203b7471eeaAdam Stone#include <binder/PersistableBundle.h>
19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/stagefright/foundation/ABase.h>
20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/drm/DrmAPI.h>
21ab394d13bab3a84f23677357576cee7a6f0c7899Adam Stone#include <media/MediaAnalyticsItem.h>
227d2c6e8be2c9a4f3c1364d243856a345f17f851eJeff Tinker#include <mediadrm/IDrmClient.h>
23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef ANDROID_IDRM_H_
25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define ANDROID_IDRM_H_
27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android {
29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct AString;
31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct IDrm : public IInterface {
33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    DECLARE_META_INTERFACE(Drm);
34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t initCheck() const = 0;
36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) = 0;
38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t createPlugin(const uint8_t uuid[16],
40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                  const String8 &appPackageName) = 0;
41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t destroyPlugin() = 0;
43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
4441d279a7f3bc55a63b510d4dce07e18964cda152Jeff Tinker    virtual status_t openSession(DrmPlugin::SecurityLevel securityLevel,
4541d279a7f3bc55a63b510d4dce07e18964cda152Jeff Tinker            Vector<uint8_t> &sessionId) = 0;
46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t closeSession(Vector<uint8_t> const &sessionId) = 0;
48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t
50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        getKeyRequest(Vector<uint8_t> const &sessionId,
51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                      Vector<uint8_t> const &initData,
52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                      String8 const &mimeType, DrmPlugin::KeyType keyType,
53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                      KeyedVector<String8, String8> const &optionalParameters,
54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                      Vector<uint8_t> &request, String8 &defaultUrl,
55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                      DrmPlugin::KeyRequestType *keyRequestType) = 0;
56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t provideKeyResponse(Vector<uint8_t> const &sessionId,
58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                        Vector<uint8_t> const &response,
59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                        Vector<uint8_t> &keySetId) = 0;
60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t removeKeys(Vector<uint8_t> const &keySetId) = 0;
62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t restoreKeys(Vector<uint8_t> const &sessionId,
64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                 Vector<uint8_t> const &keySetId) = 0;
65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t queryKeyStatus(Vector<uint8_t> const &sessionId,
67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                    KeyedVector<String8, String8> &infoMap) const = 0;
68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t getProvisionRequest(String8 const &certType,
70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                         String8 const &certAuthority,
71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                         Vector<uint8_t> &request,
72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                         String8 &defaulUrl) = 0;
73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t provideProvisionResponse(Vector<uint8_t> const &response,
75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                              Vector<uint8_t> &certificate,
76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                              Vector<uint8_t> &wrappedKey) = 0;
77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0;
7915177d7eab8c2300b4f1d577267e528bd7e4eedcJeff Tinker    virtual status_t getSecureStopIds(List<Vector<uint8_t> > &secureStopIds) = 0;
80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) = 0;
81e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
82e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0;
8315177d7eab8c2300b4f1d577267e528bd7e4eedcJeff Tinker    virtual status_t removeSecureStop(Vector<uint8_t> const &ssid) = 0;
8415177d7eab8c2300b4f1d577267e528bd7e4eedcJeff Tinker    virtual status_t removeAllSecureStops() = 0;
85e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
866d998b67be330843f633a563c23c606593060165Jeff Tinker    virtual status_t getHdcpLevels(DrmPlugin::HdcpLevel *connectedLevel,
876d998b67be330843f633a563c23c606593060165Jeff Tinker            DrmPlugin::HdcpLevel *maxLevel)
886d998b67be330843f633a563c23c606593060165Jeff Tinker            const = 0;
896d998b67be330843f633a563c23c606593060165Jeff Tinker    virtual status_t getNumberOfSessions(uint32_t *currentSessions,
906d998b67be330843f633a563c23c606593060165Jeff Tinker            uint32_t *maxSessions) const = 0;
916d998b67be330843f633a563c23c606593060165Jeff Tinker    virtual status_t getSecurityLevel(Vector<uint8_t> const &sessionId,
926d998b67be330843f633a563c23c606593060165Jeff Tinker            DrmPlugin::SecurityLevel *level) const = 0;
936d998b67be330843f633a563c23c606593060165Jeff Tinker
94e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t getPropertyString(String8 const &name, String8 &value) const = 0;
95e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t getPropertyByteArray(String8 const &name,
96e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                          Vector<uint8_t> &value) const = 0;
97e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t setPropertyString(String8 const &name,
98e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                       String8 const &value ) const = 0;
99e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t setPropertyByteArray(String8 const &name,
100e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                          Vector<uint8_t> const &value) const = 0;
101e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
102637b7855829920114a8863b93fe52203b7471eeaAdam Stone    virtual status_t getMetrics(os::PersistableBundle *metrics) = 0;
103ab394d13bab3a84f23677357576cee7a6f0c7899Adam Stone
104e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t setCipherAlgorithm(Vector<uint8_t> const &sessionId,
105e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                        String8 const &algorithm) = 0;
106e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
107e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t setMacAlgorithm(Vector<uint8_t> const &sessionId,
108e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                     String8 const &algorithm) = 0;
109e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
110e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t encrypt(Vector<uint8_t> const &sessionId,
111e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &keyId,
112e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &input,
113e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &iv,
114e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> &output) = 0;
115e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
116e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t decrypt(Vector<uint8_t> const &sessionId,
117e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &keyId,
118e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &input,
119e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &iv,
120e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> &output) = 0;
121e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
122e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t sign(Vector<uint8_t> const &sessionId,
123e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                          Vector<uint8_t> const &keyId,
124e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                          Vector<uint8_t> const &message,
125e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                          Vector<uint8_t> &signature) = 0;
126e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
127e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t verify(Vector<uint8_t> const &sessionId,
128e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                            Vector<uint8_t> const &keyId,
129e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                            Vector<uint8_t> const &message,
130e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                            Vector<uint8_t> const &signature,
131e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                            bool &match) = 0;
132e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
133e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t signRSA(Vector<uint8_t> const &sessionId,
134e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             String8 const &algorithm,
135e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &message,
136e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> const &wrappedKey,
137e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                             Vector<uint8_t> &signature) = 0;
138e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
139e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t setListener(const sp<IDrmClient>& listener) = 0;
140e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
141e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate:
142e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    DISALLOW_EVIL_CONSTRUCTORS(IDrm);
143e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
144e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
145e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct BnDrm : public BnInterface<IDrm> {
146e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t onTransact(
147e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman            uint32_t code, const Parcel &data, Parcel *reply,
148e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman            uint32_t flags = 0);
149e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate:
150e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    void readVector(const Parcel &data, Vector<uint8_t> &vector) const;
151e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    void writeVector(Parcel *reply, Vector<uint8_t> const &vector) const;
152e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
153e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
154e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}  // namespace android
155e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
156e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // ANDROID_IDRM_H_
157