9#include <botan/internal/pk_ops_impl.h>
10#include <botan/internal/monty_exp.h>
11#include <botan/blinding.h>
87 PK_Ops::Key_Agreement_with_KDF(kdf),
91 m_monty_p(key.get_group().monty_params_p()),
94 [](const
BigInt& k) {
return k; },
95 [
this](
const BigInt& k) {
return powermod_x_p(
inverse_mod(k, m_p)); })
98 size_t agreed_value_size()
const override {
return m_p.bytes(); }
100 secure_vector<uint8_t> raw_agree(
const uint8_t w[],
size_t w_len)
override;
102 BigInt powermod_x_p(
const BigInt& v)
const
104 const size_t powm_window = 4;
111 const size_t m_x_bits;
112 std::shared_ptr<const Montgomery_Params> m_monty_p;
116secure_vector<uint8_t> DH_KA_Operation::raw_agree(
const uint8_t w[],
size_t w_len)
120 if(v <= 1 || v >= m_p - 1)
121 throw Invalid_Argument(
"DH agreement - invalid key provided");
123 v = m_blinder.
blind(v);
132std::unique_ptr<PK_Ops::Key_Agreement>
134 const std::string& params,
135 const std::string& provider)
const
137 if(provider ==
"base" || provider.empty())
138 return std::unique_ptr<PK_Ops::Key_Agreement>(
new DH_KA_Operation(*
this, params, rng));
static BigInt decode(const uint8_t buf[], size_t length)
void randomize(RandomNumberGenerator &rng, size_t bitsize, bool set_high_bit=true)
static secure_vector< uint8_t > encode_1363(const BigInt &n, size_t bytes)
BigInt blind(const BigInt &x) const
BigInt unblind(const BigInt &x) const
std::vector< uint8_t > public_value() const override
std::unique_ptr< PK_Ops::Key_Agreement > create_key_agreement_op(RandomNumberGenerator &rng, const std::string ¶ms, const std::string &provider) const override
DH_PrivateKey(const AlgorithmIdentifier &alg_id, const secure_vector< uint8_t > &key_bits)
std::vector< uint8_t > public_value() const
std::string algo_name() const override
BigInt power_g_p(const BigInt &x) const
size_t exponent_bits() const
const BigInt & group_p() const
int(* final)(unsigned char *, CTX *)
std::vector< T > unlock(const secure_vector< T > &in)
std::shared_ptr< const Montgomery_Exponentation_State > monty_precompute(std::shared_ptr< const Montgomery_Params > params, const BigInt &g, size_t window_bits, bool const_time)
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
BigInt monty_execute(const Montgomery_Exponentation_State &precomputed_state, const BigInt &k, size_t max_k_bits)
std::vector< T, secure_allocator< T > > secure_vector