1*789431f2SAndroid Build Coastguard Worker /* 2*789431f2SAndroid Build Coastguard Worker ** 3*789431f2SAndroid Build Coastguard Worker ** Copyright 2016, The Android Open Source Project 4*789431f2SAndroid Build Coastguard Worker ** 5*789431f2SAndroid Build Coastguard Worker ** Licensed under the Apache License, Version 2.0 (the "License"); 6*789431f2SAndroid Build Coastguard Worker ** you may not use this file except in compliance with the License. 7*789431f2SAndroid Build Coastguard Worker ** You may obtain a copy of the License at 8*789431f2SAndroid Build Coastguard Worker ** 9*789431f2SAndroid Build Coastguard Worker ** http://www.apache.org/licenses/LICENSE-2.0 10*789431f2SAndroid Build Coastguard Worker ** 11*789431f2SAndroid Build Coastguard Worker ** Unless required by applicable law or agreed to in writing, software 12*789431f2SAndroid Build Coastguard Worker ** distributed under the License is distributed on an "AS IS" BASIS, 13*789431f2SAndroid Build Coastguard Worker ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*789431f2SAndroid Build Coastguard Worker ** See the License for the specific language governing permissions and 15*789431f2SAndroid Build Coastguard Worker ** limitations under the License. 16*789431f2SAndroid Build Coastguard Worker */ 17*789431f2SAndroid Build Coastguard Worker 18*789431f2SAndroid Build Coastguard Worker #pragma once 19*789431f2SAndroid Build Coastguard Worker 20*789431f2SAndroid Build Coastguard Worker #include <android/hardware/keymaster/3.0/IKeymasterDevice.h> 21*789431f2SAndroid Build Coastguard Worker 22*789431f2SAndroid Build Coastguard Worker #include <hidl/MQDescriptor.h> 23*789431f2SAndroid Build Coastguard Worker #include <hidl/Status.h> 24*789431f2SAndroid Build Coastguard Worker 25*789431f2SAndroid Build Coastguard Worker typedef struct keymaster0_device keymaster0_device_t; 26*789431f2SAndroid Build Coastguard Worker typedef struct keymaster1_device keymaster1_device_t; 27*789431f2SAndroid Build Coastguard Worker typedef struct keymaster2_device keymaster2_device_t; 28*789431f2SAndroid Build Coastguard Worker 29*789431f2SAndroid Build Coastguard Worker namespace keymaster { 30*789431f2SAndroid Build Coastguard Worker class AndroidKeymaster; 31*789431f2SAndroid Build Coastguard Worker class KeymasterContext; 32*789431f2SAndroid Build Coastguard Worker 33*789431f2SAndroid Build Coastguard Worker namespace ng { 34*789431f2SAndroid Build Coastguard Worker 35*789431f2SAndroid Build Coastguard Worker using ::android::sp; 36*789431f2SAndroid Build Coastguard Worker using ::android::hardware::hidl_string; 37*789431f2SAndroid Build Coastguard Worker using ::android::hardware::hidl_vec; 38*789431f2SAndroid Build Coastguard Worker using ::android::hardware::Return; 39*789431f2SAndroid Build Coastguard Worker using ::android::hardware::Void; 40*789431f2SAndroid Build Coastguard Worker using ::android::hardware::keymaster::V3_0::ErrorCode; 41*789431f2SAndroid Build Coastguard Worker using ::android::hardware::keymaster::V3_0::IKeymasterDevice; 42*789431f2SAndroid Build Coastguard Worker using ::android::hardware::keymaster::V3_0::KeyCharacteristics; 43*789431f2SAndroid Build Coastguard Worker using ::android::hardware::keymaster::V3_0::KeyFormat; 44*789431f2SAndroid Build Coastguard Worker using ::android::hardware::keymaster::V3_0::KeyParameter; 45*789431f2SAndroid Build Coastguard Worker using ::android::hardware::keymaster::V3_0::KeyPurpose; 46*789431f2SAndroid Build Coastguard Worker 47*789431f2SAndroid Build Coastguard Worker enum class KeymasterHardwareProfile : uint32_t { 48*789431f2SAndroid Build Coastguard Worker SW, 49*789431f2SAndroid Build Coastguard Worker KM0, 50*789431f2SAndroid Build Coastguard Worker KM1, 51*789431f2SAndroid Build Coastguard Worker KM2, 52*789431f2SAndroid Build Coastguard Worker }; 53*789431f2SAndroid Build Coastguard Worker 54*789431f2SAndroid Build Coastguard Worker class AndroidKeymaster3Device : public IKeymasterDevice { 55*789431f2SAndroid Build Coastguard Worker public: 56*789431f2SAndroid Build Coastguard Worker AndroidKeymaster3Device(); 57*789431f2SAndroid Build Coastguard Worker AndroidKeymaster3Device(KeymasterContext* context, KeymasterHardwareProfile profile); 58*789431f2SAndroid Build Coastguard Worker virtual ~AndroidKeymaster3Device(); 59*789431f2SAndroid Build Coastguard Worker 60*789431f2SAndroid Build Coastguard Worker // Methods from ::android::hardware::keymaster::V3_0::IKeymasterDevice follow. 61*789431f2SAndroid Build Coastguard Worker Return<void> getHardwareFeatures(getHardwareFeatures_cb _hidl_cb); 62*789431f2SAndroid Build Coastguard Worker Return<ErrorCode> addRngEntropy(const hidl_vec<uint8_t>& data) override; 63*789431f2SAndroid Build Coastguard Worker Return<void> generateKey(const hidl_vec<KeyParameter>& keyParams, 64*789431f2SAndroid Build Coastguard Worker generateKey_cb _hidl_cb) override; 65*789431f2SAndroid Build Coastguard Worker Return<void> getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob, 66*789431f2SAndroid Build Coastguard Worker const hidl_vec<uint8_t>& clientId, 67*789431f2SAndroid Build Coastguard Worker const hidl_vec<uint8_t>& appData, 68*789431f2SAndroid Build Coastguard Worker getKeyCharacteristics_cb _hidl_cb) override; 69*789431f2SAndroid Build Coastguard Worker Return<void> importKey(const hidl_vec<KeyParameter>& params, KeyFormat keyFormat, 70*789431f2SAndroid Build Coastguard Worker const hidl_vec<uint8_t>& keyData, importKey_cb _hidl_cb) override; 71*789431f2SAndroid Build Coastguard Worker Return<void> exportKey(KeyFormat exportFormat, const hidl_vec<uint8_t>& keyBlob, 72*789431f2SAndroid Build Coastguard Worker const hidl_vec<uint8_t>& clientId, const hidl_vec<uint8_t>& appData, 73*789431f2SAndroid Build Coastguard Worker exportKey_cb _hidl_cb) override; 74*789431f2SAndroid Build Coastguard Worker Return<void> attestKey(const hidl_vec<uint8_t>& keyToAttest, 75*789431f2SAndroid Build Coastguard Worker const hidl_vec<KeyParameter>& attestParams, 76*789431f2SAndroid Build Coastguard Worker attestKey_cb _hidl_cb) override; 77*789431f2SAndroid Build Coastguard Worker Return<void> upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade, 78*789431f2SAndroid Build Coastguard Worker const hidl_vec<KeyParameter>& upgradeParams, 79*789431f2SAndroid Build Coastguard Worker upgradeKey_cb _hidl_cb) override; 80*789431f2SAndroid Build Coastguard Worker Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override; 81*789431f2SAndroid Build Coastguard Worker Return<ErrorCode> deleteAllKeys() override; 82*789431f2SAndroid Build Coastguard Worker Return<ErrorCode> destroyAttestationIds() override; 83*789431f2SAndroid Build Coastguard Worker Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key, 84*789431f2SAndroid Build Coastguard Worker const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) override; 85*789431f2SAndroid Build Coastguard Worker Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams, 86*789431f2SAndroid Build Coastguard Worker const hidl_vec<uint8_t>& input, update_cb _hidl_cb) override; 87*789431f2SAndroid Build Coastguard Worker Return<void> finish(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams, 88*789431f2SAndroid Build Coastguard Worker const hidl_vec<uint8_t>& input, const hidl_vec<uint8_t>& signature, 89*789431f2SAndroid Build Coastguard Worker finish_cb _hidl_cb) override; 90*789431f2SAndroid Build Coastguard Worker Return<ErrorCode> abort(uint64_t operationHandle) override; 91*789431f2SAndroid Build Coastguard Worker 92*789431f2SAndroid Build Coastguard Worker private: 93*789431f2SAndroid Build Coastguard Worker std::unique_ptr<::keymaster::AndroidKeymaster> impl_; 94*789431f2SAndroid Build Coastguard Worker KeymasterHardwareProfile profile_; 95*789431f2SAndroid Build Coastguard Worker }; 96*789431f2SAndroid Build Coastguard Worker 97*789431f2SAndroid Build Coastguard Worker IKeymasterDevice* CreateKeymasterDevice(); 98*789431f2SAndroid Build Coastguard Worker 99*789431f2SAndroid Build Coastguard Worker IKeymasterDevice* CreateKeymasterDevice(keymaster2_device_t* km2_device); 100*789431f2SAndroid Build Coastguard Worker IKeymasterDevice* CreateKeymasterDevice(keymaster1_device_t* km1_device); 101*789431f2SAndroid Build Coastguard Worker IKeymasterDevice* CreateKeymasterDevice(keymaster0_device_t* km0_device); 102*789431f2SAndroid Build Coastguard Worker 103*789431f2SAndroid Build Coastguard Worker } // namespace ng 104*789431f2SAndroid Build Coastguard Worker } // namespace keymaster 105