mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-01-27 07:32:20 +01:00
419 lines
12 KiB
C
419 lines
12 KiB
C
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief This function initializes a Blake2b structure for use with the
|
|
Blake2 hash function.
|
|
|
|
\return 0 Returned upon successfully initializing the Blake2b structure and
|
|
setting the digest size.
|
|
|
|
\param b2b pointer to the Blake2b structure to initialize
|
|
\param digestSz length of the blake 2 digest to implement
|
|
|
|
_Example_
|
|
\code
|
|
Blake2b b2b;
|
|
// initialize Blake2b structure with 64 byte digest
|
|
wc_InitBlake2b(&b2b, WC_BLAKE2B_DIGEST_SIZE);
|
|
\endcode
|
|
|
|
\sa wc_Blake2bUpdate
|
|
*/
|
|
int wc_InitBlake2b(Blake2b* b2b, word32 digestSz);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief This function updates the Blake2b hash with the given input data.
|
|
This function should be called after wc_InitBlake2b, and repeated until
|
|
one is ready for the final hash: wc_Blake2bFinal.
|
|
|
|
\return 0 Returned upon successfully update the Blake2b structure with
|
|
the given data
|
|
\return -1 Returned if there is a failure while compressing the input data
|
|
|
|
\param b2b pointer to the Blake2b structure to update
|
|
\param data pointer to a buffer containing the data to append
|
|
\param sz length of the input data to append
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
Blake2b b2b;
|
|
// initialize Blake2b structure with 64 byte digest
|
|
wc_InitBlake2b(&b2b, WC_BLAKE2B_DIGEST_SIZE);
|
|
|
|
byte plain[] = { // initialize input };
|
|
|
|
ret = wc_Blake2bUpdate(&b2b, plain, sizeof(plain));
|
|
if (ret != 0) {
|
|
// error updating blake2b
|
|
}
|
|
\endcode
|
|
|
|
\sa wc_InitBlake2b
|
|
\sa wc_Blake2bFinal
|
|
*/
|
|
int wc_Blake2bUpdate(Blake2b* b2b, const byte* data, word32 sz);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief This function computes the Blake2b hash of the previously supplied
|
|
input data. The output hash will be of length requestSz, or, if
|
|
requestSz==0, the digestSz of the b2b structure. This function should be
|
|
called after wc_InitBlake2b and wc_Blake2bUpdate has been processed for
|
|
each piece of input data desired.
|
|
|
|
\return 0 Returned upon successfully computing the Blake2b hash
|
|
\return -1 Returned if there is a failure while parsing the Blake2b hash
|
|
|
|
\param b2b pointer to the Blake2b structure to update
|
|
\param final pointer to a buffer in which to store the blake2b hash.
|
|
Should be of length requestSz
|
|
\param requestSz length of the digest to compute. When this is zero,
|
|
b2b->digestSz will be used instead
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
Blake2b b2b;
|
|
byte hash[WC_BLAKE2B_DIGEST_SIZE];
|
|
// initialize Blake2b structure with 64 byte digest
|
|
wc_InitBlake2b(&b2b, WC_BLAKE2B_DIGEST_SIZE);
|
|
... // call wc_Blake2bUpdate to add data to hash
|
|
|
|
ret = wc_Blake2bFinal(&b2b, hash, WC_BLAKE2B_DIGEST_SIZE);
|
|
if (ret != 0) {
|
|
// error generating blake2b hash
|
|
}
|
|
\endcode
|
|
|
|
\sa wc_InitBlake2b
|
|
\sa wc_Blake2bUpdate
|
|
*/
|
|
int wc_Blake2bFinal(Blake2b* b2b, byte* final, word32 requestSz);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief Initialize an HMAC-BLAKE2b message authentication code computation.
|
|
|
|
\return 0 Returned upon successfully initializing the HMAC-BLAKE2b MAC
|
|
computation.
|
|
|
|
\param b2b Blake2b structure to be used for the MAC computation.
|
|
\param key pointer to the key
|
|
\param key_len length of the key
|
|
|
|
_Example_
|
|
\code
|
|
Blake2b b2b;
|
|
int ret;
|
|
byte key[] = {4, 5, 6};
|
|
ret = wc_Blake2bHmacInit(&b2b, key);
|
|
if (ret != 0) {
|
|
// error generating HMAC-BLAKE2b
|
|
}
|
|
\endcode
|
|
*/
|
|
int wc_Blake2bHmacInit(Blake2b * b2b,
|
|
const byte * key, size_t key_len);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief Update an HMAC-BLAKE2b message authentication code computation with
|
|
additional input data.
|
|
|
|
\return 0 Returned upon successfully updating the HMAC-BLAKE2b MAC
|
|
computation.
|
|
|
|
\param b2b Blake2b structure to be used for the MAC computation.
|
|
\param in pointer to the input data
|
|
\param in_len length of the input data
|
|
|
|
_Example_
|
|
\code
|
|
Blake2b b2b;
|
|
int ret;
|
|
byte key[] = {4, 5, 6};
|
|
byte data[] = {1, 2, 3};
|
|
ret = wc_Blake2bHmacInit(&b2b, key, sizeof(key));
|
|
ret = wc_Blake2bHmacUpdate(&b2b, data, sizeof(data));
|
|
\endcode
|
|
*/
|
|
int wc_Blake2bHmacUpdate(Blake2b * b2b,
|
|
const byte * in, size_t in_len);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief Finalize an HMAC-BLAKE2b message authentication code computation.
|
|
|
|
\return 0 Returned upon successfully finalizing the HMAC-BLAKE2b MAC
|
|
computation.
|
|
|
|
\param b2b Blake2b structure to be used for the MAC computation.
|
|
\param key pointer to the key
|
|
\param key_len length of the key
|
|
\param out output buffer to store computed MAC
|
|
\param out_len length of output buffer
|
|
|
|
_Example_
|
|
\code
|
|
Blake2b b2b;
|
|
int ret;
|
|
byte key[] = {4, 5, 6};
|
|
byte data[] = {1, 2, 3};
|
|
byte mac[WC_BLAKE2B_DIGEST_SIZE];
|
|
ret = wc_Blake2bHmacInit(&b2b, key, sizeof(key));
|
|
ret = wc_Blake2bHmacUpdate(&b2b, data, sizeof(data));
|
|
ret = wc_Blake2bHmacFinalize(&b2b, key, sizeof(key), mac, sizezof(mac));
|
|
\endcode
|
|
*/
|
|
int wc_Blake2bHmacFinal(Blake2b * b2b,
|
|
const byte * key, size_t key_len,
|
|
byte * out, size_t out_len);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief Compute the HMAC-BLAKE2b message authentication code of the given
|
|
input data using the given key.
|
|
|
|
\return 0 Returned upon successfully computing the HMAC-BLAKE2b MAC.
|
|
|
|
\param in pointer to the input data
|
|
\param in_len length of the input data
|
|
\param key pointer to the key
|
|
\param key_len length of the key
|
|
\param out output buffer to store computed MAC
|
|
\param out_len length of output buffer
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
byte mac[WC_BLAKE2B_DIGEST_SIZE];
|
|
byte data[] = {1, 2, 3};
|
|
byte key[] = {4, 5, 6};
|
|
ret = wc_Blake2bHmac(data, sizeof(data), key, sizeof(key), mac, sizeof(mac));
|
|
if (ret != 0) {
|
|
// error generating HMAC-BLAKE2b
|
|
}
|
|
\endcode
|
|
*/
|
|
int wc_Blake2bHmac(const byte * in, size_t in_len,
|
|
const byte * key, size_t key_len,
|
|
byte * out, size_t out_len);
|
|
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief This function initializes a Blake2s structure for use with the
|
|
Blake2 hash function.
|
|
|
|
\return 0 Returned upon successfully initializing the Blake2s structure and
|
|
setting the digest size.
|
|
|
|
\param b2s pointer to the Blake2s structure to initialize
|
|
\param digestSz length of the blake 2 digest to implement
|
|
|
|
_Example_
|
|
\code
|
|
Blake2s b2s;
|
|
// initialize Blake2s structure with 32 byte digest
|
|
wc_InitBlake2s(&b2s, WC_BLAKE2S_DIGEST_SIZE);
|
|
\endcode
|
|
|
|
\sa wc_Blake2sUpdate
|
|
*/
|
|
int wc_InitBlake2s(Blake2s* b2s, word32 digestSz);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief This function updates the Blake2s hash with the given input data.
|
|
This function should be called after wc_InitBlake2s, and repeated until
|
|
one is ready for the final hash: wc_Blake2sFinal.
|
|
|
|
\return 0 Returned upon successfully update the Blake2s structure with
|
|
the given data
|
|
\return -1 Returned if there is a failure while compressing the input data
|
|
|
|
\param b2s pointer to the Blake2s structure to update
|
|
\param data pointer to a buffer containing the data to append
|
|
\param sz length of the input data to append
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
Blake2s b2s;
|
|
// initialize Blake2s structure with 32 byte digest
|
|
wc_InitBlake2s(&b2s, WC_BLAKE2S_DIGEST_SIZE);
|
|
|
|
byte plain[] = { // initialize input };
|
|
|
|
ret = wc_Blake2sUpdate(&b2s, plain, sizeof(plain));
|
|
if (ret != 0) {
|
|
// error updating blake2s
|
|
}
|
|
\endcode
|
|
|
|
\sa wc_InitBlake2s
|
|
\sa wc_Blake2sFinal
|
|
*/
|
|
int wc_Blake2sUpdate(Blake2s* b2s, const byte* data, word32 sz);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief This function computes the Blake2s hash of the previously supplied
|
|
input data. The output hash will be of length requestSz, or, if
|
|
requestSz==0, the digestSz of the b2s structure. This function should be
|
|
called after wc_InitBlake2s and wc_Blake2sUpdate has been processed for
|
|
each piece of input data desired.
|
|
|
|
\return 0 Returned upon successfully computing the Blake2s hash
|
|
\return -1 Returned if there is a failure while parsing the Blake2s hash
|
|
|
|
\param b2s pointer to the Blake2s structure to update
|
|
\param final pointer to a buffer in which to store the blake2s hash.
|
|
Should be of length requestSz
|
|
\param requestSz length of the digest to compute. When this is zero,
|
|
b2s->digestSz will be used instead
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
Blake2s b2s;
|
|
byte hash[WC_BLAKE2S_DIGEST_SIZE];
|
|
// initialize Blake2s structure with 32 byte digest
|
|
wc_InitBlake2s(&b2s, WC_BLAKE2S_DIGEST_SIZE);
|
|
... // call wc_Blake2sUpdate to add data to hash
|
|
|
|
ret = wc_Blake2sFinal(&b2s, hash, WC_BLAKE2S_DIGEST_SIZE);
|
|
if (ret != 0) {
|
|
// error generating blake2s hash
|
|
}
|
|
\endcode
|
|
|
|
\sa wc_InitBlake2s
|
|
\sa wc_Blake2sUpdate
|
|
*/
|
|
int wc_Blake2sFinal(Blake2s* b2s, byte* final, word32 requestSz);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief Initialize an HMAC-BLAKE2s message authentication code computation.
|
|
|
|
\return 0 Returned upon successfully initializing the HMAC-BLAKE2s MAC
|
|
computation.
|
|
|
|
\param b2s Blake2s structure to be used for the MAC computation.
|
|
\param key pointer to the key
|
|
\param key_len length of the key
|
|
|
|
_Example_
|
|
\code
|
|
Blake2s b2s;
|
|
int ret;
|
|
byte key[] = {4, 5, 6};
|
|
ret = wc_Blake2sHmacInit(&b2s, key);
|
|
if (ret != 0) {
|
|
// error generating HMAC-BLAKE2s
|
|
}
|
|
\endcode
|
|
*/
|
|
int wc_Blake2sHmacInit(Blake2s * b2s,
|
|
const byte * key, size_t key_len);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief Update an HMAC-BLAKE2s message authentication code computation with
|
|
additional input data.
|
|
|
|
\return 0 Returned upon successfully updating the HMAC-BLAKE2s MAC
|
|
computation.
|
|
|
|
\param b2s Blake2s structure to be used for the MAC computation.
|
|
\param in pointer to the input data
|
|
\param in_len length of the input data
|
|
|
|
_Example_
|
|
\code
|
|
Blake2s b2s;
|
|
int ret;
|
|
byte key[] = {4, 5, 6};
|
|
byte data[] = {1, 2, 3};
|
|
ret = wc_Blake2sHmacInit(&b2s, key, sizeof(key));
|
|
ret = wc_Blake2sHmacUpdate(&b2s, data, sizeof(data));
|
|
\endcode
|
|
*/
|
|
int wc_Blake2sHmacUpdate(Blake2s * b2s,
|
|
const byte * in, size_t in_len);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief Finalize an HMAC-BLAKE2s message authentication code computation.
|
|
|
|
\return 0 Returned upon successfully finalizing the HMAC-BLAKE2s MAC
|
|
computation.
|
|
|
|
\param b2s Blake2s structure to be used for the MAC computation.
|
|
\param key pointer to the key
|
|
\param key_len length of the key
|
|
\param out output buffer to store computed MAC
|
|
\param out_len length of output buffer
|
|
|
|
_Example_
|
|
\code
|
|
Blake2s b2s;
|
|
int ret;
|
|
byte key[] = {4, 5, 6};
|
|
byte data[] = {1, 2, 3};
|
|
byte mac[WC_BLAKE2S_DIGEST_SIZE];
|
|
ret = wc_Blake2sHmacInit(&b2s, key, sizeof(key));
|
|
ret = wc_Blake2sHmacUpdate(&b2s, data, sizeof(data));
|
|
ret = wc_Blake2sHmacFinalize(&b2s, key, sizeof(key), mac, sizezof(mac));
|
|
\endcode
|
|
*/
|
|
int wc_Blake2sHmacFinal(Blake2s * b2s,
|
|
const byte * key, size_t key_len,
|
|
byte * out, size_t out_len);
|
|
|
|
/*!
|
|
\ingroup BLAKE2
|
|
|
|
\brief This function computes the HMAC-BLAKE2s message authentication code
|
|
of the given input data using the given key.
|
|
|
|
\return 0 Returned upon successfully computing the HMAC-BLAKE2s MAC.
|
|
|
|
\param in pointer to the input data
|
|
\param in_len length of the input data
|
|
\param key pointer to the key
|
|
\param key_len length of the key
|
|
\param out output buffer to store computed MAC
|
|
\param out_len length of output buffer
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
byte mac[WC_BLAKE2S_DIGEST_SIZE];
|
|
byte data[] = {1, 2, 3};
|
|
byte key[] = {4, 5, 6};
|
|
ret = wc_Blake2sHmac(data, sizeof(data), key, sizeof(key), mac, sizeof(mac));
|
|
if (ret != 0) {
|
|
// error generating HMAC-BLAKE2s
|
|
}
|
|
\endcode
|
|
*/
|
|
int wc_Blake2sHmac(const byte * in, size_t in_len,
|
|
const byte * key, size_t key_len,
|
|
byte * out, size_t out_len);
|