8#include <botan/internal/x448_internal.h>
10#include <botan/internal/ct_utils.h>
11#include <botan/internal/curve448_gf.h>
16uint64_t get_bit(
const ScalarX448& scalar,
size_t bit) {
17 return (scalar[bit / 8] >> (bit % 8)) & 1;
58 for(int16_t t = 448 - 1; t >= 0; --t) {
66 const auto A = x_2 + z_2;
68 const auto B = x_2 - z_2;
70 const auto E = AA - BB;
71 const auto C = x_3 + z_3;
72 const auto D = x_3 - z_3;
73 const auto DA = D * A;
74 const auto CB = C * B;
76 z_3 = x_1 *
square(DA - CB);
78 z_2 = E * (AA + a24 * E);
84 const auto res = x_2 / z_2;
#define BOTAN_ARG_CHECK(expr, msg)
static constexpr Mask< T > expand(T v)
static constexpr Mask< T > cleared()
void ct_cond_swap(bool b, Gf448Elem &other)
Swap this and other if b == true. Constant time for any b.
decltype(auto) begin() noexcept(noexcept(this->get().begin()))
decltype(auto) end() noexcept(noexcept(this->get().end()))
secure_vector< uint8_t > encode_point(const Point448 &p)
Encode a point to a 56 byte vector. RFC 7748 Section 5 (encodeUCoordinate)
BigInt square(const BigInt &x)
constexpr void typecast_copy(ToR &&out, FromR &&in)
Point448 x448_basepoint(const ScalarX448 &k)
Multiply a scalar with the base group element (5)
Strong< std::array< uint8_t, X448_LEN >, struct Point448_ > Point448
Strong< std::array< uint8_t, X448_LEN >, struct ScalarX448_ > ScalarX448
constexpr size_t X448_LEN
std::vector< T, secure_allocator< T > > secure_vector
Point448 x448(const ScalarX448 &k, const Point448 &u)
Multiply a scalar k with a point u.
Point448 decode_point(std::span< const uint8_t > p_bytes)
Decode a point from a byte array. RFC 7748 Section 5 (decodeUCoordinate)
ScalarX448 decode_scalar(std::span< const uint8_t > scalar_bytes)
Decode a scalar from a byte array. RFC 7748 Section 5 (decodeScalar448)