EventReturn OnEncrypt(const Anope::string &src, Anope::string &dest) override { if (!md5) return EVENT_CONTINUE; Encryption::Context *context = md5->CreateContext(); context->Update(reinterpret_cast<const unsigned char *>(src.c_str()), src.length()); context->Finalize(); Encryption::Hash hash = context->GetFinalizedHash(); char digest[32], digest2[16]; memset(digest, 0, sizeof(digest)); if (hash.second > sizeof(digest)) throw CoreException("Hash too large"); memcpy(digest, hash.first, hash.second); for (int i = 0; i < 32; i += 2) digest2[i / 2] = XTOI(digest[i]) << 4 | XTOI(digest[i + 1]); Anope::string buf = "oldmd5:" + Anope::Hex(digest2, sizeof(digest2)); Log(LOG_DEBUG_2) << "(enc_old) hashed password from [" << src << "] to [" << buf << "]"; dest = buf; delete context; return EVENT_ALLOW; }
Encryption::Context *CreateContext(Encryption::IV *iv) override { if (md5) return md5->CreateContext(iv); return NULL; }