From 9d945f0db0265b00bc6e28bcffd4ab5440d3a99b Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 2 Jun 2024 00:18:33 +0200 Subject: Core/Crypto: Rename our Argon2 to avoid possible conflict with library file on some configurations (cherry picked from commit 4f6b49cccf87638864a636989a41f9ca7eb7a89c) --- src/common/Cryptography/Argon2.cpp | 44 ---------------------------------- src/common/Cryptography/Argon2.h | 41 ------------------------------- src/common/Cryptography/Argon2Hash.cpp | 44 ++++++++++++++++++++++++++++++++++ src/common/Cryptography/Argon2Hash.h | 41 +++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 85 deletions(-) delete mode 100644 src/common/Cryptography/Argon2.cpp delete mode 100644 src/common/Cryptography/Argon2.h create mode 100644 src/common/Cryptography/Argon2Hash.cpp create mode 100644 src/common/Cryptography/Argon2Hash.h (limited to 'src/common') diff --git a/src/common/Cryptography/Argon2.cpp b/src/common/Cryptography/Argon2.cpp deleted file mode 100644 index 225d92c3994..00000000000 --- a/src/common/Cryptography/Argon2.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information - * - * 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 2 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 . - */ - -#include "Argon2.h" -#include - -/*static*/ Optional Trinity::Crypto::Argon2::Hash(std::string const& password, BigNumber const& salt, uint32 nIterations, uint32 kibMemoryCost) -{ - char buf[ENCODED_HASH_LEN]; - std::vector saltBytes = salt.ToByteVector(); - int status = argon2id_hash_encoded( - nIterations, - kibMemoryCost, - PARALLELISM, - password.c_str(), password.length(), - saltBytes.data(), saltBytes.size(), - HASH_LEN, buf, ENCODED_HASH_LEN - ); - - if (status == ARGON2_OK) - return std::string(buf); - - return {}; -} - -/*static*/ bool Trinity::Crypto::Argon2::Verify(std::string const& password, std::string const& hash) -{ - int status = argon2id_verify(hash.c_str(), password.c_str(), password.length()); - return (status == ARGON2_OK); -} diff --git a/src/common/Cryptography/Argon2.h b/src/common/Cryptography/Argon2.h deleted file mode 100644 index 2c1d44d10d7..00000000000 --- a/src/common/Cryptography/Argon2.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information - * - * 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 2 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 . - */ - -#ifndef TRINITY_ARGON2_H -#define TRINITY_ARGON2_H - -#include "BigNumber.h" -#include "Define.h" -#include "Optional.h" -#include - -namespace Trinity::Crypto -{ - struct TC_COMMON_API Argon2 - { - static constexpr uint32 HASH_LEN = 16; // 128 bits, in bytes - static constexpr uint32 ENCODED_HASH_LEN = 100; // in chars - static constexpr uint32 DEFAULT_ITERATIONS = 10; // determined by dice roll, guaranteed to be secure (not really) - static constexpr uint32 DEFAULT_MEMORY_COST = (1u << 17); // 2^17 kibibytes is 2^7 mebibytes is ~100MB - static constexpr uint32 PARALLELISM = 1; // we don't support threaded hashing - - static Optional Hash(std::string const& password, BigNumber const& salt, uint32 nIterations = DEFAULT_ITERATIONS, uint32 kibMemoryCost = DEFAULT_MEMORY_COST); - static bool Verify(std::string const& password, std::string const& hash); - }; -} - -#endif diff --git a/src/common/Cryptography/Argon2Hash.cpp b/src/common/Cryptography/Argon2Hash.cpp new file mode 100644 index 00000000000..3113ea39108 --- /dev/null +++ b/src/common/Cryptography/Argon2Hash.cpp @@ -0,0 +1,44 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * 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 2 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 . + */ + +#include "Argon2Hash.h" +#include + +/*static*/ Optional Trinity::Crypto::Argon2::Hash(std::string const& password, BigNumber const& salt, uint32 nIterations, uint32 kibMemoryCost) +{ + char buf[ENCODED_HASH_LEN]; + std::vector saltBytes = salt.ToByteVector(); + int status = argon2id_hash_encoded( + nIterations, + kibMemoryCost, + PARALLELISM, + password.c_str(), password.length(), + saltBytes.data(), saltBytes.size(), + HASH_LEN, buf, ENCODED_HASH_LEN + ); + + if (status == ARGON2_OK) + return std::string(buf); + + return {}; +} + +/*static*/ bool Trinity::Crypto::Argon2::Verify(std::string const& password, std::string const& hash) +{ + int status = argon2id_verify(hash.c_str(), password.c_str(), password.length()); + return (status == ARGON2_OK); +} diff --git a/src/common/Cryptography/Argon2Hash.h b/src/common/Cryptography/Argon2Hash.h new file mode 100644 index 00000000000..2c1d44d10d7 --- /dev/null +++ b/src/common/Cryptography/Argon2Hash.h @@ -0,0 +1,41 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * 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 2 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 . + */ + +#ifndef TRINITY_ARGON2_H +#define TRINITY_ARGON2_H + +#include "BigNumber.h" +#include "Define.h" +#include "Optional.h" +#include + +namespace Trinity::Crypto +{ + struct TC_COMMON_API Argon2 + { + static constexpr uint32 HASH_LEN = 16; // 128 bits, in bytes + static constexpr uint32 ENCODED_HASH_LEN = 100; // in chars + static constexpr uint32 DEFAULT_ITERATIONS = 10; // determined by dice roll, guaranteed to be secure (not really) + static constexpr uint32 DEFAULT_MEMORY_COST = (1u << 17); // 2^17 kibibytes is 2^7 mebibytes is ~100MB + static constexpr uint32 PARALLELISM = 1; // we don't support threaded hashing + + static Optional Hash(std::string const& password, BigNumber const& salt, uint32 nIterations = DEFAULT_ITERATIONS, uint32 kibMemoryCost = DEFAULT_MEMORY_COST); + static bool Verify(std::string const& password, std::string const& hash); + }; +} + +#endif -- cgit v1.2.3