Documentation ¶
Index ¶
- Constants
- Variables
- type Middleware
- type SignerConfig
- func (sc *SignerConfig) CanonicalizationIsValid(c dkim.Canonicalization) bool
- func (sc *SignerConfig) HashAlgoIsValid(ha crypto.Hash) bool
- func (sc *SignerConfig) SetAUID(a string)
- func (sc *SignerConfig) SetBodyCanonicalization(c dkim.Canonicalization) error
- func (sc *SignerConfig) SetExpiration(x time.Time) error
- func (sc *SignerConfig) SetHashAlgo(ha crypto.Hash) error
- func (sc *SignerConfig) SetHeaderCanonicalization(c dkim.Canonicalization) error
- func (sc *SignerConfig) SetHeaderFields(fl ...string) error
- func (sc *SignerConfig) SetSelector(s string) error
- type SignerOption
- func WithAUID(a string) SignerOption
- func WithBodyCanonicalization(c dkim.Canonicalization) SignerOption
- func WithExpiration(x time.Time) SignerOption
- func WithHashAlgo(ha crypto.Hash) SignerOption
- func WithHeaderCanonicalization(c dkim.Canonicalization) SignerOption
- func WithHeaderFields(fl ...string) SignerOption
Constants ¶
const Type mail.MiddlewareType = "dkim"
Type is the type of Middleware
Variables ¶
var ( ErrInvalidHashAlgo = errors.New("unsupported hashing algorithm") ErrInvalidCanonicalization = errors.New("unsupported canonicalization type") ErrDecodePEMFailed = errors.New("failed to decode PEM block") ErrNotEd25519Key = errors.New("provided key is not of type Ed25519") ErrInvalidExpiration = errors.New("expiration date must be in the future") ErrEmptySelector = errors.New("DKIM domain selector must not be empty") ErrFromRequired = errors.New(`the "From" field is required`) )
Functions ¶
This section is empty.
Types ¶
type Middleware ¶
type Middleware struct {
// contains filtered or unexported fields
}
Middleware is the middleware struct for the DKIM middleware
func NewFromEd25519Key ¶
func NewFromEd25519Key(k []byte, sc *SignerConfig) (*Middleware, error)
NewFromEd25519Key returns a new Signer instance from a given PEM encoded Ed25519 private key
func NewFromRSAKey ¶
func NewFromRSAKey(k []byte, sc *SignerConfig) (*Middleware, error)
NewFromRSAKey returns a new Middlware from a given RSA private key byte slice and a SignerConfig
func (Middleware) Handle ¶
func (d Middleware) Handle(m *mail.Msg) *mail.Msg
Handle is the handler method that satisfies the mail.Middleware interface
func (Middleware) Type ¶
func (d Middleware) Type() mail.MiddlewareType
Type returns the MiddlewareType for this Middleware
type SignerConfig ¶
type SignerConfig struct { // AUID represents the DKIM Agent or User Identifier (AUID) // See: https://datatracker.ietf.org/doc/html/rfc6376#section-2.6 // // A single identifier that refers to the agent or user on behalf of // whom the Signing Domain Identifier (SDID) has taken responsibility. // The AUID comprises a domain name and an optional <local-part>. The // domain name is the same as that used for the SDID or is a subdomain // of it. For DKIM processing, the domain name portion of the AUID has // only basic domain name semantics; any possible owner-specific // semantics are outside the scope of DKIM. // // AUID is optional and can be empty AUID string // CanonicalizationHeader defines the type of Canonicalization used for the mail.Msg header // Some mail systems modify email in transit, potentially invalidating a // signature. For most Signers, mild modification of email is // immaterial to validation of the DKIM domain name's use. For such // Signers, a canonicalization algorithm that survives modest in-transit // modification is preferred. // // If no canonicalization is defines, we default to CanonicalizationSimple // // See: https://datatracker.ietf.org/doc/html/rfc6376#section-3.4 // See also: canonicalization.go#L7 CanonicalizationHeader dkim.Canonicalization // CanonicalizationBody defines the type of Canonicalization used for the mail.Msg body // Some mail systems modify email in transit, potentially invalidating a // signature. For most Signers, mild modification of email is // immaterial to validation of the DKIM domain name's use. For such // Signers, a canonicalization algorithm that survives modest in-transit // modification is preferred. // // If no canonicalization is defines, we default to CanonicalizationSimple // // See: https://datatracker.ietf.org/doc/html/rfc6376#section-3.4 // See also: canonicalization.go#L7 CanonicalizationBody dkim.Canonicalization // Domain represents the DKIM Signing Domain Identifier (SDID) // See: https://datatracker.ietf.org/doc/html/rfc6376#section-2.5 // // A single domain name that is the mandatory payload output of DKIM // and that refers to the identity claiming some responsibility for // the message by signing it. // // Domain MUST not be empty Domain string // Expiration is an optional expiration time of the signature. // See: https://www.rfc-editor.org/rfc/rfc6376.html#section-3.5 // // Signatures MAY be considered invalid if the verification time at // the Verifier is past the expiration date. The verification // time should be the time that the message was first received at // the administrative domain of the Verifier if that time is // reliably available; otherwise, the current time should be // used. The value of the "x=" tag MUST be greater than the value // of the "t=" tag if both are present. Expiration time.Time // HashAlgo represents the DKIM Hash Algorithms // See: https://datatracker.ietf.org/doc/html/rfc6376#section-7.7 // // DKIM supports the following hashing algorithms // - SHA256: This is the default and prefered algorithm // - SHA1: Due to comptibility reasons SHA1 is still supported but is // not recommended to use it, since the SHA1 hashing algorithm has // been proven to be broken HashAlgo crypto.Hash // HeaderFields is an optional list of header fields that should be used in // the signature. If the list is empty, all header fields will be used. // // If a list of headers is given via the HeaderFields slice, the FROM header // is always required. // // For a list of recommended signature headers, please refer to: // https://www.rfc-editor.org/rfc/rfc6376.html#section-5.4.1 HeaderFields []string // Selector represents the DKIM domain selectors // See: https://datatracker.ietf.org/doc/html/rfc6376#section-3.1 // // To support multiple concurrent public keys per signing domain, the // key namespace is subdivided using "selectors". For example, // selectors might indicate the names of office locations (e.g., // "sanfrancisco", "coolumbeach", and "reykjavik"), the signing date // (e.g., "january2005", "february2005", etc.), or even an individual // user. // // Selector MUST not be empty Selector string }
func NewConfig ¶
func NewConfig(d string, s string, o ...SignerOption) (*SignerConfig, error)
NewConfig returns a new SignerConfig struct. It requires a domain name d and a domain selector s. All other values can be prefilled using the With*() SignerOption methods
func (*SignerConfig) CanonicalizationIsValid ¶
func (sc *SignerConfig) CanonicalizationIsValid(c dkim.Canonicalization) bool
CanonicalizationIsValid returns true if a the provided Canonicalization is a valid value for the SignerConfig
func (*SignerConfig) HashAlgoIsValid ¶
func (sc *SignerConfig) HashAlgoIsValid(ha crypto.Hash) bool
HashAlgoIsValid returns true if a the provided crypto.Hash is a valid algorithm for the SignerConfig
func (*SignerConfig) SetAUID ¶
func (sc *SignerConfig) SetAUID(a string)
SetAUID sets/overrides the AUID of the SignerConfig
func (*SignerConfig) SetBodyCanonicalization ¶
func (sc *SignerConfig) SetBodyCanonicalization(c dkim.Canonicalization) error
SetBodyCanonicalization sets/overrides the Canonicalization of the SignerConfig
func (*SignerConfig) SetExpiration ¶
func (sc *SignerConfig) SetExpiration(x time.Time) error
SetExpiration sets/overrides the Expiration of the SignerConfig
func (*SignerConfig) SetHashAlgo ¶
func (sc *SignerConfig) SetHashAlgo(ha crypto.Hash) error
SetHashAlgo sets/override the hashing algorithm of the SignerConfig
func (*SignerConfig) SetHeaderCanonicalization ¶
func (sc *SignerConfig) SetHeaderCanonicalization(c dkim.Canonicalization) error
SetHeaderCanonicalization sets/overrides the Canonicalization of the SignerConfig
func (*SignerConfig) SetHeaderFields ¶
func (sc *SignerConfig) SetHeaderFields(fl ...string) error
SetHeaderFields sets/override the HeaderFields of the SignerConfig
func (*SignerConfig) SetSelector ¶
func (sc *SignerConfig) SetSelector(s string) error
SetSelector overrides the Selector of the SignerConfig
type SignerOption ¶
type SignerOption func(config *SignerConfig) error
SignerOption returns a function that can be used for grouping SignerConfig options
func WithAUID ¶
func WithAUID(a string) SignerOption
WithAUID provides the optional AUID value for the SignerConfig
func WithBodyCanonicalization ¶
func WithBodyCanonicalization(c dkim.Canonicalization) SignerOption
WithBodyCanonicalization provides the Canonicalization for the message body in the SignerConfig
func WithExpiration ¶
func WithExpiration(x time.Time) SignerOption
WithExpiration provides the optional expiration time value for the SignerConfig
func WithHashAlgo ¶
func WithHashAlgo(ha crypto.Hash) SignerOption
WithHashAlgo provides the Hashing algorithm to the SignerConfig
func WithHeaderCanonicalization ¶
func WithHeaderCanonicalization(c dkim.Canonicalization) SignerOption
WithHeaderCanonicalization provides the Canonicalization for the message header in the SignerConfig
func WithHeaderFields ¶
func WithHeaderFields(fl ...string) SignerOption
WithHeaderFields provides a list of header field names that should be included in the DKIM signature