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_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 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_idthe SRP hash in use
rnga 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: