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#ifndef SIGNATRUETOOLS_LOCALIIZATION_ADAPTER_H
1754aa6d63Sopenharmony_ci#define SIGNATRUETOOLS_LOCALIIZATION_ADAPTER_H
1854aa6d63Sopenharmony_ci
1954aa6d63Sopenharmony_ci#include <memory>
2054aa6d63Sopenharmony_ci#include <string>
2154aa6d63Sopenharmony_ci
2254aa6d63Sopenharmony_ci#include "openssl/ssl.h"
2354aa6d63Sopenharmony_ci#include "openssl/pem.h"
2454aa6d63Sopenharmony_ci#include "openssl/err.h"
2554aa6d63Sopenharmony_ci#include "options.h"
2654aa6d63Sopenharmony_ci#include "key_store_helper.h"
2754aa6d63Sopenharmony_ci#include "cert_dn_utils.h"
2854aa6d63Sopenharmony_ci#include "signature_tools_log.h"
2954aa6d63Sopenharmony_ci#include "digest_common.h"
3054aa6d63Sopenharmony_ci
3154aa6d63Sopenharmony_cinamespace OHOS {
3254aa6d63Sopenharmony_cinamespace SignatureTools {
3354aa6d63Sopenharmony_ciclass LocalizationAdapter {
3454aa6d63Sopenharmony_cipublic:
3554aa6d63Sopenharmony_ci    LocalizationAdapter() = default;
3654aa6d63Sopenharmony_ci    LocalizationAdapter(Options* options);
3754aa6d63Sopenharmony_ci    ~LocalizationAdapter() = default;
3854aa6d63Sopenharmony_ci
3954aa6d63Sopenharmony_ci    int IsAliasExist(const std::string& alias);
4054aa6d63Sopenharmony_ci    int GetKeyPair(bool autoCreate, EVP_PKEY** keyPair);
4154aa6d63Sopenharmony_ci    int IssuerKeyStoreFile(EVP_PKEY** keyPair, bool autoCreate);
4254aa6d63Sopenharmony_ci    int KeyStoreFile(EVP_PKEY** keyPair, bool autoCreate);
4354aa6d63Sopenharmony_ci
4454aa6d63Sopenharmony_ci    void ResetPwd();
4554aa6d63Sopenharmony_ci    void SetIssuerKeyStoreFile(bool issuerKeyStoreFile);
4654aa6d63Sopenharmony_ci    void AppAndProfileAssetsRealse(std::initializer_list<EVP_PKEY*> keys,
4754aa6d63Sopenharmony_ci                                   std::initializer_list<X509_REQ*> reqs,
4854aa6d63Sopenharmony_ci                                   std::initializer_list<X509*> certs);
4954aa6d63Sopenharmony_ci
5054aa6d63Sopenharmony_ci    bool IsOutFormChain();
5154aa6d63Sopenharmony_ci    bool IsRemoteSigner();
5254aa6d63Sopenharmony_ci
5354aa6d63Sopenharmony_ci    const std::string GetSignAlg() const;
5454aa6d63Sopenharmony_ci    const std::string GetOutFile();
5554aa6d63Sopenharmony_ci    const std::string GetInFile();
5654aa6d63Sopenharmony_ci
5754aa6d63Sopenharmony_ci    Options* GetOptions();
5854aa6d63Sopenharmony_ci    EVP_PKEY* GetAliasKey(bool autoCreate);
5954aa6d63Sopenharmony_ci    EVP_PKEY* GetIssuerKeyByAlias();
6054aa6d63Sopenharmony_ci    X509* GetSubCaCertFile();
6154aa6d63Sopenharmony_ci    X509* GetCaCertFile();
6254aa6d63Sopenharmony_ci    STACK_OF(X509*) GetSignCertChain();
6354aa6d63Sopenharmony_ci    std::vector<X509*> GetCertsFromFile(std::string& certPath, const std::string& logTitle);
6454aa6d63Sopenharmony_ci
6554aa6d63Sopenharmony_ciprivate:
6654aa6d63Sopenharmony_ci    void ResetChars(char* chars);
6754aa6d63Sopenharmony_ci
6854aa6d63Sopenharmony_cipublic:
6954aa6d63Sopenharmony_ci    Options* options;
7054aa6d63Sopenharmony_ci    std::unique_ptr<KeyStoreHelper> keyStoreHelper;
7154aa6d63Sopenharmony_ci
7254aa6d63Sopenharmony_ciprivate:
7354aa6d63Sopenharmony_ci    static constexpr int MIN_CERT_CHAIN_SIZE = 2;
7454aa6d63Sopenharmony_ci    static constexpr int MAX_CERT_CHAIN_SIZE = 3;
7554aa6d63Sopenharmony_ci    bool isIssuerKeyStoreFile;
7654aa6d63Sopenharmony_ci};
7754aa6d63Sopenharmony_ci} // namespace SignatureTools
7854aa6d63Sopenharmony_ci} // namespace OHOS
7954aa6d63Sopenharmony_ci#endif // SIGNATRUETOOLS_LOCALIIZATION_ADAPTER_H
80