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 "options.h" 1754aa6d63Sopenharmony_ci 1854aa6d63Sopenharmony_cinamespace OHOS { 1954aa6d63Sopenharmony_cinamespace SignatureTools { 2054aa6d63Sopenharmony_ci 2154aa6d63Sopenharmony_ci/* Initializes the static member constant. */ 2254aa6d63Sopenharmony_ciconst std::string Options::KEY_ALIAS = "keyAlias"; 2354aa6d63Sopenharmony_ciconst std::string Options::KEY_RIGHTS = "keyPwd"; 2454aa6d63Sopenharmony_ciconst std::string Options::KEY_ALG = "keyAlg"; 2554aa6d63Sopenharmony_ciconst std::string Options::KEY_SIZE = "keySize"; 2654aa6d63Sopenharmony_ciconst std::string Options::KEY_STORE_FILE = "keystoreFile"; 2754aa6d63Sopenharmony_ciconst std::string Options::KEY_STORE_RIGHTS = "keystorePwd"; 2854aa6d63Sopenharmony_ciconst std::string Options::ISSUER_KEY_ALIAS = "issuerKeyAlias"; 2954aa6d63Sopenharmony_ciconst std::string Options::ISSUER_KEY_RIGHTS = "issuerKeyPwd"; 3054aa6d63Sopenharmony_ciconst std::string Options::ISSUER_KEY_STORE_FILE = "issuerKeystoreFile"; 3154aa6d63Sopenharmony_ciconst std::string Options::ISSUER_KEY_STORE_RIGHTS = "issuerKeystorePwd"; 3254aa6d63Sopenharmony_ciconst std::string Options::ISSUER = "issuer"; 3354aa6d63Sopenharmony_ciconst std::string Options::SUBJECT = "subject"; 3454aa6d63Sopenharmony_ciconst std::string Options::VALIDITY = "validity"; 3554aa6d63Sopenharmony_ciconst std::string Options::SIGN_ALG = "signAlg"; 3654aa6d63Sopenharmony_ciconst std::string Options::BASIC_CONSTRAINTS_PATH_LEN = "basicConstraintsPathLen"; 3754aa6d63Sopenharmony_ciconst std::string Options::OUT_FILE = "outFile"; 3854aa6d63Sopenharmony_ciconst std::string Options::OUT_FORM = "outForm"; 3954aa6d63Sopenharmony_ciconst std::string Options::SUB_CA_CERT_FILE = "subCaCertFile"; 4054aa6d63Sopenharmony_ciconst std::string Options::CA_CERT_FILE = "rootCaCertFile"; 4154aa6d63Sopenharmony_ciconst std::string Options::IN_FILE = "inFile"; 4254aa6d63Sopenharmony_ciconst std::string Options::PROFILE_CERT_FILE = "profileCertFile"; 4354aa6d63Sopenharmony_ciconst std::string Options::APP_CERT_FILE = "appCertFile"; 4454aa6d63Sopenharmony_ciconst std::string Options::KEY_USAGE = "keyUsage"; 4554aa6d63Sopenharmony_ciconst std::string Options::EXT_KEY_USAGE = "extKeyUsage"; 4654aa6d63Sopenharmony_ciconst std::string Options::KEY_USAGE_CRITICAL = "keyUsageCritical"; 4754aa6d63Sopenharmony_ciconst std::string Options::EXT_KEY_USAGE_CRITICAL = "extKeyUsageCritical"; 4854aa6d63Sopenharmony_ciconst std::string Options::BASIC_CONSTRAINTS_CA = "basicConstraintsCa"; 4954aa6d63Sopenharmony_ciconst std::string Options::BASIC_CONSTRAINTS_CRITICAL = "basicConstraintsCritical"; 5054aa6d63Sopenharmony_ciconst std::string Options::BASIC_CONSTRAINTS = "basicConstraints"; 5154aa6d63Sopenharmony_ciconst std::string Options::OUT_FORM_SCOPE = "cert,certChain"; 5254aa6d63Sopenharmony_ciconst std::string Options::MODE = "mode"; 5354aa6d63Sopenharmony_ciconst std::string Options::INFORM = "inForm"; 5454aa6d63Sopenharmony_ciconst std::string Options::OUT_CERT_CHAIN = "outCertChain"; 5554aa6d63Sopenharmony_ciconst std::string Options::OUT_PROFILE = "outProfile"; 5654aa6d63Sopenharmony_ciconst std::string Options::PROOF_FILE = "outproof"; 5754aa6d63Sopenharmony_ciconst std::string Options::PROFILE_FILE = "profileFile"; 5854aa6d63Sopenharmony_ciconst std::string Options::PROFILE_SIGNED = "profileSigned"; 5954aa6d63Sopenharmony_ci 6054aa6d63Sopenharmony_cichar* Options::GetChars(const std::string& key) 6154aa6d63Sopenharmony_ci{ 6254aa6d63Sopenharmony_ci if (this->count(key) == 0) { 6354aa6d63Sopenharmony_ci return nullptr; 6454aa6d63Sopenharmony_ci } 6554aa6d63Sopenharmony_ci 6654aa6d63Sopenharmony_ci auto value = (*this)[key]; 6754aa6d63Sopenharmony_ci char** charsPtr = std::get_if<char*>(&value); 6854aa6d63Sopenharmony_ci if (charsPtr == nullptr) { 6954aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGI("GetChars key = %s value = nullptr !", key.c_str()); 7054aa6d63Sopenharmony_ci return nullptr; 7154aa6d63Sopenharmony_ci } 7254aa6d63Sopenharmony_ci return *charsPtr; 7354aa6d63Sopenharmony_ci} 7454aa6d63Sopenharmony_ci 7554aa6d63Sopenharmony_cistd::string Options::GetString(const std::string& key) 7654aa6d63Sopenharmony_ci{ 7754aa6d63Sopenharmony_ci if (this->count(key) == 0) { 7854aa6d63Sopenharmony_ci return ""; 7954aa6d63Sopenharmony_ci } 8054aa6d63Sopenharmony_ci 8154aa6d63Sopenharmony_ci auto value = (*this)[key]; 8254aa6d63Sopenharmony_ci std::string* stringPtr = std::get_if<std::string>(&value); 8354aa6d63Sopenharmony_ci if (stringPtr == nullptr) { 8454aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGI("GetString key = %s value = """, key.c_str()); 8554aa6d63Sopenharmony_ci return ""; 8654aa6d63Sopenharmony_ci } 8754aa6d63Sopenharmony_ci return *stringPtr; 8854aa6d63Sopenharmony_ci} 8954aa6d63Sopenharmony_ci 9054aa6d63Sopenharmony_cistd::string Options::GetString(const std::string& key, const std::string& checkStr) 9154aa6d63Sopenharmony_ci{ 9254aa6d63Sopenharmony_ci if (this->count(key) == 0) { 9354aa6d63Sopenharmony_ci return ""; 9454aa6d63Sopenharmony_ci } 9554aa6d63Sopenharmony_ci 9654aa6d63Sopenharmony_ci auto value = (*this)[key]; 9754aa6d63Sopenharmony_ci std::string* stringPtr = std::get_if<std::string>(&value); 9854aa6d63Sopenharmony_ci if (stringPtr == nullptr || *stringPtr == "") { 9954aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGI("GetString key = %s value = %s ", key.c_str(), checkStr.c_str()); 10054aa6d63Sopenharmony_ci return checkStr; 10154aa6d63Sopenharmony_ci } 10254aa6d63Sopenharmony_ci return *stringPtr; 10354aa6d63Sopenharmony_ci} 10454aa6d63Sopenharmony_ci 10554aa6d63Sopenharmony_ciint Options::GetInt(const std::string& key) 10654aa6d63Sopenharmony_ci{ 10754aa6d63Sopenharmony_ci if (this->count(key) == 0) { 10854aa6d63Sopenharmony_ci return 0; 10954aa6d63Sopenharmony_ci } 11054aa6d63Sopenharmony_ci 11154aa6d63Sopenharmony_ci auto value = (*this)[key]; 11254aa6d63Sopenharmony_ci int* stringPtr = std::get_if<int>(&value); 11354aa6d63Sopenharmony_ci if (stringPtr == nullptr) { 11454aa6d63Sopenharmony_ci SIGNATURE_TOOLS_LOGI("GetInt key = %s value = 0 ", key.c_str()); 11554aa6d63Sopenharmony_ci return 0; 11654aa6d63Sopenharmony_ci } 11754aa6d63Sopenharmony_ci return *stringPtr; 11854aa6d63Sopenharmony_ci} 11954aa6d63Sopenharmony_ci 12054aa6d63Sopenharmony_cibool Options::Equals(const std::string& argf, const std::string& args) 12154aa6d63Sopenharmony_ci{ 12254aa6d63Sopenharmony_ci std::string ksFile = GetString(argf); 12354aa6d63Sopenharmony_ci std::string iksFile = GetString(args); 12454aa6d63Sopenharmony_ci if (ksFile == iksFile) { 12554aa6d63Sopenharmony_ci return true; 12654aa6d63Sopenharmony_ci } 12754aa6d63Sopenharmony_ci return false; 12854aa6d63Sopenharmony_ci} 12954aa6d63Sopenharmony_ci 13054aa6d63Sopenharmony_cibool Options::Required(const std::initializer_list<std::string>& keys) 13154aa6d63Sopenharmony_ci{ 13254aa6d63Sopenharmony_ci for (auto& key : keys) { 13354aa6d63Sopenharmony_ci if (!this->IsEmpty(key) && !(this->find(key) != this->end())) { 13454aa6d63Sopenharmony_ci PrintErrorNumberMsg("COMMAND_ERROR", COMMAND_ERROR, "Params '-" + key + "' is required"); 13554aa6d63Sopenharmony_ci return false; 13654aa6d63Sopenharmony_ci } 13754aa6d63Sopenharmony_ci } 13854aa6d63Sopenharmony_ci return true; 13954aa6d63Sopenharmony_ci} 14054aa6d63Sopenharmony_ci 14154aa6d63Sopenharmony_cibool Options::IsEmpty(const std::string& cs) 14254aa6d63Sopenharmony_ci{ 14354aa6d63Sopenharmony_ci if (cs.empty()) { 14454aa6d63Sopenharmony_ci return true; 14554aa6d63Sopenharmony_ci } 14654aa6d63Sopenharmony_ci return false; 14754aa6d63Sopenharmony_ci} 14854aa6d63Sopenharmony_ci 14954aa6d63Sopenharmony_cibool Options::GetBool(const std::string& key) 15054aa6d63Sopenharmony_ci{ 15154aa6d63Sopenharmony_ci auto value = (*this)[key]; 15254aa6d63Sopenharmony_ci bool* stringPtr = std::get_if<bool>(&value); 15354aa6d63Sopenharmony_ci return *stringPtr; 15454aa6d63Sopenharmony_ci} 15554aa6d63Sopenharmony_ci} // namespace SignatureTools 15654aa6d63Sopenharmony_ci} // namespace OHOS