    // Copyright (C) 2003  Davis E. King (davis@dlib.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #undef DLIB_MD5_KERNEl_ABSTRACT_
    #ifdef DLIB_MD5_KERNEl_ABSTRACT_

    #include <string>
    #include <iosfwd>

    namespace dlib
    {

        /*!
            NOTE:
            This is the RSA Data Security, Inc. MD5 Message-Digest Algorithm
            as described in rfc1321

            For the functions which return a unsigned char*.  The array contains
            the 16 bytes of the digest and are in the correct order.
            i.e.  output[0], output[1], output[2], ...
        !*/

    // ----------------------------------------------------------------------------------------

        const std::string md5 (
            const std::string& input
        );
        /*!
            ensures
                - returns the md5 digest of input as a hexadecimal string
        !*/

    // ----------------------------------------------------------------------------------------

        void md5 (
            const unsigned char* input,
            unsigned long len,
            unsigned char* output
        );
        /*!
            requires
                - input  == pointer to len bytes
                - output == pointer to 16 bytes
                - input != output
            ensures
                - #output == the md5 digest of input.
        !*/

    // ----------------------------------------------------------------------------------------

        const std::string md5 (
            std::istream& input
        );
        /*!
            requires
                - input.fail() == false
            ensures
                - returns the md5 digest of input as a hexadecimal string
                - #input.eof()     == true
                - #input.fail()    == false
        !*/

    // ----------------------------------------------------------------------------------------

        void md5 (
            std::istream& input
            unsigned char* output
        );
        /*!
            requires
                - input.fail() == false
                - output       == pointer to 16 bytes
            ensures
                - #output       == the md5 digest of input
                - #input.eof()  == true
                - #input.fail() == false
        !*/

    // ----------------------------------------------------------------------------------------

    }

    #endif // DLIB_MD5_KERNEl_ABSTRACT_