#ifndef KDF_H_INCLUDED
#define KDF_H_INCLUDED

#include <crypto/crypto.h>
#include <crypto/hash.h>


class KDF
{
 public:
	virtual ostring eval(const ostring&, const long) = 0;
	virtual void PrettyPrint(std::ostream&) = 0;
};


class KDF1 : public KDF
{
	HASH& h;
 public:
	ostring eval(const ostring& str, const long l);
	void PrettyPrint(std::ostream&);
	KDF1(HASH& H) : h(H) { };
};

class KDF2 : public KDF
{
        HASH& h;
 public:
        ostring eval(const ostring& str, const long l);
	void PrettyPrint(std::ostream&);
        KDF2(HASH& H) : h(H) { };
};

#endif  /* KDF_H_INCLUDED */

