Botan 3.9.0
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 Function Identificationthe SRP hash in use
Random Number Generatorsa 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 BOTAN_STATE_CHECK(!m_group);
165 m_group = std::make_unique<DL_Group>(group);
166
167 const BigInt& g = m_group->get_g();
168 const BigInt& p = m_group->get_p();
169
170 m_v = v;
171 m_b = BigInt(rng, b_bits);
172 m_hash_id = hash_id;
173
174 auto hash_fn = HashFunction::create_or_throw(hash_id);
175 if(8 * hash_fn->output_length() >= m_group->p_bits()) {
176 throw Invalid_Argument(fmt("Hash function {} too large for SRP6 with this group", hash_fn->name()));
177 }
178
179 const BigInt k = hash_seq(*hash_fn, m_group->p_bytes(), p, g);
180 m_B = m_group->mod_p(v * k + m_group->power_g_p(m_b, b_bits));
181
182 return m_B;
183}
#define BOTAN_STATE_CHECK(expr)
Definition assert.h:49
#define BOTAN_ARG_CHECK(expr, msg)
Definition assert.h:33
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_STATE_CHECK, Botan::HashFunction::create_or_throw(), Botan::fmt(), and Botan::DL_Group::p_bits().

◆ 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 Function Identificationthe SRP hash in use
Random Number Generatorsa random number generator
Returns
SRP-6 B value

Definition at line 151 of file srp6.cpp.

154 {
155 auto group = DL_Group::from_name(group_id);
156 const size_t b_bits = group.exponent_bits();
157 return this->step1(v, group, hash_id, b_bits, rng);
158}
static DL_Group from_name(std::string_view name)
Definition dl_group.cpp:217
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::from_name(), 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 185 of file srp6.cpp.

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

References BOTAN_STATE_CHECK, Botan::HashFunction::create_or_throw(), Botan::fmt(), and Botan::BigInt::serialize().


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