TrinityCore
Argon2.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "Argon2.h"
19#include <argon2/argon2.h>
20
21/*static*/ Optional<std::string> Trinity::Crypto::Argon2::Hash(std::string const& password, BigNumber const& salt, uint32 nIterations, uint32 kibMemoryCost)
22{
23 char buf[ENCODED_HASH_LEN];
24 std::vector<uint8> saltBytes = salt.ToByteVector();
25 int status = argon2id_hash_encoded(
26 nIterations,
27 kibMemoryCost,
29 password.c_str(), password.length(),
30 saltBytes.data(), saltBytes.size(),
32 );
33
34 if (status == ARGON2_OK)
35 return std::string(buf);
36
37 return {};
38}
39
40/*static*/ bool Trinity::Crypto::Argon2::Verify(std::string const& password, std::string const& hash)
41{
42 int status = argon2id_verify(hash.c_str(), password.c_str(), password.length());
43 return (status == ARGON2_OK);
44}
uint32_t uint32
Definition: Define.h:142
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
std::vector< uint8 > ToByteVector(int32 minSize=0, bool littleEndian=true) const
Definition: BigNumber.cpp:195
static constexpr uint32 PARALLELISM
Definition: Argon2.h:34
static constexpr uint32 ENCODED_HASH_LEN
Definition: Argon2.h:31
static Optional< std::string > Hash(std::string const &password, BigNumber const &salt, uint32 nIterations=DEFAULT_ITERATIONS, uint32 kibMemoryCost=DEFAULT_MEMORY_COST)
Definition: Argon2.cpp:21
static constexpr uint32 HASH_LEN
Definition: Argon2.h:30
static bool Verify(std::string const &password, std::string const &hash)
Definition: Argon2.cpp:40