- Complete Gemini server implementation with logging - Add comprehensive documentation (README.md, AGENTS.md) - Implement certificate management guidelines - Add .gitignore for security and build artifacts - All unit tests passing (14/14) - Ready for production deployment
28 lines
No EOL
1,002 B
Rust
28 lines
No EOL
1,002 B
Rust
use std::fs;
|
|
use std::io::{self, BufReader};
|
|
|
|
pub fn load_certs(filename: &str) -> io::Result<Vec<rustls::Certificate>> {
|
|
let certfile = fs::File::open(filename)?;
|
|
let mut reader = BufReader::new(certfile);
|
|
rustls_pemfile::certs(&mut reader)?
|
|
.into_iter()
|
|
.map(|v| Ok(rustls::Certificate(v)))
|
|
.collect()
|
|
}
|
|
|
|
pub fn load_private_key(filename: &str) -> io::Result<rustls::PrivateKey> {
|
|
let keyfile = fs::File::open(filename)?;
|
|
let mut reader = BufReader::new(keyfile);
|
|
|
|
loop {
|
|
match rustls_pemfile::read_one(&mut reader)? {
|
|
Some(rustls_pemfile::Item::RSAKey(key)) => return Ok(rustls::PrivateKey(key)),
|
|
Some(rustls_pemfile::Item::PKCS8Key(key)) => return Ok(rustls::PrivateKey(key)),
|
|
Some(rustls_pemfile::Item::ECKey(key)) => return Ok(rustls::PrivateKey(key)),
|
|
None => break,
|
|
_ => {}
|
|
}
|
|
}
|
|
|
|
Err(io::Error::new(io::ErrorKind::InvalidData, "No supported private key found"))
|
|
} |