ferron/util/
load_tls.rs

1use rustls_pki_types::{CertificateDer, PrivateKeyDer};
2
3// Load public certificate from file
4pub fn load_certs(filename: &str) -> std::io::Result<Vec<CertificateDer<'static>>> {
5  let certfile = std::fs::File::open(filename)
6    .map_err(|e| std::io::Error::other(format!("failed to open {}: {}", filename, e)))?;
7  let mut reader = std::io::BufReader::new(certfile);
8  rustls_pemfile::certs(&mut reader).collect()
9}
10
11// Load private key from file
12pub fn load_private_key(filename: &str) -> std::io::Result<PrivateKeyDer<'static>> {
13  let keyfile = std::fs::File::open(filename)
14    .map_err(|e| std::io::Error::other(format!("failed to open {}: {}", filename, e)))?;
15  let mut reader = std::io::BufReader::new(keyfile);
16  match rustls_pemfile::private_key(&mut reader) {
17    Ok(Some(private_key)) => Ok(private_key),
18    Ok(None) => Err(std::io::Error::new(
19      std::io::ErrorKind::InvalidData,
20      "Invalid private key",
21    )),
22    Err(err) => Err(err),
23  }
24}