/*!
    \ingroup MD4
    
    \brief This function initializes md4. This is automatically 
    called by wc_Md4Hash.
    
    \return 0 Returned upon successfully initializing
    
    \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
*/
WOLFSSL_API void wc_InitMd4(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.
    
    \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
*/
WOLFSSL_API void wc_Md4Update(Md4*, const byte*, word32);
/*!
    \ingroup MD4
    
    \brief Finalizes hashing of data. Result is placed into hash.
    
    \return 0 Returned upon successfully finalizing.
    
    \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
*/
WOLFSSL_API void wc_Md4Final(Md4*, byte*);
