diff --git a/Hash2Pub/src/asn1test.hs b/Hash2Pub/src/asn1test.hs index d9e8dae..cd8fef1 100644 --- a/Hash2Pub/src/asn1test.hs +++ b/Hash2Pub/src/asn1test.hs @@ -8,6 +8,7 @@ import qualified Data.ASN1.Types as ASN1 -- asn1-types package import qualified Data.ASN1.Parse as ASN1P import qualified Data.ByteString as BS import Data.Maybe (fromMaybe) +import Debug.Trace (trace) -- import Hash2Pub.Fedichord @@ -30,7 +31,17 @@ getUnicodeField ((ASN1.Start ASN1.Sequence) : _ : (ASN1.ASN1String strASN1) : _) testParser :: ASN1P.ParseASN1 String testParser = do - show <$> ASN1P.getNext + foo <- ASN1P.onNextContainer ASN1.Sequence getAll + return $ show foo + +getAll :: ASN1P.ParseASN1 [ASN1.ASN1] +getAll = ASN1P.getMany ASN1P.getNext + +-- | run a function of the next elements of a container of specified type +onNextContainer' :: ASN1.ASN1ConstructionType -> ASN1P.ParseASN1 a -> ASN1P.ParseASN1 a +onNextContainer' ty f = do + cont <- ASN1P.getNextContainer ty + either ASN1P.throwParseError return . trace (show cont) $ ASN1P.runParseASN1 f cont --stringParser asn1obj = -- fmap (fromMaybe "" $ ASN1.asn1CharacterToString) ASN1P.getNext