7 #ifndef SECP256K1_NUM_REPR_IMPL_H 8 #define SECP256K1_NUM_REPR_IMPL_H 22 #define secp256k1_num_sanity(a) do { } while(0) 30 unsigned char tmp[65];
34 len = mpn_get_str(tmp, 256, (mp_limb_t*)a->
data, a->
limbs);
36 while (shift < len && tmp[shift] == 0) shift++;
38 memset(r, 0, rlen - len + shift);
40 memcpy(r + rlen - len + shift, tmp + shift, len - shift);
42 memset(tmp, 0,
sizeof(tmp));
49 len = mpn_set_str(r->
data, a, alen, 256);
85 if (r->
limbs >=
m->limbs) {
88 memset(t, 0,
sizeof(t));
123 for (i = 0; i <
m->limbs; i++) {
128 gn = mpn_gcdext(g, r->
data, &sn, u,
m->limbs, v,
m->limbs);
134 mpn_sub(r->
data,
m->data,
m->limbs, r->
data, -sn);
142 memset(g, 0,
sizeof(g));
143 memset(u, 0,
sizeof(u));
144 memset(v, 0,
sizeof(v));
154 mpz_inits(ga, gb, NULL);
156 mpz_import(gb, b->
limbs, -1,
sizeof(mp_limb_t), 0, 0, b->
data);
157 mpz_import(ga, a->
limbs, -1,
sizeof(mp_limb_t), 0, 0, a->
data);
162 ret = mpz_jacobi(ga, gb);
164 mpz_clears(ga, gb, NULL);
170 return (a->
limbs == 1 && a->
data[0] == 1);
174 return (a->
limbs == 1 && a->
data[0] == 0);
205 if (!(b->
neg ^ bneg ^ a->
neg)) {
259 memset(tmp, 0,
sizeof(tmp));
263 if (bits % GMP_NUMB_BITS) {
265 mpn_rshift(r->
data, r->
data, r->
limbs, bits % GMP_NUMB_BITS);
267 if (bits >= GMP_NUMB_BITS) {
270 for (i = 0; i < r->
limbs; i++) {
271 int index = i + (bits / GMP_NUMB_BITS);
272 if (index < r->limbs && index < 2*
NUM_LIMBS) {
#define VERIFY_CHECK(cond)
Definition: util.h:67
static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:147
static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:181
static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:235
static void secp256k1_num_subadd(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b, int bneg)
Definition: num_gmp_impl.h:204
static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a)
Definition: num_gmp_impl.h:25
static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:229
#define NUM_LIMBS
Definition: num_gmp.h:12
mp_limb_t data[2 *NUM_LIMBS]
Definition: num_gmp.h:15
static void secp256k1_num_add_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:62
static int secp256k1_num_is_one(const secp256k1_num *a)
Definition: num_gmp_impl.h:169
int neg
Definition: num_gmp.h:16
static void secp256k1_num_sub_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:71
m
Definition: linearize-data.py:266
static void secp256k1_num_shift(secp256k1_num *r, int bits)
Definition: num_gmp_impl.h:262
static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:223
#define secp256k1_num_sanity(a)
Definition: num_gmp_impl.h:22
static int secp256k1_num_is_zero(const secp256k1_num *a)
Definition: num_gmp_impl.h:173
static void secp256k1_num_negate(secp256k1_num *r)
Definition: num_gmp_impl.h:284
static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m)
Definition: num_gmp_impl.h:101
static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen)
Definition: num_gmp_impl.h:45
static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a)
Definition: num_gmp_impl.h:29
static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m)
Definition: num_gmp_impl.h:81
void * memcpy(void *a, const void *b, size_t c)
Definition: glibc_compat.cpp:18
static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b)
Definition: num_gmp_impl.h:191
int limbs
Definition: num_gmp.h:17
static int secp256k1_num_is_neg(const secp256k1_num *a)
Definition: num_gmp_impl.h:177