12#ifndef BOTAN_ED25519_FE_H_
13#define BOTAN_ED25519_FE_H_
15#include <botan/exceptn.h>
16#include <botan/internal/ct_utils.h>
45 for(
size_t i = 0; i != 10; ++i) {
61 m_fe[0] =
static_cast<int32_t
>(h0);
62 m_fe[1] =
static_cast<int32_t
>(h1);
63 m_fe[2] =
static_cast<int32_t
>(h2);
64 m_fe[3] =
static_cast<int32_t
>(h3);
65 m_fe[4] =
static_cast<int32_t
>(h4);
66 m_fe[5] =
static_cast<int32_t
>(h5);
67 m_fe[6] =
static_cast<int32_t
>(h6);
68 m_fe[7] =
static_cast<int32_t
>(h7);
69 m_fe[8] =
static_cast<int32_t
>(h8);
70 m_fe[9] =
static_cast<int32_t
>(h9);
78 std::array<uint8_t, 32> value = {};
89 std::array<uint8_t, 32> s = {};
91 return (s[0] & 0x01) == 0x01;
96 for(
size_t i = 0; i != 10; ++i) {
97 z.m_fe[i] = a.m_fe[i] + b.m_fe[i];
104 for(
size_t i = 0; i != 10; ++i) {
105 z.m_fe[i] = a.m_fe[i] - b.m_fe[i];
112 for(
size_t i = 0; i != 10; ++i) {
113 z.m_fe[i] = -a.m_fe[i];
137 std::array<int32_t, 10> m_fe;
static Ed25519_FieldElement negate(const Ed25519_FieldElement &a)
static Ed25519_FieldElement deserialize(const uint8_t b[32])
static Ed25519_FieldElement sub(const Ed25519_FieldElement &a, const Ed25519_FieldElement &b)
Ed25519_FieldElement sqr() const
Ed25519_FieldElement invert() const
constexpr Ed25519_FieldElement(std::span< int32_t, 10 > fe)
Ed25519_FieldElement sqr2() const
static Ed25519_FieldElement add(const Ed25519_FieldElement &a, const Ed25519_FieldElement &b)
static Ed25519_FieldElement mul(const Ed25519_FieldElement &a, const Ed25519_FieldElement &b)
Ed25519_FieldElement pow_22523() const
constexpr Ed25519_FieldElement(int64_t h0, int64_t h1, int64_t h2, int64_t h3, int64_t h4, int64_t h5, int64_t h6, int64_t h7, int64_t h8, int64_t h9)
void serialize_to(std::span< uint8_t, 32 > b) const
static constexpr Ed25519_FieldElement one()
Ed25519_FieldElement sqr_iter(size_t iter) const
constexpr Ed25519_FieldElement()
int32_t & operator[](size_t i)
static constexpr Ed25519_FieldElement zero()
int32_t operator[](size_t i) const
constexpr CT::Mask< T > all_zeros(const T elem[], size_t len)
BigInt operator*(const BigInt &x, const BigInt &y)
OctetString operator+(const OctetString &k1, const OctetString &k2)
BigInt operator-(const BigInt &x, const BigInt &y)