Browse Source

Merge pull request #152 from Hoikas/fix-moula

Fix MOULa Sha0 Crap
Michael Hansen 13 years ago
parent
commit
85136f8050
  1. 47
      Sources/Plasma/CoreLib/plString.cpp
  2. 11
      Sources/Plasma/CoreLib/plString.h
  3. 13
      Sources/Plasma/NucleusLib/pnEncryption/plChallengeHash.cpp

47
Sources/Plasma/CoreLib/plString.cpp

@ -644,6 +644,36 @@ plString plString::Substr(int start, size_t size) const
return str;
}
plString plString::ToUpper() const
{
// TODO: Unicode-aware case conversion
size_t size = GetSize();
char *dupe = new char[size + 1];
const char *self = c_str();
for (size_t i = 0; i < size; ++i)
dupe[i] = toupper(self[i]);
// Don't re-check UTF-8 on this
plString str;
str.fUtf8Buffer = plStringBuffer<char>::Steal(dupe, size);
return str;
}
plString plString::ToLower() const
{
// TODO: Unicode-aware case conversion
size_t size = GetSize();
char *dupe = new char[size + 1];
const char *self = c_str();
for (size_t i = 0; i < size; ++i)
dupe[i] = tolower(self[i]);
// Don't re-check UTF-8 on this
plString str;
str.fUtf8Buffer = plStringBuffer<char>::Steal(dupe, size);
return str;
}
plString &plString::operator+=(const plString &str)
{
size_t catsize = GetSize() + str.GetSize();
@ -669,9 +699,8 @@ plString operator+(const plString &left, const plString &right)
return str;
}
plStringStream &plStringStream::operator<<(const char *text)
plStringStream &plStringStream::append(const char *data, size_t length)
{
size_t length = strlen(text);
if (fLength + length > fBufSize) {
char *bigger = new char[fBufSize * 2];
memcpy(bigger, fBuffer, fBufSize);
@ -679,11 +708,17 @@ plStringStream &plStringStream::operator<<(const char *text)
fBuffer = bigger;
fBufSize *= 2;
}
memcpy(fBuffer + fLength, text, length);
memcpy(fBuffer + fLength, data, length);
fLength += length;
return *this;
}
plStringStream &plStringStream::operator<<(const char *text)
{
size_t length = strlen(text);
return append(text, length);
}
plStringStream &plStringStream::operator<<(int num)
{
char buffer[12];
@ -697,9 +732,3 @@ plStringStream &plStringStream::operator<<(unsigned int num)
snprintf(buffer, 12, "%u", num);
return operator<<(buffer);
}
plStringStream &plStringStream::operator<<(char ch)
{
char buffer[2] = { ch, 0 };
return operator<<(buffer);
}

11
Sources/Plasma/CoreLib/plString.h

@ -260,6 +260,11 @@ public:
plString Left(size_t size) const { return Substr(0, size); }
plString Right(size_t size) const { return Substr(GetSize() - size, size); }
// NOTE: Does ::Compare(blah, kCaseInsensitive) make more sense? If
// so, use that instead -- it's faster and more efficient!
plString ToUpper() const;
plString ToLower() const;
public:
struct less : public std::binary_function<plString, plString, bool>
{
@ -403,14 +408,16 @@ public:
}
~plStringStream() { delete [] fBuffer; }
plStringStream &append(const char *data, size_t length);
plStringStream &operator<<(const char *text);
plStringStream &operator<<(int num);
plStringStream &operator<<(unsigned int num);
plStringStream &operator<<(char ch);
plStringStream &operator<<(char ch) { return append(&ch, 1); }
plStringStream &operator<<(const plString &text)
{
return operator<<(text.s_str());
return append(text.s_str(), text.GetSize());
}
size_t GetLength() const { return fLength; }

13
Sources/Plasma/NucleusLib/pnEncryption/plChallengeHash.cpp

@ -93,14 +93,11 @@ void CryptCreateRandomSeed(size_t length, uint8_t* data)
void CryptHashPassword(const plString& username, const plString& password, ShaDigest dest)
{
/* This should be unnecessary once plString has ToLower() */
wchar_t* w_name = (wchar_t*)_TEMP_CONVERT_TO_WCHAR_T(username);
StrLower(w_name);
plString buf = password;
buf += _TEMP_CONVERT_FROM_WCHAR_T(w_name);
plSHAChecksum sum(buf.GetSize() * sizeof(wchar_t), (uint8_t*)_TEMP_CONVERT_TO_WCHAR_T(buf));
plStringStream buf;
buf << password.Left(password.GetSize() - 1) << '\0';
buf << username.ToLower().Left(username.GetSize() - 1) << '\0';
plStringBuffer<uint16_t> result = buf.GetString().ToUtf16();
plSHAChecksum sum(result.GetSize() * sizeof(uint16_t), (uint8_t*)result.GetData());
memcpy(dest, sum.GetValue(), sizeof(ShaDigest));
}

Loading…
Cancel
Save