1 // Copyright (c) 2023 Huawei Device Co., Ltd.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 //     http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 mod openssl;
15 pub use self::openssl::ServerCerts;
16 
17 /// used to custom verify certs
18 pub trait CertVerifier {
19     /// provided to users custom certs adapter
verify(&self, certs: &ServerCerts) -> bool20     fn verify(&self, certs: &ServerCerts) -> bool;
21 }
22 
23 /// default cert verifier
24 pub struct DefaultCertVerifier {
25     inner: Box<dyn CertVerifier + Send + Sync>,
26 }
27 
28 impl DefaultCertVerifier {
new<T: CertVerifier + Send + Sync + 'static>(verifier: T) -> Self29     pub(crate) fn new<T: CertVerifier + Send + Sync + 'static>(verifier: T) -> Self {
30         Self {
31             inner: Box::new(verifier),
32         }
33     }
34 }
35 
36 impl CertVerifier for DefaultCertVerifier {
verify(&self, certs: &ServerCerts) -> bool37     fn verify(&self, certs: &ServerCerts) -> bool {
38         self.inner.verify(certs)
39     }
40 }
41