/*!
    \ingroup MD4

    \brief This function initializes md4. This is automatically
    called by wc_Md4Hash.

    \return 0 Returned upon successfully initializing
    \return BAD_FUNC_ARG Returned if md4 is NULL

    \param md4 pointer to the md4 structure to use for encryption

    _Example_
    \code
    md4 md4[1];
    if ((ret = wc_InitMd4(md4)) != 0) {
       WOLFSSL_MSG("wc_Initmd4 failed");
    }
    else {
       wc_Md4Update(md4, data, len);
       wc_Md4Final(md4, hash);
    }
    \endcode

    \sa wc_Md4Hash
    \sa wc_Md4Update
    \sa wc_Md4Final
*/
int wc_InitMd4(wc_Md4* md4);

/*!
    \ingroup MD4

    \brief Can be called to continually hash the provided byte array
    of length len.

    \return 0 Returned upon successfully adding the data to the digest.
    \return BAD_FUNC_ARG Returned if md4 is NULL, or if data is NULL and
    len is non-zero

    \param md4 pointer to the md4 structure to use for encryption
    \param data the data to be hashed
    \param len length of data to be hashed

    _Example_
    \code
    md4 md4[1];
    byte data[] = { }; // Data to be hashed
    word32 len = sizeof(data);

    if ((ret = wc_InitMd4(md4)) != 0) {
       WOLFSSL_MSG("wc_Initmd4 failed");
    }
    else {
       wc_Md4Update(md4, data, len);
       wc_Md4Final(md4, hash);
    }
    \endcode

    \sa wc_Md4Hash
    \sa wc_Md4Final
    \sa wc_InitMd4
*/
int wc_Md4Update(wc_Md4* md4, const byte* data, word32 len);

/*!
    \ingroup MD4

    \brief Finalizes hashing of data. Result is placed into hash.

    \return 0 Returned upon successfully finalizing.
    \return BAD_FUNC_ARG Returned if md4 or hash is NULL

    \param md4 pointer to the md4 structure to use for encryption
    \param hash Byte array to hold hash value.

    _Example_
    \code
    md4 md4[1];
    if ((ret = wc_InitMd4(md4)) != 0) {
        WOLFSSL_MSG("wc_Initmd4 failed");
    }
    else {
        wc_Md4Update(md4, data, len);
        wc_Md4Final(md4, hash);
    }
    \endcode

    \sa wc_Md4Hash
    \sa wc_Md4Final
    \sa wc_InitMd4
*/
int wc_Md4Final(wc_Md4* md4, byte* hash);
