1cc290419Sopenharmony_ci/*
2cc290419Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License.
5cc290419Sopenharmony_ci * You may obtain a copy of the License at
6cc290419Sopenharmony_ci *
7cc290419Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8cc290419Sopenharmony_ci *
9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and
13cc290419Sopenharmony_ci * limitations under the License.
14cc290419Sopenharmony_ci*/
15cc290419Sopenharmony_ci
16cc290419Sopenharmony_ci#include "sudo_iam.h"
17cc290419Sopenharmony_ci#include "account_iam_client.h"
18cc290419Sopenharmony_ci#include "account_iam_info.h"
19cc290419Sopenharmony_ci#include "account_iam_client_callback.h"
20cc290419Sopenharmony_ci#include "i_inputer.h"
21cc290419Sopenharmony_ci
22cc290419Sopenharmony_cistd::condition_variable g_condVarForAuth;
23cc290419Sopenharmony_cibool g_authFinish;
24cc290419Sopenharmony_cistd::mutex g_mutexForAuth;
25cc290419Sopenharmony_ci
26cc290419Sopenharmony_cinamespace OHOS {
27cc290419Sopenharmony_cinamespace UserIam {
28cc290419Sopenharmony_cinamespace PinAuth {
29cc290419Sopenharmony_ci
30cc290419Sopenharmony_civoid SudoIInputer::OnGetData(int32_t authSubType, std::vector<uint8_t> challenge,
31cc290419Sopenharmony_ci    std::shared_ptr<IInputerData> inputerData)
32cc290419Sopenharmony_ci{
33cc290419Sopenharmony_ci    inputerData->OnSetData(authSubType, passwd_);
34cc290419Sopenharmony_ci}
35cc290419Sopenharmony_ci
36cc290419Sopenharmony_civoid SudoIInputer::SetPasswd(char *pwd, int len)
37cc290419Sopenharmony_ci{
38cc290419Sopenharmony_ci    passwd_.resize(len);
39cc290419Sopenharmony_ci    for (int i = 0; i < len; i++) {
40cc290419Sopenharmony_ci        passwd_[i] = *pwd++;
41cc290419Sopenharmony_ci    }
42cc290419Sopenharmony_ci}
43cc290419Sopenharmony_ci
44cc290419Sopenharmony_ciSudoIInputer::~SudoIInputer()
45cc290419Sopenharmony_ci{
46cc290419Sopenharmony_ci    for (int i = 0; i < (int)passwd_.size(); i++) {
47cc290419Sopenharmony_ci        passwd_[i] = 0;
48cc290419Sopenharmony_ci    }
49cc290419Sopenharmony_ci}
50cc290419Sopenharmony_ci
51cc290419Sopenharmony_ci} //PinAuth
52cc290419Sopenharmony_ci} //UserIam
53cc290419Sopenharmony_ci
54cc290419Sopenharmony_cinamespace AccountSA {
55cc290419Sopenharmony_ci
56cc290419Sopenharmony_ciSudoIDMCallback::SudoIDMCallback()
57cc290419Sopenharmony_ci{
58cc290419Sopenharmony_ci    verifyResult_ = false;
59cc290419Sopenharmony_ci}
60cc290419Sopenharmony_ci
61cc290419Sopenharmony_civoid SudoIDMCallback::OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo)
62cc290419Sopenharmony_ci{
63cc290419Sopenharmony_ci    return;
64cc290419Sopenharmony_ci}
65cc290419Sopenharmony_ci
66cc290419Sopenharmony_civoid SudoIDMCallback::OnResult(int32_t result, const Attributes &extraInfo)
67cc290419Sopenharmony_ci{
68cc290419Sopenharmony_ci    verifyResult_ = false;
69cc290419Sopenharmony_ci    if (result == 0) {
70cc290419Sopenharmony_ci        verifyResult_ = true;
71cc290419Sopenharmony_ci    }
72cc290419Sopenharmony_ci
73cc290419Sopenharmony_ci    std::unique_lock<std::mutex> lock { g_mutexForAuth };
74cc290419Sopenharmony_ci    g_authFinish = true;
75cc290419Sopenharmony_ci    g_condVarForAuth.notify_all();
76cc290419Sopenharmony_ci}
77cc290419Sopenharmony_ci
78cc290419Sopenharmony_cibool SudoIDMCallback::GetVerifyResult(void)
79cc290419Sopenharmony_ci{
80cc290419Sopenharmony_ci    return verifyResult_;
81cc290419Sopenharmony_ci}
82cc290419Sopenharmony_ci
83cc290419Sopenharmony_ci} // AccountSA
84cc290419Sopenharmony_ci} //OHOS
85