154aa6d63Sopenharmony_ci/* 254aa6d63Sopenharmony_ci * Copyright (c) 2024-2024 Huawei Device Co., Ltd. 354aa6d63Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 454aa6d63Sopenharmony_ci * you may not use this file except in compliance with the License. 554aa6d63Sopenharmony_ci * You may obtain a copy of the License at 654aa6d63Sopenharmony_ci * 754aa6d63Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 854aa6d63Sopenharmony_ci * 954aa6d63Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1054aa6d63Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1154aa6d63Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1254aa6d63Sopenharmony_ci * See the License for the specific language governing permissions and 1354aa6d63Sopenharmony_ci * limitations under the License. 1454aa6d63Sopenharmony_ci */ 1554aa6d63Sopenharmony_ci 1654aa6d63Sopenharmony_ci#include "params_run_tool.h" 1754aa6d63Sopenharmony_ci#include <unistd.h> 1854aa6d63Sopenharmony_ci#include <memory> 1954aa6d63Sopenharmony_ci#include <filesystem> 2054aa6d63Sopenharmony_ci 2154aa6d63Sopenharmony_ci#include "constant.h" 2254aa6d63Sopenharmony_ci#include "help.h" 2354aa6d63Sopenharmony_ci 2454aa6d63Sopenharmony_cinamespace OHOS { 2554aa6d63Sopenharmony_cinamespace SignatureTools { 2654aa6d63Sopenharmony_ciconst std::string ParamsRunTool::VERSION = "1.0.0"; 2754aa6d63Sopenharmony_ci 2854aa6d63Sopenharmony_cistd::vector<std::string> ParamsRunTool::InformList = { 2954aa6d63Sopenharmony_ci "bin", 3054aa6d63Sopenharmony_ci "elf", 3154aa6d63Sopenharmony_ci "zip" 3254aa6d63Sopenharmony_ci}; 3354aa6d63Sopenharmony_ci 3454aa6d63Sopenharmony_cistatic std::unordered_map <std::string, 3554aa6d63Sopenharmony_ci std::function<bool(Options* params, SignToolServiceImpl& api)>> DISPATCH_RUN_METHOD { 3654aa6d63Sopenharmony_ci {SIGN_APP, ParamsRunTool::RunSignApp}, 3754aa6d63Sopenharmony_ci {SIGN_PROFILE, ParamsRunTool::RunSignProfile}, 3854aa6d63Sopenharmony_ci {VERIFY_APP, ParamsRunTool::RunVerifyApp}, 3954aa6d63Sopenharmony_ci {VERIFY_PROFILE, ParamsRunTool::RunVerifyProfile} 4054aa6d63Sopenharmony_ci}; 4154aa6d63Sopenharmony_ci 4254aa6d63Sopenharmony_cistatic std::unordered_map <std::string, 4354aa6d63Sopenharmony_ci std::function<bool(Options* params, SignToolServiceImpl& api)>> GENERATOR_RUN_METHOD { 4454aa6d63Sopenharmony_ci {GENERATE_KEYPAIR, ParamsRunTool::RunKeypair}, 4554aa6d63Sopenharmony_ci {GENERATE_CSR, ParamsRunTool::RunCsr}, 4654aa6d63Sopenharmony_ci {GENERATE_CA, ParamsRunTool::RunCa}, 4754aa6d63Sopenharmony_ci {GENERATE_APP_CERT, ParamsRunTool::RunAppCert}, 4854aa6d63Sopenharmony_ci {GENERATE_PROFILE_CERT, ParamsRunTool::RunProfileCert}, 4954aa6d63Sopenharmony_ci {GENERATE_CERT, ParamsRunTool::RunCert}, 5054aa6d63Sopenharmony_ci}; 5154aa6d63Sopenharmony_ci 5254aa6d63Sopenharmony_ci 5354aa6d63Sopenharmony_cibool ParamsRunTool::ProcessCmd(char** args, size_t size) 5454aa6d63Sopenharmony_ci{ 5554aa6d63Sopenharmony_ci if (size < CmdUtil::ARGS_MIN_LEN) { 5654aa6d63Sopenharmony_ci PrintHelp(); 5754aa6d63Sopenharmony_ci return true; 5854aa6d63Sopenharmony_ci } 5954aa6d63Sopenharmony_ci if (args == nullptr || strcmp(args[1], "") == 0) { 6054aa6d63Sopenharmony_ci PrintHelp(); 6154aa6d63Sopenharmony_ci return true; 6254aa6d63Sopenharmony_ci } else if (strcmp(args[1], "-h") == 0 || strcmp(args[1], "-help") == 0) { 6354aa6d63Sopenharmony_ci PrintHelp(); 6454aa6d63Sopenharmony_ci return true; 6554aa6d63Sopenharmony_ci } else if (strcmp(args[1], "-v") == 0 || strcmp(args[1], "-version") == 0) { 6654aa6d63Sopenharmony_ci Version(); 6754aa6d63Sopenharmony_ci return true; 6854aa6d63Sopenharmony_ci } else { 6954aa6d63Sopenharmony_ci std::shared_ptr<SignToolServiceImpl> serviceApi = std::make_shared<SignToolServiceImpl>(); 7054aa6d63Sopenharmony_ci ParamsSharedPtr param = std::make_shared<Params>(); 7154aa6d63Sopenharmony_ci if (!CmdUtil::Convert2Params(args, size, param)) { 7254aa6d63Sopenharmony_ci PrintMsg(param->GetMethod() + " failed"); 7354aa6d63Sopenharmony_ci return false; 7454aa6d63Sopenharmony_ci } 7554aa6d63Sopenharmony_ci PrintMsg("Start " + param->GetMethod()); 7654aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGD("%s run start time ", param->GetMethod().c_str()); 7754aa6d63Sopenharmony_ci if (!DispatchParams(param, *serviceApi)) { 7854aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGD("%s run end time ", param->GetMethod().c_str()); 7954aa6d63Sopenharmony_ci PrintMsg(param->GetMethod() + " failed"); 8054aa6d63Sopenharmony_ci return false; 8154aa6d63Sopenharmony_ci } 8254aa6d63Sopenharmony_ci PrintMsg(param->GetMethod() + " success"); 8354aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGD("%s run end time ", param->GetMethod().c_str()); 8454aa6d63Sopenharmony_ci } 8554aa6d63Sopenharmony_ci return true; 8654aa6d63Sopenharmony_ci} 8754aa6d63Sopenharmony_ci 8854aa6d63Sopenharmony_cibool ParamsRunTool::CallGenerators(const ParamsSharedPtr& params, SignToolServiceImpl& api) 8954aa6d63Sopenharmony_ci{ 9054aa6d63Sopenharmony_ci bool isSuccess = false; 9154aa6d63Sopenharmony_ci std::string method = params->GetMethod(); 9254aa6d63Sopenharmony_ci auto it = GENERATOR_RUN_METHOD.find(method); 9354aa6d63Sopenharmony_ci if (it == GENERATOR_RUN_METHOD.end()) { 9454aa6d63Sopenharmony_ci PrintErrorNumberMsg("COMMAND_ERROR", COMMAND_ERROR, "Unsupported method: " + method); 9554aa6d63Sopenharmony_ci return false; 9654aa6d63Sopenharmony_ci } else { 9754aa6d63Sopenharmony_ci isSuccess = it->second(params->GetOptions(), api); 9854aa6d63Sopenharmony_ci } 9954aa6d63Sopenharmony_ci return isSuccess; 10054aa6d63Sopenharmony_ci} 10154aa6d63Sopenharmony_ci 10254aa6d63Sopenharmony_cibool ParamsRunTool::RunSignApp(Options* params, SignToolServiceImpl& api) 10354aa6d63Sopenharmony_ci{ 10454aa6d63Sopenharmony_ci if (!params->Required({Options::MODE, Options::IN_FILE, Options::OUT_FILE, Options::SIGN_ALG})) { 10554aa6d63Sopenharmony_ci return false; 10654aa6d63Sopenharmony_ci } 10754aa6d63Sopenharmony_ci 10854aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::IN_FILE, Options::APP_CERT_FILE, 10954aa6d63Sopenharmony_ci Options::PROFILE_FILE, Options::KEY_STORE_FILE, 11054aa6d63Sopenharmony_ci ParamConstants::PARAM_REMOTE_SIGNERPLUGIN})) { 11154aa6d63Sopenharmony_ci return false; 11254aa6d63Sopenharmony_ci } 11354aa6d63Sopenharmony_ci 11454aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE})) { 11554aa6d63Sopenharmony_ci return false; 11654aa6d63Sopenharmony_ci } 11754aa6d63Sopenharmony_ci 11854aa6d63Sopenharmony_ci std::string mode = params->GetString(Options::MODE); 11954aa6d63Sopenharmony_ci if (!StringUtils::CaseCompare(mode, LOCAL_SIGN) && 12054aa6d63Sopenharmony_ci !StringUtils::CaseCompare(mode, REMOTE_SIGN)) { 12154aa6d63Sopenharmony_ci PrintErrorNumberMsg("COMMAND_ERROR", COMMAND_ERROR, "not support command param '" + mode + "'"); 12254aa6d63Sopenharmony_ci return false; 12354aa6d63Sopenharmony_ci } 12454aa6d63Sopenharmony_ci if (StringUtils::CaseCompare(mode, LOCAL_SIGN)) { 12554aa6d63Sopenharmony_ci if (!params->Required({Options::KEY_STORE_FILE, Options::KEY_ALIAS, Options::APP_CERT_FILE})) { 12654aa6d63Sopenharmony_ci return false; 12754aa6d63Sopenharmony_ci } 12854aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::KEY_STORE_FILE), {"p12", "jks"})) { 12954aa6d63Sopenharmony_ci return false; 13054aa6d63Sopenharmony_ci } 13154aa6d63Sopenharmony_ci } 13254aa6d63Sopenharmony_ci if (!CheckProfile(*params)) { 13354aa6d63Sopenharmony_ci return false; 13454aa6d63Sopenharmony_ci } 13554aa6d63Sopenharmony_ci std::string inForm = params->GetString(Options::INFORM, ZIP); 13654aa6d63Sopenharmony_ci if (!StringUtils::IsEmpty(inForm) && !StringUtils::ContainsCase(InformList, inForm)) { 13754aa6d63Sopenharmony_ci PrintErrorNumberMsg("NOT_SUPPORT_ERROR", NOT_SUPPORT_ERROR, "parameter '" + inForm 13854aa6d63Sopenharmony_ci + "' format error, Inform only support zip/elf/bin"); 13954aa6d63Sopenharmony_ci return false; 14054aa6d63Sopenharmony_ci } 14154aa6d63Sopenharmony_ci std::string signAlg = params->GetString(Options::SIGN_ALG); 14254aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSignAlgType(signAlg)) { 14354aa6d63Sopenharmony_ci return false; 14454aa6d63Sopenharmony_ci } 14554aa6d63Sopenharmony_ci return api.SignHap(params); 14654aa6d63Sopenharmony_ci} 14754aa6d63Sopenharmony_ci 14854aa6d63Sopenharmony_cibool ParamsRunTool::CheckProfile(Options& params) 14954aa6d63Sopenharmony_ci{ 15054aa6d63Sopenharmony_ci std::string inForm = params.GetString(Options::INFORM); 15154aa6d63Sopenharmony_ci std::string profileFile = params.GetString(Options::PROFILE_FILE); 15254aa6d63Sopenharmony_ci 15354aa6d63Sopenharmony_ci std::string profileSigned = params.GetString(Options::PROFILE_SIGNED); 15454aa6d63Sopenharmony_ci if (StringUtils::CaseCompare(inForm, ELF) && FileUtils::IsEmpty(profileFile)) { 15554aa6d63Sopenharmony_ci return true; 15654aa6d63Sopenharmony_ci } 15754aa6d63Sopenharmony_ci 15854aa6d63Sopenharmony_ci if (profileSigned == "1") { 15954aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(profileFile, {"p7b"})) { 16054aa6d63Sopenharmony_ci return false; 16154aa6d63Sopenharmony_ci } 16254aa6d63Sopenharmony_ci } else { 16354aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(profileFile, {"json"})) { 16454aa6d63Sopenharmony_ci return false; 16554aa6d63Sopenharmony_ci } 16654aa6d63Sopenharmony_ci } 16754aa6d63Sopenharmony_ci 16854aa6d63Sopenharmony_ci return true; 16954aa6d63Sopenharmony_ci} 17054aa6d63Sopenharmony_ci 17154aa6d63Sopenharmony_cibool ParamsRunTool::DispatchParams(const ParamsSharedPtr& params, SignToolServiceImpl& api) 17254aa6d63Sopenharmony_ci{ 17354aa6d63Sopenharmony_ci bool isSuccess = false; 17454aa6d63Sopenharmony_ci std::string method = params->GetMethod(); 17554aa6d63Sopenharmony_ci auto it = DISPATCH_RUN_METHOD.find(method); 17654aa6d63Sopenharmony_ci if (it == DISPATCH_RUN_METHOD.end()) { 17754aa6d63Sopenharmony_ci isSuccess = ParamsRunTool::CallGenerators(params, api); 17854aa6d63Sopenharmony_ci } else { 17954aa6d63Sopenharmony_ci isSuccess = it->second(params->GetOptions(), api); 18054aa6d63Sopenharmony_ci } 18154aa6d63Sopenharmony_ci return isSuccess; 18254aa6d63Sopenharmony_ci} 18354aa6d63Sopenharmony_ci 18454aa6d63Sopenharmony_cibool ParamsRunTool::RunCa(Options* params, SignToolServiceImpl& api) 18554aa6d63Sopenharmony_ci{ 18654aa6d63Sopenharmony_ci if (!params->Required({Options::KEY_ALIAS, Options::KEY_ALG, 18754aa6d63Sopenharmony_ci Options::KEY_SIZE, Options::SUBJECT, Options::SIGN_ALG, Options::KEY_STORE_FILE})) { 18854aa6d63Sopenharmony_ci return false; 18954aa6d63Sopenharmony_ci } 19054aa6d63Sopenharmony_ci 19154aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE, Options::KEY_STORE_FILE, 19254aa6d63Sopenharmony_ci Options::ISSUER_KEY_STORE_FILE})) { 19354aa6d63Sopenharmony_ci return false; 19454aa6d63Sopenharmony_ci } 19554aa6d63Sopenharmony_ci 19654aa6d63Sopenharmony_ci std::string keyAlg = params->GetString(Options::KEY_ALG); 19754aa6d63Sopenharmony_ci if (!CmdUtil::JudgeAlgType(keyAlg)) { 19854aa6d63Sopenharmony_ci return false; 19954aa6d63Sopenharmony_ci } 20054aa6d63Sopenharmony_ci int keySize = params->GetInt(Options::KEY_SIZE); 20154aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSize(keySize)) { 20254aa6d63Sopenharmony_ci return false; 20354aa6d63Sopenharmony_ci } 20454aa6d63Sopenharmony_ci std::string signAlg = params->GetString(Options::SIGN_ALG); 20554aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSignAlgType(signAlg)) { 20654aa6d63Sopenharmony_ci return false; 20754aa6d63Sopenharmony_ci } 20854aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::KEY_STORE_FILE), {"p12", "jks"})) { 20954aa6d63Sopenharmony_ci return false; 21054aa6d63Sopenharmony_ci } 21154aa6d63Sopenharmony_ci 21254aa6d63Sopenharmony_ci return api.GenerateCA(params); 21354aa6d63Sopenharmony_ci} 21454aa6d63Sopenharmony_ci 21554aa6d63Sopenharmony_cibool ParamsRunTool::RunCert(Options* params, SignToolServiceImpl& api) 21654aa6d63Sopenharmony_ci{ 21754aa6d63Sopenharmony_ci if (!params->Required({Options::KEY_ALIAS, Options::ISSUER, 21854aa6d63Sopenharmony_ci Options::ISSUER_KEY_ALIAS, Options::SUBJECT, Options::KEY_USAGE, 21954aa6d63Sopenharmony_ci Options::SIGN_ALG, Options::KEY_STORE_FILE})) { 22054aa6d63Sopenharmony_ci return false; 22154aa6d63Sopenharmony_ci } 22254aa6d63Sopenharmony_ci 22354aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::KEY_STORE_FILE, Options::ISSUER_KEY_STORE_FILE})) { 22454aa6d63Sopenharmony_ci return false; 22554aa6d63Sopenharmony_ci } 22654aa6d63Sopenharmony_ci 22754aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE})) { 22854aa6d63Sopenharmony_ci return false; 22954aa6d63Sopenharmony_ci } 23054aa6d63Sopenharmony_ci 23154aa6d63Sopenharmony_ci std::string keyusage = params->GetString(Options::KEY_USAGE); 23254aa6d63Sopenharmony_ci if (!CmdUtil::VerifyTypes(keyusage)) { 23354aa6d63Sopenharmony_ci return false; 23454aa6d63Sopenharmony_ci } 23554aa6d63Sopenharmony_ci std::string extkeyusage = params->GetString(Options::EXT_KEY_USAGE); 23654aa6d63Sopenharmony_ci if (!extkeyusage.empty()) { 23754aa6d63Sopenharmony_ci if (!CmdUtil::VerifyType(extkeyusage)) { 23854aa6d63Sopenharmony_ci return false; 23954aa6d63Sopenharmony_ci } 24054aa6d63Sopenharmony_ci } 24154aa6d63Sopenharmony_ci std::string signAlg = params->GetString(Options::SIGN_ALG); 24254aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSignAlgType(signAlg)) { 24354aa6d63Sopenharmony_ci return false; 24454aa6d63Sopenharmony_ci } 24554aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::KEY_STORE_FILE), {"p12", "jks"})) { 24654aa6d63Sopenharmony_ci return false; 24754aa6d63Sopenharmony_ci } 24854aa6d63Sopenharmony_ci return api.GenerateCert(params); 24954aa6d63Sopenharmony_ci} 25054aa6d63Sopenharmony_ci 25154aa6d63Sopenharmony_cibool ParamsRunTool::CheckEndCertArguments(Options& params) 25254aa6d63Sopenharmony_ci{ 25354aa6d63Sopenharmony_ci if (!params.Required({Options::KEY_ALIAS, Options::ISSUER, Options::ISSUER_KEY_ALIAS, 25454aa6d63Sopenharmony_ci Options::SUBJECT, Options::SIGN_ALG, Options::KEY_STORE_FILE})) { 25554aa6d63Sopenharmony_ci return false; 25654aa6d63Sopenharmony_ci } 25754aa6d63Sopenharmony_ci std::string signAlg = params.GetString(Options::SIGN_ALG); 25854aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSignAlgType(signAlg)) { 25954aa6d63Sopenharmony_ci return false; 26054aa6d63Sopenharmony_ci } 26154aa6d63Sopenharmony_ci std::string outForm = params.GetString(Options::OUT_FORM); 26254aa6d63Sopenharmony_ci if (!outForm.empty()) { 26354aa6d63Sopenharmony_ci if (!CmdUtil::VerifyType(outForm, Options::OUT_FORM_SCOPE)) { 26454aa6d63Sopenharmony_ci return false; 26554aa6d63Sopenharmony_ci } 26654aa6d63Sopenharmony_ci } 26754aa6d63Sopenharmony_ci if (!outForm.empty() && "certChain" == outForm) { 26854aa6d63Sopenharmony_ci if (!params.Required({Options::SUB_CA_CERT_FILE, Options::CA_CERT_FILE})) { 26954aa6d63Sopenharmony_ci return false; 27054aa6d63Sopenharmony_ci } 27154aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params.GetString(Options::SUB_CA_CERT_FILE), {"cer"}) || 27254aa6d63Sopenharmony_ci !FileUtils::ValidFileType(params.GetString(Options::CA_CERT_FILE), {"cer"})) { 27354aa6d63Sopenharmony_ci return false; 27454aa6d63Sopenharmony_ci } 27554aa6d63Sopenharmony_ci } 27654aa6d63Sopenharmony_ci std::string keyStoreFile = params.GetString(Options::KEY_STORE_FILE); 27754aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(keyStoreFile, {"p12", "jks"})) { 27854aa6d63Sopenharmony_ci return false; 27954aa6d63Sopenharmony_ci } 28054aa6d63Sopenharmony_ci if (params.find(Options::ISSUER_KEY_STORE_FILE) != params.end()) { 28154aa6d63Sopenharmony_ci std::string issuerKeyStoreFile = params.GetString(Options::ISSUER_KEY_STORE_FILE); 28254aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(issuerKeyStoreFile, {"p12", "jks"})) { 28354aa6d63Sopenharmony_ci return false; 28454aa6d63Sopenharmony_ci } 28554aa6d63Sopenharmony_ci } 28654aa6d63Sopenharmony_ci std::string outFile = params.GetString(Options::OUT_FILE); 28754aa6d63Sopenharmony_ci if (!outFile.empty()) { 28854aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(outFile, {"cer", "pem"})) { 28954aa6d63Sopenharmony_ci return false; 29054aa6d63Sopenharmony_ci } 29154aa6d63Sopenharmony_ci } 29254aa6d63Sopenharmony_ci return true; 29354aa6d63Sopenharmony_ci} 29454aa6d63Sopenharmony_ci 29554aa6d63Sopenharmony_cibool ParamsRunTool::RunAppCert(Options* params, SignToolServiceImpl& api) 29654aa6d63Sopenharmony_ci{ 29754aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::KEY_STORE_FILE, Options::ISSUER_KEY_STORE_FILE, 29854aa6d63Sopenharmony_ci Options::CA_CERT_FILE, Options::SUB_CA_CERT_FILE})) { 29954aa6d63Sopenharmony_ci return false; 30054aa6d63Sopenharmony_ci } 30154aa6d63Sopenharmony_ci 30254aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE})) { 30354aa6d63Sopenharmony_ci return false; 30454aa6d63Sopenharmony_ci } 30554aa6d63Sopenharmony_ci 30654aa6d63Sopenharmony_ci if (!ParamsRunTool::CheckEndCertArguments(*params)) { 30754aa6d63Sopenharmony_ci return false; 30854aa6d63Sopenharmony_ci } 30954aa6d63Sopenharmony_ci return api.GenerateAppCert(params); 31054aa6d63Sopenharmony_ci} 31154aa6d63Sopenharmony_ci 31254aa6d63Sopenharmony_cibool ParamsRunTool::RunProfileCert(Options* params, SignToolServiceImpl& api) 31354aa6d63Sopenharmony_ci{ 31454aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::KEY_STORE_FILE, Options::ISSUER_KEY_STORE_FILE, 31554aa6d63Sopenharmony_ci Options::CA_CERT_FILE, Options::SUB_CA_CERT_FILE})) { 31654aa6d63Sopenharmony_ci return false; 31754aa6d63Sopenharmony_ci } 31854aa6d63Sopenharmony_ci 31954aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE})) { 32054aa6d63Sopenharmony_ci return false; 32154aa6d63Sopenharmony_ci } 32254aa6d63Sopenharmony_ci 32354aa6d63Sopenharmony_ci if (!ParamsRunTool::CheckEndCertArguments(*params)) { 32454aa6d63Sopenharmony_ci return false; 32554aa6d63Sopenharmony_ci } 32654aa6d63Sopenharmony_ci return api.GenerateProfileCert(params); 32754aa6d63Sopenharmony_ci} 32854aa6d63Sopenharmony_ci 32954aa6d63Sopenharmony_cibool ParamsRunTool::RunKeypair(Options* params, SignToolServiceImpl& api) 33054aa6d63Sopenharmony_ci{ 33154aa6d63Sopenharmony_ci if (!params->Required({Options::KEY_ALIAS, Options::KEY_ALG, Options::KEY_SIZE, Options::KEY_STORE_FILE})) { 33254aa6d63Sopenharmony_ci return false; 33354aa6d63Sopenharmony_ci } 33454aa6d63Sopenharmony_ci 33554aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::KEY_STORE_FILE})) { 33654aa6d63Sopenharmony_ci return false; 33754aa6d63Sopenharmony_ci } 33854aa6d63Sopenharmony_ci 33954aa6d63Sopenharmony_ci std::string keyAlgorithm = params->GetString(Options::KEY_ALG); 34054aa6d63Sopenharmony_ci if (!CmdUtil::JudgeAlgType(keyAlgorithm)) { 34154aa6d63Sopenharmony_ci return false; 34254aa6d63Sopenharmony_ci } 34354aa6d63Sopenharmony_ci int keyAlgorithmSize = params->GetInt(Options::KEY_SIZE); 34454aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSize(keyAlgorithmSize)) { 34554aa6d63Sopenharmony_ci return false; 34654aa6d63Sopenharmony_ci } 34754aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::KEY_STORE_FILE), {"p12", "jks"})) { 34854aa6d63Sopenharmony_ci return false; 34954aa6d63Sopenharmony_ci } 35054aa6d63Sopenharmony_ci return api.GenerateKeyStore(params); 35154aa6d63Sopenharmony_ci} 35254aa6d63Sopenharmony_ci 35354aa6d63Sopenharmony_cibool ParamsRunTool::RunCsr(Options* params, SignToolServiceImpl& api) 35454aa6d63Sopenharmony_ci{ 35554aa6d63Sopenharmony_ci if (!params->Required({Options::KEY_ALIAS, Options::SUBJECT, Options::SIGN_ALG, Options::KEY_STORE_FILE})) { 35654aa6d63Sopenharmony_ci return false; 35754aa6d63Sopenharmony_ci } 35854aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::KEY_STORE_FILE})) { 35954aa6d63Sopenharmony_ci return false; 36054aa6d63Sopenharmony_ci } 36154aa6d63Sopenharmony_ci 36254aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE})) { 36354aa6d63Sopenharmony_ci return false; 36454aa6d63Sopenharmony_ci } 36554aa6d63Sopenharmony_ci 36654aa6d63Sopenharmony_ci std::string signAlg = params->GetString(Options::SIGN_ALG); 36754aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSignAlgType(signAlg)) { 36854aa6d63Sopenharmony_ci return false; 36954aa6d63Sopenharmony_ci } 37054aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::KEY_STORE_FILE), {"p12", "jks"})) { 37154aa6d63Sopenharmony_ci return false; 37254aa6d63Sopenharmony_ci } 37354aa6d63Sopenharmony_ci if (params->count(Options::OUT_FILE)) { 37454aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::OUT_FILE), {"csr"})) { 37554aa6d63Sopenharmony_ci return false; 37654aa6d63Sopenharmony_ci } 37754aa6d63Sopenharmony_ci } 37854aa6d63Sopenharmony_ci return api.GenerateCsr(params); 37954aa6d63Sopenharmony_ci} 38054aa6d63Sopenharmony_ci 38154aa6d63Sopenharmony_cibool ParamsRunTool::RunSignProfile(Options* params, SignToolServiceImpl& api) 38254aa6d63Sopenharmony_ci{ 38354aa6d63Sopenharmony_ci if (!params->Required({params->MODE, params->SIGN_ALG, params->OUT_FILE, params->IN_FILE})) { 38454aa6d63Sopenharmony_ci return false; 38554aa6d63Sopenharmony_ci } 38654aa6d63Sopenharmony_ci 38754aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::KEY_STORE_FILE, Options::PROFILE_CERT_FILE, 38854aa6d63Sopenharmony_ci Options::IN_FILE})) { 38954aa6d63Sopenharmony_ci return false; 39054aa6d63Sopenharmony_ci } 39154aa6d63Sopenharmony_ci 39254aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE})) { 39354aa6d63Sopenharmony_ci return false; 39454aa6d63Sopenharmony_ci } 39554aa6d63Sopenharmony_ci 39654aa6d63Sopenharmony_ci std::string mode = params->GetString(Options::MODE); 39754aa6d63Sopenharmony_ci if (!StringUtils::CaseCompare(mode, LOCAL_SIGN) && 39854aa6d63Sopenharmony_ci !StringUtils::CaseCompare(mode, REMOTE_SIGN)) { 39954aa6d63Sopenharmony_ci PrintErrorNumberMsg("COMMAND_ERROR", COMMAND_ERROR, "not support command param '" + mode + "'"); 40054aa6d63Sopenharmony_ci return false; 40154aa6d63Sopenharmony_ci } 40254aa6d63Sopenharmony_ci if (StringUtils::CaseCompare(mode, LOCAL_SIGN)) { 40354aa6d63Sopenharmony_ci if (!params->Required({params->KEY_STORE_FILE, params->KEY_ALIAS, params->PROFILE_CERT_FILE})) { 40454aa6d63Sopenharmony_ci return false; 40554aa6d63Sopenharmony_ci } 40654aa6d63Sopenharmony_ci 40754aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::KEY_STORE_FILE), {"p12", "jks"})) { 40854aa6d63Sopenharmony_ci return false; 40954aa6d63Sopenharmony_ci } 41054aa6d63Sopenharmony_ci } 41154aa6d63Sopenharmony_ci std::string signAlg = params->GetString(Options::SIGN_ALG); 41254aa6d63Sopenharmony_ci if (!CmdUtil::JudgeSignAlgType(signAlg)) { 41354aa6d63Sopenharmony_ci return false; 41454aa6d63Sopenharmony_ci } 41554aa6d63Sopenharmony_ci std::string outFile = params->GetString(Options::OUT_FILE); 41654aa6d63Sopenharmony_ci if (FileUtils::ValidFileType(outFile, {"p7b"}) == false) { 41754aa6d63Sopenharmony_ci return false; 41854aa6d63Sopenharmony_ci } 41954aa6d63Sopenharmony_ci return api.SignProfile(params); 42054aa6d63Sopenharmony_ci} 42154aa6d63Sopenharmony_ci 42254aa6d63Sopenharmony_cibool ParamsRunTool::RunVerifyProfile(Options* params, SignToolServiceImpl& api) 42354aa6d63Sopenharmony_ci{ 42454aa6d63Sopenharmony_ci if (!params->Required({Options::IN_FILE})) { 42554aa6d63Sopenharmony_ci return false; 42654aa6d63Sopenharmony_ci } 42754aa6d63Sopenharmony_ci 42854aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::IN_FILE})) { 42954aa6d63Sopenharmony_ci return false; 43054aa6d63Sopenharmony_ci } 43154aa6d63Sopenharmony_ci 43254aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_FILE})) { 43354aa6d63Sopenharmony_ci return false; 43454aa6d63Sopenharmony_ci } 43554aa6d63Sopenharmony_ci 43654aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::IN_FILE), {"p7b"})) { 43754aa6d63Sopenharmony_ci return false; 43854aa6d63Sopenharmony_ci } 43954aa6d63Sopenharmony_ci 44054aa6d63Sopenharmony_ci std::string outFile = params->GetString(Options::OUT_FILE); 44154aa6d63Sopenharmony_ci if (!outFile.empty()) { 44254aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(outFile, {"json"})) { 44354aa6d63Sopenharmony_ci return false; 44454aa6d63Sopenharmony_ci } 44554aa6d63Sopenharmony_ci } 44654aa6d63Sopenharmony_ci return api.VerifyProfile(params); 44754aa6d63Sopenharmony_ci} 44854aa6d63Sopenharmony_ci 44954aa6d63Sopenharmony_civoid ParamsRunTool::PrintHelp() 45054aa6d63Sopenharmony_ci{ 45154aa6d63Sopenharmony_ci PrintMsg(HELP_TXT); 45254aa6d63Sopenharmony_ci} 45354aa6d63Sopenharmony_ci 45454aa6d63Sopenharmony_civoid ParamsRunTool::Version() 45554aa6d63Sopenharmony_ci{ 45654aa6d63Sopenharmony_ci PrintMsg(ParamsRunTool::VERSION); 45754aa6d63Sopenharmony_ci} 45854aa6d63Sopenharmony_ci 45954aa6d63Sopenharmony_cibool ParamsRunTool::RunVerifyApp(Options* params, SignToolServiceImpl& api) 46054aa6d63Sopenharmony_ci{ 46154aa6d63Sopenharmony_ci if (!params->Required({Options::IN_FILE, Options::OUT_CERT_CHAIN, Options::OUT_PROFILE})) { 46254aa6d63Sopenharmony_ci return false; 46354aa6d63Sopenharmony_ci } 46454aa6d63Sopenharmony_ci 46554aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckInFile(params, {Options::IN_FILE})) { 46654aa6d63Sopenharmony_ci return false; 46754aa6d63Sopenharmony_ci } 46854aa6d63Sopenharmony_ci 46954aa6d63Sopenharmony_ci if (!CmdUtil::UpdateParamForCheckOutFile(params, {Options::OUT_CERT_CHAIN, Options::OUT_PROFILE})) { 47054aa6d63Sopenharmony_ci return false; 47154aa6d63Sopenharmony_ci } 47254aa6d63Sopenharmony_ci 47354aa6d63Sopenharmony_ci std::string inForm = params->GetString(Options::INFORM, ZIP); 47454aa6d63Sopenharmony_ci if (!StringUtils::ContainsCase(InformList, inForm)) { 47554aa6d63Sopenharmony_ci PrintErrorNumberMsg("NOT_SUPPORT_ERROR", NOT_SUPPORT_ERROR, "parameter '" + inForm 47654aa6d63Sopenharmony_ci + "' format error, Inform only support zip/elf/bin"); 47754aa6d63Sopenharmony_ci return false; 47854aa6d63Sopenharmony_ci } 47954aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::OUT_CERT_CHAIN), {"cer"})) { 48054aa6d63Sopenharmony_ci return false; 48154aa6d63Sopenharmony_ci } 48254aa6d63Sopenharmony_ci if (!FileUtils::ValidFileType(params->GetString(Options::OUT_PROFILE), {"p7b"})) { 48354aa6d63Sopenharmony_ci return false; 48454aa6d63Sopenharmony_ci } 48554aa6d63Sopenharmony_ci return api.VerifyHapSigner(params); 48654aa6d63Sopenharmony_ci} 48754aa6d63Sopenharmony_ci} // namespace SignatureTools 48854aa6d63Sopenharmony_ci} // namespace OHOS