IDrm.h revision 68b15554f6dca3b056eac517fe5fa2fd4ee80a33
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;
76441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
77441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0;
78441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
794c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t getPropertyString(String8 const &name, String8 &value) const = 0;
80441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t getPropertyByteArray(String8 const &name,
814c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                          Vector<uint8_t> &value) const = 0;
82441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t setPropertyString(String8 const &name,
83441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker                                       String8 const &value ) const = 0;
84441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t setPropertyByteArray(String8 const &name,
854c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                          Vector<uint8_t> const &value) const = 0;
864c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
874c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t setCipherAlgorithm(Vector<uint8_t> const &sessionId,
884c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                        String8 const &algorithm) = 0;
894c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
904c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t setMacAlgorithm(Vector<uint8_t> const &sessionId,
914c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                                     String8 const &algorithm) = 0;
924c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
934c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t encrypt(Vector<uint8_t> const &sessionId,
944c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &keyId,
954c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &input,
964c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &iv,
974c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> &output) = 0;
984c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
994c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t decrypt(Vector<uint8_t> const &sessionId,
1004c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &keyId,
1014c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &input,
1024c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> const &iv,
1034c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                             Vector<uint8_t> &output) = 0;
1044c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
1054c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t sign(Vector<uint8_t> const &sessionId,
1064c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                          Vector<uint8_t> const &keyId,
1074c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                          Vector<uint8_t> const &message,
1084c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                          Vector<uint8_t> &signature) = 0;
1094c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker
1104c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    virtual status_t verify(Vector<uint8_t> const &sessionId,
1114c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            Vector<uint8_t> const &keyId,
1124c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            Vector<uint8_t> const &message,
1134c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            Vector<uint8_t> const &signature,
1144c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker                            bool &match) = 0;
115441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
11668d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker    virtual status_t signRSA(Vector<uint8_t> const &sessionId,
11768d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             String8 const &algorithm,
11868d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             Vector<uint8_t> const &message,
11968d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             Vector<uint8_t> const &wrappedKey,
12068d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker                             Vector<uint8_t> &signature) = 0;
12168d9d71a792deed75d32fe13febc07c9c12c8449Jeff Tinker
122c0d5f1f8405de861ed6f1725f26cd6601e7103abJeff Tinker    virtual status_t setListener(const sp<IDrmClient>& listener) = 0;
123c0d5f1f8405de861ed6f1725f26cd6601e7103abJeff Tinker
124441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkerprivate:
125441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    DISALLOW_EVIL_CONSTRUCTORS(IDrm);
126441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker};
127441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
128441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkerstruct BnDrm : public BnInterface<IDrm> {
129441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker    virtual status_t onTransact(
130441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker            uint32_t code, const Parcel &data, Parcel *reply,
131441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker            uint32_t flags = 0);
1324c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinkerprivate:
1334c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    void readVector(const Parcel &data, Vector<uint8_t> &vector) const;
1344c63a239c404af1e055e5f9939939ab0fd09d98aJeff Tinker    void writeVector(Parcel *reply, Vector<uint8_t> const &vector) const;
135441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker};
136441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
137441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker}  // namespace android
138441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
139441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#endif // ANDROID_IDRM_H_
140441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker
141