107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root/*
207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * Copyright (C) 2012 The Android Open Source Project
307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root *
407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * Licensed under the Apache License, Version 2.0 (the "License");
507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * you may not use this file except in compliance with the License.
607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * You may obtain a copy of the License at
707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root *
807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root *      http://www.apache.org/licenses/LICENSE-2.0
907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root *
1007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * Unless required by applicable law or agreed to in writing, software
1107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * distributed under the License is distributed on an "AS IS" BASIS,
1207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * See the License for the specific language governing permissions and
1407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * limitations under the License.
1507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root */
1607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
1707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#ifndef KEYSTORE_IKEYSTORESERVICE_H
1807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#define KEYSTORE_IKEYSTORESERVICE_H
1907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
2007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#include <utils/RefBase.h>
2107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#include <binder/IInterface.h>
2207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#include <binder/Parcel.h>
2307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
2407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Rootnamespace android {
2507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
2696427baf0094d50047049d329b0779c3c910402cKenny Rootclass KeystoreArg : public RefBase {
2796427baf0094d50047049d329b0779c3c910402cKenny Rootpublic:
2896427baf0094d50047049d329b0779c3c910402cKenny Root    KeystoreArg(const void *data, size_t len);
2996427baf0094d50047049d329b0779c3c910402cKenny Root    ~KeystoreArg();
3096427baf0094d50047049d329b0779c3c910402cKenny Root
3196427baf0094d50047049d329b0779c3c910402cKenny Root    const void* data() const;
3296427baf0094d50047049d329b0779c3c910402cKenny Root    size_t size() const;
3396427baf0094d50047049d329b0779c3c910402cKenny Root
3496427baf0094d50047049d329b0779c3c910402cKenny Rootprivate:
3596427baf0094d50047049d329b0779c3c910402cKenny Root    const void* mData;
3696427baf0094d50047049d329b0779c3c910402cKenny Root    size_t mSize;
3796427baf0094d50047049d329b0779c3c910402cKenny Root};
3896427baf0094d50047049d329b0779c3c910402cKenny Root
3907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root/*
4007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * This must be kept manually in sync with frameworks/base's IKeystoreService.java
4107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root */
4207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Rootclass IKeystoreService: public IInterface {
4307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Rootpublic:
4407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    enum {
4507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        TEST = IBinder::FIRST_CALL_TRANSACTION + 0,
4607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        GET = IBinder::FIRST_CALL_TRANSACTION + 1,
4707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        INSERT = IBinder::FIRST_CALL_TRANSACTION + 2,
4807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        DEL = IBinder::FIRST_CALL_TRANSACTION + 3,
4907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        EXIST = IBinder::FIRST_CALL_TRANSACTION + 4,
5007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        SAW = IBinder::FIRST_CALL_TRANSACTION + 5,
5107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        RESET = IBinder::FIRST_CALL_TRANSACTION + 6,
5207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        PASSWORD = IBinder::FIRST_CALL_TRANSACTION + 7,
5307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        LOCK = IBinder::FIRST_CALL_TRANSACTION + 8,
5407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        UNLOCK = IBinder::FIRST_CALL_TRANSACTION + 9,
5507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        ZERO = IBinder::FIRST_CALL_TRANSACTION + 10,
5607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        GENERATE = IBinder::FIRST_CALL_TRANSACTION + 11,
5707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        IMPORT = IBinder::FIRST_CALL_TRANSACTION + 12,
5807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        SIGN = IBinder::FIRST_CALL_TRANSACTION + 13,
5907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        VERIFY = IBinder::FIRST_CALL_TRANSACTION + 14,
6007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        GET_PUBKEY = IBinder::FIRST_CALL_TRANSACTION + 15,
6107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        DEL_KEY = IBinder::FIRST_CALL_TRANSACTION + 16,
6207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        GRANT = IBinder::FIRST_CALL_TRANSACTION + 17,
6307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        UNGRANT = IBinder::FIRST_CALL_TRANSACTION + 18,
6407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root        GETMTIME = IBinder::FIRST_CALL_TRANSACTION + 19,
65d53bc92f1cc4eb669ec015480cebe5ae7aaaf7cfKenny Root        DUPLICATE = IBinder::FIRST_CALL_TRANSACTION + 20,
664306123e81371bd8bd85f77c2375d29ac53ff771Kenny Root        IS_HARDWARE_BACKED = IBinder::FIRST_CALL_TRANSACTION + 21,
672ecc7a1efbb21d86d38b9e0348dfbf0e1213d920Kenny Root        CLEAR_UID = IBinder::FIRST_CALL_TRANSACTION + 22,
684e865753346fc6a075966972a7a98051818859dbRobin Lee        RESET_UID = IBinder::FIRST_CALL_TRANSACTION + 23,
694e865753346fc6a075966972a7a98051818859dbRobin Lee        SYNC_UID = IBinder::FIRST_CALL_TRANSACTION + 24,
704e865753346fc6a075966972a7a98051818859dbRobin Lee        PASSWORD_UID = IBinder::FIRST_CALL_TRANSACTION + 25,
7107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    };
7207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
7307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    DECLARE_META_INTERFACE(KeystoreService);
7407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
7507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t test() = 0;
7607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
7707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t get(const String16& name, uint8_t** item, size_t* itemLength) = 0;
7807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
790c540aad5915e6aa34345049be96f28b64d0e84cKenny Root    virtual int32_t insert(const String16& name, const uint8_t* item, size_t itemLength, int uid,
800c540aad5915e6aa34345049be96f28b64d0e84cKenny Root            int32_t flags) = 0;
8107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
82b88c3eb96625513df4cc998d739d17266ebaf89fKenny Root    virtual int32_t del(const String16& name, int uid) = 0;
8307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
84b88c3eb96625513df4cc998d739d17266ebaf89fKenny Root    virtual int32_t exist(const String16& name, int uid) = 0;
8507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
86b88c3eb96625513df4cc998d739d17266ebaf89fKenny Root    virtual int32_t saw(const String16& name, int uid, Vector<String16>* matches) = 0;
8707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
8807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t reset() = 0;
8907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
9007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t password(const String16& password) = 0;
9107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
9207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t lock() = 0;
9307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
9407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t unlock(const String16& password) = 0;
9507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
9607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t zero() = 0;
9707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
9896427baf0094d50047049d329b0779c3c910402cKenny Root    virtual int32_t generate(const String16& name, int32_t uid, int32_t keyType, int32_t keySize,
9996427baf0094d50047049d329b0779c3c910402cKenny Root            int32_t flags, Vector<sp<KeystoreArg> >* args) = 0;
10007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
1010c540aad5915e6aa34345049be96f28b64d0e84cKenny Root    virtual int32_t import(const String16& name, const uint8_t* data, size_t length, int uid,
1020c540aad5915e6aa34345049be96f28b64d0e84cKenny Root            int32_t flags) = 0;
10307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
10407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t sign(const String16& name, const uint8_t* data, size_t length, uint8_t** out,
10507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root            size_t* outLength) = 0;
10607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
10707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t verify(const String16& name, const uint8_t* data, size_t dataLength,
10807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root            const uint8_t* signature, size_t signatureLength) = 0;
10907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
11007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t get_pubkey(const String16& name, uint8_t** pubkey, size_t* pubkeyLength) = 0;
11107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
112b88c3eb96625513df4cc998d739d17266ebaf89fKenny Root    virtual int32_t del_key(const String16& name, int uid) = 0;
11307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
11407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t grant(const String16& name, int32_t granteeUid) = 0;
11507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
11607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int32_t ungrant(const String16& name, int32_t granteeUid) = 0;
11707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
11807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual int64_t getmtime(const String16& name) = 0;
1190225407783ee339164a0cd8ca5ef04c99d27c59aKenny Root
120d53bc92f1cc4eb669ec015480cebe5ae7aaaf7cfKenny Root    virtual int32_t duplicate(const String16& srcKey, int32_t srcUid, const String16& destKey,
121d53bc92f1cc4eb669ec015480cebe5ae7aaaf7cfKenny Root            int32_t destUid) = 0;
1224306123e81371bd8bd85f77c2375d29ac53ff771Kenny Root
1231b0e3933900c7ea21189704d5db64e7346aee7afKenny Root    virtual int32_t is_hardware_backed(const String16& keyType) = 0;
1242ecc7a1efbb21d86d38b9e0348dfbf0e1213d920Kenny Root
1252ecc7a1efbb21d86d38b9e0348dfbf0e1213d920Kenny Root    virtual int32_t clear_uid(int64_t uid) = 0;
1264e865753346fc6a075966972a7a98051818859dbRobin Lee
1274e865753346fc6a075966972a7a98051818859dbRobin Lee    virtual int32_t reset_uid(int32_t uid) = 0;
1284e865753346fc6a075966972a7a98051818859dbRobin Lee
1294e865753346fc6a075966972a7a98051818859dbRobin Lee    virtual int32_t sync_uid(int32_t sourceUid, int32_t targetUid) = 0;
1304e865753346fc6a075966972a7a98051818859dbRobin Lee
1314e865753346fc6a075966972a7a98051818859dbRobin Lee    virtual int32_t password_uid(const String16& password, int32_t uid) = 0;
13207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root};
13307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
13407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root// ----------------------------------------------------------------------------
13507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
13607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Rootclass BnKeystoreService: public BnInterface<IKeystoreService> {
13707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Rootpublic:
13807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root    virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply,
13907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root            uint32_t flags = 0);
14007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root};
14107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
14207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root} // namespace android
14307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root
14407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#endif
145