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