diff --git a/src/fingerprint.rs b/src/fingerprint.rs index b5e6dce..f07e864 100644 --- a/src/fingerprint.rs +++ b/src/fingerprint.rs @@ -1,7 +1,7 @@ use digest::Digest; use rustls::Certificate; use sha2::Sha256; -use std::fmt::{Write, self}; +use std::fmt::{self, Write}; use x509_parser::prelude::*; pub trait Fingerprint { @@ -63,4 +63,3 @@ impl Fingerprint for Certificate { Ok((subject[3..].to_string(), s)) } } - diff --git a/src/receiver.rs b/src/receiver.rs index e69de29..8b13789 100644 --- a/src/receiver.rs +++ b/src/receiver.rs @@ -0,0 +1 @@ + diff --git a/src/sender.rs b/src/sender.rs index 7ae3617..520e35f 100644 --- a/src/sender.rs +++ b/src/sender.rs @@ -1,6 +1,12 @@ -use std::{io::{Read, Write, self}, fmt}; -use crate::{request::{Request, ParseRequestError}, response::{Response, ParseResponseError}}; -use self::{verifier::Verifier, store::CertificateStore}; +use self::{store::CertificateStore, verifier::Verifier}; +use crate::{ + request::{ParseRequestError, Request}, + response::{ParseResponseError, Response}, +}; +use std::{ + fmt, + io::{self, Read, Write}, +}; pub mod store; pub mod verifier; @@ -67,7 +73,11 @@ impl From for Error { } impl<'a, S, C, T> Sender<'a, S, C, T> -where S: CertificateStore + Sync, C: Sized, T: Read + Write + Sized { +where + S: CertificateStore + Sync, + C: Sized, + T: Read + Write + Sized, +{ pub fn new(request_str: &str, store: &'a S) -> Result { let request: Request = request_str.parse()?; let verifier = Verifier::new(store); diff --git a/src/sender/store.rs b/src/sender/store.rs index 8b55a63..03cf53c 100644 --- a/src/sender/store.rs +++ b/src/sender/store.rs @@ -2,4 +2,3 @@ pub trait CertificateStore { fn get(&self, host: &str) -> Option; fn insert(&mut self, host: &str, fingerprint: &str); } - diff --git a/src/sender/verifier.rs b/src/sender/verifier.rs index 3bf1cae..7506505 100644 --- a/src/sender/verifier.rs +++ b/src/sender/verifier.rs @@ -1,6 +1,9 @@ -use crate::fingerprint::Fingerprint; -use rustls::{client::{ServerCertVerified, ServerCertVerifier}, Certificate}; use super::store::CertificateStore; +use crate::fingerprint::Fingerprint; +use rustls::{ + client::{ServerCertVerified, ServerCertVerifier}, + Certificate, +}; #[derive(Debug)] pub struct Verifier<'a, T: CertificateStore> { @@ -9,19 +12,21 @@ pub struct Verifier<'a, T: CertificateStore> { impl<'a, T: CertificateStore + Sync> ServerCertVerifier for Verifier<'a, T> { fn verify_server_cert( - &self, - end_entity: &Certificate, - _intermediates: &[Certificate], - server_name: &rustls::ServerName, - _scts: &mut dyn Iterator, - _ocsp_response: &[u8], - _now: std::time::SystemTime, - ) -> Result { - let fp = end_entity.fingerprint().map_err(|e| rustls::Error::General(e.to_string()))?; + &self, + end_entity: &Certificate, + _intermediates: &[Certificate], + server_name: &rustls::ServerName, + _scts: &mut dyn Iterator, + _ocsp_response: &[u8], + _now: std::time::SystemTime, + ) -> Result { + let fp = end_entity + .fingerprint() + .map_err(|e| rustls::Error::General(e.to_string()))?; let name = match server_name { rustls::ServerName::DnsName(n) => n.as_ref().to_string(), rustls::ServerName::IpAddress(ip) => ip.to_string(), - _ => todo!() + _ => todo!(), }; if let Some(fingerprint) = match server_name { rustls::ServerName::DnsName(n) => self.store.get(n.as_ref()), @@ -35,7 +40,9 @@ impl<'a, T: CertificateStore + Sync> ServerCertVerifier for Verifier<'a, T> { // todo: need a way to update `self.store`. Probably will require // an Arc> for interior mutability } - return Err(rustls::Error::General("Unrecognized certificate".to_string())); + return Err(rustls::Error::General( + "Unrecognized certificate".to_string(), + )); } }