diff --git a/Sources/Plasma/Apps/plClient/winmain.cpp b/Sources/Plasma/Apps/plClient/winmain.cpp index fd8daf5b..166c20a8 100644 --- a/Sources/Plasma/Apps/plClient/winmain.cpp +++ b/Sources/Plasma/Apps/plClient/winmain.cpp @@ -989,18 +989,9 @@ static void SaveUserPass (LoginDialogParam *pLoginParam, char *password) PathSplitEmail(wusername, nil, 0, domain, arrsize(domain), nil, 0, nil, 0, 0); if (StrLen(domain) == 0 || StrCmpI(domain, L"gametap") == 0) { - CryptDigest( - kCryptSha1, - &pLoginParam->namePassHash, - StrLen(password) * sizeof(password[0]), - password - ); - - pLoginParam->namePassHash.data[0] = hsToBE32(pLoginParam->namePassHash.data[0]); - pLoginParam->namePassHash.data[1] = hsToBE32(pLoginParam->namePassHash.data[1]); - pLoginParam->namePassHash.data[2] = hsToBE32(pLoginParam->namePassHash.data[2]); - pLoginParam->namePassHash.data[3] = hsToBE32(pLoginParam->namePassHash.data[3]); - pLoginParam->namePassHash.data[4] = hsToBE32(pLoginParam->namePassHash.data[4]); + plSHA1Checksum shasum(StrLen(password) * sizeof(password[0]), (uint8_t*)password); + + memcpy(pLoginParam->namePassHash, shasum.GetData(), sizeof(ShaDigest)); } else CryptHashPassword(wusername, wpassword, &pLoginParam->namePassHash); diff --git a/Sources/Plasma/Apps/plMD5/Main.cpp b/Sources/Plasma/Apps/plMD5/Main.cpp index 1726c2a4..1da24898 100644 --- a/Sources/Plasma/Apps/plMD5/Main.cpp +++ b/Sources/Plasma/Apps/plMD5/Main.cpp @@ -39,26 +39,13 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com Mead, WA 99021 *==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/Apps/plMD5/Main.cpp -* -***/ -#include "pnUtils/pnUtils.h" #include "pnProduct/pnProduct.h" #include "plEncryption/plChecksum.h" #include -/***************************************************************************** -* -* Exports -* -***/ - -//============================================================================ -int CDECL main (int argc, char ** argv) { +int main (int argc, char ** argv) { if (argc < 2) { fprintf(stderr, "ERROR: Please specify filename.\n"); @@ -70,7 +57,7 @@ int CDECL main (int argc, char ** argv) { fprintf(stderr, "ERROR: MD5 failed.\n"); return 1; } - + fprintf(stdout, "%s\n", md5.GetAsHexString()); return 0; } diff --git a/Sources/Plasma/Apps/plSHA/CMakeLists.txt b/Sources/Plasma/Apps/plSHA/CMakeLists.txt new file mode 100644 index 00000000..9c4534f6 --- /dev/null +++ b/Sources/Plasma/Apps/plSHA/CMakeLists.txt @@ -0,0 +1,19 @@ +include_directories("../../Apps") +include_directories("../../CoreLib") +include_directories("../../FeatureLib/inc") +include_directories("../../FeatureLib") +include_directories("../../NucleusLib/inc") +include_directories("../../NucleusLib") +include_directories("../../PubUtilLib/inc") +include_directories("../../PubUtilLib") +include_directories(${OPENSSL_INCLUDE_DIR}) + +set(plSHA_SOURCES + Main.cpp +) + +add_executable(plSHA ${plSHA_SOURCES}) +target_link_libraries(plSHA CoreLib pnUtils pnProduct plEncryption) +target_link_libraries(plSHA ${OPENSSL_LIBRARIES}) + +source_group("Source Files" FILES ${plSHA_SOURCES}) diff --git a/Sources/Plasma/Apps/plSHA/Main.cpp b/Sources/Plasma/Apps/plSHA/Main.cpp new file mode 100644 index 00000000..b4b40bd1 --- /dev/null +++ b/Sources/Plasma/Apps/plSHA/Main.cpp @@ -0,0 +1,70 @@ +/*==LICENSE==* + +CyanWorlds.com Engine - MMOG client, server and tools +Copyright (C) 2011 Cyan Worlds, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Additional permissions under GNU GPL version 3 section 7 + +If you modify this Program, or any covered work, by linking or +combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, +NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent +JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK +(or a modified version of those libraries), +containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, +PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG +JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the +licensors of this Program grant you additional +permission to convey the resulting work. Corresponding Source for a +non-source form of such a combination shall include the source code for +the parts of OpenSSL and IJG JPEG Library used as well as that of the covered +work. + +You can contact Cyan Worlds, Inc. by email legal@cyan.com + or by snail mail at: + Cyan Worlds, Inc. + 14617 N Newport Hwy + Mead, WA 99021 + +*==LICENSE==*/ + +#include "pnProduct/pnProduct.h" +#include "plEncryption/plChecksum.h" + +#include + +int main (int argc, char** argv) { + + if (argc < 2) { + fprintf(stderr, "ERROR: Please specify filename.\n"); + return 1; + } + + plSHAChecksum sha(argv[1]); + if (!sha.IsValid()) { + fprintf(stderr, "ERROR: SHA failed.\n"); + return 1; + } + + plSHA1Checksum sha1(argv[1]); + if (!sha1.IsValid()) { + fprintf(stderr, "ERROR: SHA1 failed.\n"); + return 1; + } + + fprintf(stdout, "%s\tSHA\n", sha.GetAsHexString()); + fprintf(stdout, "%s\tSHA1\n", sha1.GetAsHexString()); + return 0; +} diff --git a/Sources/Plasma/PubUtilLib/plEncryption/plChecksum.h b/Sources/Plasma/PubUtilLib/plEncryption/plChecksum.h index fed7ce39..5cb8dc80 100644 --- a/Sources/Plasma/PubUtilLib/plEncryption/plChecksum.h +++ b/Sources/Plasma/PubUtilLib/plEncryption/plChecksum.h @@ -100,12 +100,17 @@ class plMD5Checksum bool operator!=(const plMD5Checksum &rhs) const { return !operator==(rhs); } }; +/* A bunch of things might store either a SHA or a SHA1 checksum, this provides + * them a way to store the checksum itself, rather than a union of the classes. + */ +typedef uint8_t ShaDigest[SHA_DIGEST_LENGTH]; + class plSHAChecksum { protected: hsBool fValid; SHA_CTX fContext; - uint8_t fChecksum[SHA_DIGEST_LENGTH]; + ShaDigest fChecksum; public: plSHAChecksum(uint32_t size, uint8_t* buffer); @@ -144,7 +149,7 @@ class plSHA1Checksum protected: hsBool fValid; SHA_CTX fContext; - uint8_t fChecksum[SHA_DIGEST_LENGTH]; + ShaDigest fChecksum; public: plSHA1Checksum(uint32_t size, uint8_t* buffer);