Bitcoin Core  0.20.99
P2P Digital Currency
num.h
Go to the documentation of this file.
1 /**********************************************************************
2  * Copyright (c) 2013, 2014 Pieter Wuille *
3  * Distributed under the MIT software license, see the accompanying *
4  * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
5  **********************************************************************/
6 
7 #ifndef SECP256K1_NUM_H
8 #define SECP256K1_NUM_H
9 
10 #ifndef USE_NUM_NONE
11 
12 #if defined HAVE_CONFIG_H
13 #include "libsecp256k1-config.h"
14 #endif
15 
16 #if defined(USE_NUM_GMP)
17 #include "num_gmp.h"
18 #else
19 #error "Please select num implementation"
20 #endif
21 
23 static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a);
24 
27 static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a);
28 
30 static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen);
31 
33 static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m);
34 
36 static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b);
37 
39 static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b);
40 
42 static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b);
43 
45 static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
46 
48 static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
49 
51 static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
52 
55 static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m);
56 
58 static void secp256k1_num_shift(secp256k1_num *r, int bits);
59 
61 static int secp256k1_num_is_zero(const secp256k1_num *a);
62 
64 static int secp256k1_num_is_one(const secp256k1_num *a);
65 
67 static int secp256k1_num_is_neg(const secp256k1_num *a);
68 
70 static void secp256k1_num_negate(secp256k1_num *r);
71 
72 #endif
73 
74 #endif /* SECP256K1_NUM_H */
static int secp256k1_num_is_one(const secp256k1_num *a)
Check whether a number is one.
static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b)
Test whether two number are equal (including sign).
static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen)
Set a number to the value of a binary big-endian string.
static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a)
Copy a number.
static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m)
Compute a modular inverse.
static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Subtract two (signed) numbers.
static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Add two (signed) numbers.
static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b)
Compute the jacobi symbol (a|b).
static void secp256k1_num_shift(secp256k1_num *r, int bits)
Right-shift the passed number by bits bits.
static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b)
Multiply two (signed) numbers.
static void secp256k1_num_negate(secp256k1_num *r)
Change a number's sign.
static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b)
Compare the absolute value of two numbers.
static int secp256k1_num_is_zero(const secp256k1_num *a)
Check whether a number is zero.
static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m)
Replace a number by its remainder modulo m.
static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a)
Convert a number's absolute value to a binary big-endian string.
static int secp256k1_num_is_neg(const secp256k1_num *a)
Check whether a number is strictly negative.