1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use openssl::x509::X509; use openssl::error::ErrorStack; use openssl::hash::MessageDigest; pub fn calculate_fingerprint(certificate: &[u8]) -> Result<Vec<u8>, ErrorStack> { X509::from_pem(certificate).and_then(|cert| cert.fingerprint(MessageDigest::sha256())) } pub fn split_certificate_chain(mut chain: String) -> Vec<String> { let mut v = Vec::new(); let end = "-----END CERTIFICATE-----"; loop { match chain.find(end) { Some(sz) => { let cert: String = chain.drain(..sz+end.len()).collect(); v.push(cert.trim().to_string()); }, None => break, } } v }