static void StoreHash(const plString& username, const plString& password, LoginDialogParam *pLoginParam) { // Hash username and password before sending over the 'net. // -- Legacy compatibility: @gametap (and other usernames with domains in them) need // to be hashed differently. std::vector<plString> match = username.RESearch("[^@]+@([^.]+\\.)*([^.]+)\\.[^.]+"); if (match.empty() || match[2].CompareI("gametap") == 0) { // Plain Usernames... plSHA1Checksum shasum(password.GetSize(), reinterpret_cast<const uint8_t*>(password.c_str())); uint32_t* dest = reinterpret_cast<uint32_t*>(pLoginParam->namePassHash); const uint32_t* from = reinterpret_cast<const uint32_t*>(shasum.GetValue()); dest[0] = hsToBE32(from[0]); dest[1] = hsToBE32(from[1]); dest[2] = hsToBE32(from[2]); dest[3] = hsToBE32(from[3]); dest[4] = hsToBE32(from[4]); } else { // Domain-based Usernames... CryptHashPassword(username, password, pLoginParam->namePassHash); } }