blob: 54b263e7c01137a38698256a99940f8e14405703 [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>
Shawn Willden6daf9842020-11-19 10:11:47 -070025#include <keymaster/km_version.h>
Shawn Willden9e149572017-10-30 16:08:21 -060026
27namespace keymaster {
28class AndroidKeymaster;
29class KeymasterContext;
30
31namespace V4_0 {
32namespace ng {
33
34using ::android::sp;
Shawn Willden9e149572017-10-30 16:08:21 -060035using ::android::hardware::hidl_vec;
36using ::android::hardware::Return;
37using ::android::hardware::Void;
Shawn Willden8123da82017-10-31 09:01:26 -060038using ::android::hardware::keymaster::V4_0::ErrorCode;
Shawn Willden18534d52018-01-07 21:16:40 -070039using ::android::hardware::keymaster::V4_0::HardwareAuthenticatorType;
Shawn Willden9e149572017-10-30 16:08:21 -060040using ::android::hardware::keymaster::V4_0::HardwareAuthToken;
Shawn Willden8123da82017-10-31 09:01:26 -060041using ::android::hardware::keymaster::V4_0::HmacSharingParameters;
Shawn Willdenefd06732017-11-30 19:34:16 -070042using ::android::hardware::keymaster::V4_0::IKeymasterDevice;
Shawn Willden9e149572017-10-30 16:08:21 -060043using ::android::hardware::keymaster::V4_0::KeyCharacteristics;
Shawn Willden18534d52018-01-07 21:16:40 -070044using ::android::hardware::keymaster::V4_0::KeyFormat;
Shawn Willden9e149572017-10-30 16:08:21 -060045using ::android::hardware::keymaster::V4_0::KeyParameter;
46using ::android::hardware::keymaster::V4_0::KeyPurpose;
Janis Danisevskis265f9122018-01-02 17:02:21 -080047using ::android::hardware::keymaster::V4_0::SecurityLevel;
Shawn Willden9e149572017-10-30 16:08:21 -060048using ::android::hardware::keymaster::V4_0::Tag;
Shawn Willden8123da82017-10-31 09:01:26 -060049using ::android::hardware::keymaster::V4_0::VerificationToken;
Shawn Willden9e149572017-10-30 16:08:21 -060050
Shawn Willdenefd06732017-11-30 19:34:16 -070051class AndroidKeymaster4Device : public IKeymasterDevice {
Shawn Willden9e149572017-10-30 16:08:21 -060052 public:
Shawn Willden6daf9842020-11-19 10:11:47 -070053 explicit AndroidKeymaster4Device(SecurityLevel securityLevel)
54 : AndroidKeymaster4Device(KmVersion::KEYMASTER_4, securityLevel) {}
Shawn Willdenefd06732017-11-30 19:34:16 -070055 virtual ~AndroidKeymaster4Device();
Shawn Willden9e149572017-10-30 16:08:21 -060056
Shawn Willden8123da82017-10-31 09:01:26 -060057 Return<void> getHardwareInfo(getHardwareInfo_cb _hidl_cb) override;
58 Return<void> getHmacSharingParameters(getHmacSharingParameters_cb _hidl_cb) override;
59 Return<void> computeSharedHmac(const hidl_vec<HmacSharingParameters>& params,
60 computeSharedHmac_cb) override;
61 Return<void> verifyAuthorization(uint64_t challenge,
62 const hidl_vec<KeyParameter>& parametersToVerify,
63 const HardwareAuthToken& authToken,
64 verifyAuthorization_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -060065 Return<ErrorCode> addRngEntropy(const hidl_vec<uint8_t>& data) override;
66 Return<void> generateKey(const hidl_vec<KeyParameter>& keyParams,
67 generateKey_cb _hidl_cb) override;
68 Return<void> getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob,
69 const hidl_vec<uint8_t>& clientId,
70 const hidl_vec<uint8_t>& appData,
71 getKeyCharacteristics_cb _hidl_cb) override;
72 Return<void> importKey(const hidl_vec<KeyParameter>& params, KeyFormat keyFormat,
73 const hidl_vec<uint8_t>& keyData, importKey_cb _hidl_cb) override;
Shawn Willden8123da82017-10-31 09:01:26 -060074 Return<void> importWrappedKey(const hidl_vec<uint8_t>& wrappedKeyData,
75 const hidl_vec<uint8_t>& wrappingKeyBlob,
76 const hidl_vec<uint8_t>& maskingKey,
Shawn Willden3c665a22018-01-19 13:32:42 -070077 const hidl_vec<KeyParameter>& unwrappingParams,
78 uint64_t passwordSid, uint64_t biometricSid,
Shawn Willden8123da82017-10-31 09:01:26 -060079 importWrappedKey_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -060080 Return<void> exportKey(KeyFormat exportFormat, const hidl_vec<uint8_t>& keyBlob,
81 const hidl_vec<uint8_t>& clientId, const hidl_vec<uint8_t>& appData,
82 exportKey_cb _hidl_cb) override;
83 Return<void> attestKey(const hidl_vec<uint8_t>& keyToAttest,
84 const hidl_vec<KeyParameter>& attestParams,
85 attestKey_cb _hidl_cb) override;
86 Return<void> upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade,
87 const hidl_vec<KeyParameter>& upgradeParams,
88 upgradeKey_cb _hidl_cb) override;
89 Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override;
90 Return<ErrorCode> deleteAllKeys() override;
91 Return<ErrorCode> destroyAttestationIds() override;
92 Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
93 const hidl_vec<KeyParameter>& inParams, const HardwareAuthToken& authToken,
94 begin_cb _hidl_cb) override;
95 Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
96 const hidl_vec<uint8_t>& input, const HardwareAuthToken& authToken,
Shawn Willden8123da82017-10-31 09:01:26 -060097 const VerificationToken& verificationToken, update_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -060098 Return<void> finish(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
99 const hidl_vec<uint8_t>& input, const hidl_vec<uint8_t>& signature,
Shawn Willden8123da82017-10-31 09:01:26 -0600100 const HardwareAuthToken& authToken,
101 const VerificationToken& verificationToken, finish_cb _hidl_cb) override;
Shawn Willden9e149572017-10-30 16:08:21 -0600102 Return<ErrorCode> abort(uint64_t operationHandle) override;
103
Shawn Willdenda495752020-01-15 17:46:30 -0700104 protected:
Shawn Willden6daf9842020-11-19 10:11:47 -0700105 AndroidKeymaster4Device(::keymaster::KmVersion version, SecurityLevel securityLevel);
106
Shawn Willden9e149572017-10-30 16:08:21 -0600107 std::unique_ptr<::keymaster::AndroidKeymaster> impl_;
Janis Danisevskis265f9122018-01-02 17:02:21 -0800108 SecurityLevel securityLevel_;
Shawn Willden9e149572017-10-30 16:08:21 -0600109};
110
Shawn Willdenda495752020-01-15 17:46:30 -0700111// Convert HIDL key parametes to old keymaster param set. Note that this does *not* copy the blobs
112// from keyParams, only pointers to them. The keyParams instance retains ownership and must
113// continue to exist.
114keymaster_key_param_set_t hidlKeyParams2Km(const hidl_vec<KeyParameter>& keyParams);
115
Janis Danisevskis265f9122018-01-02 17:02:21 -0800116IKeymasterDevice* CreateKeymasterDevice(SecurityLevel securityLevel);
Shawn Willden9e149572017-10-30 16:08:21 -0600117
118} // namespace ng
119} // namespace V4_0
120} // namespace keymaster
121
Shawn Willdenefd06732017-11-30 19:34:16 -0700122#endif // HIDL_android_hardware_keymaster_V4_0_AndroidKeymaster4Device_H_