Add blake2b_salt_personal()

This commit is contained in:
Frank Denis
2013-11-05 22:28:33 -08:00
parent e9c46aef5f
commit 6745db7a0b
4 changed files with 57 additions and 1 deletions
@@ -27,6 +27,7 @@
#define blake2b_update crypto_generichash_blake2b__update
#define blake2b_final crypto_generichash_blake2b__final
#define blake2b crypto_generichash_blake2b__blake2b
#define blake2b_salt_personal crypto_generichash_blake2b__blake2b_salt_personal
#if defined(_MSC_VER)
#define ALIGN(x) __declspec(align(x))
@@ -158,6 +159,7 @@ typedef crypto_generichash_blake2b_state blake2b_state;
// Simple API
int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );
int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );
int blake2b_salt_personal( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen, const void *salt, const void *personal );
int blake2sp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );
int blake2bp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );
@@ -185,7 +185,7 @@ int blake2b_init( blake2b_state *S, const uint8_t outlen )
}
int blake2b_init_salt_personal( blake2b_state *S, const uint8_t outlen,
const void *salt, const void *personal)
const void *salt, const void *personal )
{
blake2b_param P[1];
@@ -431,3 +431,29 @@ int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen
blake2b_final( S, out, outlen );
return 0;
}
int blake2b_salt_personal( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen,
const void *salt, const void *personal )
{
blake2b_state S[1];
/* Verify parameters */
if ( NULL == in ) return -1;
if ( NULL == out ) return -1;
if( NULL == key ) keylen = 0;
if( keylen > 0 )
{
if( blake2b_init_key_salt_personal( S, outlen, key, keylen, salt, personal ) < 0 ) return -1;
}
else
{
if( blake2b_init_salt_personal( S, outlen, salt, personal ) < 0 ) return -1;
}
blake2b_update( S, ( const uint8_t * )in, inlen );
blake2b_final( S, out, outlen );
return 0;
}
@@ -22,6 +22,25 @@ crypto_generichash_blake2b(unsigned char *out, size_t outlen,
(uint8_t) outlen, (uint64_t) inlen, (uint8_t) keylen);
}
int
crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen,
const unsigned char *in, unsigned long long inlen,
const unsigned char *key, size_t keylen,
const unsigned char *salt,
const unsigned char *personal)
{
if (outlen <= 0U || outlen > BLAKE2B_OUTBYTES ||
keylen > BLAKE2B_KEYBYTES || inlen > UINT64_MAX) {
return -1;
}
assert(outlen <= UINT8_MAX);
assert(keylen <= UINT8_MAX);
return blake2b_salt_personal((uint8_t *) out, in, key,
(uint8_t) outlen, (uint64_t) inlen, (uint8_t) keylen,
salt, personal);
}
int
crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state,
const unsigned char *key,
@@ -68,6 +68,15 @@ int crypto_generichash_blake2b(unsigned char *out, size_t outlen,
unsigned long long inlen,
const unsigned char *key, size_t keylen);
SODIUM_EXPORT
int crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen,
const unsigned char *in,
unsigned long long inlen,
const unsigned char *key,
size_t keylen,
const unsigned char *salt,
const unsigned char *personal);
SODIUM_EXPORT
int crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state,
const unsigned char *key,