/************************************************* * KDF2 Source File * * (C) 1999-2007 Jack Lloyd * *************************************************/ #include #include namespace Botan { /************************************************* * KDF2 Key Derivation Mechanism * *************************************************/ SecureVector KDF2::derive(u32bit out_len, const byte secret[], u32bit secret_len, const byte P[], u32bit P_len) const { SecureVector output; u32bit counter = 1; while(out_len && counter) { hash->update(secret, secret_len); for(u32bit j = 0; j != 4; ++j) hash->update(get_byte(j, counter)); hash->update(P, P_len); SecureVector hash_result = hash->final(); u32bit added = std::min(hash_result.size(), out_len); output.append(hash_result, added); out_len -= added; ++counter; } return output; } }