Botan 3.6.1
Crypto and TLS for C&
Botan::SRP6_Server_Session Class Referencefinal

#include <srp6.h>

Public Member Functions

BigInt step1 (const BigInt &v, const DL_Group &group, std::string_view hash_id, size_t b_bits, RandomNumberGenerator &rng)
 
BigInt step1 (const BigInt &v, std::string_view group_id, std::string_view hash_id, RandomNumberGenerator &rng)
 
SymmetricKey step2 (const BigInt &A)
 

Detailed Description

Represents a SRP-6a server session

Definition at line 102 of file srp6.h.

Member Function Documentation

◆ step1() [1/2]

BigInt Botan::SRP6_Server_Session::step1 ( const BigInt & v,
const DL_Group & group,
std::string_view hash_id,
size_t b_bits,
RandomNumberGenerator & rng )

Server side step 1 This version of step1 added in 2.11

Parameters
vthe verification value saved from client registration
groupthe SRP group
hash_idthe SRP hash in use
rnga random number generator
b_bitssize of secret exponent in bits
Returns
SRP-6 B value

Definition at line 160 of file srp6.cpp.

161 {
162 BOTAN_ARG_CHECK(b_bits <= group.p_bits(), "Invalid b_bits");
163
164 m_group = group;
165
166 const BigInt& g = group.get_g();
167 const BigInt& p = group.get_p();
168
169 m_v = v;
170 m_b = BigInt(rng, b_bits);
171 m_hash_id = hash_id;
172
173 auto hash_fn = HashFunction::create_or_throw(hash_id);
174 if(8 * hash_fn->output_length() >= group.p_bits()) {
175 throw Invalid_Argument(fmt("Hash function {} too large for SRP6 with this group", hash_fn->name()));
176 }
177
178 const BigInt k = hash_seq(*hash_fn, m_group.p_bytes(), p, g);
179 m_B = group.mod_p(v * k + group.power_g_p(m_b, b_bits));
180
181 return m_B;
182}
#define BOTAN_ARG_CHECK(expr, msg)
Definition assert.h:29
size_t p_bytes() const
Definition dl_group.cpp:456
const BigInt & get_g() const
Definition dl_group.cpp:433
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Definition hash.cpp:298
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53

References BOTAN_ARG_CHECK, Botan::HashFunction::create_or_throw(), Botan::fmt(), Botan::DL_Group::get_g(), Botan::DL_Group::get_p(), Botan::DL_Group::mod_p(), Botan::DL_Group::p_bits(), Botan::DL_Group::p_bytes(), and Botan::DL_Group::power_g_p().

◆ step1() [2/2]

BigInt Botan::SRP6_Server_Session::step1 ( const BigInt & v,
std::string_view group_id,
std::string_view hash_id,
RandomNumberGenerator & rng )

Server side step 1

Parameters
vthe verification value saved from client registration
group_idthe SRP group id
hash_idthe SRP hash in use
rnga random number generator
Returns
SRP-6 B value

Definition at line 151 of file srp6.cpp.

154 {
155 DL_Group group(group_id);
156 const size_t b_bits = group.exponent_bits();
157 return this->step1(v, group, hash_id, b_bits, rng);
158}
BigInt step1(const BigInt &v, std::string_view group_id, std::string_view hash_id, RandomNumberGenerator &rng)
Definition srp6.cpp:151

References Botan::DL_Group::exponent_bits(), and step1().

Referenced by step1().

◆ step2()

SymmetricKey Botan::SRP6_Server_Session::step2 ( const BigInt & A)

Server side step 2

Parameters
Athe client's value
Returns
shared symmetric key

Definition at line 184 of file srp6.cpp.

184 {
185 if(A <= 0 || A >= m_group.get_p()) {
186 throw Decoding_Error("Invalid SRP parameter from client");
187 }
188
189 auto hash_fn = HashFunction::create_or_throw(m_hash_id);
190 if(8 * hash_fn->output_length() >= m_group.p_bits()) {
191 throw Invalid_Argument(fmt("Hash function {} too large for SRP6 with this group", hash_fn->name()));
192 }
193
194 const BigInt u = hash_seq(*hash_fn, m_group.p_bytes(), A, m_B);
195
196 const BigInt vup = m_group.power_b_p(m_v, u, m_group.p_bits());
197 const BigInt S = m_group.power_b_p(m_group.multiply_mod_p(A, vup), m_b, m_group.p_bits());
198
199 return SymmetricKey(S.serialize<secure_vector<uint8_t>>(m_group.p_bytes()));
200}
BigInt multiply_mod_p(const BigInt &x, const BigInt &y) const
Definition dl_group.cpp:487
size_t p_bits() const
Definition dl_group.cpp:452
const BigInt & get_p() const
Definition dl_group.cpp:426
BigInt power_b_p(const BigInt &b, const BigInt &x, size_t max_x_bits) const
Definition dl_group.cpp:533
OctetString SymmetricKey
Definition symkey.h:140
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:61

References Botan::HashFunction::create_or_throw(), Botan::fmt(), Botan::DL_Group::get_p(), Botan::DL_Group::multiply_mod_p(), Botan::DL_Group::p_bits(), Botan::DL_Group::p_bytes(), Botan::DL_Group::power_b_p(), and Botan::BigInt::serialize().


The documentation for this class was generated from the following files: