mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-03 03:14:17 +00:00
This adds device id attestation to the Keymaster 3.0 HAL. Device id attestation must only be offered if the device can permanently destroy device ids on request. The default implementation cannot do this because it lacks storage that would survive device wipes. Hence, the implementation refuses all device id attestation requests. Bug: 34597337 Test: CTS CtsKeystoreTestCases and GTS DeviceIdAttestationHostTest Change-Id: I6ff6146fad4656b8e1367650de922124b3d7f7b2
99 lines
4.5 KiB
C++
99 lines
4.5 KiB
C++
/*
|
|
**
|
|
** Copyright 2016, The Android Open Source Project
|
|
**
|
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
** you may not use this file except in compliance with the License.
|
|
** You may obtain a copy of the License at
|
|
**
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
**
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
** See the License for the specific language governing permissions and
|
|
** limitations under the License.
|
|
*/
|
|
|
|
#ifndef HIDL_GENERATED_android_hardware_keymaster_V3_0_KeymasterDevice_H_
|
|
#define HIDL_GENERATED_android_hardware_keymaster_V3_0_KeymasterDevice_H_
|
|
|
|
#include <hardware/keymaster2.h>
|
|
|
|
#include <android/hardware/keymaster/3.0/IKeymasterDevice.h>
|
|
#include <hidl/Status.h>
|
|
|
|
#include <hidl/MQDescriptor.h>
|
|
namespace android {
|
|
namespace hardware {
|
|
namespace keymaster {
|
|
namespace V3_0 {
|
|
namespace implementation {
|
|
|
|
using ::android::hardware::keymaster::V3_0::ErrorCode;
|
|
using ::android::hardware::keymaster::V3_0::IKeymasterDevice;
|
|
using ::android::hardware::keymaster::V3_0::KeyCharacteristics;
|
|
using ::android::hardware::keymaster::V3_0::KeyFormat;
|
|
using ::android::hardware::keymaster::V3_0::KeyParameter;
|
|
using ::android::hardware::keymaster::V3_0::KeyPurpose;
|
|
using ::android::hardware::Return;
|
|
using ::android::hardware::Void;
|
|
using ::android::hardware::hidl_vec;
|
|
using ::android::hardware::hidl_string;
|
|
using ::android::sp;
|
|
|
|
class KeymasterDevice : public IKeymasterDevice {
|
|
public:
|
|
KeymasterDevice(keymaster2_device_t* dev, uint32_t hardware_version, bool hardware_supports_ec)
|
|
: keymaster_device_(dev), hardware_version_(hardware_version),
|
|
hardware_supports_ec_(hardware_supports_ec) {}
|
|
virtual ~KeymasterDevice();
|
|
|
|
// Methods from ::android::hardware::keymaster::V3_0::IKeymasterDevice follow.
|
|
Return<void> getHardwareFeatures(getHardwareFeatures_cb _hidl_cb);
|
|
Return<ErrorCode> addRngEntropy(const hidl_vec<uint8_t>& data) override;
|
|
Return<void> generateKey(const hidl_vec<KeyParameter>& keyParams,
|
|
generateKey_cb _hidl_cb) override;
|
|
Return<void> getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob,
|
|
const hidl_vec<uint8_t>& clientId,
|
|
const hidl_vec<uint8_t>& appData,
|
|
getKeyCharacteristics_cb _hidl_cb) override;
|
|
Return<void> importKey(const hidl_vec<KeyParameter>& params, KeyFormat keyFormat,
|
|
const hidl_vec<uint8_t>& keyData, importKey_cb _hidl_cb) override;
|
|
Return<void> exportKey(KeyFormat exportFormat, const hidl_vec<uint8_t>& keyBlob,
|
|
const hidl_vec<uint8_t>& clientId, const hidl_vec<uint8_t>& appData,
|
|
exportKey_cb _hidl_cb) override;
|
|
Return<void> attestKey(const hidl_vec<uint8_t>& keyToAttest,
|
|
const hidl_vec<KeyParameter>& attestParams,
|
|
attestKey_cb _hidl_cb) override;
|
|
Return<void> upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade,
|
|
const hidl_vec<KeyParameter>& upgradeParams,
|
|
upgradeKey_cb _hidl_cb) override;
|
|
Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override;
|
|
Return<ErrorCode> deleteAllKeys() override;
|
|
Return<ErrorCode> destroyAttestationIds() override;
|
|
Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
|
|
const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) override;
|
|
Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
|
|
const hidl_vec<uint8_t>& input, update_cb _hidl_cb) override;
|
|
Return<void> finish(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
|
|
const hidl_vec<uint8_t>& input, const hidl_vec<uint8_t>& signature,
|
|
finish_cb _hidl_cb) override;
|
|
Return<ErrorCode> abort(uint64_t operationHandle) override;
|
|
|
|
private:
|
|
keymaster2_device_t* keymaster_device_;
|
|
uint32_t hardware_version_;
|
|
bool hardware_supports_ec_;
|
|
};
|
|
|
|
extern "C" IKeymasterDevice* HIDL_FETCH_IKeymasterDevice(const char* name);
|
|
|
|
} // namespace implementation
|
|
} // namespace V3_0
|
|
} // namespace keymaster
|
|
} // namespace hardware
|
|
} // namespace android
|
|
|
|
#endif // HIDL_GENERATED_android_hardware_keymaster_V3_0_KeymasterDevice_H_
|