Drm.cpp revision 0cb126a34fe32f81c830858102471e7be2ce85b1
1cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker/* 2cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * Copyright (C) 2013 The Android Open Source Project 3cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * 4cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * Licensed under the Apache License, Version 2.0 (the "License"); 5cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * you may not use this file except in compliance with the License. 6cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * You may obtain a copy of the License at 7cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * 8cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * http://www.apache.org/licenses/LICENSE-2.0 9cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * 10cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * Unless required by applicable law or agreed to in writing, software 11cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * distributed under the License is distributed on an "AS IS" BASIS, 12cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * See the License for the specific language governing permissions and 14cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * limitations under the License. 15cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker */ 16cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 17cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker//#define LOG_NDEBUG 0 18cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#define LOG_TAG "Drm" 19cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <utils/Log.h> 20cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 21cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <dirent.h> 22cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <dlfcn.h> 23cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 24cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include "Drm.h" 25cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 26cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <media/drm/DrmAPI.h> 27cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <media/stagefright/foundation/ADebug.h> 28cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <media/stagefright/foundation/AString.h> 29cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <media/stagefright/foundation/hexdump.h> 30cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <media/stagefright/MediaErrors.h> 31cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 32cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkernamespace android { 33cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 34cc82dc6d500023eba6048616301a4b12682458dbJeff TinkerKeyedVector<Vector<uint8_t>, String8> Drm::mUUIDToLibraryPathMap; 35cc82dc6d500023eba6048616301a4b12682458dbJeff TinkerKeyedVector<String8, wp<SharedLibrary> > Drm::mLibraryPathToOpenLibraryMap; 36cc82dc6d500023eba6048616301a4b12682458dbJeff TinkerMutex Drm::mMapLock; 37cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 38cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatic bool operator<(const Vector<uint8_t> &lhs, const Vector<uint8_t> &rhs) { 39cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (lhs.size() < rhs.size()) { 40cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return true; 41cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } else if (lhs.size() > rhs.size()) { 42cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return false; 43cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 44cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 45cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return memcmp((void *)lhs.array(), (void *)rhs.array(), rhs.size()) < 0; 46cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 47cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 48cc82dc6d500023eba6048616301a4b12682458dbJeff TinkerDrm::Drm() 49cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker : mInitCheck(NO_INIT), 500cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker mListener(NULL), 51cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mFactory(NULL), 52cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mPlugin(NULL) { 53cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 54cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 55cc82dc6d500023eba6048616301a4b12682458dbJeff TinkerDrm::~Drm() { 56cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker delete mPlugin; 57cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mPlugin = NULL; 58cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closeFactory(); 59cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 60cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 61cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkervoid Drm::closeFactory() { 62cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker delete mFactory; 63cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mFactory = NULL; 64cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibrary.clear(); 65cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 66cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 67cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::initCheck() const { 68cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 69cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 70cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 710cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinkerstatus_t Drm::setListener(const sp<IDrmClient>& listener) 720cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker{ 730cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker Mutex::Autolock lock(mEventLock); 740cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker mListener = listener; 750cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker return NO_ERROR; 760cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker} 770cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker 780cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinkervoid Drm::sendEvent(DrmPlugin::EventType eventType, int extra, 790cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker Vector<uint8_t> const *sessionId, 800cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker Vector<uint8_t> const *data) 810cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker{ 820cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker mEventLock.lock(); 830cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker sp<IDrmClient> listener = mListener; 840cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker mEventLock.unlock(); 850cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker 860cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker if (listener != NULL) { 870cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker Parcel obj; 880cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker if (sessionId && sessionId->size()) { 890cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker obj.writeInt32(sessionId->size()); 900cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker obj.write(sessionId->array(), sessionId->size()); 910cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker } else { 920cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker obj.writeInt32(0); 930cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker } 940cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker 950cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker if (data && data->size()) { 960cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker obj.writeInt32(data->size()); 970cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker obj.write(data->array(), data->size()); 980cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker } else { 990cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker obj.writeInt32(0); 1000cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker } 1010cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker 1020cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker Mutex::Autolock lock(mNotifyLock); 1030cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker listener->notify(eventType, extra, &obj); 1040cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker } 1050cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker} 106cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 107cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker/* 108cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * Search the plugins directory for a plugin that supports the scheme 109cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * specified by uuid 110cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * 111cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * If found: 112cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mLibrary holds a strong pointer to the dlopen'd library 113cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mFactory is set to the library's factory method 114cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mInitCheck is set to OK 115cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * 116cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * If not found: 117cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mLibrary is cleared and mFactory are set to NULL 118cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mInitCheck is set to an error (!OK) 119cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker */ 120cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkervoid Drm::findFactoryForScheme(const uint8_t uuid[16]) { 121cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 122cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closeFactory(); 123cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 124cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // lock static maps 125cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mMapLock); 126cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 127cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // first check cache 128cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Vector<uint8_t> uuidVector; 129cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker uuidVector.appendArray(uuid, sizeof(uuid)); 130cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ssize_t index = mUUIDToLibraryPathMap.indexOfKey(uuidVector); 131cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (index >= 0) { 132cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (loadLibraryForScheme(mUUIDToLibraryPathMap[index], uuid)) { 133cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = OK; 134cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 135cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } else { 136cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ALOGE("Failed to load from cached library path!"); 137cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = ERROR_UNSUPPORTED; 138cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 139cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 140cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 141cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 142cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // no luck, have to search 143cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker String8 dirPath("/vendor/lib/mediadrm"); 144cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker DIR* pDir = opendir(dirPath.string()); 145cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 146cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (pDir == NULL) { 147cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = ERROR_UNSUPPORTED; 148cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ALOGE("Failed to open plugin directory %s", dirPath.string()); 149cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 150cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 151cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 152cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 153cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker struct dirent* pEntry; 154cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker while ((pEntry = readdir(pDir))) { 155cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 156cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker String8 pluginPath = dirPath + "/" + pEntry->d_name; 157cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 158cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (pluginPath.getPathExtension() == ".so") { 159cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 160cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (loadLibraryForScheme(pluginPath, uuid)) { 161cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mUUIDToLibraryPathMap.add(uuidVector, pluginPath); 162cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = OK; 163cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closedir(pDir); 164cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 165cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 166cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 167cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 168cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 169cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closedir(pDir); 170cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 171cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ALOGE("Failed to find drm plugin"); 172cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = ERROR_UNSUPPORTED; 173cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 174cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 175cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerbool Drm::loadLibraryForScheme(const String8 &path, const uint8_t uuid[16]) { 176cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 177cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // get strong pointer to open shared library 178cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ssize_t index = mLibraryPathToOpenLibraryMap.indexOfKey(path); 179cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (index >= 0) { 180cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibrary = mLibraryPathToOpenLibraryMap[index].promote(); 181cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } else { 182cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker index = mLibraryPathToOpenLibraryMap.add(path, NULL); 183cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 184cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 185cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (!mLibrary.get()) { 186cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibrary = new SharedLibrary(path); 187cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (!*mLibrary) { 188cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return false; 189cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 190cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 191cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibraryPathToOpenLibraryMap.replaceValueAt(index, mLibrary); 192cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 193cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 194cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker typedef DrmFactory *(*CreateDrmFactoryFunc)(); 195cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 196cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker CreateDrmFactoryFunc createDrmFactory = 197cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker (CreateDrmFactoryFunc)mLibrary->lookup("createDrmFactory"); 198cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 199cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (createDrmFactory == NULL || 200cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker (mFactory = createDrmFactory()) == NULL || 201cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker !mFactory->isCryptoSchemeSupported(uuid)) { 202cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closeFactory(); 203cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return false; 204cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 205cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return true; 206cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 207cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 208cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerbool Drm::isCryptoSchemeSupported(const uint8_t uuid[16]) { 209cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 210cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 211cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mFactory && mFactory->isCryptoSchemeSupported(uuid)) { 212cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return true; 213cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 214cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 215cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker findFactoryForScheme(uuid); 216cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return (mInitCheck == OK); 217cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 218cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 219cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::createPlugin(const uint8_t uuid[16]) { 220cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 221cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 222cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin != NULL) { 223cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 224cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 225cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 226cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (!mFactory || !mFactory->isCryptoSchemeSupported(uuid)) { 227cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker findFactoryForScheme(uuid); 228cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 229cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 230cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 231cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 232cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 233cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2340cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker status_t result = mFactory->createDrmPlugin(uuid, &mPlugin); 2350cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker mPlugin->setListener(this); 2360cb126a34fe32f81c830858102471e7be2ce85b1Jeff Tinker return result; 237cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 238cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 239cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::destroyPlugin() { 240cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 241cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 242cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 243cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 244cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 245cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 246cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 247cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 248cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 249cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 250cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker delete mPlugin; 251cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mPlugin = NULL; 252cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 253cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return OK; 254cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 255cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 256cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::openSession(Vector<uint8_t> &sessionId) { 257cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 258cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 259cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 260cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 261cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 262cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 263cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 264cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 265cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 266cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 267cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->openSession(sessionId); 268cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 269cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 270cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::closeSession(Vector<uint8_t> const &sessionId) { 271cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 272cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 273cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 274cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 275cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 276cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 277cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 278cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 279cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 280cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 281cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->closeSession(sessionId); 282cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 283cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2848856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::getKeyRequest(Vector<uint8_t> const &sessionId, 2858856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &initData, 2868856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker String8 const &mimeType, DrmPlugin::KeyType keyType, 2878856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker KeyedVector<String8, String8> const &optionalParameters, 2888856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &request, String8 &defaultUrl) { 289cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 290cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 291cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 292cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 293cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 294cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 295cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 296cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 297cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 298cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2998856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->getKeyRequest(sessionId, initData, mimeType, keyType, 3008856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker optionalParameters, request, defaultUrl); 301cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 302cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 3038856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::provideKeyResponse(Vector<uint8_t> const &sessionId, 3048856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &response, 3058856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &keySetId) { 306cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 307cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 308cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 309cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 310cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 311cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 312cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 313cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 314cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 315cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 3168856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->provideKeyResponse(sessionId, response, keySetId); 317cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 318cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 3198856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::removeKeys(Vector<uint8_t> const &keySetId) { 320cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 321cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 322cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 323cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 324cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 325cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 326cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 327cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 328cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 329cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 3308856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->removeKeys(keySetId); 331cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 332cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 3338856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::restoreKeys(Vector<uint8_t> const &sessionId, 3348856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keySetId) { 335cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 336cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 337cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 338cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 339cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 340cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 341cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 342cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 343cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 344cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 3458856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->restoreKeys(sessionId, keySetId); 3468856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 3478856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3488856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::queryKeyStatus(Vector<uint8_t> const &sessionId, 3498856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker KeyedVector<String8, String8> &infoMap) const { 3508856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 3518856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3528856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 3538856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 3548856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 3558856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3568856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 3578856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 3588856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 3598856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3608856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->queryKeyStatus(sessionId, infoMap); 361cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 362cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 363cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getProvisionRequest(Vector<uint8_t> &request, String8 &defaultUrl) { 364cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 365cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 366cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 367cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 368cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 369cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 370cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 371cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 372cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 373cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 374cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getProvisionRequest(request, defaultUrl); 375cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 376cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 377cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::provideProvisionResponse(Vector<uint8_t> const &response) { 378cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 379cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 380cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 381cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 382cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 383cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 384cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 385cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 386cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 387cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 388cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->provideProvisionResponse(response); 389cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 390cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 391cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 392cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getSecureStops(List<Vector<uint8_t> > &secureStops) { 393cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 394cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 395cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 396cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 397cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 398cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 399cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 400cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 401cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 402cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 403cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getSecureStops(secureStops); 404cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 405cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 406cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::releaseSecureStops(Vector<uint8_t> const &ssRelease) { 407cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 408cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 409cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 410cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 411cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 412cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 413cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 414cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 415cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 416cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 417cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->releaseSecureStops(ssRelease); 418cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 419cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 420cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getPropertyString(String8 const &name, String8 &value ) const { 421cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 422cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 423cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 424cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 425cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 426cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 427cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 428cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 429cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 430cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 431cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getPropertyString(name, value); 432cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 433cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 434cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getPropertyByteArray(String8 const &name, Vector<uint8_t> &value ) const { 435cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 436cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 437cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 438cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 439cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 440cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 441cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 442cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 443cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 444cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 445cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getPropertyByteArray(name, value); 446cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 447cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 448cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::setPropertyString(String8 const &name, String8 const &value ) const { 449cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 450cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 451cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 452cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 453cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 454cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 455cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 456cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 457cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 458cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 459cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->setPropertyString(name, value); 460cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 461cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 462cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::setPropertyByteArray(String8 const &name, 463cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Vector<uint8_t> const &value ) const { 464cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 465cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 466cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 467cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 468cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 469cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 470cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 471cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 472cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 473cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 474cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->setPropertyByteArray(name, value); 475cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 476cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 4778856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4788856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::setCipherAlgorithm(Vector<uint8_t> const &sessionId, 4798856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker String8 const &algorithm) { 4808856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 4818856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4828856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 4838856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 4848856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4858856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4868856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 4878856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 4888856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4898856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4908856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->setCipherAlgorithm(sessionId, algorithm); 4918856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 4928856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4938856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::setMacAlgorithm(Vector<uint8_t> const &sessionId, 4948856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker String8 const &algorithm) { 4958856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 4968856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4978856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 4988856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 4998856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5008856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5018856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5028856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5038856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5048856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5058856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->setMacAlgorithm(sessionId, algorithm); 5068856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5078856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5088856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::encrypt(Vector<uint8_t> const &sessionId, 5098856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 5108856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &input, 5118856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &iv, 5128856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &output) { 5138856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 5148856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5158856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 5168856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 5178856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5188856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5198856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5208856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5218856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5228856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5238856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->encrypt(sessionId, keyId, input, iv, output); 5248856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5258856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5268856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::decrypt(Vector<uint8_t> const &sessionId, 5278856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 5288856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &input, 5298856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &iv, 5308856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &output) { 5318856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 5328856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5338856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 5348856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 5358856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5368856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5378856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5388856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5398856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5408856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5418856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->decrypt(sessionId, keyId, input, iv, output); 5428856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5438856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5448856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::sign(Vector<uint8_t> const &sessionId, 5458856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 5468856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &message, 5478856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &signature) { 5488856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 5498856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5508856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 5518856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 5528856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5538856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5548856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5558856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5568856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5578856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5588856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->sign(sessionId, keyId, message, signature); 5598856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5608856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5618856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::verify(Vector<uint8_t> const &sessionId, 5628856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 5638856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &message, 5648856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &signature, 5658856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker bool &match) { 5668856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 5678856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5688856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 5698856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 5708856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5718856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5728856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5738856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5748856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5758856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5768856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->verify(sessionId, keyId, message, signature, match); 5778856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5788856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 579cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} // namespace android 580