[Haskell-cafe] How to use an crypto with hackage cereal?

Magicloud Magiclouds magicloud.magiclouds at gmail.com
Wed Apr 22 01:52:53 UTC 2015


This seems like what I need. Thanks.

On Tue, Apr 21, 2015 at 10:13 PM, Erik Hesselink <hesselink at gmail.com>
wrote:

> One thing I've done in the past is, instead of giving an 'instance
> Serialize YourType', give an 'instance Serialize (Input -> YourType)'.
> This way you can get access to the input in the instance, but you have
> to provide the input when you can the deserialization function.
>
> Regards,
>
> Erik
>
> On Tue, Apr 21, 2015 at 3:58 PM, Magicloud Magiclouds
> <magicloud.magiclouds at gmail.com> wrote:
> > Thank you. But how if the cipher was specified outside the binary data? I
> > mean I need to pass the decrypt/encrypt function to get/put while they do
> > not accept parameters. Should I use Reader here?
> >
> > On Tue, Apr 21, 2015 at 6:43 PM, Yitzchak Gale <gale at sefer.org> wrote:
> >>
> >> Magicloud Magiclouds wrote:
> >> > I am trying to work with some binary data that encrypted by field
> >> > instead of
> >> > the result of serialization. I'd like to use Data.Serialize to wrap
> the
> >> > data
> >> > structure. But I could not figure out how to apply an runtime
> specified
> >> > cipher method to the bytestring.
> >>
> >> Are you using the set of crypto libraries written by
> >> Victor Hanquez, such as cryptocipher-types,
> >> crypto-pubkey-types, and cryptohash?
> >>
> >> Or the set of libraries written by Thomas DuBuisson,
> >> such as crypto-api, cipher-aes128, etc.?
> >>
> >> Here is an example of decoding for Victor's libraries.
> >> Encoding would be similar using Put instead of Get.
> >> Thomas' libraries would be similar using the other
> >> API.
> >>
> >> Let's say you have a type like this:
> >>
> >> data MyCipher = MyAES | MyBlowfish | ...
> >>
> >> Then in your cereal code you would have a Get monad
> >> expression something like this (assuming you have
> >> written all of the functions called parseSomething):
> >>
> >> getStuff = do
> >>   cipher <- parseCipher :: Get MyCipher
> >>   clearText <- case cipher of
> >>     MyAES -> do
> >>       keyBS <- parseAESKey :: Get ByteString
> >>       let key = either (error "bad AES key") id $ makeKey keyBS
> >>           cipher = cipherInit key
> >>       cipherText <- parseAESCipherText :: Get ByteString
> >>       return $ ecbDecrypt cipher cipherText
> >>     MyBlowfish -> do ...
> >>
> >> etc.
> >>
> >> Hope this helps,
> >> Yitz
> >
> >
> >
> >
> > --
> > 竹密岂妨流水过
> > 山高哪阻野云飞
> >
> > And for G+, please use magiclouds#gmail.com.
> >
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> >
>



-- 
竹密岂妨流水过
山高哪阻野云飞

And for G+, please use magiclouds#gmail.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150422/350b028c/attachment.html>


More information about the Haskell-Cafe mailing list