blob: 8bf091403e49b278dfd56158257ec47e114ac982 [file] [log] [blame]
Shawn Willden9e149572017-10-30 16:08:21 -06001/*
2 **
3 ** Copyright 2017, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17
Shawn Willdenefd06732017-11-30 19:34:16 -070018#ifndef HIDL_android_hardware_keymaster_V4_0_AndroidKeymaster4Device_H_
19#define HIDL_android_hardware_keymaster_V4_0_AndroidKeymaster4Device_H_
Shawn Willden9e149572017-10-30 16:08:21 -060020
Shawn Willdenefd06732017-11-30 19:34:16 -070021#include <android/hardware/keymaster/4.0/IKeymasterDevice.h>
Shawn Willden9e149572017-10-30 16:08:21 -060022
Shawn Willdenda495752020-01-15 17:46:30 -070023#include <hardware/keymaster_defs.h>
Shawn Willden9e149572017-10-30 16:08:21 -060024#include <hidl/Status.h>
25
26namespace keymaster {
27class AndroidKeymaster;
28class KeymasterContext;
29
30namespace V4_0 {
31namespace ng {
32
33using ::android::sp;
Shawn Willden9e149572017-10-30 16:08:21 -060034using ::android::hardware::hidl_vec;
35using ::android::hardware::Return;
36using ::android::hardware::Void;
Shawn Willden8123da82017-10-31 09:01:26 -060037using ::android::hardware::keymaster::V4_0::ErrorCode;
Shawn Willden18534d52018-01-07 21:16:40 -070038using ::android::hardware::keymaster::V4_0::HardwareAuthenticatorType;
Shawn Willden9e149572017-10-30 16:08:21 -060039using ::android::hardware::keymaster::V4_0::HardwareAuthToken;
Shawn Willden8123da82017-10-31 09:01:26 -060040using ::android::hardware::keymaster::V4_0::HmacSharingParameters;
Shawn Willdenefd06732017-11-30 19:34:16 -070041using ::android::hardware::keymaster::V4_0::IKeymasterDevice;
Shawn Willden9e149572017-10-30 16:08:21 -060042using ::android::hardware::keymaster::V4_0::KeyCharacteristics;
Shawn Willden18534d52018-01-07 21:16:40 -070043using ::android::hardware::keymaster::V4_0::KeyFormat;
Shawn Willden9e149572017-10-30 16:08:21 -060044using ::android::hardware::keymaster::V4_0::KeyParameter;
45using ::android::hardware::keymaster::V4_0::KeyPurpose;
Janis Danisevskis265f9122018-01-02 17:02:21 -080046using ::android::hardware::keymaster::V4_0::SecurityLevel;
Shawn Willden9e149572017-10-30 16:08:21 -060047using ::android::hardware::keymaster::V4_0::Tag;
Shawn Willden8123da82017-10-31 09:01:26 -060048using ::android::hardware::keymaster::V4_0::VerificationToken;
Shawn Willden9e149572017-10-30 16:08:21 -060049
Shawn Willdenefd06732017-11-30 19:34:16 -070050class AndroidKeymaster4Device : public IKeymasterDevice {
Shawn Willden9e149572017-10-30 16:08:21 -060051 public:
Chih-Hung Hsieh82ac3412019-01-02 13:34:23 -080052 explicit AndroidKeymaster4Device(SecurityLevel securityLevel);
Shawn Willdenefd06732017-11-30 19:34:16 -070053 virtual ~AndroidKeymaster4Device();
Shawn Willden9e149572017-10-30 16:08:21 -060054
Shawn Willden8123da82017-10-31 09:01:26 -060055 Return<void> getHardwareInfo(getHardwareInfo_cb _hidl_cb) override;
56 Return<void> getHmacSharingParameters(getHmacSharingParameters_cb _hidl_cb) override;
57 Return<void> computeSharedHmac(const hidl_vec<HmacSharingParameters>& params,
58 computeSharedHmac_cb) override;
59 Return<void> verifyAuthorization(uint64_t challenge,
60 const hidl_vec<KeyParameter>& parametersToVerify,
61 const HardwareAuthToken& authToken,
62 verifyAuthorization_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -060063 Return<ErrorCode> addRngEntropy(const hidl_vec<uint8_t>& data) override;
64 Return<void> generateKey(const hidl_vec<KeyParameter>& keyParams,
65 generateKey_cb _hidl_cb) override;
66 Return<void> getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob,
67 const hidl_vec<uint8_t>& clientId,
68 const hidl_vec<uint8_t>& appData,
69 getKeyCharacteristics_cb _hidl_cb) override;
70 Return<void> importKey(const hidl_vec<KeyParameter>& params, KeyFormat keyFormat,
71 const hidl_vec<uint8_t>& keyData, importKey_cb _hidl_cb) override;
Shawn Willden8123da82017-10-31 09:01:26 -060072 Return<void> importWrappedKey(const hidl_vec<uint8_t>& wrappedKeyData,
73 const hidl_vec<uint8_t>& wrappingKeyBlob,
74 const hidl_vec<uint8_t>& maskingKey,
Shawn Willden3c665a22018-01-19 13:32:42 -070075 const hidl_vec<KeyParameter>& unwrappingParams,
76 uint64_t passwordSid, uint64_t biometricSid,
Shawn Willden8123da82017-10-31 09:01:26 -060077 importWrappedKey_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -060078 Return<void> exportKey(KeyFormat exportFormat, const hidl_vec<uint8_t>& keyBlob,
79 const hidl_vec<uint8_t>& clientId, const hidl_vec<uint8_t>& appData,
80 exportKey_cb _hidl_cb) override;
81 Return<void> attestKey(const hidl_vec<uint8_t>& keyToAttest,
82 const hidl_vec<KeyParameter>& attestParams,
83 attestKey_cb _hidl_cb) override;
84 Return<void> upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade,
85 const hidl_vec<KeyParameter>& upgradeParams,
86 upgradeKey_cb _hidl_cb) override;
87 Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override;
88 Return<ErrorCode> deleteAllKeys() override;
89 Return<ErrorCode> destroyAttestationIds() override;
90 Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
91 const hidl_vec<KeyParameter>& inParams, const HardwareAuthToken& authToken,
92 begin_cb _hidl_cb) override;
93 Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
94 const hidl_vec<uint8_t>& input, const HardwareAuthToken& authToken,
Shawn Willden8123da82017-10-31 09:01:26 -060095 const VerificationToken& verificationToken, update_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -060096 Return<void> finish(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
97 const hidl_vec<uint8_t>& input, const hidl_vec<uint8_t>& signature,
Shawn Willden8123da82017-10-31 09:01:26 -060098 const HardwareAuthToken& authToken,
99 const VerificationToken& verificationToken, finish_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -0600100 Return<ErrorCode> abort(uint64_t operationHandle) override;
101
Shawn Willdenda495752020-01-15 17:46:30 -0700102 protected:
Shawn Willden9e149572017-10-30 16:08:21 -0600103 std::unique_ptr<::keymaster::AndroidKeymaster> impl_;
Janis Danisevskis265f9122018-01-02 17:02:21 -0800104 SecurityLevel securityLevel_;
Shawn Willden9e149572017-10-30 16:08:21 -0600105};
106
Shawn Willdenda495752020-01-15 17:46:30 -0700107// Convert HIDL key parametes to old keymaster param set. Note that this does *not* copy the blobs
108// from keyParams, only pointers to them. The keyParams instance retains ownership and must
109// continue to exist.
110keymaster_key_param_set_t hidlKeyParams2Km(const hidl_vec<KeyParameter>& keyParams);
111
Janis Danisevskis265f9122018-01-02 17:02:21 -0800112IKeymasterDevice* CreateKeymasterDevice(SecurityLevel securityLevel);
Shawn Willden9e149572017-10-30 16:08:21 -0600113
114} // namespace ng
115} // namespace V4_0
116} // namespace keymaster
117
Shawn Willdenefd06732017-11-30 19:34:16 -0700118#endif // HIDL_android_hardware_keymaster_V4_0_AndroidKeymaster4Device_H_