1ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber/* 2ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * Copyright (C) 2012 The Android Open Source Project 3ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * 4ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * you may not use this file except in compliance with the License. 6ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * You may obtain a copy of the License at 7ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * 8ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * 10ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * Unless required by applicable law or agreed to in writing, software 11ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * See the License for the specific language governing permissions and 14ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber * limitations under the License. 15ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber */ 16ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 17ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#ifndef CRYPTO_H_ 18ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 19ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#define CRYPTO_H_ 20ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 21ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#include <media/ICrypto.h> 22ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#include <utils/threads.h> 23bafb682ec7f51486e751fea954169deb91846063Jeff Tinker#include <utils/KeyedVector.h> 24bafb682ec7f51486e751fea954169deb91846063Jeff Tinker 25bafb682ec7f51486e751fea954169deb91846063Jeff Tinker#include "SharedLibrary.h" 26ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 27ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Hubernamespace android { 28ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 291bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huberstruct CryptoFactory; 301bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huberstruct CryptoPlugin; 311bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 32ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberstruct Crypto : public BnCrypto { 33ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber Crypto(); 341bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual ~Crypto(); 35ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 361bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t initCheck() const; 37ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 38bafb682ec7f51486e751fea954169deb91846063Jeff Tinker virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]); 39ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 401bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t createPlugin( 411bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t uuid[16], const void *data, size_t size); 42ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 431bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t destroyPlugin(); 44ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 451bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual bool requiresSecureDecoderComponent( 461bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const char *mime) const; 47ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 482514d080c8a54ff603a45d7e336de668fe7329dbJeff Tinker virtual void notifyResolution(uint32_t width, uint32_t height); 492514d080c8a54ff603a45d7e336de668fe7329dbJeff Tinker 50fa2b8f243eb048fb2b8e5a14356190f69eb31a36Edwin Wong virtual ssize_t decrypt( 511bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber bool secure, 521bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t key[16], 531bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t iv[16], 541bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber CryptoPlugin::Mode mode, 551bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const void *srcPtr, 561bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const CryptoPlugin::SubSample *subSamples, size_t numSubSamples, 575b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber void *dstPtr, 585b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber AString *errorDetailMsg); 59ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 60ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberprivate: 611bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber mutable Mutex mLock; 621bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 631bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber status_t mInitCheck; 64bafb682ec7f51486e751fea954169deb91846063Jeff Tinker sp<SharedLibrary> mLibrary; 651bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber CryptoFactory *mFactory; 661bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber CryptoPlugin *mPlugin; 671bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 68bafb682ec7f51486e751fea954169deb91846063Jeff Tinker static KeyedVector<Vector<uint8_t>, String8> mUUIDToLibraryPathMap; 69bafb682ec7f51486e751fea954169deb91846063Jeff Tinker static KeyedVector<String8, wp<SharedLibrary> > mLibraryPathToOpenLibraryMap; 70bafb682ec7f51486e751fea954169deb91846063Jeff Tinker static Mutex mMapLock; 71bafb682ec7f51486e751fea954169deb91846063Jeff Tinker 72bafb682ec7f51486e751fea954169deb91846063Jeff Tinker void findFactoryForScheme(const uint8_t uuid[16]); 73bafb682ec7f51486e751fea954169deb91846063Jeff Tinker bool loadLibraryForScheme(const String8 &path, const uint8_t uuid[16]); 74bafb682ec7f51486e751fea954169deb91846063Jeff Tinker void closeFactory(); 751bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 76ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(Crypto); 77ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber}; 78ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 79ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber} // namespace android 80ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 81ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#endif // CRYPTO_H_ 82