<div dir="auto">If your data fits in RAM maybe it's best to forget about the streaming and use the saltine library's Box module. Then you can't really go wrong on the crypto front.</div><div class="gmail_extra"><br><div class="gmail_quote">On Jul 6, 2017 09:41, "Ivan Lazar Miljenovic" <<a href="mailto:ivan.miljenovic@gmail.com">ivan.miljenovic@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 6 July 2017 at 17:23, David Turner <<a href="mailto:dct25-561bs@mythic-beasts.com">dct25-561bs@mythic-beasts.com</a><wbr>> wrote:<br>
> Apologies, just seen the bit about wanting to pass the key in directly<br>
> rather than using the GPG keyring because there are no email addresses<br>
> attached to your various keys.<br>
><br>
> Maybe a silly question, but can you give them email addresses to identify<br>
> them in a GPG-compatible manner? They don't have to have associated<br>
> mailboxes so the addresses can be totally made-up.<br>
<br>
Yes, that's my fallback, since it's possible to tell gpg to use a<br>
different directory so I can provide a key externally with my<br>
transmission request, load it into a temporary store, grab the<br>
identity out and use that.  It would just be more convenient to have a<br>
"here's a ByteString with the public key" option (which I can always<br>
implement as a wrapper function).<br>
<br>
><br>
> If not, I'd probably start to look to something like openssl to do the<br>
> symmetric encryption and manage the keys for that separately. It looks<br>
> possible to build a streaming AES implementation using the nonstreaming<br>
> functions in `cryptonite`, but the usual recommendation is that its far too<br>
> risky to do any low-level crypto yourself so this seems like a bad idea.<br>
><br>
><br>
> On 6 Jul 2017 07:40, "David Turner" <<a href="mailto:dct25-561bs@mythic-beasts.com">dct25-561bs@mythic-beasts.com</a><wbr>> wrote:<br>
>><br>
>> Hi,<br>
>><br>
>> I do not know of a library to do this, sorry. Note that the way public-key<br>
>> crypto works in a streaming fashion is typically to use the public-key bit<br>
>> only to encrypt a key for a symmetric cipher and then use the (much-faster)<br>
>> symmetric encryption for the actual data. The symmetric bit could well be<br>
>> something like AES256-CBC or AES256-CTR.<br>
>><br>
>> This means that the format of the resulting data is a bit<br>
>> implementation-defined as it has to include the asymetrically-encrypted data<br>
>> first, followed by the stream of symmetrically-encrypted data. GnuPG<br>
>> includes quite a bit of metadata in its files that describes the algorithms<br>
>> used and delimits the pieces, so if you want the resulting files to be<br>
>> GnuPG-compatible you'll need to take this into account.<br>
>><br>
>> If it were me, I'd probably just shell out to `gpg`. It's fast and<br>
>> low-risk.<br>
>><br>
>> Hope that helps,<br>
>><br>
>> David<br>
>><br>
>><br>
>> On 6 Jul 2017 05:59, "Ivan Lazar Miljenovic" <<a href="mailto:ivan.miljenovic@gmail.com">ivan.miljenovic@gmail.com</a>><br>
>> wrote:<br>
>><br>
>> I have a use case for needing to use public key cryptography to<br>
>> encrypt a large amount of data in a streaming fashion (get it out of a<br>
>> DB, encrypt, put into an AWS S3 bucket).<br>
>><br>
>> The command-line gpg tool seems to be able to encrypt/decrypt data<br>
>> from stdin to stdout in a streaming fashion, but in my attempts to use<br>
>> it it seems very file-based for things like the keys to use (whereas I<br>
>> would prefer to be able to pass the public key as an actual value<br>
>> rather than a file; if nothing else because this is for tools that<br>
>> don't have email addresses to use and base their keys on for<br>
>> addressing).<br>
>><br>
>> Is there an existing library that can achieve this using<br>
>> conduit/pipes/whatever? cryptonite-conduit only covers hashing,<br>
>> hOpenPGP is poorly documented and I can't work out how to use it<br>
>> ("just follow the types" is difficult when Haddock docs don't link to<br>
>> the required types (seems to be because it uses the "import Module as<br>
>> X" trick for re-exporting everything but then everything from those<br>
>> modules isn't available).<br>
>><br>
>> Can anyone recommend a solution?<br>
>><br>
>> --<br>
>> Ivan Lazar Miljenovic<br>
>> <a href="mailto:Ivan.Miljenovic@gmail.com">Ivan.Miljenovic@gmail.com</a><br>
>> <a href="http://IvanMiljenovic.wordpress.com" rel="noreferrer" target="_blank">http://IvanMiljenovic.<wbr>wordpress.com</a><br>
>> ______________________________<wbr>_________________<br>
>> Haskell-Cafe mailing list<br>
>> To (un)subscribe, modify options or view archives go to:<br>
>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
>> Only members subscribed via the mailman list are allowed to post.<br>
>><br>
>><br>
><br>
<br>
<br>
<br>
--<br>
Ivan Lazar Miljenovic<br>
<a href="mailto:Ivan.Miljenovic@gmail.com">Ivan.Miljenovic@gmail.com</a><br>
<a href="http://IvanMiljenovic.wordpress.com" rel="noreferrer" target="_blank">http://IvanMiljenovic.<wbr>wordpress.com</a><br>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div></div>