11#include <botan/ed25519.h> 
   13#include <botan/hash.h> 
   15#include <botan/internal/ct_utils.h> 
   16#include <botan/internal/ed25519_internal.h> 
   24   sha512->update(seed, 32);
 
 
   40                  const uint8_t domain_sep[],
 
   41                  size_t domain_sep_len) {
 
   48   sha512->update(sk, 32);
 
   54   sha512->update(domain_sep, domain_sep_len);
 
   55   sha512->update(az + 32, 32);
 
   56   sha512->update(m, mlen);
 
   62   sha512->update(domain_sep, domain_sep_len);
 
   63   sha512->update(sig, 32);
 
   64   sha512->update(sk + 32, 32);
 
   65   sha512->update(m, mlen);
 
 
   74                    const uint8_t sig[64],
 
   76                    const uint8_t domain_sep[],
 
   77                    size_t domain_sep_len) {
 
   78   if((sig[63] & 0xE0) != 0x00) {
 
   82   const uint64_t CURVE25519_ORDER[4] = {
 
   96   for(
size_t i = 0; i != 4; ++i) {
 
   97      if(s[i] > CURVE25519_ORDER[i]) {
 
  100      if(s[i] < CURVE25519_ORDER[i]) {
 
  111   sha512->update(domain_sep, domain_sep_len);
 
  112   sha512->update(sig, 32);
 
  113   sha512->update(pk, 32);
 
  114   sha512->update(m, mlen);
 
  118   return signature_check(std::span<const uint8_t, 32>{pk, 32}, h, sig, sig + 32);
 
 
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
 
void ed25519_basepoint_mul(std::span< uint8_t, 32 > out, const uint8_t in[32])
 
constexpr void copy_mem(T *out, const T *in, size_t n)
 
void sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, const uint8_t *c)
 
void ed25519_sign(uint8_t sig[64], const uint8_t m[], size_t mlen, const uint8_t sk[64], const uint8_t domain_sep[], size_t domain_sep_len)
 
bool signature_check(std::span< const uint8_t, 32 > pk, const uint8_t h[32], const uint8_t r[32], const uint8_t s[32])
 
void sc_reduce(uint8_t *s)
 
constexpr auto load_le(ParamTs &&... params)
 
void ed25519_gen_keypair(uint8_t pk[32], uint8_t sk[64], const uint8_t seed[32])
 
bool ed25519_verify(const uint8_t *m, size_t mlen, const uint8_t sig[64], const uint8_t *pk, const uint8_t domain_sep[], size_t domain_sep_len)