1441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker/*
2441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * Copyright (C) 2013 The Android Open Source Project
3441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker *
4441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * Licensed under the Apache License, Version 2.0 (the "License");
5441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * you may not use this file except in compliance with the License.
6441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * You may obtain a copy of the License at
7441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker *
8441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker *      http://www.apache.org/licenses/LICENSE-2.0
9441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker *
10441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * Unless required by applicable law or agreed to in writing, software
11441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * distributed under the License is distributed on an "AS IS" BASIS,
12441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * See the License for the specific language governing permissions and
14441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * limitations under the License.
15441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker */
16441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
17441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#include <binder/IInterface.h>
18441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#include <media/stagefright/foundation/ABase.h>
19441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#include <media/drm/DrmAPI.h>
20c0d5f1f8405de861ed6f1725f26cd6601e7103abJeff Tinker#include <media/IDrmClient.h>
21441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
22441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#ifndef ANDROID_IDRM_H_
23441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
24441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#define ANDROID_IDRM_H_
25441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
26441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkernamespace android {
27441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
28441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkerstruct AString;
29441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
30441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkerstruct IDrm : public IInterface {
31441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    DECLARE_META_INTERFACE(Drm);
32441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
33441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t initCheck() const = 0;
34441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
359cf69e0fc110f17c28e988ed0f9bf91abfaf710dJeff Tinker    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) = 0;
36441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
37441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t createPlugin(const uint8_t uuid[16]) = 0;
38441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
39441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t destroyPlugin() = 0;
40441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
41441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t openSession(Vector<uint8_t> &sessionId) = 0;
42441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
43441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t closeSession(Vector<uint8_t> const &sessionId) = 0;
44441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
45441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t
464c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker        getKeyRequest(Vector<uint8_t> const &sessionId,
474c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                      Vector<uint8_t> const &initData,
484c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                      String8 const &mimeType, DrmPlugin::KeyType keyType,
494c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                      KeyedVector<String8, String8> const &optionalParameters,
504c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                      Vector<uint8_t> &request, String8 &defaultUrl) = 0;
51441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
524c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t provideKeyResponse(Vector<uint8_t> const &sessionId,
534c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                        Vector<uint8_t> const &response,
544c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                        Vector<uint8_t> &keySetId) = 0;
55441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
564c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t removeKeys(Vector<uint8_t> const &keySetId) = 0;
57441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
584c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t restoreKeys(Vector<uint8_t> const &sessionId,
594c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                 Vector<uint8_t> const &keySetId) = 0;
604c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
614c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t queryKeyStatus(Vector<uint8_t> const &sessionId,
624c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                    KeyedVector<String8, String8> &infoMap) const = 0;
63441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
6468d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker    virtual status_t getProvisionRequest(String8 const &certType,
6568d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                                         String8 const &certAuthority,
6668d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                                         Vector<uint8_t> &request,
67441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker                                         String8 &defaulUrl) = 0;
68441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
6968d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker    virtual status_t provideProvisionResponse(Vector<uint8_t> const &response,
7068d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                                              Vector<uint8_t> &certificate,
7168d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                                              Vector<uint8_t> &wrappedKey) = 0;
72441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
7368b15554f6dca3b056eac517fe5fa2fd4ee80a33Jeff Tinker    virtual status_t unprovisionDevice() = 0;
7468b15554f6dca3b056eac517fe5fa2fd4ee80a33Jeff Tinker
75441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0;
763c1285e8f86bd497e14c14fb6df7b42072ef52bdJeff Tinker    virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) = 0;
77441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
78441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0;
793c1285e8f86bd497e14c14fb6df7b42072ef52bdJeff Tinker    virtual status_t releaseAllSecureStops() = 0;
80441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
814c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t getPropertyString(String8 const &name, String8 &value) const = 0;
82441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t getPropertyByteArray(String8 const &name,
834c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                          Vector<uint8_t> &value) const = 0;
84441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t setPropertyString(String8 const &name,
85441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker                                       String8 const &value ) const = 0;
86441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t setPropertyByteArray(String8 const &name,
874c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                          Vector<uint8_t> const &value) const = 0;
884c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
894c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t setCipherAlgorithm(Vector<uint8_t> const &sessionId,
904c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                        String8 const &algorithm) = 0;
914c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
924c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t setMacAlgorithm(Vector<uint8_t> const &sessionId,
934c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                     String8 const &algorithm) = 0;
944c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
954c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t encrypt(Vector<uint8_t> const &sessionId,
964c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &keyId,
974c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &input,
984c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &iv,
994c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> &output) = 0;
1004c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
1014c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t decrypt(Vector<uint8_t> const &sessionId,
1024c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &keyId,
1034c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &input,
1044c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &iv,
1054c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> &output) = 0;
1064c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
1074c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t sign(Vector<uint8_t> const &sessionId,
1084c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                          Vector<uint8_t> const &keyId,
1094c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                          Vector<uint8_t> const &message,
1104c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                          Vector<uint8_t> &signature) = 0;
1114c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
1124c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t verify(Vector<uint8_t> const &sessionId,
1134c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            Vector<uint8_t> const &keyId,
1144c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            Vector<uint8_t> const &message,
1154c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            Vector<uint8_t> const &signature,
1164c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            bool &match) = 0;
117441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
11868d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker    virtual status_t signRSA(Vector<uint8_t> const &sessionId,
11968d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             String8 const &algorithm,
12068d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             Vector<uint8_t> const &message,
12168d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             Vector<uint8_t> const &wrappedKey,
12268d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             Vector<uint8_t> &signature) = 0;
12368d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker
124c0d5f1f8405de861ed6f1725f26cd6601e7103abJeff Tinker    virtual status_t setListener(const sp<IDrmClient>& listener) = 0;
125c0d5f1f8405de861ed6f1725f26cd6601e7103abJeff Tinker
126441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkerprivate:
127441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    DISALLOW_EVIL_CONSTRUCTORS(IDrm);
128441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker};
129441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
130441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkerstruct BnDrm : public BnInterface<IDrm> {
131441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t onTransact(
132441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker            uint32_t code, const Parcel &data, Parcel *reply,
133441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker            uint32_t flags = 0);
1344c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinkerprivate:
1354c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    void readVector(const Parcel &data, Vector<uint8_t> &vector) const;
1364c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    void writeVector(Parcel *reply, Vector<uint8_t> const &vector) const;
137441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker};
138441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
139441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker}  // namespace android
140441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
141441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#endif // ANDROID_IDRM_H_
142