On Mon, Nov 28, 2022 at 08:14:15PM +0100, Hécate wrote:
Ah sorry, I misunderstood your question.
I am writing a high-level interface to my libsodium bindings, and I'm trying to provide implementations of helpful typeclasses.
I actually don't need Storable to do the FFI stuff, thankfully, but the main case of using this library would involve sending the result of the signing operation to the network (as ByteStrings), with authorization tokens like Biscuit¹ in mind.
For serialisation to external standard formats, like JSON, or binary
JSON, ... you're definitely not looking for `Storable`. Simply
returning the message as two octet-strings (ByteStrings), one for the
raw data and another for the signature is all you need. From there,
various higher-level formats are possible.
The main thing to be mindful of is that ByteStrings are limited to 2^31
bytes on 32-bit machines, so very large messages don't fit in a
ByteString on some (increasingly less common) architectures.
Or am I missing some reason why you'd want to create a single binary
blob