Botan 3.7.1
Crypto and TLS for C&
monty_exp.h
Go to the documentation of this file.
1/*
2* (C) 2018,2025 Jack Lloyd
3*
4* Botan is released under the Simplified BSD License (see license.txt)
5*/
6
7#ifndef BOTAN_MONTY_EXP_H_
8#define BOTAN_MONTY_EXP_H_
9
10#include <botan/internal/monty.h>
11#include <memory>
12
13namespace Botan {
14
15class BigInt;
16class Modular_Reducer;
17class Montgomery_Exponentation_State;
18
19/*
20* Precompute for calculating values g^x mod p
21*/
22std::shared_ptr<const Montgomery_Exponentation_State> monty_precompute(
23 const std::shared_ptr<const Montgomery_Params>& params_p,
24 const BigInt& g,
25 size_t window_bits,
26 bool const_time = true);
27
28/*
29* Precompute for calculating values g^x mod p
30*/
31std::shared_ptr<const Montgomery_Exponentation_State> monty_precompute(const Montgomery_Int& g,
32 size_t window_bits,
33 bool const_time = true);
34
35/*
36* Return g^k mod p
37*/
38Montgomery_Int monty_execute(const Montgomery_Exponentation_State& precomputed_state,
39 const BigInt& k,
40 size_t max_k_bits);
41
42/*
43* Return g^k mod p taking variable time depending on k
44* @warning only use this if k is public
45*/
46Montgomery_Int monty_execute_vartime(const Montgomery_Exponentation_State& precomputed_state, const BigInt& k);
47
48inline Montgomery_Int monty_exp(const std::shared_ptr<const Montgomery_Params>& params_p,
49 const BigInt& g,
50 const BigInt& k,
51 size_t max_k_bits) {
52 auto precomputed = monty_precompute(params_p, g, 4, true);
53 return monty_execute(*precomputed, k, max_k_bits);
54}
55
56inline Montgomery_Int monty_exp_vartime(const std::shared_ptr<const Montgomery_Params>& params_p,
57 const BigInt& g,
58 const BigInt& k) {
59 auto precomputed = monty_precompute(params_p, g, 4, false);
60 return monty_execute_vartime(*precomputed, k);
61}
62
63/**
64* Return (x^z1 * y^z2) % p
65*/
66Montgomery_Int monty_multi_exp(const std::shared_ptr<const Montgomery_Params>& params_p,
67 const BigInt& x,
68 const BigInt& z1,
69 const BigInt& y,
70 const BigInt& z2);
71
72} // namespace Botan
73
74#endif
Montgomery_Int monty_execute_vartime(const Montgomery_Exponentation_State &precomputed_state, const BigInt &k)
Montgomery_Int monty_exp(const std::shared_ptr< const Montgomery_Params > &params_p, const BigInt &g, const BigInt &k, size_t max_k_bits)
Definition monty_exp.h:48
Montgomery_Int monty_exp_vartime(const std::shared_ptr< const Montgomery_Params > &params_p, const BigInt &g, const BigInt &k)
Definition monty_exp.h:56
Montgomery_Int monty_execute(const Montgomery_Exponentation_State &precomputed_state, const BigInt &k, size_t max_k_bits)
std::shared_ptr< const Montgomery_Exponentation_State > monty_precompute(const Montgomery_Int &g, size_t window_bits, bool const_time)
Montgomery_Int monty_multi_exp(const std::shared_ptr< const Montgomery_Params > &params_p, const BigInt &x_bn, const BigInt &z1, const BigInt &y_bn, const BigInt &z2)