• Eric Biggers's avatar
    crypto: blake2b - sync with blake2s implementation · 28dcca4c
    Eric Biggers authored
    Sync the BLAKE2b code with the BLAKE2s code as much as possible:
    
    - Move a lot of code into new headers <crypto/blake2b.h> and
      <crypto/internal/blake2b.h>, and adjust it to be like the
      corresponding BLAKE2s code, i.e. like <crypto/blake2s.h> and
      <crypto/internal/blake2s.h>.
    
    - Rename constants, e.g. BLAKE2B_*_DIGEST_SIZE => BLAKE2B_*_HASH_SIZE.
    
    - Use a macro BLAKE2B_ALG() to define the shash_alg structs.
    
    - Export blake2b_compress_generic() for use as a fallback.
    
    This makes it much easier to add optimized implementations of BLAKE2b,
    as optimized implementations can use the helper functions
    crypto_blake2b_{setkey,init,update,final}() and
    blake2b_compress_generic().  The ARM implementation will use these.
    
    But this change is also helpful because it eliminates unnecessary
    differences between the BLAKE2b and BLAKE2s code, so that the same
    improvements can easily be made to both.  (The two algorithms are
    basically identical, except for the word size and constants.)  It also
    makes it straightforward to add a library API for BLAKE2b in the future
    if/when it's needed.
    
    This change does make the BLAKE2b code slightly more complicated than it
    needs to be, as it doesn't actually provide a library API yet.  For
    example, __blake2b_update() doesn't really need to exist yet; it could
    just be inlined into crypto_blake2b_update().  But I believe this is
    outweighed by the benefits of keeping the code in sync.
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Acked-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    28dcca4c
blake2b.h 3.06 KB