X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_pbkdf2.cpp;h=314f6b83642f1796cdaa4f074cfc8d418fce3ac6;hb=bfc85ec4300d32fe164794ad2247fc0c3bd6050d;hp=b66b3f05891fa972943ed8c2823cb4f2555212e7;hpb=4e0c477eb3333a7dab407f073313d21bb5027b02;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_pbkdf2.cpp b/src/modules/m_pbkdf2.cpp index b66b3f058..314f6b836 100644 --- a/src/modules/m_pbkdf2.cpp +++ b/src/modules/m_pbkdf2.cpp @@ -81,24 +81,26 @@ class PBKDF2Provider : public HashProvider size_t blocks = std::ceil((double)dkl / provider->out_size); std::string output; + std::string tmphash; + std::string salt_block = salt; for (size_t block = 1; block <= blocks; block++) { char salt_data[4]; for (size_t i = 0; i < sizeof(salt_data); i++) salt_data[i] = block >> (24 - i * 8) & 0x0F; - std::string salt_block(salt_data, 4); - salt_block = salt + salt_block; + salt_block.erase(salt.length()); + salt_block.append(salt_data, sizeof(salt_data)); std::string blockdata = provider->hmac(pass, salt_block); std::string lasthash = blockdata; for (size_t iter = 1; iter < itr; iter++) { - std::string tmphash = provider->hmac(pass, lasthash); + tmphash = provider->hmac(pass, lasthash); for (size_t i = 0; i < provider->out_size; i++) blockdata[i] ^= tmphash[i]; - lasthash = tmphash; + lasthash.swap(tmphash); } output += blockdata; }