1
1
use futures_util:: future;
2
- use std:: io:: { self , BufReader , Cursor , Read , Write } ;
2
+ use std:: io:: { self , Read , Write } ;
3
3
use std:: sync:: Arc ;
4
4
use std:: task:: { Context , Poll } ;
5
5
@@ -9,7 +9,10 @@ use rustls::{
9
9
WebPkiServerVerifier ,
10
10
} ,
11
11
crypto:: { verify_tls12_signature, verify_tls13_signature, CryptoProvider } ,
12
- pki_types:: { CertificateDer , PrivateKeyDer , ServerName , UnixTime } ,
12
+ pki_types:: {
13
+ pem:: { self , PemObject } ,
14
+ CertificateDer , PrivateKeyDer , ServerName , UnixTime ,
15
+ } ,
13
16
CertificateError , ClientConfig , ClientConnection , Error as TlsError , RootCertStore ,
14
17
} ;
15
18
@@ -141,9 +144,8 @@ where
141
144
142
145
if let Some ( ca) = tls_config. root_cert_path {
143
146
let data = ca. data ( ) . await ?;
144
- let mut cursor = Cursor :: new ( data) ;
145
147
146
- for result in rustls_pemfile :: certs ( & mut cursor ) {
148
+ for result in CertificateDer :: pem_slice_iter ( & data ) {
147
149
let Ok ( cert) = result else {
148
150
return Err ( Error :: Tls ( format ! ( "Invalid certificate {ca}" ) . into ( ) ) ) ;
149
151
} ;
@@ -196,19 +198,15 @@ where
196
198
}
197
199
198
200
fn certs_from_pem ( pem : Vec < u8 > ) -> Result < Vec < CertificateDer < ' static > > , Error > {
199
- let cur = Cursor :: new ( pem) ;
200
- let mut reader = BufReader :: new ( cur) ;
201
- rustls_pemfile:: certs ( & mut reader)
201
+ CertificateDer :: pem_slice_iter ( & pem)
202
202
. map ( |result| result. map_err ( |err| Error :: Tls ( err. into ( ) ) ) )
203
203
. collect ( )
204
204
}
205
205
206
206
fn private_key_from_pem ( pem : Vec < u8 > ) -> Result < PrivateKeyDer < ' static > , Error > {
207
- let cur = Cursor :: new ( pem) ;
208
- let mut reader = BufReader :: new ( cur) ;
209
- match rustls_pemfile:: private_key ( & mut reader) {
210
- Ok ( Some ( key) ) => Ok ( key) ,
211
- Ok ( None ) => Err ( Error :: Configuration ( "no keys found pem file" . into ( ) ) ) ,
207
+ match PrivateKeyDer :: from_pem_slice ( & pem) {
208
+ Ok ( key) => Ok ( key) ,
209
+ Err ( pem:: Error :: NoItemsFound ) => Err ( Error :: Configuration ( "no keys found pem file" . into ( ) ) ) ,
212
210
Err ( e) => Err ( Error :: Configuration ( e. to_string ( ) . into ( ) ) ) ,
213
211
}
214
212
}
0 commit comments