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