[Haskell-cafe] Binary serialization, was Re: Abstraction leak
Dominic Steinitz
dominic.steinitz at blueyonder.co.uk
Thu Jul 5 16:41:11 EDT 2007
>
>> (Bonus points for being able to parse ASN.1 and generate appropriate
>> Haskell datatypes & serialization primitives automatically :-) )
>
> I think there's at least an ASN.1 definition in the crypto library.
> Dominic might be able to enlighten us on that.
>
No bonus points I'm afraid. There is an embryonic ASN.1 library here
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ASN1-0.0.1
You can take an ASN.1 definition such as
FooBar {1 2 0 0 6 1} DEFINITIONS ::=
BEGIN
Journey ::= SEQUENCE {
origin IA5String,
stop1 [0] IA5String OPTIONAL,
stop2 [1] IA5String OPTIONAL,
destination IA5String
}
Odyssey ::= SEQUENCE {
start Journey,
trip1 [0] Journey OPTIONAL,
trip2 [1] Journey OPTIONAL,
trip3 [2] Journey OPTIONAL,
end Journey
}
END
And then create abstract Haskell representations of the ASN.1 types
journey =
"Journey" ::=
AbsSeq Universal 16 Implicit [
Regular (Just "origin" :>:
(Nothing :@: absIA5String)),
Optional (Just "stop1" :>:
(Just 0 :@: absIA5String)),
Optional (Just "stop2" :>:
(Just 1 :@: absIA5String)),
Regular (Just "destination" :>:
(Nothing :@: absIA5String))
]
odyssey =
"Odyssey" ::=
AbsSeq Universal 16 Implicit [
Regular (Just "start" :>: (Nothing :@: journey)),
Optional (Just "trip1" :>: (Just 0 :@: journey)),
Optional (Just "trip2" :>: (Just 1 :@: journey)),
Optional (Just "trip3" :>: (Just 2 :@: journey)),
Regular (Just "end" :>: (Nothing :@: journey))
]
The library then allows you to decode BER representations of these
types. It's good enough to decode X.509 identity and attribute certificates.
There's no encoding routines currently as I didn't need them.
I'll try and make some documentation more easily available if I get time
at the weekend.
I'm working on PER at the moment both encoding and decoding using GADTs.
I will extend it at some point for BER but that won't be for some time.
I thought I read that someone was working on parsing ASN.1 so I'll try
and follow that up (again it will have to be at the weekend).
Dominic.
More information about the Haskell-Cafe
mailing list