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