Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is a resubmit of haskell-crypto#364. Since the parent project is now defunct, I rebased them onto the master branch of this fork. The original PR description is included below.
Earlier today I noticed an old open issue for keyed Blake2 support (see haskell-crypto#196). Since I need Blake2b-MAC for one of my own pet projects, and it was a simple matter of properly exposing an existing C interface, I figured I'd have a go at adding it myself.
Here's a summary of the changes:
HashBlake2
typeclass inCrypto.Hash.Blake2
to support keyed initialisation.KeyedBlake2
module toCrypto.MAC
with an interface that's essentially isomorphic to the other modules inCrypto.MAC
Note that this is my first time messing around with cryptonite internals, and my experience with the foreign function interface is also pretty limited. In particular, I'd really appreciate a sanity check on the following points:
cryptonite_blake2XYZ_init_key
entry points in the C layer.Crypto.MAC.KeyedBlake2
(the only nontrivial piece of unsafe code)If there's anything else I need to address, please don't hesitate to tell me.
Thanks a lot!