@@ -24,12 +24,15 @@ pub(crate) enum TlsConfigError {
2424 /// An Error parsing the Certificate
2525 CertParseError ,
2626 /// Identity PEM is invalid
27+ #[ allow( dead_code) ]
2728 InvalidIdentityPem ,
2829 /// Identity PEM is missing a private key such as RSA, ECC or PKCS8
2930 MissingPrivateKey ,
3031 /// Unknown private key format
32+ #[ allow( dead_code) ]
3133 UnknownPrivateKeyFormat ,
3234 /// An error from an empty key
35+ #[ allow( dead_code) ]
3336 EmptyKey ,
3437 /// An error from an invalid key
3538 InvalidKey ( TlsError ) ,
@@ -171,40 +174,16 @@ impl TlsConfigBuilder {
171174 self
172175 }
173176
174- pub ( crate ) fn build ( mut self ) -> Result < ServerConfig , TlsConfigError > {
177+ pub ( crate ) fn build ( self ) -> Result < ServerConfig , TlsConfigError > {
175178 let mut cert_rdr = BufReader :: new ( self . cert ) ;
176179 let cert = rustls_pemfile:: certs ( & mut cert_rdr)
177180 . collect :: < Result < Vec < _ > , _ > > ( )
178181 . map_err ( |_e| TlsConfigError :: CertParseError ) ?;
179182
180- let mut key_vec = Vec :: new ( ) ;
181- self . key
182- . read_to_end ( & mut key_vec)
183- . map_err ( TlsConfigError :: Io ) ?;
184-
185- if key_vec. is_empty ( ) {
186- return Err ( TlsConfigError :: EmptyKey ) ;
187- }
188-
189- let mut key_opt = None ;
190- let mut key_cur = std:: io:: Cursor :: new ( key_vec) ;
191- for item in rustls_pemfile:: read_all ( & mut key_cur)
192- . collect :: < Result < Vec < _ > , _ > > ( )
193- . map_err ( |_e| TlsConfigError :: InvalidIdentityPem ) ?
194- {
195- match item {
196- rustls_pemfile:: Item :: Pkcs1Key ( k) => key_opt = Some ( k. into ( ) ) ,
197- rustls_pemfile:: Item :: Pkcs8Key ( k) => key_opt = Some ( k. into ( ) ) ,
198- rustls_pemfile:: Item :: Sec1Key ( k) => key_opt = Some ( k. into ( ) ) ,
199- // Ignore certs in the same pem file as private key
200- rustls_pemfile:: Item :: X509Certificate ( _) => { }
201- _ => return Err ( TlsConfigError :: UnknownPrivateKeyFormat ) ,
202- }
203- }
204- let key = match key_opt {
205- Some ( v) => v,
206- _ => return Err ( TlsConfigError :: MissingPrivateKey ) ,
207- } ;
183+ let mut key_rdr = BufReader :: new ( self . key ) ;
184+ let key = rustls_pemfile:: private_key ( & mut key_rdr)
185+ . map_err ( TlsConfigError :: Io ) ?
186+ . ok_or ( TlsConfigError :: MissingPrivateKey ) ?;
208187
209188 fn read_trust_anchor (
210189 trust_anchor : Box < dyn Read + Send + Sync > ,
0 commit comments