/*!
    \ingroup RIPEMD

    \brief This function initializes a ripemd structure by initializing
    ripemd’s digest, buffer, loLen and hiLen.

    \return 0 returned on successful execution of the function. The RipeMd
    structure is initialized.
    \return BAD_FUNC_ARG returned if the RipeMd structure is NULL.

    \param ripemd pointer to the ripemd structure to initialize

    _Example_
    \code
    RipeMd md;
    int ret;
    ret = wc_InitRipeMd(&md);
    if (ret != 0) {
    	// Failure case.
    }
    \endcode

    \sa wc_RipeMdUpdate
    \sa wc_RipeMdFinal
*/
int wc_InitRipeMd(RipeMd* ripemd);

/*!
    \ingroup RIPEMD

    \brief This function generates the RipeMd digest of the data input and
    stores the result in the ripemd->digest buffer. After running
    wc_RipeMdUpdate, one should compare the generated ripemd->digest to a
    known authentication tag to verify the authenticity of a message.

    \return 0 Returned on successful execution of the function.
    \return BAD_FUNC_ARG Returned if the RipeMd structure is NULL or if data
    is NULL and len is not zero. This function should execute if data is NULL
    and len is 0.

    \param ripemd: pointer to the ripemd structure to be initialized with
    wc_InitRipeMd
    \param data data to be hashed
    \param len sizeof data in bytes

    _Example_
    \code
    const byte* data; // The data to be hashed
    ....
    RipeMd md;
    int ret;
    ret = wc_InitRipeMd(&md);
    if (ret == 0) {
    ret = wc_RipeMdUpdate(&md, plain, sizeof(plain));
    if (ret != 0) {
	// Failure case …
    \endcode

    \sa wc_InitRipeMd
    \sa wc_RipeMdFinal
*/
int wc_RipeMdUpdate(RipeMd* ripemd, const byte* data, word32 len);

/*!
    \ingroup RIPEMD

    \brief This function copies the computed digest into hash.  If there is a
    partial unhashed block, this method will pad the block with 0s, and
    include that block’s round in the digest before copying to hash. State
    of ripemd is reset.

    \return 0 Returned on successful execution of the function. The state of
    the RipeMd structure has been reset.
    \return BAD_FUNC_ARG Returned if the RipeMd structure or hash parameters
    are NULL.

    \param ripemd pointer to the ripemd structure to be initialized with
    wc_InitRipeMd, and containing hashes from wc_RipeMdUpdate. State will
    be reset
    \param hash buffer to copy digest to.  Should be RIPEMD_DIGEST_SIZE bytes

    _Example_
    \code
    RipeMd md;
    int ret;
    byte   digest[RIPEMD_DIGEST_SIZE];
    const byte* data; // The data to be hashed
    ...
    ret = wc_InitRipeMd(&md);
    if (ret == 0) {
    ret = wc_RipeMdUpdate(&md, plain, sizeof(plain));
    	if (ret != 0) {
    		// RipeMd Update Failure Case.
    }
    ret = wc_RipeMdFinal(&md, digest);
    if (ret != 0) {
    	// RipeMd Final Failure Case.
    }...
    \endcode

    \sa none
*/
int wc_RipeMdFinal(RipeMd* ripemd, byte* hash);
