/*
 * kbiffcrypt.h
 * Copyright (C) 2005 Michael Hendricks <michael@palmcluster.org>
 *
 * $Id$
 *
 */
#ifndef KBIFFCRYPT_H
#define KBIFFCRYPT_H

#include <tqstring.h>

/**
 * @brief Useful cryptographic functions for secure authentication
 *
 * Until TQCA
 * (<a href='http://delta.affinix.com/qca/'>TQt Cryptographic Architecture</a>)
 * becomes more widely available,
 * this will be the place for our custom-written, cryptography functions.
 * These are mostly needed to implement various forms of secure authentication
 * against POP3 or IMAP mail servers.
 */
namespace KBiffCrypt
{
    /**
     *  @brief Calculate HMAC-MD5 of the given text
     *
     *  Calculates the HMAC-MD5 as specified in RFC 2104.  The code
     *  is originally based on the example code provided in the RFC,
     *  but it has been modified to remove the dependency on the
     *  OpenSSL libraries.  It, instead, depends on KMD5 provided by
     *  KDE.
     *
     *  The emphasis in writing this function was readability not speed.
     *  Since the client will authenticate itself against the server
     *  every couple minutes (at the most), the speed of the function
     *  is essentially unimportant.  The maintainability of the code
     *  seemed more important.  That's not to say that the function is
     *  slow, it simply hasn't been optimized for speed.  If you want
     *  to call this function several times per second, look elsewhere.
     *
     *  @param text calculate the HMAC-MD5 of this text
     *  @param key  the key used when calculating the HMAC
     *  @return the HMAC-MD5 value as a string of lower-case, hexadecimal digits
     */
    TQString hmac_md5(const TQString& text, const TQString& key);
}

#endif // KBIFFCRYPT_H
