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