<div dir="ltr">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?</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 21, 2015 at 6:43 PM, Yitzchak Gale <span dir="ltr"><<a href="mailto:gale@sefer.org" target="_blank">gale@sefer.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Magicloud Magiclouds wrote:<br>
> I am trying to work with some binary data that encrypted by field instead of<br>
> the result of serialization. I'd like to use Data.Serialize to wrap the data<br>
> structure. But I could not figure out how to apply an runtime specified<br>
> cipher method to the bytestring.<br>
<br>
</span>Are you using the set of crypto libraries written by<br>
Victor Hanquez, such as cryptocipher-types,<br>
crypto-pubkey-types, and cryptohash?<br>
<br>
Or the set of libraries written by Thomas DuBuisson,<br>
such as crypto-api, cipher-aes128, etc.?<br>
<br>
Here is an example of decoding for Victor's libraries.<br>
Encoding would be similar using Put instead of Get.<br>
Thomas' libraries would be similar using the other<br>
API.<br>
<br>
Let's say you have a type like this:<br>
<br>
data MyCipher = MyAES | MyBlowfish | ...<br>
<br>
Then in your cereal code you would have a Get monad<br>
expression something like this (assuming you have<br>
written all of the functions called parseSomething):<br>
<br>
getStuff = do<br>
  cipher <- parseCipher :: Get MyCipher<br>
  clearText <- case cipher of<br>
    MyAES -> do<br>
      keyBS <- parseAESKey :: Get ByteString<br>
      let key = either (error "bad AES key") id $ makeKey keyBS<br>
          cipher = cipherInit key<br>
      cipherText <- parseAESCipherText :: Get ByteString<br>
      return $ ecbDecrypt cipher cipherText<br>
    MyBlowfish -> do ...<br>
<br>
etc.<br>
<br>
Hope this helps,<br>
Yitz<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">竹密岂妨流水过<br>山高哪阻野云飞<br><br>And for G+, please use magiclouds#<a href="http://gmail.com" target="_blank">gmail.com</a>.</div>
</div>