ICrypto.h revision fa2b8f243eb048fb2b8e5a14356190f69eb31a36
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