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