Merge pull request #11 from cloudflare/improve_test

canonicalize also dkim header
This commit is contained in:
André Cruz
2022-08-10 11:04:50 +01:00
committed by GitHub
2 changed files with 20 additions and 7 deletions
+10 -5
View File
@@ -6,6 +6,7 @@ use crate::canonicalization::{
self, canonicalize_body_relaxed, canonicalize_body_simple, canonicalize_header_relaxed,
canonicalize_header_simple,
};
use crate::header::HEADER;
use crate::{bytes, DKIMError, DKIMHeader};
#[derive(Debug, Clone)]
@@ -111,12 +112,16 @@ pub(crate) fn compute_headers_hash<'a, 'b>(
{
let sign = dkim_header.get_raw_tag("b").unwrap();
let value = dkim_header.raw_bytes.replace(&sign, "");
if canonicalization_type == canonicalization::Type::Simple {
input.extend_from_slice(&"DKIM-Signature: ".as_bytes());
let mut canonicalized_value = if canonicalization_type == canonicalization::Type::Simple {
canonicalize_header_simple(HEADER, &value.as_bytes())
} else {
input.extend_from_slice(&"dkim-signature:".as_bytes());
}
input.extend_from_slice(&value.as_bytes());
canonicalize_header_relaxed(HEADER, &value.as_bytes())
};
// remove trailing "\r\n"
canonicalized_value.truncate(canonicalized_value.len() - 2);
input.extend_from_slice(&canonicalized_value);
}
debug!(logger, "headers to hash: {:?}", input);
+10 -2
View File
@@ -414,7 +414,15 @@ We lost the game. Are you hungry yet?
Joe."#
.replace("\n", "\r\n");
let raw_header_dkim = r#"v=1; a=ed25519-sha256; c=relaxed/relaxed; d=football.example.com; i=@football.example.com; q=dns/txt; s=brisbane; t=1528637909; h=from : to : subject : date : message-id : from : subject : date; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; b=/gCrinpcQOoIfuHNQIbq4pgh9kyIK3AQUdt9OdqQehSwhEIug4D11BusFa3bT3FY5OsU7ZbnKELq+eXdp1Q1Dw=="#;
let email = mailparse::parse_mail(raw_email.as_bytes()).unwrap();
let h = email
.headers
.get_all_headers(HEADER)
.first()
.unwrap()
.get_value_raw();
let raw_header_dkim = String::from_utf8_lossy(h);
let resolver: Arc<dyn Lookup> = Arc::new(MockResolver::new());
@@ -422,7 +430,7 @@ Joe."#
&slog::Logger::root(slog::Discard, slog::o!()),
Arc::clone(&resolver),
&validate_header(&raw_header_dkim).unwrap(),
&mailparse::parse_mail(raw_email.as_bytes()).unwrap(),
&email,
)
.await;