24 #include <libscrypt.h> 27 #include <boost/algorithm/hex.hpp> 28 #include <boost/algorithm/string/classification.hpp> 29 #include <boost/algorithm/string/split.hpp> 70 template <
typename SerializedType>
74 virtual SerializedType Serialize(
const ScryptResult &in)
const = 0;
75 virtual ScryptResult UnSerialize(
const SerializedType &in)
const = 0;
77 static std::string
Hex(
const std::vector<uint8_t> &in)
80 boost::algorithm::hex(in.begin(), in.end(), back_inserter(res));
84 static std::vector<uint8_t>
UnHex(
const std::string &in)
86 std::vector<uint8_t> res;
87 boost::algorithm::unhex(in.begin(), in.end(), back_inserter(res));
93 return std::vector<uint8_t>(in.begin(), in.end());
102 std::stringstream ss;
106 ss << Hex(in.
salt) <<
":";
115 std::vector<std::string> bla;
116 boost::algorithm::split(bla, in, boost::algorithm::is_any_of(
":"));
119 throw std::runtime_error(
"Cannot unserialize.");
121 result.
p.
N = std::stoi(bla[0]);
122 result.
p.
r = std::stoi(bla[1]);
123 result.
p.
p = std::stoi(bla[2]);
124 result.
salt = UnHex(bla[3]);
125 result.
hash = UnHex(bla[4]);
143 static ScryptResult Hash(
const std::vector<uint8_t> &in,
144 const std::vector<uint8_t> &salt,
156 static ScryptResult Hash(
const std::vector<uint8_t> &in,
166 static bool Verify(
const std::vector<uint8_t> &in,
const ScryptResult &expected);
std::vector< uint8_t > salt
Salt used for generation.
static ScryptParam default_
static std::string Hex(const std::vector< uint8_t > &in)
virtual ScryptResult UnSerialize(const std::string &in) const override
Interface to serialize a ScryptResult to a SerializedType object.
virtual std::string Serialize(const ScryptResult &in) const override
ScryptParam p
Parameters used to generated the hash.
bool operator==(const ScryptParam &o) const
static std::vector< uint8_t > UnHex(const std::string &in)
static std::vector< uint8_t > ToByteVector(const std::string &in)
std::vector< uint8_t > hash
The hash.