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#include <binder/IInterface.h> 18ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#include <media/stagefright/foundation/ABase.h> 191bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber#include <media/hardware/CryptoAPI.h> 20ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 21ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#ifndef ANDROID_ICRYPTO_H_ 22ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 23ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#define ANDROID_ICRYPTO_H_ 24ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 25ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Hubernamespace android { 26ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 275b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huberstruct AString; 285b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber 29ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberstruct ICrypto : public IInterface { 30ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber DECLARE_META_INTERFACE(Crypto); 31ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 321bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t initCheck() const = 0; 33ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 341bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]) const = 0; 35ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 361bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t createPlugin( 371bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t uuid[16], const void *data, size_t size) = 0; 38ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 391bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual status_t destroyPlugin() = 0; 40ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 411bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber virtual bool requiresSecureDecoderComponent( 421bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const char *mime) const = 0; 431bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber 44fa2b8f243eb048fb2b8e5a14356190f69eb31a36Edwin Wong virtual ssize_t decrypt( 451bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber bool secure, 461bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t key[16], 471bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const uint8_t iv[16], 481bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber CryptoPlugin::Mode mode, 491bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const void *srcPtr, 501bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const CryptoPlugin::SubSample *subSamples, size_t numSubSamples, 515b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber void *dstPtr, 525b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber AString *errorDetailMsg) = 0; 53ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 54ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberprivate: 55ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ICrypto); 56ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber}; 57ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 58ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberstruct BnCrypto : public BnInterface<ICrypto> { 59ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber virtual status_t onTransact( 60ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 61ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber uint32_t flags = 0); 62ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber}; 63ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 64ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber} // namespace android 65ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 66ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#endif // ANDROID_ICRYPTO_H_ 67ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 68