33 using Salt = std::array<uint8, SALT_LENGTH>;
60 template<
typename Impl>
61 static std::pair<Salt, Verifier>
MakeRegistrationData(std::string
const& username, std::string
const& password)
64 return { impl.s, impl.CalculateVerifier(username, password, impl.s) };
67 bool CheckCredentials(std::string
const& username, std::string
const& password)
const;
78 Verifier CalculateVerifier(std::string
const& username, std::string
const& password,
Salt const& salt)
const;
96 static constexpr size_t EPHEMERAL_KEY_LENGTH = 32;
100 using SessionKey = std::array<uint8, SHA1::DIGEST_LENGTH * 2>;
114 BigNumber CalculateX(std::string
const& username, std::string
const& password,
Salt const& salt)
const override;
118 static SessionKey SHA1Interleave(EphemeralKey
const& S);
139 template<
typename CryptoHash>
144 hash.UpdateData(GetBrokenEvidenceVector(*bn));
147 return BigNumber(hash.GetDigest(),
false);
150 static std::vector<uint8> GetBrokenEvidenceVector(
BigNumber const& bn);
169 BigNumber CalculateX(std::string
const& username, std::string
const& password,
Salt const& salt)
const final;
188 BigNumber CalculateX(std::string
const& username, std::string
const& password,
Salt const& salt)
const final;
191 template<
typename CryptoHash>
196 :
BnetSRP6v1Base(username, salt, verifier,
BigNumber(CryptoHash::GetDigestOf(
N.ToByteArray<128>(false),
g.ToByteArray<128>(false)), false))
210 return BnetSRP6Base::DoCalculateEvidence<CryptoHash>(bns);
214 template<
typename CryptoHash>
219 :
BnetSRP6v2Base(username, salt, verifier,
BigNumber(CryptoHash::GetDigestOf(
N.ToByteArray<256>(false),
g.ToByteArray<256>(false)), false))
233 return BnetSRP6Base::DoCalculateEvidence<CryptoHash>(bns);
std::array< uint8, SESSION_KEY_LENGTH > SessionKey
std::optional< T > Optional
Optional helper class to wrap optional values within.
std::array< uint8, Size > ToByteArray(bool littleEndian=true) const
virtual uint8 GetVersion() const =0
BnetSRP6Base(ForRegistrationTag t)
BigNumber DoCalculateEvidence(std::span< BigNumber const * > bns) const
virtual uint32 GetXIterations() const =0
virtual BigNumber CalculateU(BigNumber const &A) const =0
virtual BigNumber DoCalculateEvidence(std::span< BigNumber const * > bns) const =0
uint32 GetXIterations() const final
BigNumber const & GetN() const final
BnetSRP6v1Base(ForRegistrationTag t)
uint8 GetVersion() const final
BigNumber const & Getg() const final
BnetSRP6v1(ForRegistrationTag t)
BnetSRP6v1(std::string const &username, Salt const &salt, Verifier const &verifier)
BigNumber CalculateU(BigNumber const &A) const override
BigNumber DoCalculateEvidence(std::span< BigNumber const * > bns) const override
BigNumber const & Getg() const final
uint8 GetVersion() const final
uint32 GetXIterations() const final
BnetSRP6v2Base(ForRegistrationTag t)
BigNumber const & GetN() const final
BnetSRP6v2(std::string const &username, Salt const &salt, Verifier const &verifier)
BigNumber DoCalculateEvidence(std::span< BigNumber const * > bns) const override
BnetSRP6v2(ForRegistrationTag t)
BigNumber CalculateU(BigNumber const &A) const override
std::array< uint8, EPHEMERAL_KEY_LENGTH > EphemeralKey
GruntSRP6(ForRegistrationTag t)
BigNumber const & Getg() const override
BigNumber const & GetN() const override
std::array< uint8, SHA1::DIGEST_LENGTH *2 > SessionKey
SRP6 & operator=(SRP6 const &)=delete
virtual BigNumber const & Getg() const =0
virtual Optional< BigNumber > DoVerifyClientEvidence(BigNumber const &A, BigNumber const &clientM1)=0
SRP6 & operator=(SRP6 &&)=delete
virtual BigNumber CalculateX(std::string const &username, std::string const &password, Salt const &salt) const =0
static std::pair< Salt, Verifier > MakeRegistrationData(std::string const &username, std::string const &password)
virtual BigNumber const & GetN() const =0
SRP6(SRP6 const &)=delete
virtual BigNumber CalculateServerEvidence(BigNumber const &A, BigNumber const &clientM1, BigNumber const &K) const =0
std::array< uint8, SALT_LENGTH > Salt
std::vector< uint8 > Verifier
static constexpr size_t SALT_LENGTH