10#ifndef BOTAN_ECC_DOMAIN_PARAMETERS_H_
11#define BOTAN_ECC_DOMAIN_PARAMETERS_H_
13#include <botan/point_gfp.h>
14#include <botan/asn1_obj.h>
37class EC_Group_Data_Map;
56 BOTAN_DEPRECATED(
"Use version taking all BigInts")
64 base_point.get_affine_x(),
65 base_point.get_affine_y(),
94 explicit EC_Group(
const uint8_t ber[],
size_t ber_len);
96 template<
typename Alloc>
97 EC_Group(
const std::vector<uint8_t, Alloc>& ber) :
114 explicit EC_Group(
const std::string& pem_or_oid);
116 static EC_Group EC_Group_from_PEM(
const std::string& pem);
148 BOTAN_DEPRECATED(
"Avoid CurveGFp") const
CurveGFp& get_curve() const;
153 bool a_is_minus_3() const;
158 bool a_is_zero() const;
163 size_t get_p_bits() const;
168 size_t get_p_bytes() const;
173 size_t get_order_bits() const;
178 size_t get_order_bytes() const;
183 const
BigInt& get_p() const;
188 const
BigInt& get_a() const;
193 const
BigInt& get_b() const;
199 const
PointGFp& get_base_point() const;
204 const
BigInt& get_g_x() const;
209 const
BigInt& get_g_y() const;
215 const
BigInt& get_order() const;
246 const
BigInt& get_cofactor() const;
254 bool verify_public_element(const
PointGFp& y) const;
260 std::
string BOTAN_DEPRECATED("Use get_curve_oid") get_oid()
const {
return get_curve_oid().to_string(); }
266 const OID& get_curve_oid()
const;
288 std::vector<BigInt>& ws)
const;
301 std::vector<BigInt>& ws)
const;
314 std::vector<BigInt>& ws)
const;
330 template<
typename Alloc>
333 return this->
OS2ECP(vec.data(), vec.size());
343 bool strong =
false)
const;
353 static std::string BOTAN_DEPRECATED(
"See header comment") PEM_for_named_group(const
std::
string&
name);
358 static const
std::set<
std::
string>& known_named_groups();
363 static
std::shared_ptr<EC_Group_Data> EC_group_info(const
OID& oid);
365 static
size_t clear_registered_curve_data();
368 static EC_Group_Data_Map& ec_group_data();
370 static
std::shared_ptr<EC_Group_Data> BER_decode_EC_group(const uint8_t bits[],
size_t len,
373 static
std::shared_ptr<EC_Group_Data>
374 load_EC_group_info(const
char* p,
383 const EC_Group_Data& data() const;
384 std::shared_ptr<EC_Group_Data> m_data;
390 return !(lhs == rhs);
EC_Group(const EC_Group &)=default
PointGFp OS2ECP(const std::vector< uint8_t, Alloc > &vec) const
EC_Group & operator=(EC_Group &&)=default
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)
std::string PEM_encode(const Private_Key &key)
PointGFp OS2ECP(const uint8_t data[], size_t data_len, const CurveGFp &curve)
EC_Group EC_Domain_Params
bool operator==(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
@ EC_DOMPAR_ENC_IMPLICITCA