Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
A library for DKIM (http://www.ietf.org/rfc/rfc6376.txt). Currently, only receiver side is implemented.
Synopsis
- runDKIM :: Resolver -> Mail -> IO DAResult
- runDKIM' :: Resolver -> Mail -> DKIM -> IO DAResult
- parseDKIM :: RawFieldValue -> Maybe DKIM
- data DKIM
- dkimDomain :: DKIM -> Domain
- dkimSelector :: DKIM -> ByteString
- dkimFieldKey :: CanonFieldKey
Documentation
Authentication with DKIM
runDKIM :: Resolver -> Mail -> IO DAResult Source #
Verifying Mail
with DKIM.
>>>
rs <- makeResolvSeed defaultResolvConf
>>>
:{
let lst = ["DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;" ," d=gmail.com; s=20230601; t=1712195651; x=1712800451; darn=iij.ad.jp;" ," h=to:subject:message-id:date:from:mime-version:from:to:cc:subject" ," :date:message-id:reply-to;" ," bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=;" ," b=YXB6AlsJFBYK+32OfzPKYoRHVHL/L01KgEV9YIxIiyF2LiLMgGlIdQdTnFnKKgaOKN" ," EX/233mgKR3Vn4I9yTdlgli6d5Eni4XU064hJ4b4Xm+/AuiW67LiuZlDkQIHSOXYg7y9" ," PiBPz5+5FQL2w/svoty7mYkUh59xWmbUCZXXUYoXA+MSnyNvV187TYlx/L6CWeb3Tc4E" ," EX/DEROnzKST/O0LVrnYzqJWv/H0NTytA+JxE1dT/1/ObHkHWqb/ip4DxPlE6KB2ycOu" ," vhtPyambWkKEsEtR5UTMcMweVc2qsdFciqupFAYIcJIopFyL4rxai8E32q6V1hZmpdzr" ," uW/Q==" ,"To: kazu@iij.ad.jp" ,"Subject: test" ,"Message-ID: <CAKipW39hxTzXh28waC4fuu=qVFfy9EF=H8zH_k8wgM9RBR6_dg@mail.gmail.com>" ,"Date: Thu, 4 Apr 2024 10:53:59 +0900" ,"From: Kazu Yamamoto <kazu.yamamoto@gmail.com>" ,"MIME-Version: 1.0" ,"Content-Type: text/plain; charset=\"UTF-8\"" ,"" ,"test" ] mail = getMail $ BS8.intercalate "\r\n" lst in withResolver rs $ \rslv -> runDKIM rslv mail :} pass
runDKIM' :: Resolver -> Mail -> DKIM -> IO DAResult Source #
Verifying Mail
with DKIM. The value of DKIM-Signature:
should be parsed beforehand.
Parsing DKIM-Signature:
parseDKIM :: RawFieldValue -> Maybe DKIM Source #
Parsing DKIM-Signature:.
>>>
:{
let dkim = BS8.concat [ "v=1; a=rsa-sha256; s=brisbane; d=example.com;\n" , " c=relaxed/simple; q=dns/txt; i=joe@football.example.com;\n" , " h=Received : From : To : Subject : Date : Message-ID;\n" , " bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;\n" , " b=AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB\n" , " 4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHut\n" , " KVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV\n" , " 4bmp/YzhwvcubU4=;" ] in pPrintNoColor $ parseDKIM dkim :} Just ( DKIM { dkimVersion = "1" , dkimSigAlgo = RSA_SHA256 , dkimSignature = "AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHutKVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV4bmp/YzhwvcubU4=" , dkimBodyHash = "2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=" , dkimHeaderCanon = DKIM_RELAXED , dkimBodyCanon = DKIM_SIMPLE , dkimDomain0 = "example.com" , dkimFields = [ "received" , "from" , "to" , "subject" , "date" , "message-id" ] , dkimLength = Nothing , dkimSelector0 = "brisbane" } )
>>>
:{
let dkim = BS8.concat [ "v=1; a=rsa-sha256; s=brisbane; d=example.com;\n" , " q=dns/txt; i=joe@football.example.com;\n" , " h=Received : From : To : Subject : Date : Message-ID;\n" , " bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;\n" , " b=AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB\n" , " 4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHut\n" , " KVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV\n" , " 4bmp/YzhwvcubU4=;" ] in pPrintNoColor $ parseDKIM dkim :} Just ( DKIM { dkimVersion = "1" , dkimSigAlgo = RSA_SHA256 , dkimSignature = "AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHutKVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV4bmp/YzhwvcubU4=" , dkimBodyHash = "2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=" , dkimHeaderCanon = DKIM_SIMPLE , dkimBodyCanon = DKIM_SIMPLE , dkimDomain0 = "example.com" , dkimFields = [ "received" , "from" , "to" , "subject" , "date" , "message-id" ] , dkimLength = Nothing , dkimSelector0 = "brisbane" } )
dkimDomain :: DKIM -> Domain Source #
Getting of the value of the "d" tag in DKIM-Signature:.
dkimSelector :: DKIM -> ByteString Source #
Getting of the value of the "s" tag in DKIM-Signature:.
Field key for DKIM-Signature:
dkimFieldKey :: CanonFieldKey Source #
Canonicalized key for DKIM-Signature:.