blob: 8d57fd29ce26ce13d48e9a6acbf4b7fc69c2bfb9 [file] [log] [blame]
Shawn Willden8ae41b52019-10-28 12:54:16 -06001/*
2 **
3 ** Copyright 2019, 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 Willdenda495752020-01-15 17:46:30 -070018#define LOG_TAG "android.hardware.keymaster@4.1 ref impl"
19#include <log/log.h>
20
Shawn Willden8ae41b52019-10-28 12:54:16 -060021#include "include/AndroidKeymaster41Device.h"
22
Shawn Willdenda495752020-01-15 17:46:30 -070023#include <keymaster/android_keymaster.h>
24
Shawn Willden8ae41b52019-10-28 12:54:16 -060025namespace keymaster::V4_1 {
26
Shawn Willdenda495752020-01-15 17:46:30 -070027using V4_0::ng::hidlKeyParams2Km;
28
29namespace {
30
31inline V41ErrorCode legacy_enum_conversion(const keymaster_error_t value) {
32 return static_cast<V41ErrorCode>(value);
33}
34
35} // namespace
36
Shawn Willden8ae41b52019-10-28 12:54:16 -060037IKeymasterDevice* CreateKeymasterDevice(SecurityLevel securityLevel) {
38 return new AndroidKeymaster41Device(securityLevel);
39}
40
Shawn Willdenda495752020-01-15 17:46:30 -070041Return<V41ErrorCode>
42AndroidKeymaster41Device::deviceLocked(bool passwordOnly,
43 const VerificationToken& verificationToken) {
44 keymaster::VerificationToken serializableToken;
45 serializableToken.challenge = verificationToken.challenge;
46 serializableToken.timestamp = verificationToken.timestamp;
47 serializableToken.parameters_verified.Reinitialize(
48 hidlKeyParams2Km(verificationToken.parametersVerified));
49 serializableToken.security_level =
50 static_cast<keymaster_security_level_t>(verificationToken.securityLevel);
51 serializableToken.mac =
52 KeymasterBlob(verificationToken.mac.data(), verificationToken.mac.size());
53 return legacy_enum_conversion(
Bonian Chenebbac3d2021-01-06 06:39:50 +000054 impl_->DeviceLocked(DeviceLockedRequest(passwordOnly, std::move(serializableToken))).error);
Shawn Willdenda495752020-01-15 17:46:30 -070055}
56
57Return<V41ErrorCode> AndroidKeymaster41Device::earlyBootEnded() {
58 return legacy_enum_conversion(impl_->EarlyBootEnded().error);
59}
60
Shawn Willden8ae41b52019-10-28 12:54:16 -060061} // namespace keymaster::V4_1