10#ifndef BOTAN_ECC_DOMAIN_PARAMETERS_H_
11#define BOTAN_ECC_DOMAIN_PARAMETERS_H_
13#include <botan/ec_point.h>
14#include <botan/asn1_obj.h>
40class EC_Group_Data_Map;
77 explicit EC_Group(
const uint8_t ber[],
size_t ber_len);
79 template<
typename Alloc>
80 EC_Group(
const std::vector<uint8_t, Alloc>& ber) :
97 explicit EC_Group(std::string_view pem_or_oid);
99 static EC_Group EC_Group_from_PEM(std::string_view pem);
125 std::string PEM_encode()
const;
130 bool a_is_minus_3()
const;
135 bool a_is_zero()
const;
140 size_t get_p_bits()
const;
145 size_t get_p_bytes()
const;
150 size_t get_order_bits()
const;
155 size_t get_order_bytes()
const;
160 const BigInt& get_p()
const;
165 const BigInt& get_a()
const;
170 const BigInt& get_b()
const;
176 const EC_Point& get_base_point()
const;
181 const BigInt& get_g_x()
const;
186 const BigInt& get_g_y()
const;
192 const BigInt& get_order()
const;
198 const BigInt& get_cofactor()
const;
230 return multiply_mod_order(x, square_mod_order(x));
239 bool verify_public_element(
const EC_Point&
y)
const;
245 const OID& get_curve_oid()
const;
267 std::vector<BigInt>& ws)
const;
280 std::vector<BigInt>& ws)
const;
293 std::vector<BigInt>& ws)
const;
313 EC_Point hash_to_curve(std::string_view hash_fn,
314 const uint8_t input[],
316 const uint8_t domain_sep[],
317 size_t domain_sep_len,
318 bool random_oracle =
true)
const;
332 EC_Point hash_to_curve(std::string_view hash_fn,
333 const uint8_t input[],
335 std::string_view domain_sep,
336 bool random_oracle =
true)
const;
349 return this->
OS2ECP(encoded_point.data(), encoded_point.size());
359 bool strong =
false)
const;
368 static const std::set<std::string>& known_named_groups();
373 static std::shared_ptr<EC_Group_Data> EC_group_info(
const OID& oid);
378 static size_t clear_registered_curve_data();
383 static OID EC_group_identity_from_order(
const BigInt& order);
386 static EC_Group_Data_Map& ec_group_data();
388 static std::shared_ptr<EC_Group_Data> BER_decode_EC_group(
const uint8_t bits[],
size_t len,
391 static std::shared_ptr<EC_Group_Data>
392 load_EC_group_info(
const char* p,
401 const EC_Group_Data& data()
const;
402 std::shared_ptr<EC_Group_Data> m_data;
408 return !(lhs == rhs);
EC_Group(const EC_Group &)=default
BigInt cube_mod_order(const BigInt &x) const
EC_Group & operator=(EC_Group &&)=default
EC_Point OS2ECP(std::span< const uint8_t > encoded_point) const
EC_Group(EC_Group &&)=default
EC_Group(const std::vector< uint8_t, Alloc > &ber)
EC_Group & operator=(const EC_Group &)=default
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
bool operator!=(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
bool operator==(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
EC_Point OS2ECP(const uint8_t data[], size_t data_len, const CurveGFp &curve)
@ EC_DOMPAR_ENC_IMPLICITCA