105 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			105 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.
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <android/hardware/keymaster/3.0/IKeymasterDevice.h>
 | |
| 
 | |
| #include <hidl/MQDescriptor.h>
 | |
| #include <hidl/Status.h>
 | |
| 
 | |
| typedef struct keymaster0_device keymaster0_device_t;
 | |
| typedef struct keymaster1_device keymaster1_device_t;
 | |
| typedef struct keymaster2_device keymaster2_device_t;
 | |
| 
 | |
| namespace keymaster {
 | |
| class AndroidKeymaster;
 | |
| class KeymasterContext;
 | |
| 
 | |
| namespace ng {
 | |
| 
 | |
| using ::android::sp;
 | |
| using ::android::hardware::hidl_string;
 | |
| using ::android::hardware::hidl_vec;
 | |
| using ::android::hardware::Return;
 | |
| using ::android::hardware::Void;
 | |
| 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;
 | |
| 
 | |
| enum class KeymasterHardwareProfile : uint32_t {
 | |
|     SW,
 | |
|     KM0,
 | |
|     KM1,
 | |
|     KM2,
 | |
| };
 | |
| 
 | |
| class AndroidKeymaster3Device : public IKeymasterDevice {
 | |
|   public:
 | |
|     AndroidKeymaster3Device();
 | |
|     AndroidKeymaster3Device(KeymasterContext* context, KeymasterHardwareProfile profile);
 | |
|     virtual ~AndroidKeymaster3Device();
 | |
| 
 | |
|     // 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:
 | |
|     std::unique_ptr<::keymaster::AndroidKeymaster> impl_;
 | |
|     KeymasterHardwareProfile profile_;
 | |
| };
 | |
| 
 | |
| IKeymasterDevice* CreateKeymasterDevice();
 | |
| 
 | |
| IKeymasterDevice* CreateKeymasterDevice(keymaster2_device_t* km2_device);
 | |
| IKeymasterDevice* CreateKeymasterDevice(keymaster1_device_t* km1_device);
 | |
| IKeymasterDevice* CreateKeymasterDevice(keymaster0_device_t* km0_device);
 | |
| 
 | |
| }  // namespace ng
 | |
| }  // namespace keymaster
 |