/*!
    \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, 64); 
    \endcode
    
    \sa wc_Blake2bUpdate
*/
WOLFSSL_API int wc_InitBlake2b(Blake2b*, word32);
/*!
    \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, 64); 

    byte plain[] = { // initialize input };

    ret = wc_Blake2bUpdate(&b2b, plain, sizeof(plain));
    if( ret != 0) {
    	// error updating blake2b
    }
    \endcode
    
    \sa wc_InitBlake2b
    \sa wc_Blake2bFinal
*/
WOLFSSL_API int wc_Blake2bUpdate(Blake2b*, const byte*, word32);
/*!
    \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[64];
    // initialize Blake2b structure with 64 byte digest
    wc_InitBlake2b(&b2b, 64); 
    ... // call wc_Blake2bUpdate to add data to hash

    ret = 2c_Blake2bFinal(&b2b, hash, 64);
    if( ret != 0) {
    	// error generating blake2b hash
    }
    \endcode
    
    \sa wc_InitBlake2b
    \sa wc_Blake2bUpdate
*/
WOLFSSL_API int wc_Blake2bFinal(Blake2b*, byte*, word32);
