45 static std::optional<EC_AffinePoint> deserialize(
const EC_Group& group, std::span<const uint8_t> bytes);
51 static std::optional<EC_AffinePoint> from_bigint_xy(
const EC_Group& group,
const BigInt& x,
const BigInt& y);
68 std::string_view hash_fn,
69 std::span<const uint8_t> input,
70 std::span<const uint8_t> domain_sep);
76 std::string_view hash_fn,
77 std::span<const uint8_t> input,
78 std::span<const uint8_t> domain_sep);
90 std::vector<BigInt>& ws)
const;
97 static std::optional<EC_AffinePoint> mul_px_qy(
const EC_AffinePoint& p,
120 size_t field_element_bytes()
const;
123 bool is_identity()
const;
130 void serialize_x_to(std::span<uint8_t> bytes)
const;
137 void serialize_y_to(std::span<uint8_t> bytes)
const;
144 void serialize_xy_to(std::span<uint8_t> bytes)
const;
151 void serialize_compressed_to(std::span<uint8_t> bytes)
const;
158 void serialize_uncompressed_to(std::span<uint8_t> bytes)
const;
163 template <concepts::resizable_
byte_buffer T = secure_vector<u
int8_t>>
165 T bytes(this->field_element_bytes());
166 this->serialize_x_to(bytes);
173 template <concepts::resizable_
byte_buffer T = secure_vector<u
int8_t>>
175 T bytes(this->field_element_bytes());
176 this->serialize_y_to(bytes);
183 template <concepts::resizable_
byte_buffer T = secure_vector<u
int8_t>>
185 T bytes(2 * this->field_element_bytes());
186 this->serialize_xy_to(bytes);
193 template <concepts::resizable_
byte_buffer T = std::vector<u
int8_t>>
195 T bytes(1 + 2 * this->field_element_bytes());
196 this->serialize_uncompressed_to(bytes);
203 template <concepts::resizable_
byte_buffer T = std::vector<u
int8_t>>
205 T bytes(1 + this->field_element_bytes());
206 this->serialize_compressed_to(bytes);
223#if defined(BOTAN_HAS_LEGACY_EC_POINT)
239 static EC_AffinePoint _from_inner(std::unique_ptr<EC_AffinePoint_Data> inner);
241 const std::shared_ptr<const EC_Group_Data>& _group()
const;
244 friend class EC_Mul2Table;
250 std::unique_ptr<EC_AffinePoint_Data> m_point;