/* * KDF/MGF * (C) 1999-2007 Jack Lloyd * * Distributed under the terms of the Botan license */ #ifndef BOTAN_KDF_BASE_H__ #define BOTAN_KDF_BASE_H__ #include #include namespace Botan { /** * Key Derivation Function */ class BOTAN_DLL KDF { public: /** * Derive a key * @param key_len the desired output length in bytes * @param secret the secret input * @param salt a diversifier */ SecureVector derive_key(u32bit key_len, const MemoryRegion& secret, const std::string& salt = "") const; /** * Derive a key * @param key_len the desired output length in bytes * @param secret the secret input * @param salt a diversifier */ SecureVector derive_key(u32bit key_len, const MemoryRegion& secret, const MemoryRegion& salt) const; /** * Derive a key * @param key_len the desired output length in bytes * @param secret the secret input * @param salt a diversifier * @param salt_len size of salt in bytes */ SecureVector derive_key(u32bit key_len, const MemoryRegion& secret, const byte salt[], u32bit salt_len) const; /** * Derive a key * @param key_len the desired output length in bytes * @param secret the secret input * @param secret_len size of secret in bytes * @param salt a diversifier */ SecureVector derive_key(u32bit key_len, const byte secret[], u32bit secret_len, const std::string& salt = "") const; /** * Derive a key * @param key_len the desired output length in bytes * @param secret the secret input * @param secret_len size of secret in bytes * @param salt a diversifier * @param salt_len size of salt in bytes */ SecureVector derive_key(u32bit key_len, const byte secret[], u32bit secret_len, const byte salt[], u32bit salt_len) const; virtual ~KDF() {} private: virtual SecureVector derive(u32bit key_len, const byte secret[], u32bit secret_len, const byte salt[], u32bit salt_len) const = 0; }; /** * Mask Generation Function */ class BOTAN_DLL MGF { public: virtual void mask(const byte in[], u32bit in_len, byte out[], u32bit out_len) const = 0; virtual ~MGF() {} }; } #endif