• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <iostream>
16 #include <openssl/x509_vfy.h>
17 
18 #include "signer_factory.h"
19 #include "localization_adapter.h"
20 #include "signer_config.h"
21 
22 namespace OHOS {
23 namespace SignatureTools {
SignerConfig()24 SignerConfig::SignerConfig() : options(nullptr),
25     certificates(nullptr),
26     x509CRLs(nullptr),
27     signer(nullptr),
28     compatibleVersion(0)
29 {
30 }
31 
~SignerConfig()32 SignerConfig::~SignerConfig()
33 {
34     if (certificates) {
35         sk_X509_pop_free(certificates, X509_free);
36     }
37     certificates = NULL;
38 
39     if (x509CRLs) {
40         sk_X509_CRL_pop_free(x509CRLs, X509_CRL_free);
41     }
42     x509CRLs = NULL;
43 }
44 
GetOptions() const45 Options* SignerConfig::GetOptions() const
46 {
47     return options;
48 }
49 
SetOptions(Options * optionsParam)50 void SignerConfig::SetOptions(Options* optionsParam)
51 {
52     options = optionsParam;
53 }
54 
STACK_OF(X509)55 STACK_OF(X509)* SignerConfig::GetCertificates() const
56 {
57     if (IsInputCertChainNotEmpty() || signer == nullptr) {
58         return certificates;
59     }
60     return signer->GetCertificates();
61 }
62 
SetCertificates(STACK_OF (X509)* certificatesParam)63 void SignerConfig::SetCertificates(STACK_OF(X509)* certificatesParam)
64 {
65     certificates = certificatesParam;
66 }
67 
STACK_OF(X509_CRL)68 STACK_OF(X509_CRL)* SignerConfig::GetX509CRLs() const
69 {
70     if (IsInputCertChainNotEmpty() || IsInputCrlNotEmpty() || signer == nullptr) {
71         return x509CRLs;
72     }
73     return signer->GetCrls();
74 }
75 
SetX509CRLs(STACK_OF (X509_CRL)* crls)76 void SignerConfig::SetX509CRLs(STACK_OF(X509_CRL)* crls)
77 {
78     x509CRLs = crls;
79 }
80 
GetSignatureAlgorithms() const81 std::vector<SignatureAlgorithmHelper> SignerConfig::GetSignatureAlgorithms() const
82 {
83     return signatureAlgorithms;
84 }
85 
SetSignatureAlgorithms(const std::vector<SignatureAlgorithmHelper> & signatureAlgorithmsParam)86 void SignerConfig::SetSignatureAlgorithms(const std::vector<SignatureAlgorithmHelper>& signatureAlgorithmsParam)
87 {
88     signatureAlgorithms = signatureAlgorithmsParam;
89 }
90 
GetSignParamMap() const91 const std::map<std::string, std::string>& SignerConfig::GetSignParamMap() const
92 {
93     return signParamMap;
94 }
95 
FillParameters(const std::map<std::string,std::string> & params)96 void SignerConfig::FillParameters(const std::map<std::string, std::string>& params)
97 {
98     signParamMap = params;
99 }
100 
GetSigner()101 std::shared_ptr<Signer> SignerConfig::GetSigner()
102 {
103     if (signer == nullptr) {
104         SignerFactory factory;
105         LocalizationAdapter adapter(options);
106         signer = factory.GetSigner(adapter);
107     }
108     return signer;
109 }
110 
GetCompatibleVersion() const111 int SignerConfig::GetCompatibleVersion() const
112 {
113     return compatibleVersion;
114 }
115 
SetCompatibleVersion(int compatibleVersionParam)116 void SignerConfig::SetCompatibleVersion(int compatibleVersionParam)
117 {
118     compatibleVersion = compatibleVersionParam;
119 }
120 
IsInputCertChainNotEmpty() const121 bool SignerConfig::IsInputCertChainNotEmpty() const
122 {
123     return certificates != nullptr;
124 }
125 
IsInputCrlNotEmpty() const126 bool SignerConfig::IsInputCrlNotEmpty() const
127 {
128     return x509CRLs != nullptr;
129 }
130 } // namespace SignatureTools
131 } // namespace OHOS