• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 
16 #include <cstring>
17 #include <iostream>
18 
19 #include <openssl/ssl.h>
20 
21 #include "net_ssl.h"
22 #include "net_ssl_c.h"
23 #include "net_ssl_c_type.h"
24 
SwitchToCertBlob(const struct NetStack_CertBlob cert)25 struct OHOS::NetStack::Ssl::CertBlob SwitchToCertBlob(const struct NetStack_CertBlob cert)
26 {
27     OHOS::NetStack::Ssl::CertBlob cb;
28     switch (cert.type) {
29         case NETSTACK_CERT_TYPE_PEM:
30             cb.type = OHOS::NetStack::Ssl::CertType::CERT_TYPE_PEM;
31             break;
32         case NETSTACK_CERT_TYPE_DER:
33             cb.type = OHOS::NetStack::Ssl::CertType::CERT_TYPE_DER;
34             break;
35         case NETSTACK_CERT_TYPE_INVALID:
36             cb.type = OHOS::NetStack::Ssl::CertType::CERT_TYPE_MAX;
37             break;
38         default:
39             break;
40     }
41     cb.size = cert.size;
42     cb.data = cert.data;
43     return cb;
44 }
45 
VerifyCert_With_RootCa(const struct NetStack_CertBlob * cert)46 uint32_t VerifyCert_With_RootCa(const struct NetStack_CertBlob *cert)
47 {
48     uint32_t verifyResult = X509_V_ERR_UNSPECIFIED;
49     OHOS::NetStack::Ssl::CertBlob cb = SwitchToCertBlob(*cert);
50     verifyResult = OHOS::NetStack::Ssl::NetStackVerifyCertification(&cb);
51     return verifyResult;
52 }
53 
VerifyCert_With_DesignatedCa(const struct NetStack_CertBlob * cert,const struct NetStack_CertBlob * caCert)54 uint32_t VerifyCert_With_DesignatedCa(const struct NetStack_CertBlob *cert, const struct NetStack_CertBlob *caCert)
55 {
56     uint32_t verifyResult = X509_V_ERR_UNSPECIFIED;
57     OHOS::NetStack::Ssl::CertBlob cb = SwitchToCertBlob(*cert);
58     OHOS::NetStack::Ssl::CertBlob caCb = SwitchToCertBlob(*caCert);
59     verifyResult = OHOS::NetStack::Ssl::NetStackVerifyCertification(&cb, &caCb);
60     return verifyResult;
61 }
62 
OH_NetStack_CertVerification(const struct NetStack_CertBlob * cert,const struct NetStack_CertBlob * caCert)63 uint32_t OH_NetStack_CertVerification(const struct NetStack_CertBlob *cert, const struct NetStack_CertBlob *caCert)
64 {
65     if (cert == nullptr) {
66         return X509_V_ERR_INVALID_CALL;
67     }
68     if (caCert == nullptr) {
69         return VerifyCert_With_RootCa(cert);
70     } else {
71         return VerifyCert_With_DesignatedCa(cert, caCert);
72     }
73 }
74