Botan 3.10.0
Crypto and TLS for C&
Botan::Blinder Class Referencefinal

#include <blinding.h>

Public Member Functions

BigInt blind (const BigInt &x) const
 
 Blinder (Blinder &&)=default
 
 Blinder (const Barrett_Reduction &reducer, RandomNumberGenerator &rng, std::function< BigInt(const BigInt &)> fwd_func, std::function< BigInt(const BigInt &)> inv_func)
 
 Blinder (const Blinder &)=delete
 
Blinderoperator= (Blinder &&)=delete
 
Blinderoperator= (const Blinder &)=delete
 
RandomNumberGeneratorrng () const
 
BigInt unblind (const BigInt &x) const
 
 ~Blinder ()=default
 

Static Public Attributes

static constexpr size_t ReinitInterval = 64
 

Detailed Description

Blinding Function Object.

Definition at line 22 of file blinding.h.

Constructor & Destructor Documentation

◆ Blinder() [1/3]

Botan::Blinder::Blinder ( const Barrett_Reduction & reducer,
RandomNumberGenerator & rng,
std::function< BigInt(const BigInt &)> fwd_func,
std::function< BigInt(const BigInt &)> inv_func )
Parameters
reducerprecomputed Barrett reduction for the modulus
rngthe RNG to use for generating the nonce
fwd_funca function that calculates the modular exponentiation of the public exponent and the given value (the nonce)
inv_funca function that calculates the modular inverse of the given value (the nonce)
Note
Lifetime: The rng and reducer arguments are captured by reference and must live as long as the Blinder does

Definition at line 12 of file blinding.cpp.

15 :
16 m_reducer(reducer),
17 m_rng(rng),
18 m_fwd_fn(std::move(fwd)),
19 m_inv_fn(std::move(inv)),
20 m_modulus_bits(reducer.modulus_bits()),
21 m_counter{} {
22 const BigInt k = blinding_nonce();
23 m_e = m_fwd_fn(k);
24 m_d = m_inv_fn(k);
25}
RandomNumberGenerator & rng() const
Definition blinding.h:82

◆ Blinder() [2/3]

Botan::Blinder::Blinder ( const Blinder & )
delete

◆ Blinder() [3/3]

Botan::Blinder::Blinder ( Blinder && )
default

◆ ~Blinder()

Botan::Blinder::~Blinder ( )
default

Member Function Documentation

◆ blind()

BigInt Botan::Blinder::blind ( const BigInt & x) const

Blind a value.

The blinding nonce k is freshly generated after ReinitInterval calls to blind().

ReinitInterval = 0 means a fresh nonce is only generated once. On every other call, the next nonce is derived via modular squaring.

Parameters
xvalue to blind
Returns
blinded value

Definition at line 31 of file blinding.cpp.

31 {
32 ++m_counter;
33
34 if((ReinitInterval > 0) && (m_counter > ReinitInterval)) {
35 const BigInt k = blinding_nonce();
36 m_e = m_fwd_fn(k);
37 m_d = m_inv_fn(k);
38 m_counter = 0;
39 } else {
40 m_e = m_reducer.square(m_e);
41 m_d = m_reducer.square(m_d);
42 }
43
44 return m_reducer.multiply(i, m_e);
45}
BigInt multiply(const BigInt &x, const BigInt &y) const
Definition barrett.cpp:162
BigInt square(const BigInt &x) const
Definition barrett.cpp:183
static constexpr size_t ReinitInterval
Definition blinding.h:37

References Botan::Barrett_Reduction::multiply(), ReinitInterval, and Botan::Barrett_Reduction::square().

◆ operator=() [1/2]

Blinder & Botan::Blinder::operator= ( Blinder && )
delete

◆ operator=() [2/2]

Blinder & Botan::Blinder::operator= ( const Blinder & )
delete

◆ rng()

RandomNumberGenerator & Botan::Blinder::rng ( ) const
inline

Definition at line 82 of file blinding.h.

82{ return m_rng; }

◆ unblind()

BigInt Botan::Blinder::unblind ( const BigInt & x) const

Unblind a value.

Parameters
xvalue to unblind
Returns
unblinded value

Definition at line 47 of file blinding.cpp.

47 {
48 return m_reducer.multiply(i, m_d);
49}

References Botan::Barrett_Reduction::multiply().

Member Data Documentation

◆ ReinitInterval

size_t Botan::Blinder::ReinitInterval = 64
staticconstexpr

Normally blinding is performed by choosing a random starting point (plus its inverse, of a form appropriate to the algorithm being blinded), and then choosing new blinding operands by successive squaring of both values. This is much faster than computing a new starting point but introduces some possible correlation

To avoid possible leakage problems in long-running processes, the blinder periodically reinitializes the sequence. This value specifies how often a new sequence should be started.

If set to zero, reinitialization is disabled

Definition at line 37 of file blinding.h.

Referenced by blind().


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