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

Magicloud Magiclouds magicloud.magiclouds at gmail.com
Wed Apr 22 02:52:03 UTC 2015


Apparently I did not think this through. For "instance (BlockCipher k,
Byteable iv) => Serialize ((k, iv), Destination)", how should I code get
function? I mean in get, I should give out (k, iv), instead of using them.

On Wed, Apr 22, 2015 at 9:52 AM, Magicloud Magiclouds <
magicloud.magiclouds at gmail.com> wrote:

> 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.
>



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

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/41d0aae0/attachment.html>


More information about the Haskell-Cafe mailing list