Botan 2.19.5 Crypto and TLS for C&

blinding.cpp
Go to the documentation of this file.
1/*
2* Blinding for public key operations
3* (C) 1999-2010,2015 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#include <botan/blinding.h>
9
10 namespace Botan {
11
12 Blinder::Blinder(const BigInt& modulus,
13 RandomNumberGenerator& rng,
14 std::function<BigInt (const BigInt&)> fwd,
15 std::function<BigInt (const BigInt&)> inv) :
16 m_reducer(modulus),
17 m_rng(rng),
18 m_fwd_fn(fwd),
19 m_inv_fn(inv),
20 m_modulus_bits(modulus.bits()),
21 m_e{},
22 m_d{},
23 m_counter{}
24 {
25 const BigInt k = blinding_nonce();
26 m_e = m_fwd_fn(k);
27 m_d = m_inv_fn(k);
28 }
29
30 BigInt Blinder::blinding_nonce() const
31 {
32 return BigInt(m_rng, m_modulus_bits - 1);
33 }
34
35 BigInt Blinder::blind(const BigInt& i) const
36 {
37 if(!m_reducer.initialized())
38 throw Invalid_State("Blinder not initialized, cannot blind");
39
40 ++m_counter;
41
42 if((BOTAN_BLINDING_REINIT_INTERVAL > 0) && (m_counter > BOTAN_BLINDING_REINIT_INTERVAL))
43 {
44 const BigInt k = blinding_nonce();
45 m_e = m_fwd_fn(k);
46 m_d = m_inv_fn(k);
47 m_counter = 0;
48 }
49 else
50 {
51 m_e = m_reducer.square(m_e);
52 m_d = m_reducer.square(m_d);
53 }
54
55 return m_reducer.multiply(i, m_e);
56 }
57
58 BigInt Blinder::unblind(const BigInt& i) const
59 {
60 if(!m_reducer.initialized())
61 throw Invalid_State("Blinder not initialized, cannot unblind");
62
63 return m_reducer.multiply(i, m_d);
64 }
65
66}
Botan::BigInt
Definition: bigint.h:25
Botan::Blinder::blind
BigInt blind(const BigInt &x) const
Definition: blinding.cpp:35
Botan::Blinder::Blinder
Blinder(const BigInt &modulus, RandomNumberGenerator &rng, std::function< BigInt(const BigInt &)> fwd_func, std::function< BigInt(const BigInt &)> inv_func)
Definition: blinding.cpp:12
Botan::Blinder::unblind
BigInt unblind(const BigInt &x) const
Definition: blinding.cpp:58
Botan::Invalid_State
Definition: exceptn.h:216
Botan::Modular_Reducer::square
BigInt square(const BigInt &x) const
Definition: reducer.h:39
Botan::Modular_Reducer::multiply
BigInt multiply(const BigInt &x, const BigInt &y) const
Definition: reducer.h:31
Botan::Modular_Reducer::initialized
bool initialized() const
Definition: reducer.h:58
Botan::RandomNumberGenerator
Definition: rng.h:26
Botan
Definition: alg_id.cpp:13