Skip to main content

mini_mail_auth/dkim/
mod.rs

1pub mod builder;
2pub mod canonicalize;
3pub mod headers;
4pub mod sign;
5
6use crate::common::crypto::{Algorithm, SigningKey};
7use std::marker::PhantomData;
8
9// --- Enums and Structs ---
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
12pub enum Canonicalization {
13    #[default]
14    Relaxed,
15    Simple,
16}
17
18#[derive(Debug, PartialEq, Eq, Clone, Default)]
19pub struct Signature {
20    pub v: u32,
21    pub a: Algorithm,
22    pub d: String,
23    pub s: String,
24    pub b: Vec<u8>,
25    pub bh: Vec<u8>,
26    pub h: Vec<String>,
27    pub l: u64,
28    pub t: u64,
29    pub ch: Canonicalization,
30    pub cb: Canonicalization,
31}
32
33// --- Builder Pattern ---
34
35#[derive(Debug, PartialEq, Eq, Clone, Default)]
36pub struct DkimSigner<T: SigningKey, State = NeedDomain> {
37    pub(crate) _state: PhantomData<State>,
38    pub(crate) key: T,
39    pub(crate) template: Signature,
40}
41
42pub struct NeedDomain;
43pub struct NeedSelector;
44pub struct NeedHeaders;
45pub struct Done;