/*!
    \ingroup wolfCrypt
    \brief  この関数は提供されたwc_hashtypeのOIDを返します。
    \return OID  戻り値0を超えてください
    \return HASH_TYPE_E  ハッシュ型はサポートされていません。
    \return BAD_FUNC_ARG  提供された引数の1つが正しくありません。
    _Example_
    \code
    enum wc_HashType hash_type = WC_HASH_TYPE_SHA256;
    int oid = wc_HashGetOID(hash_type);
    if (oid > 0) {
    	// Success
    }
    \endcode
    \sa wc_HashGetDigestSize
    \sa wc_Hash
*/
int wc_HashGetOID(enum wc_HashType hash_type);

/*!
    \ingroup wolfCrypt
    \brief  この関数は、hash_typeのダイジェスト（出力）のサイズを返します。返品サイズは、WC_HASHに提供される出力バッファが十分に大きいことを確認するために使用されます。
    \return Success  正の戻り値は、ハッシュのダイジェストサイズを示します。
    \return Error  hash_typeがサポートされていない場合はhash_type_eを返します。
    \return Failure  無効なhash_typeが使用された場合、bad_func_argを返します。
    _Example_
    \code
    int hash_len = wc_HashGetDigestSize(hash_type);
    if (hash_len <= 0) {
    WOLFSSL_MSG("Invalid hash type/len");
    return BAD_FUNC_ARG;
    }
    \endcode
    \sa wc_Hash
*/
int wc_HashGetDigestSize(enum wc_HashType hash_type);

/*!
    \ingroup wolfCrypt
    \brief  この関数は、提供されたデータバッファ上にハッシュを実行し、提供されたハッシュバッファにそれを返します。
    \return 0  そうでなければ、それ以外の誤り（bad_func_argやbuffer_eなど）。
    \param hash_type  "wc_hash_type_sha256"などの "enum wc_hashtype"からのハッシュ型。
    \param data  ハッシュへのデータを含むバッファへのポインタ。
    \param data_len  データバッファの長さ。
    \param hash  最後のハッシュを出力するために使用されるバッファへのポインタ。
    _Example_
    \code
    enum wc_HashType hash_type = WC_HASH_TYPE_SHA256;
    int hash_len = wc_HashGetDigestSize(hash_type);
    if (hash_len > 0) {
        int ret = wc_Hash(hash_type, data, data_len, hash_data, hash_len);
        if(ret == 0) {
		    // Success
        }
    }
    \endcode
    \sa wc_HashGetDigestSize
*/
int wc_Hash(enum wc_HashType hash_type,
    const byte* data, word32 data_len,
    byte* hash, word32 hash_len);

/*!
    \ingroup MD5
    \brief  利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。
    \return 0  データを正常にハッシュしたときに返されます。
    \return Memory_E  メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。
    \param data  ハッシュへのデータ
    \param len  データの長さ
    _Example_
    \code
    const byte* data;
    word32 data_len;
    byte* hash;
    int ret;
    ...
    ret = wc_Md5Hash(data, data_len, hash);
    if (ret != 0) {
         // Md5 Hash Failure Case.
    }
    \endcode
    \sa wc_Md5Hash
    \sa wc_Md5Final
    \sa wc_InitMd5
*/
int wc_Md5Hash(const byte* data, word32 len, byte* hash);

/*!
    \ingroup SHA
    \brief  利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。
    \return 0  うまく返されました...。
    \return Memory_E  メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。
    \param data  ハッシュへのデータ
    \param len  データの長さ
    _Example_
    \code
    none
    \endcode
    \sa wc_ShaHash
    \sa wc_ShaFinal
    \sa wc_InitSha
*/
int wc_ShaHash(const byte* data, word32 len, byte* hash);

/*!
    \ingroup SHA
    \brief  利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。
    \return 0  うまく返されました...
    \return Memory_E  メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。
    \param data  ハッシュへのデータ
    \param len  データの長さ
    _Example_
    \code
    none
    \endcode
    \sa wc_Sha256Hash
    \sa wc_Sha256Final
    \sa wc_InitSha256
*/
int wc_Sha256Hash(const byte* data, word32 len, byte* hash);

/*!
    \ingroup SHA
    \brief  利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。
    \return 0  成功
    \return <0  エラー
    \param data  ハッシュへのデータ
    \param len  データの長さ
    _Example_
    \code
    none
    \endcode
    \sa wc_InitSha224
    \sa wc_Sha224Update
    \sa wc_Sha224Final
*/
int wc_Sha224Hash(const byte* data, word32 len, byte* hash);

/*!
    \ingroup SHA
    \brief  利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。
    \return 0  入力されたデータを正常にハッシュしたときに返されます
    \return Memory_E  メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。
    \param data  ハッシュへのデータ
    \param len  データの長さ
    _Example_
    \code
    none
    \endcode
    \sa wc_Sha512Hash
    \sa wc_Sha512Final
    \sa wc_InitSha512
*/
int wc_Sha512Hash(const byte* data, word32 len, byte* hash);

/*!
    \ingroup SHA
    \brief  利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。
    \return 0  データを正常にハッシュしたときに返されます
    \return Memory_E  メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。
    \param data  ハッシュへのデータ
    \param len  データの長さ
    _Example_
    \code
    none
    \endcode
    \sa wc_Sha384Hash
    \sa wc_Sha384Final
    \sa wc_InitSha384
*/
int wc_Sha384Hash(const byte* data, word32 len, byte* hash);
