11#ifndef BOTAN_ED25519_INT_H_
12#define BOTAN_ED25519_INT_H_
14#include <botan/internal/ed25519_fe.h>
15#include <botan/internal/loadstor.h>
19inline uint64_t
load_3(
const uint8_t in[3])
21 return static_cast<uint64_t
>(in[0]) |
22 (
static_cast<uint64_t
>(in[1]) << 8) |
23 (
static_cast<uint64_t
>(in[2]) << 16);
26inline uint64_t
load_4(
const uint8_t* in)
31template<
size_t S,
int64_t MUL=1>
32inline void carry(int64_t& h0, int64_t& h1)
34 static_assert(S > 0 && S < 64,
"Shift in range");
36 const int64_t X1 = (
static_cast<int64_t
>(1) << S);
37 const int64_t X2 = (
static_cast<int64_t
>(1) << (S - 1));
38 int64_t c = (h0 + X2) >> S;
44inline void carry0(int64_t& h0, int64_t& h1)
46 static_assert(S > 0 && S < 64,
"Shift in range");
48 const int64_t X1 = (
static_cast<int64_t
>(1) << S);
55inline void carry0(int32_t& h0, int32_t& h1)
57 static_assert(S > 0 && S < 32,
"Shift in range");
59 const int32_t X1 = (
static_cast<int64_t
>(1) << S);
115void sc_muladd(uint8_t*,
const uint8_t*,
const uint8_t*,
const uint8_t*);
constexpr uint32_t load_le< uint32_t >(const uint8_t in[], size_t off)
void redc_mul(int64_t &s1, int64_t &s2, int64_t &s3, int64_t &s4, int64_t &s5, int64_t &s6, int64_t &X)
uint64_t load_4(const uint8_t *in)
void carry0(int64_t &h0, int64_t &h1)
int ge_frombytes_negate_vartime(ge_p3 *v, const uint8_t *)
void carry(int64_t &h0, int64_t &h1)
void ge_scalarmult_base(uint8_t out[32], const uint8_t in[32])
void sc_reduce(uint8_t *)
uint64_t load_3(const uint8_t in[3])
void ge_double_scalarmult_vartime(uint8_t out[32], const uint8_t a[], const ge_p3 *A, const uint8_t b[])
void sc_muladd(uint8_t *, const uint8_t *, const uint8_t *, const uint8_t *)