Crypto.h revision 1bd139a2a68690e80398b70b27ca59550fea0e65
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,
521bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber            void *dstPtr);
53ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
54ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberprivate:
551bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber    mutable Mutex mLock;
561bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber
571bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber    status_t mInitCheck;
581bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber    void *mLibHandle;
591bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber    CryptoFactory *mFactory;
601bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber    CryptoPlugin *mPlugin;
611bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber
621bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber    status_t init();
631bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber
64ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(Crypto);
65ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber};
66ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
67ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber}  // namespace android
68ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
69ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#endif  // CRYPTO_H_
70