Home | History | Annotate | Download | only in keymasterV4_0
      1 /*
      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 
     18 #ifndef HARDWARE_INTERFACES_KEYMASTER_40_SUPPORT_KEYMASTER_4_H_
     19 #define HARDWARE_INTERFACES_KEYMASTER_40_SUPPORT_KEYMASTER_4_H_
     20 
     21 #include "Keymaster.h"
     22 
     23 namespace android {
     24 namespace hardware {
     25 namespace keymaster {
     26 namespace V4_0 {
     27 namespace support {
     28 
     29 using android::sp;
     30 using IKeymaster4Device = ::android::hardware::keymaster::V4_0::IKeymasterDevice;
     31 
     32 class Keymaster4 : public Keymaster {
     33    public:
     34     using WrappedIKeymasterDevice = IKeymaster4Device;
     35     Keymaster4(sp<IKeymasterDevice> km4_dev, const hidl_string& instanceName)
     36         : Keymaster(IKeymaster4Device::descriptor, instanceName),
     37           haveVersion_(false),
     38           dev_(km4_dev) {}
     39 
     40     const VersionResult& halVersion() const override {
     41         const_cast<Keymaster4*>(this)->getVersionIfNeeded();
     42         return version_;
     43     }
     44 
     45     Return<void> getHardwareInfo(getHardwareInfo_cb _hidl_cb) override {
     46         return dev_->getHardwareInfo(_hidl_cb);
     47     }
     48 
     49     Return<void> getHmacSharingParameters(getHmacSharingParameters_cb _hidl_cb) override {
     50         return dev_->getHmacSharingParameters(_hidl_cb);
     51     }
     52 
     53     Return<void> computeSharedHmac(const hidl_vec<HmacSharingParameters>& params,
     54                                    computeSharedHmac_cb _hidl_cb) override {
     55         return dev_->computeSharedHmac(params, _hidl_cb);
     56     }
     57 
     58     Return<void> verifyAuthorization(uint64_t operationHandle, const hidl_vec<KeyParameter>& params,
     59                                      const HardwareAuthToken& authToken,
     60                                      verifyAuthorization_cb _hidl_cb) override {
     61         return dev_->verifyAuthorization(operationHandle, params, authToken, _hidl_cb);
     62     }
     63 
     64     Return<ErrorCode> addRngEntropy(const hidl_vec<uint8_t>& data) override {
     65         return dev_->addRngEntropy(data);
     66     }
     67 
     68     Return<void> generateKey(const hidl_vec<KeyParameter>& keyParams,
     69                              generateKey_cb _hidl_cb) override {
     70         return dev_->generateKey(keyParams, _hidl_cb);
     71     }
     72 
     73     Return<void> getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob,
     74                                        const hidl_vec<uint8_t>& clientId,
     75                                        const hidl_vec<uint8_t>& appData,
     76                                        getKeyCharacteristics_cb _hidl_cb) override {
     77         return dev_->getKeyCharacteristics(keyBlob, clientId, appData, _hidl_cb);
     78     }
     79 
     80     Return<void> importKey(const hidl_vec<KeyParameter>& params, KeyFormat keyFormat,
     81                            const hidl_vec<uint8_t>& keyData, importKey_cb _hidl_cb) override {
     82         return dev_->importKey(params, keyFormat, keyData, _hidl_cb);
     83     }
     84 
     85     Return<void> importWrappedKey(const hidl_vec<uint8_t>& wrappedKeyData,
     86                                   const hidl_vec<uint8_t>& wrappingKeyBlob,
     87                                   const hidl_vec<uint8_t>& maskingKey,
     88                                   const hidl_vec<KeyParameter>& unwrappingParams,
     89                                   uint64_t passwordSid, uint64_t biometricSid,
     90                                   importWrappedKey_cb _hidl_cb) {
     91         return dev_->importWrappedKey(wrappedKeyData, wrappingKeyBlob, maskingKey, unwrappingParams,
     92                                       passwordSid, biometricSid, _hidl_cb);
     93     }
     94 
     95     Return<void> exportKey(KeyFormat exportFormat, const hidl_vec<uint8_t>& keyBlob,
     96                            const hidl_vec<uint8_t>& clientId, const hidl_vec<uint8_t>& appData,
     97                            exportKey_cb _hidl_cb) override {
     98         return dev_->exportKey(exportFormat, keyBlob, clientId, appData, _hidl_cb);
     99     }
    100 
    101     Return<void> attestKey(const hidl_vec<uint8_t>& keyToAttest,
    102                            const hidl_vec<KeyParameter>& attestParams,
    103                            attestKey_cb _hidl_cb) override {
    104         return dev_->attestKey(keyToAttest, attestParams, _hidl_cb);
    105     }
    106 
    107     Return<void> upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade,
    108                             const hidl_vec<KeyParameter>& upgradeParams,
    109                             upgradeKey_cb _hidl_cb) override {
    110         return dev_->upgradeKey(keyBlobToUpgrade, upgradeParams, _hidl_cb);
    111     }
    112 
    113     Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override {
    114         return dev_->deleteKey(keyBlob);
    115     }
    116 
    117     Return<ErrorCode> deleteAllKeys() override { return dev_->deleteAllKeys(); }
    118 
    119     Return<ErrorCode> destroyAttestationIds() override { return dev_->destroyAttestationIds(); }
    120 
    121     Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
    122                        const hidl_vec<KeyParameter>& inParams, const HardwareAuthToken& authToken,
    123                        begin_cb _hidl_cb) override {
    124         return dev_->begin(purpose, key, inParams, authToken, _hidl_cb);
    125     }
    126 
    127     Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
    128                         const hidl_vec<uint8_t>& input, const HardwareAuthToken& authToken,
    129                         const VerificationToken& verificationToken, update_cb _hidl_cb) override {
    130         return dev_->update(operationHandle, inParams, input, authToken, verificationToken,
    131                             _hidl_cb);
    132     }
    133 
    134     Return<void> finish(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
    135                         const hidl_vec<uint8_t>& input, const hidl_vec<uint8_t>& signature,
    136                         const HardwareAuthToken& authToken,
    137                         const VerificationToken& verificationToken, finish_cb _hidl_cb) override {
    138         return dev_->finish(operationHandle, inParams, input, signature, authToken,
    139                             verificationToken, _hidl_cb);
    140     }
    141 
    142     Return<ErrorCode> abort(uint64_t operationHandle) override {
    143         return dev_->abort(operationHandle);
    144     }
    145 
    146    private:
    147     void getVersionIfNeeded();
    148 
    149     bool haveVersion_;
    150     VersionResult version_;
    151     sp<IKeymaster4Device> dev_;
    152 };
    153 
    154 }  // namespace support
    155 }  // namespace V4_0
    156 }  // namespace keymaster
    157 }  // namespace hardware
    158 }  // namespace android
    159 
    160 #endif  // HARDWARE_INTERFACES_KEYMASTER_40_SUPPORT_KEYMASTER_4_H_
    161