Crypto.h revision 5b8987e7de9d04b09153f329c680d2316cdb44ec
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> 23ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 24ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Hubernamespace android { 25ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 261bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huberstruct CryptoFactory; 271bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huberstruct CryptoPlugin; 281bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 29ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberstruct Crypto : public BnCrypto { 30ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber Crypto(); 311bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual ~Crypto(); 32ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 331bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t initCheck() const; 34ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 351bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]) const; 36ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 371bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t createPlugin( 381bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t uuid[16], const void *data, size_t size); 39ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 401bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t destroyPlugin(); 41ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 421bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual bool requiresSecureDecoderComponent( 431bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const char *mime) const; 44ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 451bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t decrypt( 461bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber bool secure, 471bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t key[16], 481bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t iv[16], 491bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber CryptoPlugin::Mode mode, 501bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const void *srcPtr, 511bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const CryptoPlugin::SubSample *subSamples, size_t numSubSamples, 525b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber void *dstPtr, 535b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber AString *errorDetailMsg); 54ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 55ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberprivate: 561bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber mutable Mutex mLock; 571bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 581bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber status_t mInitCheck; 591bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber void *mLibHandle; 601bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber CryptoFactory *mFactory; 611bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber CryptoPlugin *mPlugin; 621bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 631bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber status_t init(); 641bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 65ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(Crypto); 66ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber}; 67ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 68ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber} // namespace android 69ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 70ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#endif // CRYPTO_H_ 71