aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/pubkey/ec_group/ec_group.cpp
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-03-08 07:21:43 -0500
committerJack Lloyd <[email protected]>2018-03-08 07:36:02 -0500
commit300cc7e5523396bae65f61485406a0bf392d8320 (patch)
treebd68ed9f7d5a6902247c9101544431b1e42dc75b /src/lib/pubkey/ec_group/ec_group.cpp
parent34aa3778a0f426fb7487c62049570d504e447c2f (diff)
Add mixed (J+A) point addition, new scalar mul for base points
Adds PointGFp::force_affine(), ::add_affine(), and ::is_affine() Use a (very simple) technique for base point precomputations. Stick with fixed window for variable point inputs. Scalar blinding is now always enabled
Diffstat (limited to 'src/lib/pubkey/ec_group/ec_group.cpp')
-rw-r--r--src/lib/pubkey/ec_group/ec_group.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/lib/pubkey/ec_group/ec_group.cpp b/src/lib/pubkey/ec_group/ec_group.cpp
index 9da1cd81f..723a4148e 100644
--- a/src/lib/pubkey/ec_group/ec_group.cpp
+++ b/src/lib/pubkey/ec_group/ec_group.cpp
@@ -9,6 +9,7 @@
*/
#include <botan/ec_group.h>
+#include <botan/internal/point_mul.h>
#include <botan/ber_dec.h>
#include <botan/der_enc.h>
#include <botan/oids.h>
@@ -17,10 +18,6 @@
#include <botan/mutex.h>
#include <vector>
-#if defined(BOTAN_HAS_SYSTEM_RNG)
- #include <botan/system_rng.h>
-#endif
-
namespace Botan {
class EC_Group_Data final
@@ -42,15 +39,12 @@ class EC_Group_Data final
m_order(order),
m_cofactor(cofactor),
m_mod_order(order),
- m_base_mult(m_base_point, 5),
+ m_base_mult(m_base_point),
m_oid(oid),
m_p_bits(p.bits()),
m_order_bits(order.bits()),
m_a_is_minus_3(a == p - 3)
{
-#if defined(BOTAN_HAS_SYSTEM_RNG)
- m_base_mult.randomize(system_rng());
-#endif
}
bool match(const BigInt& p, const BigInt& a, const BigInt& b,
@@ -97,7 +91,7 @@ class EC_Group_Data final
RandomNumberGenerator& rng,
std::vector<BigInt>& ws) const
{
- return m_base_mult.mul(k, m_order, rng, ws);
+ return m_base_mult.mul(k, rng, m_order, ws);
}
private:
@@ -109,7 +103,7 @@ class EC_Group_Data final
BigInt m_order;
BigInt m_cofactor;
Modular_Reducer m_mod_order;
- PointGFp_Blinded_Multiplier m_base_mult;
+ PointGFp_Base_Point_Precompute m_base_mult;
OID m_oid;
size_t m_p_bits;
size_t m_order_bits;
@@ -489,6 +483,16 @@ PointGFp EC_Group::blinded_base_point_multiply(const BigInt& k,
return data().blinded_base_point_multiply(k, rng, ws);
}
+PointGFp EC_Group::blinded_var_point_multiply(const PointGFp& point,
+ const BigInt& k,
+ RandomNumberGenerator& rng,
+ std::vector<BigInt>& ws) const
+ {
+ PointGFp_Var_Point_Precompute mul(point);
+ mul.randomize_repr(rng);
+ return mul.mul(k, rng, get_order(), ws);
+ }
+
PointGFp EC_Group::zero_point() const
{
return PointGFp(data().curve());