Skip to content

Commit a10f9f3

Browse files
committed
Use rustls_pemfile::private_key to pull key from pem
1 parent 5f987ca commit a10f9f3

File tree

1 file changed

+8
-29
lines changed

1 file changed

+8
-29
lines changed

src/tls.rs

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)