From 6dc9650da5502e4cc8c784b12fdd1f67cb6c2555 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Wed, 6 May 2020 13:01:41 +0200 Subject: [PATCH] deserialisation of DHT messages --- Hash2Pub/src/Hash2Pub/ASN1Coding.hs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Hash2Pub/src/Hash2Pub/ASN1Coding.hs b/Hash2Pub/src/Hash2Pub/ASN1Coding.hs index bbc807e..cca8fcb 100644 --- a/Hash2Pub/src/Hash2Pub/ASN1Coding.hs +++ b/Hash2Pub/src/Hash2Pub/ASN1Coding.hs @@ -4,14 +4,16 @@ module Hash2Pub.ASN1Coding where import Data.ASN1.Encoding -- asn1-encoding package import Data.ASN1.BinaryEncoding -import Data.ASN1.Error +import Data.ASN1.Error() import Data.ASN1.Types -- asn1-types package import Data.ASN1.Parse import Data.Maybe (fromMaybe, mapMaybe) -import Data.Time.Clock.POSIX +import Data.Time.Clock.POSIX() import qualified Data.ByteString as BS 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 Hash2Pub.FediChord @@ -159,6 +161,11 @@ serialiseMessage msg maxBytesLength = maxMsgLength msgs = maximum $ map BS.length msgs 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 ===== -- encode a message 'ActionPayload' according to its type,