deserialisation of DHT messages

This commit is contained in:
Trolli Schmittlauch 2020-05-06 13:01:41 +02:00
parent c9654d66d6
commit 6dc9650da5

View file

@ -4,14 +4,16 @@ module Hash2Pub.ASN1Coding where
import Data.ASN1.Encoding -- asn1-encoding package import Data.ASN1.Encoding -- asn1-encoding package
import Data.ASN1.BinaryEncoding import Data.ASN1.BinaryEncoding
import Data.ASN1.Error import Data.ASN1.Error()
import Data.ASN1.Types -- asn1-types package import Data.ASN1.Types -- asn1-types package
import Data.ASN1.Parse import Data.ASN1.Parse
import Data.Maybe (fromMaybe, mapMaybe) import Data.Maybe (fromMaybe, mapMaybe)
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX()
import qualified Data.ByteString as BS import qualified Data.ByteString as BS
import qualified Data.Set as Set import qualified Data.Set as Set
import qualified Data.Map.Strict as Map import qualified Data.Map.Strict as Map()
import Data.Bifunctor (first)
import Control.Exception (displayException)
import Safe import Safe
import Hash2Pub.FediChord import Hash2Pub.FediChord
@ -159,6 +161,11 @@ serialiseMessage msg maxBytesLength =
maxMsgLength msgs = maximum $ map BS.length msgs maxMsgLength msgs = maximum $ map BS.length msgs
maximumParts = 150 maximumParts = 150
-- | Deserialise a ASN.1 DER encoded bytesstring of a single 'FediChordMessage'.
deserialiseMessage :: BS.ByteString
-> Either String FediChordMessage
deserialiseMessage msgBytes = first displayException (decodeASN1' DER msgBytes) >>= runParseASN1 parseMessage
-- ===== encoding functions ===== -- ===== encoding functions =====
-- encode a message 'ActionPayload' according to its type, -- encode a message 'ActionPayload' according to its type,