7 #ifndef SECP256K1_FIELD_IMPL_H 8 #define SECP256K1_FIELD_IMPL_H 13 #if defined(SECP256K1_WIDEMUL_INT128) 15 #elif defined(SECP256K1_WIDEMUL_INT64) 18 #error "Please select wide multiplication implementation" 44 secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1;
83 for (j=0; j<11; j++) {
89 for (j=0; j<22; j++) {
95 for (j=0; j<44; j++) {
101 for (j=0; j<88; j++) {
107 for (j=0; j<44; j++) {
113 for (j=0; j<3; j++) {
121 for (j=0; j<23; j++) {
125 for (j=0; j<6; j++) {
151 static void secp256k1_fe_impl_verify(
const secp256k1_fe *a);
156 VERIFY_CHECK((a->normalized == 0) || (a->normalized == 1));
160 secp256k1_fe_impl_verify(a);
211 r->magnitude = (a != 0);
292 r->magnitude =
m + 1;
314 r->magnitude += a->magnitude;
349 if (a->magnitude > r->magnitude) r->magnitude = a->magnitude;
350 if (!a->normalized) r->normalized = 0;
374 r->magnitude = x->magnitude > 0;
385 r->magnitude = x->magnitude > 0;
408 r->normalized = (
m == 0);
417 r->magnitude = (r->magnitude >> 1) + 1;
#define VERIFY_CHECK(cond)
static SECP256K1_INLINE void secp256k1_fe_impl_half(secp256k1_fe *r)
#define secp256k1_fe_set_b32_mod
This field implementation represents the value as 10 uint32_t limbs in base 2^26. ...
#define secp256k1_fe_add_int
#define secp256k1_fe_negate_unchecked
static void secp256k1_fe_verify_magnitude(const secp256k1_fe *a, int m)
static SECP256K1_INLINE void secp256k1_fe_impl_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag)
#define secp256k1_fe_set_b32_limit
static SECP256K1_INLINE void secp256k1_fe_impl_sqr(secp256k1_fe *r, const secp256k1_fe *a)
static int secp256k1_fe_impl_normalizes_to_zero_var(const secp256k1_fe *r)
#define secp256k1_fe_is_zero
#define secp256k1_fe_inv_var
#define secp256k1_fe_normalizes_to_zero
static int secp256k1_fe_impl_normalizes_to_zero(const secp256k1_fe *r)
#define secp256k1_fe_mul_int_unchecked
static SECP256K1_INLINE void secp256k1_fe_impl_add_int(secp256k1_fe *r, int a)
#define secp256k1_fe_clear
static SECP256K1_INLINE void secp256k1_fe_impl_set_int(secp256k1_fe *r, int a)
static void secp256k1_fe_impl_set_b32_mod(secp256k1_fe *r, const unsigned char *a)
static void secp256k1_fe_impl_get_bounds(secp256k1_fe *r, int m)
#define secp256k1_fe_half
#define secp256k1_fe_is_square_var
static void secp256k1_fe_impl_normalize(secp256k1_fe *r)
#define secp256k1_fe_normalize_weak
static SECP256K1_INLINE int secp256k1_fe_impl_is_zero(const secp256k1_fe *a)
static SECP256K1_INLINE int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b)
static void secp256k1_fe_impl_normalize_weak(secp256k1_fe *r)
static void secp256k1_fe_impl_inv_var(secp256k1_fe *r, const secp256k1_fe *x)
static SECP256K1_INLINE void secp256k1_fe_impl_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a)
static int secp256k1_fe_impl_is_square_var(const secp256k1_fe *x)
#define secp256k1_fe_cmov
static int secp256k1_fe_impl_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b)
static SECP256K1_INLINE void secp256k1_fe_impl_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe *SECP256K1_RESTRICT b)
#define secp256k1_fe_normalizes_to_zero_var
static void secp256k1_fe_impl_normalize_var(secp256k1_fe *r)
static int secp256k1_fe_sqrt(secp256k1_fe *SECP256K1_RESTRICT r, const secp256k1_fe *SECP256K1_RESTRICT a)
static SECP256K1_INLINE int secp256k1_fe_impl_is_odd(const secp256k1_fe *a)
#define SECP256K1_RESTRICT
#define secp256k1_fe_is_odd
static SECP256K1_INLINE void secp256k1_fe_impl_negate_unchecked(secp256k1_fe *r, const secp256k1_fe *a, int m)
#define secp256k1_fe_get_bounds
#define secp256k1_fe_set_int
static void secp256k1_fe_impl_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a)
#define secp256k1_fe_to_storage
static void secp256k1_fe_impl_get_b32(unsigned char *r, const secp256k1_fe *a)
Convert a field element to a 32-byte big endian value.
static void secp256k1_fe_impl_inv(secp256k1_fe *r, const secp256k1_fe *x)
#define secp256k1_fe_normalize
#define secp256k1_fe_normalize_var
#define secp256k1_fe_negate(r, a, m)
Negate a field element.
static SECP256K1_INLINE void secp256k1_fe_impl_add(secp256k1_fe *r, const secp256k1_fe *a)
#define secp256k1_fe_get_b32
static void secp256k1_fe_verify(const secp256k1_fe *a)
static SECP256K1_INLINE void secp256k1_fe_impl_clear(secp256k1_fe *a)
#define secp256k1_fe_cmp_var
static SECP256K1_INLINE void secp256k1_fe_impl_mul_int_unchecked(secp256k1_fe *r, int a)
static int secp256k1_fe_impl_set_b32_limit(secp256k1_fe *r, const unsigned char *a)
#define secp256k1_fe_from_storage