14faa1673Sopenharmony_ci/*
24faa1673Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
34faa1673Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44faa1673Sopenharmony_ci * you may not use this file except in compliance with the License.
54faa1673Sopenharmony_ci * You may obtain a copy of the License at
64faa1673Sopenharmony_ci *
74faa1673Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84faa1673Sopenharmony_ci *
94faa1673Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104faa1673Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114faa1673Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124faa1673Sopenharmony_ci * See the License for the specific language governing permissions and
134faa1673Sopenharmony_ci * limitations under the License.
144faa1673Sopenharmony_ci */
154faa1673Sopenharmony_ci
164faa1673Sopenharmony_ci#include "alloc_token.h"
174faa1673Sopenharmony_ci
184faa1673Sopenharmony_ci#include <string>
194faa1673Sopenharmony_ci#include "access_token.h"
204faa1673Sopenharmony_ci#include "accesstoken_kit.h"
214faa1673Sopenharmony_ci#include "nativetoken_kit.h"
224faa1673Sopenharmony_ci#include "permission_def.h"
234faa1673Sopenharmony_ci#include "permission_state_full.h"
244faa1673Sopenharmony_ci#include "token_setproc.h"
254faa1673Sopenharmony_ci
264faa1673Sopenharmony_cinamespace OHOS {
274faa1673Sopenharmony_ci    const std::string SET_POLICY_PERMISSION = "ohos.permission.SET_SANDBOX_POLICY";
284faa1673Sopenharmony_ci    const std::string ACCESS_PERSIST_PERMISSION = "ohos.permission.FILE_ACCESS_PERSIST";
294faa1673Sopenharmony_ci    uint64_t g_mockToken;
304faa1673Sopenharmony_ci    Security::AccessToken::PermissionStateFull g_testState1 = {
314faa1673Sopenharmony_ci        .permissionName = SET_POLICY_PERMISSION,
324faa1673Sopenharmony_ci        .isGeneral = true,
334faa1673Sopenharmony_ci        .resDeviceID = {"1"},
344faa1673Sopenharmony_ci        .grantStatus = {0},
354faa1673Sopenharmony_ci        .grantFlags = {0},
364faa1673Sopenharmony_ci    };
374faa1673Sopenharmony_ci    Security::AccessToken::PermissionStateFull g_testState2 = {
384faa1673Sopenharmony_ci        .permissionName = ACCESS_PERSIST_PERMISSION,
394faa1673Sopenharmony_ci        .isGeneral = true,
404faa1673Sopenharmony_ci        .resDeviceID = {"1"},
414faa1673Sopenharmony_ci        .grantStatus = {0},
424faa1673Sopenharmony_ci        .grantFlags = {0},
434faa1673Sopenharmony_ci    };
444faa1673Sopenharmony_ci    Security::AccessToken::HapInfoParams g_testInfoParms = {
454faa1673Sopenharmony_ci        .userID = 1,
464faa1673Sopenharmony_ci        .bundleName = "sandbox_manager_test",
474faa1673Sopenharmony_ci        .instIndex = 0,
484faa1673Sopenharmony_ci        .appIDDesc = "test"
494faa1673Sopenharmony_ci    };
504faa1673Sopenharmony_ci
514faa1673Sopenharmony_ci    Security::AccessToken::HapPolicyParams g_testPolicyPrams = {
524faa1673Sopenharmony_ci        .apl = Security::AccessToken::APL_NORMAL,
534faa1673Sopenharmony_ci        .domain = "test.domain",
544faa1673Sopenharmony_ci        .permList = {},
554faa1673Sopenharmony_ci        .permStateList = {g_testState1, g_testState2}
564faa1673Sopenharmony_ci    };
574faa1673Sopenharmony_ci
584faa1673Sopenharmony_ci    bool AllocTokenWithFuzz(const uint8_t *data, size_t size, bool(*func)(const uint8_t *, size_t))
594faa1673Sopenharmony_ci    {
604faa1673Sopenharmony_ci        AllocToken();
614faa1673Sopenharmony_ci        bool ret = func(data, size);
624faa1673Sopenharmony_ci        DeleteToken();
634faa1673Sopenharmony_ci        return ret;
644faa1673Sopenharmony_ci    }
654faa1673Sopenharmony_ci
664faa1673Sopenharmony_ci    void AllocToken()
674faa1673Sopenharmony_ci    {
684faa1673Sopenharmony_ci        Security::AccessToken::AccessTokenIDEx tokenIdEx = {0};
694faa1673Sopenharmony_ci        tokenIdEx = Security::AccessToken::AccessTokenKit::AllocHapToken(g_testInfoParms, g_testPolicyPrams);
704faa1673Sopenharmony_ci        g_mockToken = tokenIdEx.tokenIdExStruct.tokenID;
714faa1673Sopenharmony_ci        SetSelfTokenID(tokenIdEx.tokenIdExStruct.tokenID);
724faa1673Sopenharmony_ci    }
734faa1673Sopenharmony_ci
744faa1673Sopenharmony_ci    void DeleteToken()
754faa1673Sopenharmony_ci    {
764faa1673Sopenharmony_ci        Security::AccessToken::AccessTokenKit::DeleteToken(g_mockToken);
774faa1673Sopenharmony_ci    }
784faa1673Sopenharmony_ci}
794faa1673Sopenharmony_ci
80