198b998b59a417bb22b88587eac8311efd08169b9Shawn Willden/* 298b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * Copyright (C) 2018 The Android Open Source Project 398b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * 498b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * Licensed under the Apache License, Version 2.0 (the "License"); 598b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * you may not use this file except in compliance with the License. 698b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * You may obtain a copy of the License at 798b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * 898b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * http://www.apache.org/licenses/LICENSE-2.0 998b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * 1098b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * Unless required by applicable law or agreed to in writing, software 1198b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * distributed under the License is distributed on an "AS IS" BASIS, 1298b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * See the License for the specific language governing permissions and 1498b998b59a417bb22b88587eac8311efd08169b9Shawn Willden * limitations under the License. 1598b998b59a417bb22b88587eac8311efd08169b9Shawn Willden */ 1698b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 1798b998b59a417bb22b88587eac8311efd08169b9Shawn Willden#ifndef HARDWARE_INTERFACES_KEYMASTER_40_SUPPORT_KEYMASTER_UTILS_H_ 1898b998b59a417bb22b88587eac8311efd08169b9Shawn Willden#define HARDWARE_INTERFACES_KEYMASTER_40_SUPPORT_KEYMASTER_UTILS_H_ 1998b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 2098b998b59a417bb22b88587eac8311efd08169b9Shawn Willden#include <android/hardware/keymaster/4.0/types.h> 2198b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 2298b998b59a417bb22b88587eac8311efd08169b9Shawn Willdennamespace android { 2398b998b59a417bb22b88587eac8311efd08169b9Shawn Willdennamespace hardware { 2498b998b59a417bb22b88587eac8311efd08169b9Shawn Willdennamespace keymaster { 2598b998b59a417bb22b88587eac8311efd08169b9Shawn Willdennamespace V4_0 { 26f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willden 27f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willden/** 28f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willden * Define a lexicographical ordering on HmacSharingParameters. The parameters to 29f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willden * IKeymasterDevice::computeSharedHmac are required to be delivered in the order specified by this 30f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willden * comparison operator. 31f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willden */ 32f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willdenbool operator<(const HmacSharingParameters& a, const HmacSharingParameters& b); 33f0f05d4052347dabe063f034956df3b6ed2ad5e1Shawn Willden 3498b998b59a417bb22b88587eac8311efd08169b9Shawn Willdennamespace support { 3598b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 3698b998b59a417bb22b88587eac8311efd08169b9Shawn Willdeninline static hidl_vec<uint8_t> blob2hidlVec(const uint8_t* data, const size_t length, 3798b998b59a417bb22b88587eac8311efd08169b9Shawn Willden bool inPlace = true) { 3898b998b59a417bb22b88587eac8311efd08169b9Shawn Willden hidl_vec<uint8_t> result; 3998b998b59a417bb22b88587eac8311efd08169b9Shawn Willden result.setToExternal(const_cast<unsigned char*>(data), length, !inPlace); 4098b998b59a417bb22b88587eac8311efd08169b9Shawn Willden return result; 4198b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} 4298b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 4398b998b59a417bb22b88587eac8311efd08169b9Shawn Willdeninline static hidl_vec<uint8_t> blob2hidlVec(const std::string& value, bool inPlace = true) { 4498b998b59a417bb22b88587eac8311efd08169b9Shawn Willden hidl_vec<uint8_t> result; 4598b998b59a417bb22b88587eac8311efd08169b9Shawn Willden result.setToExternal(const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(value.data())), 4698b998b59a417bb22b88587eac8311efd08169b9Shawn Willden static_cast<size_t>(value.size()), !inPlace); 4798b998b59a417bb22b88587eac8311efd08169b9Shawn Willden return result; 4898b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} 4998b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 5098b998b59a417bb22b88587eac8311efd08169b9Shawn Willdeninline static hidl_vec<uint8_t> blob2hidlVec(const std::vector<uint8_t>& blob, 5198b998b59a417bb22b88587eac8311efd08169b9Shawn Willden bool inPlace = true) { 5298b998b59a417bb22b88587eac8311efd08169b9Shawn Willden hidl_vec<uint8_t> result; 5398b998b59a417bb22b88587eac8311efd08169b9Shawn Willden result.setToExternal(const_cast<uint8_t*>(blob.data()), static_cast<size_t>(blob.size()), 5498b998b59a417bb22b88587eac8311efd08169b9Shawn Willden !inPlace); 5598b998b59a417bb22b88587eac8311efd08169b9Shawn Willden return result; 5698b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} 5798b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 5898b998b59a417bb22b88587eac8311efd08169b9Shawn WilldenHardwareAuthToken hidlVec2AuthToken(const hidl_vec<uint8_t>& buffer); 5998b998b59a417bb22b88587eac8311efd08169b9Shawn Willdenhidl_vec<uint8_t> authToken2HidlVec(const HardwareAuthToken& token); 6098b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 6198b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} // namespace support 6298b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} // namespace V4_0 6398b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} // namespace keymaster 6498b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} // namespace hardware 6598b998b59a417bb22b88587eac8311efd08169b9Shawn Willden} // namespace android 6698b998b59a417bb22b88587eac8311efd08169b9Shawn Willden 6798b998b59a417bb22b88587eac8311efd08169b9Shawn Willden#endif // HARDWARE_INTERFACES_KEYMASTER_40_SUPPORT_KEYMASTER_UTILS_H_ 68