/*!
    \ingroup BLAKE2
    \brief  この関数はBlake2 Hash関数で使用するためのBlake2b構造を初期化します。
    \return 0  Blake2B構造の初期化に成功し、ダイジェストサイズを設定したときに返されます。
    \param b2b  初期化するためにBlake2b構造へのポインタ
    _Example_
    \code
    Blake2b b2b;
    // initialize Blake2b structure with 64 byte digest
    wc_InitBlake2b(&b2b, 64);
    \endcode
    \sa wc_Blake2bUpdate
*/
int wc_InitBlake2b(Blake2b* b2b, word32 digestSz);

/*!
    \ingroup BLAKE2
    \brief  この関数は、与えられた入力データとBlake2Bハッシュを更新します。この関数は、wc_initblake2bの後に呼び出され、最後のハッシュ：wc_blake2bfinalの準備ができているまで繰り返します。
    \return 0  与えられたデータを使用してBlake2B構造を正常に更新すると返されます。
    \return -1  入力データの圧縮中に障害が発生した場合
    \param b2b  更新するBlake2b構造へのポインタ
    \param data  追加するデータを含むバッファへのポインタ
    _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
*/
int wc_Blake2bUpdate(Blake2b* b2b, const byte* data, word32 sz);

/*!
    \ingroup BLAKE2
    \brief  この関数は、以前に供給された入力データのBlake2bハッシュを計算します。出力ハッシュは長さREQUESTSZ、あるいは要求された場合はB2B構造のDigestSZを使用します。この関数は、wc_initblake2bの後に呼び出され、wc_blake2bupdateは必要な各入力データに対して処理されています。
    \return 0  Blake2B Hashの計算に成功したときに返されました
    \return -1  blake2bハッシュを解析している間に失敗がある場合
    \param b2b  更新するBlake2b構造へのポインタ
    \param final  Blake2Bハッシュを保存するバッファへのポインタ。長さrequestszにする必要があります
    _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 = wc_Blake2bFinal(&b2b, hash, 64);
    if( ret != 0) {
    	// error generating blake2b hash
    }
    \endcode
    \sa wc_InitBlake2b
    \sa wc_Blake2bUpdate
*/
int wc_Blake2bFinal(Blake2b* b2b, byte* final, word32 requestSz);
