23#ifndef WOLF_CRYPT_FE_448_H
24#define WOLF_CRYPT_FE_448_H
26#include <wolfssl/wolfcrypt/settings.h>
28#if defined(HAVE_CURVE448) || defined(HAVE_ED448)
34#if defined(HAVE___UINT128_T) && !defined(NO_CURVED448_128BIT)
35 #define CURVED448_128BIT
43#if !defined(CURVE448_SMALL) || !defined(ED448_SMALL)
45#if defined(CURVED448_128BIT)
46 typedef int64_t fe448;
47 #ifdef __SIZEOF_INT128__
48 typedef __uint128_t uint128_t;
49 typedef __int128_t int128_t;
51 typedef unsigned long uint128_t __attribute__ ((mode(TI)));
52 typedef long int128_t __attribute__ ((mode(TI)));
55 typedef int32_t fe448;
58WOLFSSL_LOCAL
void fe448_init(
void);
59WOLFSSL_LOCAL
int curve448(
byte* r,
const byte* n,
const byte* a);
61#if !defined(CURVED448_128BIT)
62WOLFSSL_LOCAL
void fe448_reduce(fe448*);
64#define fe448_reduce(a)
66WOLFSSL_LOCAL
void fe448_neg(fe448*,
const fe448*);
67WOLFSSL_LOCAL
void fe448_add(fe448*,
const fe448*,
const fe448*);
68WOLFSSL_LOCAL
void fe448_sub(fe448*,
const fe448*,
const fe448*);
69WOLFSSL_LOCAL
void fe448_mul(fe448*,
const fe448*,
const fe448*);
70WOLFSSL_LOCAL
void fe448_sqr(fe448*,
const fe448*);
71WOLFSSL_LOCAL
void fe448_mul39081(fe448*,
const fe448*);
72WOLFSSL_LOCAL
void fe448_invert(fe448*,
const fe448*);
74WOLFSSL_LOCAL
void fe448_0(fe448*);
75WOLFSSL_LOCAL
void fe448_1(fe448*);
76WOLFSSL_LOCAL
void fe448_copy(fe448*,
const fe448*);
77WOLFSSL_LOCAL
int fe448_isnonzero(
const fe448*);
78WOLFSSL_LOCAL
int fe448_isnegative(
const fe448*);
80WOLFSSL_LOCAL
void fe448_from_bytes(fe448*,
const unsigned char *);
81WOLFSSL_LOCAL
void fe448_to_bytes(
unsigned char *,
const fe448*);
83WOLFSSL_LOCAL
void fe448_cmov(fe448*,
const fe448*,
int);
84WOLFSSL_LOCAL
void fe448_pow_2_446_222_1(fe448*,
const fe448*);
88WOLFSSL_LOCAL
void fe448_init(
void);
89WOLFSSL_LOCAL
int curve448(
byte* r,
const byte* n,
const byte* a);
91#define fe448_reduce(a)
92WOLFSSL_LOCAL
void fe448_neg(uint8_t*,
const uint8_t*);
93WOLFSSL_LOCAL
void fe448_add(uint8_t*,
const uint8_t*,
const uint8_t*);
94WOLFSSL_LOCAL
void fe448_sub(uint8_t*,
const uint8_t*,
const uint8_t*);
95WOLFSSL_LOCAL
void fe448_mul(uint8_t*,
const uint8_t*,
const uint8_t*);
96WOLFSSL_LOCAL
void fe448_sqr(uint8_t*,
const uint8_t*);
97WOLFSSL_LOCAL
void fe448_mul39081(uint8_t*,
const uint8_t*);
98WOLFSSL_LOCAL
void fe448_invert(uint8_t*,
const uint8_t*);
100WOLFSSL_LOCAL
void fe448_copy(uint8_t*,
const uint8_t*);
101WOLFSSL_LOCAL
int fe448_isnonzero(
const uint8_t*);
103WOLFSSL_LOCAL
void fe448_norm(
byte *a);
105WOLFSSL_LOCAL
void fe448_cmov(uint8_t*,
const uint8_t*,
int);
106WOLFSSL_LOCAL
void fe448_pow_2_446_222_1(uint8_t*,
const uint8_t*);