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 #include "ConfirmationUI.h"
19
20 #include "PlatformSpecifics.h"
21
22 #include <android/hardware/confirmationui/support/cbor.h>
23 #include <android/hardware/confirmationui/support/confirmationui_utils.h>
24
25 #include <android/hardware/confirmationui/1.0/generic/GenericOperation.h>
26
27 #include <time.h>
28
29 namespace android {
30 namespace hardware {
31 namespace confirmationui {
32 namespace V1_0 {
33 namespace implementation {
34
35 using ::android::hardware::confirmationui::V1_0::generic::Operation;
36 using ::android::hardware::keymaster::V4_0::HardwareAuthToken;
37
38 uint8_t hmacKey[32];
39
40 // Methods from ::android::hardware::confirmationui::V1_0::IConfirmationUI follow.
promptUserConfirmation(const sp<IConfirmationResultCallback> & resultCB,const hidl_string & promptText,const hidl_vec<uint8_t> & extraData,const hidl_string & locale,const hidl_vec<UIOption> & uiOptions)41 Return<ResponseCode> ConfirmationUI::promptUserConfirmation(
42 const sp<IConfirmationResultCallback>& resultCB, const hidl_string& promptText,
43 const hidl_vec<uint8_t>& extraData, const hidl_string& locale,
44 const hidl_vec<UIOption>& uiOptions) {
45 auto& operation = MyOperation::get();
46 auto result = operation.init(resultCB, promptText, extraData, locale, uiOptions);
47 if (result == ResponseCode::OK) {
48 // This is where implementation start the UI and then call setPending on success.
49 operation.setPending();
50 }
51 return result;
52 }
53
deliverSecureInputEvent(const HardwareAuthToken & secureInputToken)54 Return<ResponseCode> ConfirmationUI::deliverSecureInputEvent(
55 const HardwareAuthToken& secureInputToken) {
56 auto& operation = MyOperation::get();
57 return operation.deliverSecureInputEvent(secureInputToken);
58 }
59
abort()60 Return<void> ConfirmationUI::abort() {
61 auto& operation = MyOperation::get();
62 operation.abort();
63 operation.finalize(hmacKey);
64 return Void();
65 }
66
67 } // namespace implementation
68 } // namespace V1_0
69 } // namespace confirmationui
70 } // namespace hardware
71 } // namespace android
72