ICrypto.h revision ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6
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>
19ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
20ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#ifndef ANDROID_ICRYPTO_H_
21ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
22ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#define ANDROID_ICRYPTO_H_
23ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
24ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Hubernamespace android {
25ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
26ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberstruct ICrypto : public IInterface {
27ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    DECLARE_META_INTERFACE(Crypto);
28ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
29ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    virtual status_t initialize() = 0;
30ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    virtual status_t terminate() = 0;
31ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
32ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    virtual status_t setEntitlementKey(
33ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            const void *key, size_t keyLength) = 0;
34ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
35ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    virtual status_t setEntitlementControlMessage(
36ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            const void *msg, size_t msgLength) = 0;
37ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
38ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    // "dstData" is in media_server's address space (but inaccessible).
39ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    virtual ssize_t decryptVideo(
40ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            const void *iv, size_t ivLength,
41ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            const void *srcData, size_t srcDataSize,
42ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            void *dstData, size_t dstDataOffset) = 0;
43ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
44ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    // "dstData" is in the calling process' address space.
45ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    virtual ssize_t decryptAudio(
46ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            const void *iv, size_t ivLength,
47ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            const void *srcData, size_t srcDataSize,
48ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            void *dstData, size_t dstDataSize) = 0;
49ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
50ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberprivate:
51ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(ICrypto);
52ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber};
53ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
54ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberstruct BnCrypto : public BnInterface<ICrypto> {
55ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    virtual status_t onTransact(
56ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            uint32_t code, const Parcel &data, Parcel *reply,
57ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber            uint32_t flags = 0);
58ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber};
59ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
60ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber}  // namespace android
61ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
62ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#endif // ANDROID_ICRYPTO_H_
63ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
64