40 static std::optional<EC_Scalar> deserialize(
const EC_Group& group, std::span<const uint8_t> bytes);
47 static EC_Scalar from_bytes_with_trunc(
const EC_Group& group, std::span<const uint8_t> bytes);
55 static EC_Scalar from_bytes_mod_order(
const EC_Group& group, std::span<const uint8_t> bytes);
63 std::string_view hash_fn,
64 std::span<const uint8_t> input,
65 std::span<const uint8_t> domain_sep);
81 static std::optional<std::pair<EC_Scalar, EC_Scalar>> deserialize_pair(
const EC_Group& group,
82 std::span<const uint8_t> bytes);
111 return EC_Scalar::gk_x_mod_order(scalar, rng);
117 size_t bytes()
const;
124 void serialize_to(std::span<uint8_t> bytes)
const;
129 template <concepts::resizable_
byte_buffer T = std::vector<u
int8_t>>
132 this->serialize_to(s);
141 static void serialize_pair_to(std::span<uint8_t> bytes,
const EC_Scalar& r,
const EC_Scalar& s);
146 template <concepts::resizable_
byte_buffer T = std::vector<u
int8_t>>
149 serialize_pair_to(bytes, r, s);
156 bool is_zero()
const;
246 static EC_Scalar _from_inner(std::unique_ptr<EC_Scalar_Data> inner);
251 explicit EC_Scalar(std::unique_ptr<EC_Scalar_Data> scalar);
255 std::unique_ptr<EC_Scalar_Data> m_scalar;