Drm.cpp revision 8856c8b8777d0e0de11b2de863a336b001024e29
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), 50cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mFactory(NULL), 51cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mPlugin(NULL) { 52cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 53cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 54cc82dc6d500023eba6048616301a4b12682458dbJeff TinkerDrm::~Drm() { 55cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker delete mPlugin; 56cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mPlugin = NULL; 57cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closeFactory(); 58cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 59cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 60cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkervoid Drm::closeFactory() { 61cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker delete mFactory; 62cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mFactory = NULL; 63cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibrary.clear(); 64cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 65cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 66cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::initCheck() const { 67cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 68cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 69cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 70cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 71cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker/* 72cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * Search the plugins directory for a plugin that supports the scheme 73cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * specified by uuid 74cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * 75cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * If found: 76cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mLibrary holds a strong pointer to the dlopen'd library 77cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mFactory is set to the library's factory method 78cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mInitCheck is set to OK 79cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * 80cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * If not found: 81cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mLibrary is cleared and mFactory are set to NULL 82cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker * mInitCheck is set to an error (!OK) 83cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker */ 84cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkervoid Drm::findFactoryForScheme(const uint8_t uuid[16]) { 85cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 86cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closeFactory(); 87cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 88cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // lock static maps 89cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mMapLock); 90cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 91cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // first check cache 92cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Vector<uint8_t> uuidVector; 93cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker uuidVector.appendArray(uuid, sizeof(uuid)); 94cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ssize_t index = mUUIDToLibraryPathMap.indexOfKey(uuidVector); 95cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (index >= 0) { 96cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (loadLibraryForScheme(mUUIDToLibraryPathMap[index], uuid)) { 97cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = OK; 98cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 99cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } else { 100cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ALOGE("Failed to load from cached library path!"); 101cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = ERROR_UNSUPPORTED; 102cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 103cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 104cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 105cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 106cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // no luck, have to search 107cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker String8 dirPath("/vendor/lib/mediadrm"); 108cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker DIR* pDir = opendir(dirPath.string()); 109cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 110cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (pDir == NULL) { 111cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = ERROR_UNSUPPORTED; 112cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ALOGE("Failed to open plugin directory %s", dirPath.string()); 113cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 114cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 115cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 116cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 117cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker struct dirent* pEntry; 118cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker while ((pEntry = readdir(pDir))) { 119cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 120cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker String8 pluginPath = dirPath + "/" + pEntry->d_name; 121cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 122cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (pluginPath.getPathExtension() == ".so") { 123cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 124cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (loadLibraryForScheme(pluginPath, uuid)) { 125cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mUUIDToLibraryPathMap.add(uuidVector, pluginPath); 126cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = OK; 127cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closedir(pDir); 128cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return; 129cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 130cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 131cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 132cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 133cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closedir(pDir); 134cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 135cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ALOGE("Failed to find drm plugin"); 136cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mInitCheck = ERROR_UNSUPPORTED; 137cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 138cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 139cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerbool Drm::loadLibraryForScheme(const String8 &path, const uint8_t uuid[16]) { 140cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 141cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker // get strong pointer to open shared library 142cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker ssize_t index = mLibraryPathToOpenLibraryMap.indexOfKey(path); 143cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (index >= 0) { 144cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibrary = mLibraryPathToOpenLibraryMap[index].promote(); 145cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } else { 146cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker index = mLibraryPathToOpenLibraryMap.add(path, NULL); 147cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 148cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 149cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (!mLibrary.get()) { 150cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibrary = new SharedLibrary(path); 151cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (!*mLibrary) { 152cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return false; 153cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 154cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 155cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mLibraryPathToOpenLibraryMap.replaceValueAt(index, mLibrary); 156cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 157cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 158cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker typedef DrmFactory *(*CreateDrmFactoryFunc)(); 159cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 160cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker CreateDrmFactoryFunc createDrmFactory = 161cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker (CreateDrmFactoryFunc)mLibrary->lookup("createDrmFactory"); 162cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 163cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (createDrmFactory == NULL || 164cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker (mFactory = createDrmFactory()) == NULL || 165cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker !mFactory->isCryptoSchemeSupported(uuid)) { 166cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker closeFactory(); 167cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return false; 168cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 169cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return true; 170cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 171cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 172cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerbool Drm::isCryptoSchemeSupported(const uint8_t uuid[16]) { 173cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 174cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 175cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mFactory && mFactory->isCryptoSchemeSupported(uuid)) { 176cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return true; 177cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 178cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 179cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker findFactoryForScheme(uuid); 180cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return (mInitCheck == OK); 181cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 182cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 183cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::createPlugin(const uint8_t uuid[16]) { 184cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 185cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 186cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin != NULL) { 187cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 188cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 189cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 190cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (!mFactory || !mFactory->isCryptoSchemeSupported(uuid)) { 191cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker findFactoryForScheme(uuid); 192cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 193cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 194cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 195cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 196cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 197cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 198cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mFactory->createDrmPlugin(uuid, &mPlugin); 199cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 200cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 201cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::destroyPlugin() { 202cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 203cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 204cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 205cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 206cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 207cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 208cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 209cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 210cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 211cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 212cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker delete mPlugin; 213cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker mPlugin = NULL; 214cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 215cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return OK; 216cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 217cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 218cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::openSession(Vector<uint8_t> &sessionId) { 219cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 220cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 221cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 222cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 223cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 224cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 225cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 226cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 227cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 228cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 229cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->openSession(sessionId); 230cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 231cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 232cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::closeSession(Vector<uint8_t> const &sessionId) { 233cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 234cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 235cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 236cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 237cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 238cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 239cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 240cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 241cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 242cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 243cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->closeSession(sessionId); 244cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 245cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2468856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::getKeyRequest(Vector<uint8_t> const &sessionId, 2478856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &initData, 2488856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker String8 const &mimeType, DrmPlugin::KeyType keyType, 2498856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker KeyedVector<String8, String8> const &optionalParameters, 2508856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &request, String8 &defaultUrl) { 251cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 252cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 253cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 254cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 255cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 256cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 257cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 258cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 259cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 260cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2618856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->getKeyRequest(sessionId, initData, mimeType, keyType, 2628856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker optionalParameters, request, defaultUrl); 263cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 264cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2658856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::provideKeyResponse(Vector<uint8_t> const &sessionId, 2668856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &response, 2678856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &keySetId) { 268cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 269cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 270cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 271cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 272cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 273cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 274cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 275cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 276cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 277cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2788856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->provideKeyResponse(sessionId, response, keySetId); 279cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 280cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2818856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::removeKeys(Vector<uint8_t> const &keySetId) { 282cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 283cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 284cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 285cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 286cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 287cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 288cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 289cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 290cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 291cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2928856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->removeKeys(keySetId); 293cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 294cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 2958856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::restoreKeys(Vector<uint8_t> const &sessionId, 2968856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keySetId) { 297cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 298cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 299cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 300cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 301cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 302cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 303cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 304cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 305cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 306cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 3078856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->restoreKeys(sessionId, keySetId); 3088856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 3098856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3108856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::queryKeyStatus(Vector<uint8_t> const &sessionId, 3118856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker KeyedVector<String8, String8> &infoMap) const { 3128856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 3138856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3148856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 3158856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 3168856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 3178856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3188856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 3198856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 3208856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 3218856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 3228856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->queryKeyStatus(sessionId, infoMap); 323cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 324cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 325cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getProvisionRequest(Vector<uint8_t> &request, String8 &defaultUrl) { 326cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 327cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 328cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 329cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 330cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 331cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 332cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 333cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 334cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 335cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 336cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getProvisionRequest(request, defaultUrl); 337cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 338cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 339cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::provideProvisionResponse(Vector<uint8_t> const &response) { 340cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 341cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 342cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 343cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 344cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 345cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 346cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 347cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 348cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 349cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 350cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->provideProvisionResponse(response); 351cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 352cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 353cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 354cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getSecureStops(List<Vector<uint8_t> > &secureStops) { 355cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 356cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 357cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 358cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 359cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 360cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 361cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 362cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 363cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 364cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 365cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getSecureStops(secureStops); 366cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 367cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 368cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::releaseSecureStops(Vector<uint8_t> const &ssRelease) { 369cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 370cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 371cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 372cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 373cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 374cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 375cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 376cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 377cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 378cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 379cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->releaseSecureStops(ssRelease); 380cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 381cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 382cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getPropertyString(String8 const &name, String8 &value ) const { 383cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 384cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 385cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 386cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 387cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 388cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 389cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 390cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 391cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 392cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 393cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getPropertyString(name, value); 394cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 395cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 396cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::getPropertyByteArray(String8 const &name, Vector<uint8_t> &value ) const { 397cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 398cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 399cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 400cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 401cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 402cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 403cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 404cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 405cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 406cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 407cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->getPropertyByteArray(name, value); 408cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 409cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 410cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::setPropertyString(String8 const &name, String8 const &value ) const { 411cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 412cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 413cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 414cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 415cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 416cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 417cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 418cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 419cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 420cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 421cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->setPropertyString(name, value); 422cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 423cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 424cc82dc6d500023eba6048616301a4b12682458dbJeff Tinkerstatus_t Drm::setPropertyByteArray(String8 const &name, 425cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Vector<uint8_t> const &value ) const { 426cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Mutex::Autolock autoLock(mLock); 427cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 428cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mInitCheck != OK) { 429cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mInitCheck; 430cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 431cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 432cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker if (mPlugin == NULL) { 433cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return -EINVAL; 434cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 435cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 436cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return mPlugin->setPropertyByteArray(name, value); 437cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} 438cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 4398856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4408856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::setCipherAlgorithm(Vector<uint8_t> const &sessionId, 4418856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker String8 const &algorithm) { 4428856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 4438856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4448856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 4458856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 4468856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4478856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4488856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 4498856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 4508856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4518856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4528856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->setCipherAlgorithm(sessionId, algorithm); 4538856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 4548856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4558856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::setMacAlgorithm(Vector<uint8_t> const &sessionId, 4568856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker String8 const &algorithm) { 4578856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 4588856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4598856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 4608856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 4618856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4628856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4638856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 4648856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 4658856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4668856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4678856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->setMacAlgorithm(sessionId, algorithm); 4688856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 4698856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4708856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::encrypt(Vector<uint8_t> const &sessionId, 4718856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 4728856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &input, 4738856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &iv, 4748856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &output) { 4758856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 4768856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4778856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 4788856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 4798856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4808856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4818856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 4828856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 4838856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4848856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4858856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->encrypt(sessionId, keyId, input, iv, output); 4868856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 4878856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4888856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::decrypt(Vector<uint8_t> const &sessionId, 4898856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 4908856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &input, 4918856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &iv, 4928856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &output) { 4938856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 4948856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4958856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 4968856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 4978856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 4988856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 4998856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5008856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5018856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5028856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5038856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->decrypt(sessionId, keyId, input, iv, output); 5048856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5058856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5068856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::sign(Vector<uint8_t> const &sessionId, 5078856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 5088856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &message, 5098856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> &signature) { 5108856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 5118856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5128856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 5138856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 5148856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5158856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5168856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5178856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5188856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5198856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5208856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->sign(sessionId, keyId, message, signature); 5218856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5228856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5238856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinkerstatus_t Drm::verify(Vector<uint8_t> const &sessionId, 5248856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &keyId, 5258856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &message, 5268856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Vector<uint8_t> const &signature, 5278856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker bool &match) { 5288856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker Mutex::Autolock autoLock(mLock); 5298856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5308856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mInitCheck != OK) { 5318856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mInitCheck; 5328856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5338856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5348856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker if (mPlugin == NULL) { 5358856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return -EINVAL; 5368856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker } 5378856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 5388856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker return mPlugin->verify(sessionId, keyId, message, signature, match); 5398856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker} 5408856c8b8777d0e0de11b2de863a336b001024e29Jeff Tinker 541cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker} // namespace android 542