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